- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/entitybankdetail.php
- Класс: Bitrix\Crm\EntityBankDetail
- Вызов: EntityBankDetail::update
public function update($id, $fields, $options = array())
{
unset($fields['ID'], $fields['DATE_CREATE'], $fields['CREATED_BY_ID']);
$fields['DATE_MODIFY'] = new \Bitrix\Main\Type\DateTime();
$fields['MODIFY_BY_ID'] = \CCrmSecurityHelper::GetCurrentUserID();
$parentInfoAfterUpdate = $entityBeforeUpdate = array(
'ENTITY_TYPE_ID' => CCrmOwnerType::Undefined,
'ENTITY_ID' => 0
);
$parentInfoBeforeUpdate = self::getOwnerEntityById($id);
if ($parentInfoBeforeUpdate['ENTITY_TYPE_ID'] === CCrmOwnerType::Requisite
&& $parentInfoBeforeUpdate['ENTITY_ID'] > 0)
{
$parentInfoAfterUpdate = $parentInfoBeforeUpdate;
$entityBeforeUpdate = EntityRequisite::getOwnerEntityById($parentInfoBeforeUpdate['ENTITY_ID']);
}
if (isset($fields['ENTITY_TYPE_ID']))
$parentInfoAfterUpdate['ENTITY_TYPE_ID'] = (int)$fields['ENTITY_TYPE_ID'];
if (isset($fields['ENTITY_ID']))
$parentInfoAfterUpdate['ENTITY_ID'] = (int)$fields['ENTITY_ID'];
if ($parentInfoBeforeUpdate['ENTITY_TYPE_ID'] === CCrmOwnerType::Requisite
&& $parentInfoBeforeUpdate['ENTITY_ID'] > 0
&& $parentInfoAfterUpdate['ENTITY_TYPE_ID'] === CCrmOwnerType::Requisite
&& $parentInfoAfterUpdate['ENTITY_ID'] > 0
&& $parentInfoBeforeUpdate['ENTITY_TYPE_ID'] === $parentInfoAfterUpdate['ENTITY_TYPE_ID']
&& $parentInfoBeforeUpdate['ENTITY_ID'] === $parentInfoAfterUpdate['ENTITY_ID'])
{
$entityAfterUpdate = $entityBeforeUpdate;
}
else
{
$entityAfterUpdate = array(
'ENTITY_TYPE_ID' => CCrmOwnerType::Undefined,
'ENTITY_ID' => 0
);
if ($parentInfoAfterUpdate['ENTITY_TYPE_ID'] === CCrmOwnerType::Requisite
&& $parentInfoAfterUpdate['ENTITY_ID'] > 0)
{
$entityAfterUpdate = EntityRequisite::getOwnerEntityById($parentInfoAfterUpdate['ENTITY_ID']);
}
}
unset($parentInfoBeforeUpdate, $parentInfoAfterUpdate);
$entityTypeIdModified = $entityIdModified = false;
$entityTypeId = $entityAfterUpdate['ENTITY_TYPE_ID'];
if (
CCrmOwnerType::IsDefined($entityTypeId)
&& CCrmOwnerType::IsDefined($entityBeforeUpdate['ENTITY_TYPE_ID'])
&& $entityTypeId !== $entityBeforeUpdate['ENTITY_TYPE_ID'])
{
$entityTypeIdModified = true;
}
$entityId = $entityAfterUpdate['ENTITY_ID'];
if ($entityId > 0 && $entityBeforeUpdate['ENTITY_ID'] > 0 && $entityId !== $entityBeforeUpdate['ENTITY_ID'])
{
$entityIdModified = true;
}
// 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();
}
}
}
$result = $this->checkRqFieldsBeforeSave($id, $fields);
if (!$result->isSuccess())
{
return $result;
}
$result = BankDetailTable::update($id, $fields);
if ($result->isSuccess())
{
if ($entityTypeIdModified || $entityIdModified)
{
DuplicateBankDetailCriterion::registerByEntity(
$entityBeforeUpdate['ENTITY_TYPE_ID'],
$entityBeforeUpdate['ENTITY_ID']
);
DuplicateBankDetailCriterion::unregister($entityTypeId, $entityId);
//region Register volatile duplicate criterion fields
DuplicateVolatileCriterion::register(
$entityBeforeUpdate['ENTITY_TYPE_ID'],
$entityBeforeUpdate['ENTITY_ID'],
[FieldCategory::BANK_DETAIL]
);
DuplicateVolatileCriterion::register(
$entityTypeId,
$entityId,
[FieldCategory::BANK_DETAIL]
);
//endregion Register volatile duplicate criterion fields
}
if (isset($fields['ENTITY_TYPE_ID']) && isset($fields['ENTITY_ID']))
{
$entityTypeId = (int)$fields['ENTITY_TYPE_ID'];
$entityId = (int)$fields['ENTITY_ID'];
if ($entityTypeId === CCrmOwnerType::Requisite && $entityId > 0)
{
DuplicateBankDetailCriterion::registerByParent($entityTypeId, $entityId);
//region Register volatile duplicate criterion fields
DuplicateVolatileCriterion::register(
CCrmOwnerType::Requisite,
$entityId,
[FieldCategory::BANK_DETAIL]
);
//endregion Register volatile duplicate criterion fields
}
}
else
{
DuplicateBankDetailCriterion::registerByBankDetail($id);
//region Register volatile duplicate criterion fields
DuplicateVolatileCriterion::register(
CCrmOwnerType::BankDetail,
$id,
[FieldCategory::BANK_DETAIL]
);
//endregion Register volatile duplicate criterion fields
}
}
//region Send event
if ($result->isSuccess())
{
$event = new Main\Event('crm', 'OnAfterBankDetailUpdate', array('id' => $id, 'fields' => $fields));
$event->send();
}
//endregion Send event
return $result;
}