Обновлено 28.07.2026
Позволяет модифицировать данные перед добавлением/обновлением сделки, контакта или компании. Также позволяет отменить добавление/обновление. Параметром под номером 3 можно вернуть свой флаг того, что добавление/обновление производить не нужно. Если обработчик вернёт ошибку, данные для добавления будут сброшены.
Данное событие вызывается при обновлении/добавлении сделки, контакта или компании, при обновлении заказа или создании заказа без поиска дубликатов.
0. Rover\AmoSale\Directory\Entity\Event — текущее событие интеграции
1. Rover\AmoSale\Directory\Entity\AbstractProfile — текущий профиль интеграции
2. AmoCRM\Models\BaseApiModel — добавляемая/обновляемая сущность амоСРМ (AmoCRM\Models\LeadModel, AmoCRM\Models\ContactModel, AmoCRM\Models\CompanyModel).
Для примера, будем отмечать кастомное поле типа чекбокс в сделке, если у создаваемого заказа задана определенная служба доставки.
use AmoCRM\Models\CustomFieldsValues\CheckboxCustomFieldValuesModel;
use AmoCRM\Models\CustomFieldsValues\ValueCollections\CheckboxCustomFieldValueCollection;
use AmoCRM\Models\CustomFieldsValues\ValueCollections\NullCustomFieldValueCollection;
use AmoCRM\Models\CustomFieldsValues\ValueModels\CheckboxCustomFieldValueModel;
use AmoCRM\Models\LeadModel;
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Bitrix\Main\Loader;
use Bitrix\Sale\Order;
use Bitrix\Sale\Shipment;
use Rover\AmoSale\Task\Order\OrderCreate;
$specialDeliveryId = 8; // ид службы доставки
$cfCheckboxId = 888888; // ид кастомоного поля типа чекбокс
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('rover.amosale', 'beforeSaveAmoEntity', function (Event $event) {
/** @var \Rover\AmoSale\Directory\Entity\Event $eventEntity */
$eventEntity = $event->getParameter(0);
$amoModel = $event->getParameter(2);
if ($eventEntity->getCollection()->offsetGet('UF_TYPE') != OrderCreate::getType()) {
return;
}
if (get_class($amoModel) != LeadModel::class) {
return;
}
if (!Loader::includeModule('sale')) {
return;
}
$order = Order::load($eventEntity->getEntityId());
if (!$order) {
return;
}
$needCheckbox = false;
/** @var Shipment $shipment */
foreach ($order->getShipmentCollection() as $shipment) {
if ($shipment->isSystem()) {
continue;
}
if ($shipment->getDeliveryId() == $specialDeliveryId) {
$needCheckbox = true;
}
}
$customFieldsValues = $amoModel->getCustomFieldsValues();
$checkboxValue = $customFieldsValues->getBy('fieldId', $cfCheckboxId);
if ($needCheckbox) {
if (empty($checkboxValue)) {
$checkboxValue= new CheckboxCustomFieldValuesModel();
$checkboxValue->setFieldId($cfCheckboxId);
$customFieldsValues->add($checkboxValue);
}
$checkboxValue->setValues(
(new CheckboxCustomFieldValueCollection())->add(
(new CheckboxCustomFieldValueModel())->setValue(true)
)
);
} else {
if (!empty($checkboxValue)) {
$checkboxValue->setValues(
(new NullCustomFieldValueCollection())
);
}
}
});