- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integration/report/handler/customers/regularcustomersgrid.php
- Класс: Bitrix\Crm\Integration\Report\Handler\Customers\RegularCustomersGrid
- Вызов: RegularCustomersGrid::getMultipleData
public function getMultipleData()
{
$filterParameters = $this->getFilterParameters();
$calculatedData = $this->getCalculatedData();
$baseCurrency = \CCrmCurrency::GetAccountCurrencyID();
$result = [];
$contacts = [];
$companies = [];
foreach ($calculatedData as $row)
{
if($row['OWNER_TYPE'] == \CCrmOwnerType::ContactName)
{
$contacts[] = $row['OWNER_ID'];
}
else
{
$companies[] = $row['OWNER_ID'];
}
$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];
$result[$key] = [
'value' => [
'ownerType' => $row['OWNER_TYPE'],
'ownerId' => $row['OWNER_ID'],
'totalDealCount' => $row['DEAL_COUNT'],
'successDealCount' => 0,
'successDealAmount' => 0,
],
'targetUrl' => [
'totalDealCount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
'OWNER_TYPE' => $row['OWNER_TYPE'],
'OWNER_ID' => $row['OWNER_ID'],
]),
'successDealCount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
'OWNER_TYPE' => $row['OWNER_TYPE'],
'OWNER_ID' => $row['OWNER_ID'],
'STAGE_SEMANTIC_ID' => PhaseSemantics::SUCCESS,
]),
'successDealAmount' => $this->getTargetUrl('/crm/deal/analytics/list/', [
'OWNER_TYPE' => $row['OWNER_TYPE'],
'OWNER_ID' => $row['OWNER_ID'],
'STAGE_SEMANTIC_ID' => PhaseSemantics::SUCCESS,
]),
]
];
}
if(count($contacts) > 0)
{
$query = DealTable::query();
$this->addToQueryFilterCase($query, $filterParameters);
$this->addTimePeriodToQuery($query, $filterParameters['TIME_PERIOD']);
$this->addPermissionsCheck($query);
$query
->addSelect(new \Bitrix\Main\Entity\ExpressionField("OWNER_TYPE", "'CONTACT'"))
->addSelect("CONTACT.ID", "OWNER_ID")
->addSelect("CURRENCY_ID")
->addSelect(Query::expr()->count("ID"), "DEAL_COUNT")
->addSelect(Query::expr()->sum("OPPORTUNITY"), "TOTAL_AMOUNT")
->whereNotNull("CONTACT.ID")
->where(Query::filter()->logic('or')->where('COMPANY_ID', 0)->whereNull('COMPANY_ID'))
->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS)
->whereIn("CONTACT.ID", $contacts);
$cursor = $query->exec();
while ($row = $cursor->fetch())
{
$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];
$result[$key]['value']['successDealCount'] += $row['DEAL_COUNT'];
$result[$key]['value']['successDealAmount'] += \CCrmCurrency::ConvertMoney($row['TOTAL_AMOUNT'], $row['CURRENCY_ID'], $baseCurrency);
}
}
if(count($companies) > 0)
{
$query = DealTable::query();
$this->addToQueryFilterCase($query, $filterParameters);
$this->addTimePeriodToQuery($query, $filterParameters['TIME_PERIOD']);
$this->addPermissionsCheck($query);
$query
->addSelect(new \Bitrix\Main\Entity\ExpressionField("OWNER_TYPE", "'COMPANY'"))
->addSelect("COMPANY.ID", "OWNER_ID")
->addSelect("CURRENCY_ID")
->addSelect(Query::expr()->count("ID"), "DEAL_COUNT")
->addSelect(Query::expr()->sum("OPPORTUNITY"), "TOTAL_AMOUNT")
->where("STAGE_SEMANTIC_ID", PhaseSemantics::SUCCESS)
->whereIn("COMPANY.ID", $companies);
$cursor = $query->exec();
while ($row = $cursor->fetch())
{
$key = $row['OWNER_TYPE'] . "_" . $row['OWNER_ID'];
$result[$key]['value']['successDealCount'] += $row['DEAL_COUNT'];
$result[$key]['value']['successDealAmount'] += \CCrmCurrency::ConvertMoney($row['TOTAL_AMOUNT'], $row['CURRENCY_ID'], $baseCurrency);
}
}
return $result;
}