Как автоматически отключать выгрузку определенных заказов
Актуально для версии 2.9.6
Задача
Как известно, любой оформленный заказа сразу получает галочку "Выгружать заказ в 1С при следующем сеансе связи". Если Вы хотите, чтобы заказы с определенным типом оплаты или доставки, а также заказы с определенным статусом на выгружались, то необходимо производить кастомизации.
Решение
Есть два способа повлиять на выгрузку заказов - использовать событийную модель или кастомизировать xslt шаблон выгрузки. Далее будет рассмотрено по примеру каждого способа.
Решение через обработчик события
Допустим, Вы хотите, чтобы после того, как Ваш менеджер проставил заказу статус "отклонен" или "Отменен", у заказа автоматически отключалась галочка "Выгружать заказ в 1С при следующем сеансе связи" и в 1С он не попадал.
Решать задачу будем с помощью обработчика события systemModifyObject, обратите внимание, что при изменении статуса через административную панель срабатывает именно это событие, а не события модуля emarket.
Сначала дадим возможность управлять "выгружаемостью" заказов по статусам заказа.
Для этого зайдем в тип данных "Статус заказа" и добавим новое поле:
Потом зайдем в тип данных "Статус заказа", как в справочник, и проставим галочки:
Теперь перейдем к коду, добавим в файл /classes/modules/emarket/custom_events.php следующее:
new umiEventListener('systemModifyObject', 'emarket', 'checkStatusOnChange');
А в файл /classes/modules/emarket/__custom_adm.php добавим код кастомного обработчика:
public function checkStatusOnChange(iUmiEventPoint $eventPoint){
if ($eventPoint->getMode() == 'after') {
$object = $eventPoint->getRef('object');
if ($object->getTypeGUID() == 'emarket-order') {
$object_id = $object->getId();
$c_enabled_object = $object->getValue('need_export');
$order = order::get($object_id);
$objects_coll = umiObjectsCollection::getInstance();
$status = $objects_coll->getObject($order->getOrderStatus());
$c_enabled_status = $status->getValue('1c_enabled');
if($c_enabled_status == null && $c_enabled_object == 1){
$object->setValue('need_export', null);
$object->commit();
}else{
return;
}
}else{
return;
}
}else{
return;
}
}
После этого, если статус заказа будет измене через административную панель на "Отклонен" или "Отменен", то у заказа автоматически будет убрана галочка "Выгружать заказ в 1С при следующем сеансе связи".