fix opp reports left join duplicates

This commit is contained in:
yuri
2019-01-03 13:12:17 +02:00
parent c54e428d24
commit 5b9b345bf8
@@ -64,25 +64,29 @@ class Opportunity extends \Espo\Services\Record
$stageField = 'lastStage';
}
$selectParams = [
'select' => [$stageField, ['SUM:amountConverted', 'amount']],
'whereClause' => [
[$stageField . '!=' => $lostStageList],
[$stageField . '!=' => null]
],
'orderBy' => 'LIST:'.$stageField.':' . implode(',', $options),
'groupBy' => [$stageField]
$whereClause = [
[$stageField . '!=' => $lostStageList],
[$stageField . '!=' => null]
];
if ($dateFilter !== 'ever') {
$selectParams['whereClause'][] = [
$whereClause[] = [
'closeDate>=' => $dateFrom,
'closeDate<' => $dateTo
];
}
$selectParams = [
'select' => [$stageField, ['SUM:amountConverted', 'amount']],
'whereClause' => $whereClause,
'orderBy' => 'LIST:'.$stageField.':' . implode(',', $options),
'groupBy' => [$stageField]
];
$selectManager->applyAccess($selectParams);
$this->handleDistinctReportSelectParams($selectParams, $whereClause);
$this->getEntityManager()->getRepository('Opportunity')->handleSelectParams($selectParams);
$sql = $this->getEntityManager()->getQuery()->createSelectQuery('Opportunity', $selectParams);
@@ -136,26 +140,30 @@ class Opportunity extends \Espo\Services\Record
$selectManager = $this->getSelectManagerFactory()->create('Opportunity');
$selectParams = [
'select' => ['leadSource', ['SUM:amountWeightedConverted', 'amount']],
'whereClause' => [
'stage!=' => $this->getLostStageList(),
['leadSource!=' => ''],
['leadSource!=' => null]
],
'orderBy' => 'LIST:leadSource:' . implode(',', $options),
'groupBy' => ['leadSource']
$whereClause = [
['stage!=' => $this->getLostStageList()],
['leadSource!=' => ''],
['leadSource!=' => null]
];
if ($dateFilter !== 'ever') {
$selectParams['whereClause'][] = [
$whereClause[] = [
'closeDate>=' => $dateFrom,
'closeDate<' => $dateTo
];
}
$selectParams = [
'select' => ['leadSource', ['SUM:amountWeightedConverted', 'amount']],
'whereClause' => $whereClause,
'orderBy' => 'LIST:leadSource:' . implode(',', $options),
'groupBy' => ['leadSource']
];
$selectManager->applyAccess($selectParams);
$this->handleDistinctReportSelectParams($selectParams, $whereClause);
$this->getEntityManager()->getRepository('Opportunity')->handleSelectParams($selectParams);
$sql = $this->getEntityManager()->getQuery()->createSelectQuery('Opportunity', $selectParams);
@@ -189,31 +197,31 @@ class Opportunity extends \Espo\Services\Record
$selectManager = $this->getSelectManagerFactory()->create('Opportunity');
$selectParams = [
'select' => ['stage', ['SUM:amountConverted', 'amount']],
'whereClause' => [
[
'stage!=' => $this->getLostStageList()
],
[
'stage!=' => $this->getWonStageList()
]
],
'orderBy' => 'LIST:stage:' . implode(',', $options),
'groupBy' => ['stage']
$whereClause = [
['stage!=' => $this->getLostStageList()],
['stage!=' => $this->getWonStageList()]
];
if ($dateFilter !== 'ever') {
$selectParams['whereClause'][] = [
$whereClause[] = [
'closeDate>=' => $dateFrom,
'closeDate<' => $dateTo
];
}
$selectParams = [
'select' => ['stage', ['SUM:amountConverted', 'amount']],
'whereClause' => $whereClause,
'orderBy' => 'LIST:stage:' . implode(',', $options),
'groupBy' => ['stage']
];
$stageIgnoreList = array_merge($this->getLostStageList(), $this->getWonStageList());
$selectManager->applyAccess($selectParams);
$this->handleDistinctReportSelectParams($selectParams, $whereClause);
$this->getEntityManager()->getRepository('Opportunity')->handleSelectParams($selectParams);
$sql = $this->getEntityManager()->getQuery()->createSelectQuery('Opportunity', $selectParams);
@@ -252,29 +260,32 @@ class Opportunity extends \Espo\Services\Record
$selectManager = $this->getSelectManagerFactory()->create('Opportunity');
$selectParams = [
'select' => [['MONTH:closeDate', 'month'], ['SUM:amountConverted', 'amount']],
'whereClause' => [
'stage' => $this->getWonStageList()
],
'orderBy' => 1,
'groupBy' => ['MONTH:closeDate']
$whereClause = [
['stage' => $this->getWonStageList()]
];
if ($dateFilter !== 'ever') {
$selectParams['whereClause'][] = [
$whereClause[] = [
'closeDate>=' => $dateFrom,
'closeDate<' => $dateTo
];
}
$selectParams = [
'select' => [['MONTH:closeDate', 'month'], ['SUM:amountConverted', 'amount']],
'whereClause' => $whereClause,
'orderBy' => 1,
'groupBy' => ['MONTH:closeDate']
];
$selectManager->applyAccess($selectParams);
$this->handleDistinctReportSelectParams($selectParams, $whereClause);
$this->getEntityManager()->getRepository('Opportunity')->handleSelectParams($selectParams);
$sql = $this->getEntityManager()->getQuery()->createSelectQuery('Opportunity', $selectParams);
$sth = $pdo->prepare($sql);
$sth->execute();
@@ -334,6 +345,30 @@ class Opportunity extends \Espo\Services\Record
];
}
protected function handleDistinctReportSelectParams(&$selectParams, $whereClause)
{
if (!empty($selectParams['distinct'])) {
$selectParamsSubQuery = $selectParams;
unset($selectParams['distinct']);
$selectParams['leftJoins'] = [];
$selectParams['joins'] = [];
$selectParams['whereClause'] = $whereClause;
$selectParamsSubQuery['select'] = ['id'];
unset($selectParamsSubQuery['groupBy']);
unset($selectParamsSubQuery['orderBy']);
unset($selectParamsSubQuery['order']);
$selectParams['whereClause'][] = [
'id=s' => [
'entityType' => 'Opportunity',
'selectParams' => $selectParamsSubQuery
]
];
}
}
protected function getDateRangeByFilter($dateFilter)
{
switch ($dateFilter) {