Июнь 18, 2021
Теги: События, Модули grain, Интеграция с iiko
Добавление названия службы доставки и оплаты в комментарий заказа iiko. Для модуля Интеграция с iiko. Используется событие "OnBuildIikoOrderBody".
Данный код может помочь, если существует несколько платежных систем или служб доставки и название содержит какую-либо дополнительную информацию, например "Оплата картой при получении", "Оплата наличными при получении".
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'grain.iiko',
'OnBuildIikoOrderBody',
'\Partner\IikoCommentInfo::onBuildIikoOrderBody'
);
class IikoCommentInfo
{
public static function onBuildIikoOrderBody(\Bitrix\Main\Event $event)
{
$restaurant = $event->getParameter('RESTAURANT');
$order = $event->getParameter('ORDER');
$params = $event->getParameter('PARAMS');
$body = $event->getParameter('BODY');
$account = \Grain\Iiko\Rest::getAccount($restaurant['ID']);
foreach ($event->getResults() as $eventResult) // получение данных после другого обработчика, если он был
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
continue;
if($eventResult->getParameters())
$body = $eventResult->getParameters();
}
$deliveryName = '';
foreach($order->getShipmentCollection() as $shipment)
{
$deliveryName = $shipment->getField('DELIVERY_NAME');
break;
}
$paySystemName = '';
foreach($order->getPaymentCollection() as $payment)
{
if(
!($paysystemId=$payment->getField('PAY_SYSTEM_ID'))
|| !($paySystemService = \Bitrix\Sale\PaySystem\Manager::getObjectById($paysystemId))
)
continue;
$paySystemName = $paySystemService->getField('NAME');
}
$commentPrefix = strlen($deliveryName)>0?'Способ доставки: '.$deliveryName:'';
$commentPrefix .= strlen($paySystemName)>0?(strlen($commentPrefix)>0?"\n":'').'Способ оплаты: '.$paySystemName:'';
if(strlen($commentPrefix)>0)
{
if($account['API_VERSION']==1) // iikoTransport
{
if(is_array($body['order']))
{
if(is_string($body['order']['comment']))
$body['order']['comment'] = $commentPrefix."\n\n".$body['order']['comment'];
else
$body['order']['comment'] = $commentPrefix;
}
}
elseif($account['API_VERSION']==0) // iikoDelivery
{
if(!is_array($body['order']['address']))
$body['order']['address'] = array();
if(is_string($body['order']['address']['comment']))
$body['order']['address']['comment'] = $commentPrefix."\n\n".$body['order']['address']['comment'];
else
$body['order']['address']['comment'] = $commentPrefix;
}
}
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $body);
return $result;
}
}