Установка определенной терминальной группы выгрузки в iiko

Модуль расширенного управления меню для битрикс

Август 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;
    }
}

← Переход к списку