- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/requisite/invoicerequisiteconverter.php
- Класс: Bitrix\Crm\Requisite\InvoiceRequisiteConverter
- Вызов: InvoiceRequisiteConverter::processEntity
public function processEntity($entityID)
{
$this->validate();
$filter = array();
if($this->entityTypeID === \CCrmOwnerType::Company)
{
$filter['=UF_COMPANY_ID'] = $entityID;
}
elseif($this->entityTypeID === \CCrmOwnerType::Contact)
{
$filter['=UF_CONTACT_ID'] = $entityID;
$filter['=UF_COMPANY_ID'] = 0;
}
else
{
$entityTypeName = \CCrmOwnerType::ResolveName($this->entityTypeID);
throw new Main\NotSupportedException("Entity type: '{$entityTypeName}' is not supported in current context");
}
if(!$this->enablePermissionCheck)
{
$filter['CHECK_PERMISSIONS'] = 'N';
}
$dbResult = \CCrmInvoice::GetList(
array('ID' => 'DESC'),
$filter,
false,
array('nTopCount' => $this->limit),
array('ID')
);
$itemIDs = array();
while($ary = $dbResult->Fetch())
{
$itemIDs[] = (int)$ary['ID'];
}
$map = array();
$count = $this->getPropertyMapCount();
foreach($itemIDs as $itemID)
{
$properties = \CCrmInvoice::GetProperties($itemID, $this->personTypeID);
$key = $this->prepareRequisiteKey($properties);
if($key === '')
{
$key = '-';
}
$item = isset($map[$key]) ? $map[$key] : array();
$fields = isset($item['fields']) ? $item['fields'] : array();
if(count($fields) < $count)
{
$this->prepareRequisiteFields($properties, $entityID, $fields);
$item['fields'] = $fields;
}
if(!isset($item['invoices']))
{
$item['invoices'] = array();
}
$item['invoices'][] = $itemID;
$map[$key] = $item;
}
if(empty($map))
{
return false;
}
$requisiteEntity = new EntityRequisite();
foreach($map as $key => $item)
{
$fields = isset($item['fields']) ? $item['fields'] : array();
if(empty($fields))
{
continue;
}
$xmlID = $this->presetID.':'.$this->entityTypeID.':'.md5($key);
$dbResult = $requisiteEntity->getList(
array(
'filter' => array(
'=PRESET_ID' => $this->presetID,
'=ENTITY_TYPE_ID' => $this->entityTypeID,
'=ENTITY_ID' => $entityID,
'=XML_ID' => $xmlID
),
'select' => array_merge(array('ID', 'XML_ID'), $this->getPresetFieldNames()),
'limit' => 1
)
);
$requisiteFields = $dbResult->fetch();
$requisiteID = 0;
if(is_array($requisiteFields))
{
$requisiteID = (int)$requisiteFields['ID'];
unset($requisiteFields['ID']);
//HACK: Remove empty values for array_merge can take new values form fields
foreach($requisiteFields as $k => $v)
{
if($v === '')
{
unset($requisiteFields[$k]);
}
}
$requisiteFields[EntityRequisite::ADDRESS] = EntityRequisite::getAddresses($requisiteID);
}
else
{
$requisiteFields = array(
'ENTITY_TYPE_ID' => $this->entityTypeID,
'ENTITY_ID' => $entityID,
'PRESET_ID' => $this->presetID,
'NAME' => $this->prepareRequisiteName($entityID, $fields),
'SORT' => 500,
'ACTIVE' => 'Y',
'XML_ID' => $xmlID
);
}
$requisiteFields = array_merge($fields, $requisiteFields);
if($requisiteID > 0)
{
$result = $requisiteEntity->update($requisiteID, $requisiteFields);
}
else
{
$result = $requisiteEntity->add($requisiteFields);
if($result->isSuccess())
{
$requisiteID = (int)$result->getId();
}
}
if($result->isSuccess() && $requisiteID > 0 && isset($item['invoices']))
{
foreach($item['invoices'] as $invoiceID)
{
EntityLink::register(\CCrmOwnerType::Invoice, $invoiceID, $requisiteID);
}
}
}
return true;
}