Август 29, 2022
Теги: События, Модули grain, Интеграция с iiko
Установка определенной терминальной группы выгрузки в iiko. Для модуля Интеграция с iiko. Используется событе "OnBuildOrderParamsArray".
По умолчанию, терминальная группа выбирается в процедуре заказа при помощи выпадающего списка и означает точку самовывоза. Однако, такая логика действует не всегда. Если терминальная группа одна, то начиная с версии 3.6 модуля, она всегда будет автоматически проставляться. Но если терминальных групп в выгрузке больше одной, но использоваться всегда должна одна конкретная, можно воспользоваться этим кодом:
<?php
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'grain.iiko',
'OnBuildOrderParamsArray',
'\Partner\IikoTerminalGroup::onBuildOrderParamsArray'
);
class IikoTerminalGroup
{
public static function onBuildOrderParamsArray(\Bitrix\Main\Event $event)
{
$restaurant = $event->getParameter('RESTAURANT'); // массив с данными ресторана
$order = $event->getParameter('ORDER'); // объект заказа битрикс
$params = $event->getParameter('PARAMS'); // массив подготовленных параметров для передачи в iiko (не результирующий массив)
foreach ($event->getResults() as $eventResult) // получение данных после другого обработчика, если он был
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
continue;
if($eventResult->getParameters())
$params = $eventResult->getParameters();
}
$check = $event->getParameter('CHECK'); // является ли запрос проверкой на создания заказа (true/false)
$terminalGroupId = '3313e01c-b33e-4b16-475a-4d918291dca9'; // устанавливаемая терминальная группа, можно найти, например, с помощью запроса SELECT * FROM b_grain_iiko_delivery_terminal
$rsTerminalGroup = \Grain\Iiko\DeliveryTerminalTable::getList(array( // проверяем, что такая терминальная группа существует для организации
'filter' => array(
'DELIVERY_TERMINAL_ID' => $terminalGroupId,
'ORGANIZATION_ID' => $params['organizationId'],
),
'limit' => 1,
));
if($terminalGroup=$rsTerminalGroup->fetch())
{
$params['terminalGroupId'] = $terminalGroupId;
}
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $params);
return $result;
}
}