Май 20, 2022
Теги: События, Модули grain, Интеграция с iiko
Выгрузка количества персон в заказ iiko. Для модуля Интеграция с iiko. Используется событие "OnBuildIikoOrderBody".
Предполагает наличие свойства заказа типа "Перечисление" с символьным кодом "PERSON_COUNT". В значениях вариантов (поле "Код") должны быть числа, соответствующие количеству персон. Либо строковое свойство, но желательно при этом обеспечить проверку, что в значении будет отправляться целое число. Код работает как с api iikoDelivery, так и iikoTransport.
<?php
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'grain.iiko',
'OnBuildIikoOrderBody',
'\Partner\IikoOrderEvents::onBuildIikoOrderBody'
);
class IikoOrderEvents
{
public static function onBuildIikoOrderBody(\Bitrix\Main\Event $event)
{
$restaurant = $event->getParameter('RESTAURANT');
$order = $event->getParameter('ORDER');
$params = $event->getParameter('PARAMS');
$body = $event->getParameter('BODY');
foreach ($event->getResults() as $eventResult) // получение данных после другого обработчика, если он был
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
continue;
if($eventResult->getParameters())
$body = $eventResult->getParameters();
}
$account = \Grain\Iiko\Rest::getAccount($restaurant['ID']);
foreach($order->getPropertyCollection() as $propertyValue)
{
if($propertyValue->getField('CODE')!='PERSON_COUNT')
continue;
if(intval($propertyValue->getField('VALUE'))>0)
{
if($account['API_VERSION']==1)
{
$body['order']['guests'] = array(
'count' => intval($propertyValue->getField('VALUE')),
'splitBetweenPersons' => true,
);
}
elseif($account['API_VERSION']==0)
{
$body['order']['personsCount'] = intval($propertyValue->getField('VALUE'));
}
}
}
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $body);
return $result;
}
}