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