- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/integrity/actualranking.php
- Класс: Bitrix\Crm\Integrity\ActualRanking
- Вызов: ActualRanking::rankByOrders
protected function rankByOrders($findOrdersOnly = false)
{
if (!in_array($this->entityTypeId, [\CCrmOwnerType::Contact, \CCrmOwnerType::Company]))
{
return;
}
$topEntityId = null;
$rankedList = [];
$list = Binding\OrderContactCompanyTable::getList([
'select' => ['ORDER_ID', 'ENTITY_ID'],
'filter' => [
'=IS_PRIMARY' => 'Y',
'=ENTITY_TYPE_ID' => $this->entityTypeId,
'=ENTITY_ID' => $this->entityId ?: $this->list,
'=ORDER.STATUS_ID' => Order\OrderStatus::getSemanticProcessStatuses(),
],
'order' => [
'ORDER.DATE_UPDATE' => 'DESC',
'ORDER.DATE_INSERT' => 'DESC',
'ORDER.ID' => 'DESC',
]
]);
foreach ($list as $item)
{
if (!$topEntityId)
{
$topEntityId = $item['ENTITY_ID'];
}
if ($topEntityId == $item['ENTITY_ID'] && !in_array($item['ORDER_ID'], $this->orders))
{
// find all, even from ::setEntity
$this->orders[] = $item['ORDER_ID'];
}
if (!in_array($item['ENTITY_ID'], $rankedList))
{
$rankedList[] = $item['ENTITY_ID'];
}
}
if (empty($rankedList))
{
return;
}
$this->isRanked = true;
// set entity id
if (!$this->entityId)
{
$this->entityId = $rankedList[0];
}
if ($findOrdersOnly)
{
return;
}
$this->updateListByRankedList($rankedList);
}