• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/bindingselector.php
  • Класс: Bitrix\Crm\Activity\BindingSelector
  • Вызов: BindingSelector::findBindings
static function findBindings(ActualEntitySelector $selector)
{
	$list = array();
	$isDealAdded = false;
	$isOrdersAdded = false;
	$isReturnCustomerLeadAdded = false;

	/**
	 * append company
	 */
	if ($selector->getCompanyId())
	{
		if ($selector->getCompanyDealId())
		{
			foreach ($selector->getCompanyDeals() as $dealId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Deal,
					'OWNER_ID' => $dealId
				);
			}

			$isDealAdded = true;
		}
		elseif ($selector->getCompanyReturnCustomerLeadId())
		{
			foreach ($selector->getCompanyReturnCustomerLeads() as $leadId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
					'OWNER_ID' => $leadId
				);
			}

			$isReturnCustomerLeadAdded = true;
		}

		if (!empty($selector->getCompanyOrders()))
		{
			foreach ($selector->getCompanyOrders() as $orderId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Order,
					'OWNER_ID' => $orderId
				);
			}

			$isOrdersAdded = true;
		}

		$list[] = array(
			'OWNER_TYPE_ID' => \CCrmOwnerType::Company,
			'OWNER_ID' => $selector->getCompanyId()
		);
	}

	/**
	 * append contact
	 */
	if (!$selector->getCompanyId())
	{
		// if no company
		$isContactNeedAdd = true;
	}
	else if ($selector->getCompanyId() === $selector->getContactCompanyId())
	{
		// if company found and it is related with contact
		$isContactNeedAdd = true;
	}
	else
	{
		$isContactNeedAdd = false;
	}

	if ($selector->getContactId() && $isContactNeedAdd)
	{
		if ($selector->getContactDealId() && !$isDealAdded)
		{
			foreach ($selector->getContactDeals() as $dealId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Deal,
					'OWNER_ID' => $dealId
				);
			}

			$isDealAdded = true;
		}

		if ($selector->getContactReturnCustomerLeadId() && !$isReturnCustomerLeadAdded && !$isDealAdded)
		{
			foreach ($selector->getContactReturnCustomerLeads() as $leadId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
					'OWNER_ID' => $leadId
				);
			}

			$isReturnCustomerLeadAdded = true;
		}

		if (!empty($selector->getContactOrders()) && !$isOrdersAdded)
		{
			foreach ($selector->getContactOrders() as $orderId)
			{
				$list[] = array(
					'OWNER_TYPE_ID' => \CCrmOwnerType::Order,
					'OWNER_ID' => $orderId
				);
			}

			$isOrdersAdded = true;
		}

		$list[] = array(
			'OWNER_TYPE_ID' => \CCrmOwnerType::Contact,
			'OWNER_ID' => $selector->getContactId()
		);
	}


	/**
	 * append lead
	 */
	if (empty($list))
	{
		if ($selector->getLeadId())
		{
			$list[] = array(
				'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
				'OWNER_ID' => $selector->getLeadId()
			);
		}
	}

	// append deal if it was set by setEntity
	if (!$isDealAdded && $selector->getDealId())
	{
		foreach ($selector->getDeals() as $dealId)
		{
			$list[] = array(
				'OWNER_TYPE_ID' => \CCrmOwnerType::Deal,
				'OWNER_ID' => $dealId
			);
		}

		$isDealAdded = true;
	}

	// append rc-lead if it was set by setEntity
	if (!$isReturnCustomerLeadAdded && !$isDealAdded && $selector->getReturnCustomerLeadId())
	{
		foreach ($selector->getReturnCustomerLeads() as $leadId)
		{
			$list[] = array(
				'OWNER_TYPE_ID' => \CCrmOwnerType::Lead,
				'OWNER_ID' => $leadId
			);
		}
	}

	// append orders if it was set by setEntity
	if (!$isOrdersAdded && !empty($selector->getOrders()))
	{
		foreach ($selector->getOrders() as $orderId)
		{
			$list[] = array(
				'OWNER_TYPE_ID' => \CCrmOwnerType::Order,
				'OWNER_ID' => $orderId
			);
		}
	}

	return self::sortBindings($list);
}