- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/entityrequisite.php
- Класс: Bitrix\Crm\EntityRequisite
- Вызов: EntityRequisite::add
public function add($fields, $options = array())
{
unset($fields['ID'], $fields['DATE_MODIFY'], $fields['MODIFY_BY_ID']);
$allowSetSystemFields = $options['ALLOW_SET_SYSTEM_FIELDS'] ?? false;
if (!$allowSetSystemFields)
{
$fields['DATE_CREATE'] = new \Bitrix\Main\Type\DateTime();
$fields['CREATED_BY_ID'] = \CCrmSecurityHelper::GetCurrentUserID();
}
$addresses = null;
if (isset($fields[self::ADDRESS]))
{
$addresses = $fields[self::ADDRESS];
unset($fields[self::ADDRESS]);
}
// rewrite some fields
$entity = RequisiteTable::getEntity();
foreach ($entity->getFields() as $field)
{
$fieldName = $field->getName();
if ($field instanceof Entity\BooleanField && array_key_exists($fieldName, $fields))
{
if ($fields[$fieldName] !== 'Y' && $fields[$fieldName] !== 'N'
&& $fields[$fieldName] !== true && $fields[$fieldName] !== false)
{
$fields[$fieldName] = $field->getDefaultValue();
}
}
}
$addressOnly = false;
if (isset($fields['ADDRESS_ONLY']) &&
($fields['ADDRESS_ONLY'] === true || $fields['ADDRESS_ONLY'] === 'Y'))
{
$addressOnly = true;
}
if ($addressOnly)
{
$fields = $this->removeNonAddressFields($fields);
}
$result = $this->checkRqFieldsBeforeSave(0, $fields);
if (!$result->isSuccess())
{
return $result;
}
$result = RequisiteTable::add($fields);
$id = $result->isSuccess() ? (int)$result->getId() : 0;
if ($id > 0)
{
$entityTypeId = isset($fields['ENTITY_TYPE_ID']) ? (int)$fields['ENTITY_TYPE_ID'] : CCrmOwnerType::Undefined;
$entityId = isset($fields['ENTITY_ID']) ? (int)$fields['ENTITY_ID'] : 0;
if (is_array($addresses))
{
if(!CCrmOwnerType::IsDefined($entityTypeId) || $entityId <= 0)
{
$entityTypeId = CCrmOwnerType::Requisite;
$entityId = $id;
}
foreach($addresses as $addressTypeID => $address)
{
if(!is_array($address) || empty($address))
{
continue;
}
EntityAddress::register(
CCrmOwnerType::Requisite,
$id,
$addressTypeID,
array(
'ANCHOR_TYPE_ID' => $entityTypeId,
'ANCHOR_ID' => $entityId,
'ADDRESS_1' => isset($address['ADDRESS_1']) ? $address['ADDRESS_1'] : null,
'ADDRESS_2' => isset($address['ADDRESS_2']) ? $address['ADDRESS_2'] : null,
'CITY' => isset($address['CITY']) ? $address['CITY'] : null,
'POSTAL_CODE' => isset($address['POSTAL_CODE']) ? $address['POSTAL_CODE'] : null,
'REGION' => isset($address['REGION']) ? $address['REGION'] : null,
'PROVINCE' => isset($address['PROVINCE']) ? $address['PROVINCE'] : null,
'COUNTRY' => isset($address['COUNTRY']) ? $address['COUNTRY'] : null,
'COUNTRY_CODE' => isset($address['COUNTRY_CODE']) ? $address['COUNTRY_CODE'] : null,
'LOC_ADDR_ID' => isset($address['LOC_ADDR_ID']) ? (int)$address['LOC_ADDR_ID'] : 0,
'LOC_ADDR' => isset($address['LOC_ADDR']) ? $address['LOC_ADDR'] : null
)
);
}
}
if (($entityTypeId === CCrmOwnerType::Company || $entityTypeId === CCrmOwnerType::Contact)
&& $entityId > 0)
{
DuplicateRequisiteCriterion::registerByEntity($entityTypeId, $entityId);
//region Register volatile duplicate criterion fields
DuplicateVolatileCriterion::register(
$entityTypeId,
$entityId,
[FieldCategory::REQUISITE]
);
//endregion Register volatile duplicate criterion fields
}
//region Send event
$event = new Main\Event('crm', 'OnAfterRequisiteAdd', array('id' => $id, 'fields' => $fields));
$event->send();
//endregion
}
return $result;
}