• Модуль: 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);
}