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