• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/addressrequisiteconverter.php
  • Класс: Bitrix\Crm\Requisite\AddressRequisiteConverter
  • Вызов: AddressRequisiteConverter::processEntity
public function processEntity($entityID)
{
	if($this->enablePermissionCheck)
	{
		if(!(\CCrmAuthorizationHelper::CheckReadPermission($this->entityTypeID, $entityID)
			&& \CCrmAuthorizationHelper::CheckUpdatePermission($this->entityTypeID, $entityID)))
		{
			throw new AddressRequisiteConvertException(
				$this->entityTypeID,
				$this->presetID,
				AddressRequisiteConvertException::ACCESS_DENIED
			);
		}
	}

	$addresses = array();
	foreach(EntityAddress::getListByOwner($this->entityTypeID, $entityID) as $addressTypeID => $address)
	{
		if(EntityAddress::isEmpty($address))
		{
			continue;
		}

		$addresses[$addressTypeID] = array_merge(
			$address,
			array('ANCHOR_TYPE_ID' => $this->entityTypeID, 'ANCHOR_ID' => $entityID)
		);
	}

	if(empty($addresses))
	{
		return false;
	}

	$requisiteEntity = new EntityRequisite();
	$requisiteListResult = $requisiteEntity->getList(
		array(
			'select' => array('ID'),
			'filter' => array(
				'=PRESET_ID' => $this->presetID,
				'=ENTITY_TYPE_ID' => $this->entityTypeID,
				'=ENTITY_ID' => $entityID
			)
		)
	);

	$processedQty = 0;
	$isFound = false;
	while($fields = $requisiteListResult->fetch())
	{
		$requisiteID = (int)$fields['ID'];
		$requisiteAddresses = EntityRequisite::getAddresses($requisiteID);

		$added = false;
		foreach($addresses as $addressTypeID => $address)
		{
			if(isset($requisiteAddresses[$addressTypeID])
				&& !EntityAddress::isEmpty($requisiteAddresses[$addressTypeID]))
			{
				if(EntityAddress::areEquals($address, $requisiteAddresses[$addressTypeID]))
				{
					$isFound = true;
				}

				continue;
			}

			EntityAddress::register(\CCrmOwnerType::Requisite, $requisiteID, $addressTypeID, $address);
			$added = true;
		}

		if($added)
		{
			$processedQty++;
		}
	}

	if(!$isFound && $processedQty === 0)
	{
		$requisiteAddResult = $requisiteEntity->add(
			array(
				'ENTITY_TYPE_ID' => $this->entityTypeID,
				'ENTITY_ID' => $entityID,
				'PRESET_ID' => $this->presetID,
				'NAME' => \CCrmOwnerType::GetCaption($this->entityTypeID, $entityID, false),
				'SORT' => 500,
				'ACTIVE' => 'Y'
			)
		);
		if($requisiteAddResult->isSuccess())
		{
			$requisiteID = (int)$requisiteAddResult->getId();
			foreach($addresses as $addressTypeID => $address)
			{
				EntityAddress::register(\CCrmOwnerType::Requisite, $requisiteID, $addressTypeID, $address);
			}
			$processedQty++;
		}
		else
		{
			throw new AddressRequisiteConvertException(
				$this->entityTypeID,
				$this->presetID,
				AddressRequisiteConvertException::CREATION_FAILED
			);
		}
	}

	return $processedQty > 0;
}