• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/entitylink.php
  • Класс: Bitrix\Crm\Requisite\EntityLink
  • Вызов: EntityLink::getDefaultEntityRequisiteLink
static function getDefaultEntityRequisiteLink($parentEntityList, $entityTypeId, $entityId, $requisiteId = 0, $isMyCompany = false)
{
	$result = [
		'REQUISITE_ID' => 0,
		'BANK_DETAIL_ID' => 0
	];

	if ($requisiteId > 0)
	{
		$result['REQUISITE_ID'] = (int)$requisiteId;
	}

	$requisite = null;
	$bankDetail = null;

	if (!is_array($parentEntityList))
	{
		$parentEntityList = [];
	}

	$parentEntityList[] = ['ENTITY_TYPE_ID' => $entityTypeId, 'ENTITY_ID' => $entityId];
	foreach ($parentEntityList as $entityInfo)
	{
		$parentEntityTypeId = isset($entityInfo['ENTITY_TYPE_ID']) ? (int)$entityInfo['ENTITY_TYPE_ID'] : 0;
		if ($parentEntityTypeId < 0)
			$parentEntityTypeId = 0;
		$parentEntityId = isset($entityInfo['ENTITY_ID']) ? (int)$entityInfo['ENTITY_ID'] : 0;
		if ($parentEntityId < 0)
			$parentEntityId = 0;

		if (\CCrmOwnerType::IsDefined($parentEntityTypeId) && $parentEntityId > 0)
		{
			if ($parentEntityTypeId === \CCrmOwnerType::Deal
				|| $parentEntityTypeId === \CCrmOwnerType::Quote
				|| $parentEntityTypeId === \CCrmOwnerType::Invoice)
			{
				$fieldMap = [
					0 => [
						'REQUISITE_ID' => 'REQUISITE_ID',
						'BANK_DETAIL_ID' => 'BANK_DETAIL_ID'
					],
					1 => [
						'REQUISITE_ID' => 'MC_REQUISITE_ID',
						'BANK_DETAIL_ID' => 'MC_BANK_DETAIL_ID'
					]
				];
				$fieldIndex = $isMyCompany ? 1 : 0;
				if ($row = self::getList(
					array(
						'filter' => array(
							'=ENTITY_TYPE_ID' => $parentEntityTypeId,
							'=ENTITY_ID' => $parentEntityId
						),
						'select' => [
							$fieldMap[$fieldIndex]['REQUISITE_ID'],
							$fieldMap[$fieldIndex]['BANK_DETAIL_ID']
						],
						'limit' => 1
					)
				)->fetch())
				{
					if (isset($row[$fieldMap[$fieldIndex]['REQUISITE_ID']])
						&& $row[$fieldMap[$fieldIndex]['REQUISITE_ID']] > 0
						&& $requisiteId <= 0)
					{
						$result['REQUISITE_ID'] = (int)$row[$fieldMap[$fieldIndex]['REQUISITE_ID']];
					}
					if ($result['REQUISITE_ID'] > 0
						&& isset($row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']])
						&& $row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']] > 0
						&& ($requisiteId <= 0 || $requisiteId === $result['REQUISITE_ID']))
					{
						$result['BANK_DETAIL_ID'] = (int)$row[$fieldMap[$fieldIndex]['BANK_DETAIL_ID']];
					}
				}
				unset($row);

				if ($result['REQUISITE_ID'] > 0)
				{
					try
					{
						if ($isMyCompany)
						{
							self::checkConsistence(
								\CCrmOwnerType::Undefined, 0,
								0, 0,
								$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
								[
									'ENTITY_CHECK' => false,
									'CLIENT_SELLER_INFO' => [
										'CLIENT_ENTITY_TYPE_ID' => \CCrmOwnerType::Undefined,
										'CLIENT_ENTITY_ID' => 0,
										'MYCOMPANY_ID' => $entityId
									]
								]
							);
						}
						else
						{
							self::checkConsistence(
								\CCrmOwnerType::Undefined, 0,
								$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
								0, 0,
								[
									'ENTITY_CHECK' => false,
									'CLIENT_SELLER_INFO' => [
										'CLIENT_ENTITY_TYPE_ID' => $entityTypeId,
										'CLIENT_ENTITY_ID' => $entityId,
										'MYCOMPANY_ID' => 0
									]
								]
							);
						}
					}
					catch (Main\SystemException $e)
					{
						$resetBankDetail = false;
						switch ($e->getCode())
						{
							case self::ERR_INVALID_BANK_DETAIL_ID:
							case self::ERR_BANK_DETAIL_NOT_ASSIGNED_WO_REQUISITE:
							case self::ERR_BANK_DETAIL_NOT_FOUND:
							case self::ERR_BANK_DETAIL_NOT_ASSIGNED:
							case self::ERR_INVALID_MC_BANK_DETAIL_ID:
							case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED_WO_MC_REQUISITE:
							case self::ERR_MC_BANK_DETAIL_NOT_FOUND:
							case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED:
								$resetBankDetail = true;
						}
						if ($resetBankDetail)
						{
							$result['BANK_DETAIL_ID'] = 0;
							if ($bankDetail === null)
								$bankDetail = EntityBankDetail::getSingleInstance();
							$res = $bankDetail->getList(
								array(
									'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
									'filter' => array(
										'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
										'=ENTITY_ID' => $result['REQUISITE_ID']
									),
									'select' => array('ID'),
									'limit' => 1
								)
							);
							if ($row = $res->fetch())
								$result['BANK_DETAIL_ID'] = (int)$row['ID'];
							unset($resetBankDetail, $res, $row);

							break;
						}

						$result['REQUISITE_ID'] = 0;
						$result['BANK_DETAIL_ID'] = 0;

						continue;
					}

					if ($result['REQUISITE_ID'] === 0
						|| ($requisiteId > 0
							&& $requisiteId === $result['REQUISITE_ID']
							&& $result['BANK_DETAIL_ID'] === 0))
					{
						continue;
					}

					break;
				}
			}
			else if ($entityTypeId === \CCrmOwnerType::Company
				|| $entityTypeId === \CCrmOwnerType::Contact)
			{
				if ($requisite === null)
				{
					$requisite = EntityRequisite::getSingleInstance();
				}

				if ($result['REQUISITE_ID'] <= 0 || $result['BANK_DETAIL_ID'] <= 0)
				{
					$requisiteId = $result['REQUISITE_ID'];
					$bankDetailId = $result['BANK_DETAIL_ID'];
					$settings = $requisite->loadSettings($entityTypeId, $entityId);
					if (is_array($settings))
					{
						if ($result['REQUISITE_ID'] <= 0 && isset($settings['REQUISITE_ID_SELECTED']))
						{
							$requisiteId = (int)$settings['REQUISITE_ID_SELECTED'];
							if ($requisiteId < 0)
								$requisiteId = 0;
						}
						if (isset($settings['BANK_DETAIL_ID_SELECTED'])
							&& ($result['REQUISITE_ID'] <= 0
								|| (isset($settings['REQUISITE_ID_SELECTED'])
									&& $result['REQUISITE_ID'] === (int)$settings['REQUISITE_ID_SELECTED'])))
						{
							$bankDetailId = (int)$settings['BANK_DETAIL_ID_SELECTED'];
							if ($bankDetailId < 0)
								$bankDetailId = 0;
						}
					}
					$result['REQUISITE_ID'] = $requisiteId;
					$result['BANK_DETAIL_ID'] = $bankDetailId;
					unset($requisiteId, $bankDetailId, $settings);
				}

				try
				{
					if ($isMyCompany)
					{
						self::checkConsistence(
							\CCrmOwnerType::Undefined, 0,
							0, 0,
							$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
							[
								'ENTITY_CHECK' => false,
								'CLIENT_SELLER_INFO' => [
									'CLIENT_ENTITY_TYPE_ID' => \CCrmOwnerType::Undefined,
									'CLIENT_ENTITY_ID' => 0,
									'MYCOMPANY_ID' => $entityId
								]
							]
						);
					}
					else
					{
						self::checkConsistence(
							\CCrmOwnerType::Undefined, 0,
							$result['REQUISITE_ID'], $result['BANK_DETAIL_ID'],
							0, 0,
							[
								'ENTITY_CHECK' => false,
								'CLIENT_SELLER_INFO' => [
									'CLIENT_ENTITY_TYPE_ID' => $entityTypeId,
									'CLIENT_ENTITY_ID' => $entityId,
									'MYCOMPANY_ID' => 0
								]
							]
						);
					}
				}
				catch (Main\SystemException $e)
				{
					$resetBankDetail = false;
					switch ($e->getCode())
					{
						case self::ERR_INVALID_BANK_DETAIL_ID:
						case self::ERR_BANK_DETAIL_NOT_ASSIGNED_WO_REQUISITE:
						case self::ERR_BANK_DETAIL_NOT_FOUND:
						case self::ERR_BANK_DETAIL_NOT_ASSIGNED:
						case self::ERR_INVALID_MC_BANK_DETAIL_ID:
						case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED_WO_MC_REQUISITE:
						case self::ERR_MC_BANK_DETAIL_NOT_FOUND:
						case self::ERR_MC_BANK_DETAIL_NOT_ASSIGNED:
							$resetBankDetail = true;
					}
					if ($resetBankDetail)
					{
						$result['BANK_DETAIL_ID'] = 0;
						if ($bankDetail === null)
							$bankDetail = EntityBankDetail::getSingleInstance();
						$res = $bankDetail->getList(
							array(
								'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
								'filter' => array(
									'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
									'=ENTITY_ID' => $result['REQUISITE_ID']
								),
								'select' => array('ID'),
								'limit' => 1
							)
						);
						if ($row = $res->fetch())
							$result['BANK_DETAIL_ID'] = (int)$row['ID'];
						unset($resetBankDetail, $res, $row);
					}
					else
					{
						$result['REQUISITE_ID'] = 0;
						$result['BANK_DETAIL_ID'] = 0;
					}
				}

				if ($result['REQUISITE_ID'] === 0)
				{
					if ($requisite === null)
					{
						$requisite = EntityRequisite::getSingleInstance();
					}
					$res = $requisite->getList(
						array(
							'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
							'filter' => array(
								'=ENTITY_TYPE_ID' => $entityTypeId,
								'=ENTITY_ID' => $entityId
							),
							'select' => array('ID'),
							'limit' => 1
						)
					);
					if ($row = $res->fetch())
						$result['REQUISITE_ID'] = (int)$row['ID'];
					unset($res, $row);
				}

				if ($result['REQUISITE_ID'] > 0)
				{
					if ($result['BANK_DETAIL_ID'] === 0)
					{
						if ($bankDetail === null)
							$bankDetail = EntityBankDetail::getSingleInstance();
						$res = $bankDetail->getList(
							array(
								'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
								'filter' => array(
									'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
									'=ENTITY_ID' => $result['REQUISITE_ID']
								),
								'select' => array('ID'),
								'limit' => 1
							)
						);
						if ($row = $res->fetch())
							$result['BANK_DETAIL_ID'] = (int)$row['ID'];
						unset($res, $row);
					}

					break;
				}
			}
		}
	}

	return $result;
}