Всё здорово! Много настроек, но вот только нет одной... автоматической отправки заявки по статусу заказа! т.е. обязательно менеджер магазина (или админ) должен нажать кнопочку (точнее 3 кнопки) что бы отправить заявку в DPD!
В поддержке предложили платную доработку, но ковырять код мы привыкли и я допилил это одним событием, прошу к обозрению:
AddEventHandler("sale", "OnOrderAdd", "OnOrderAddHandler");
AddEventHandler("sale", "OnSaleStatusOrder", "LoadDPD");
function OnOrderAddHandler($ID, $arFields) {
self::LoadDPD($ID, $arFields['STATUS_ID']);
}
function LoadDPD($ORDER_ID, $STATUS_ID){
if(!$ORDER_ID) return false;
if($STATUS_ID=="P")
{// только на статусе "Оплачено"
\Bitrix\Main\Loader::includeModule('ipol.dpd');
$_REQUEST['ID'] = $ORDER_ID;
$_REQUEST['IPOLH_DPD_ACTION'] = 'CREATE_ORDER';
$_REQUEST['IPOLH_DPD_ORDER']['PICKUP_DATE'] = date("d.m.Y H:i:s",time()+86400); // через сутки
if (isset($_REQUEST['ID']))
{
$arOrder = \CSaleOrder::GetByID($_REQUEST['ID']);
}
else
{
$arOrder = \CSaleOrder::GetList(
$arOrder = [],
$arFilter = [
\Bitrix\Main\Config\Option::get('ipol.dpd', 'ORDER_ID', 'ID') => $_REQUEST['dID'],
]
)->Fetch();
}
// кусок из модуля
$ORDER_ID = \Ipolh\DPD\Utils::getOrderId($arOrder);
$deliveryCode = \Ipolh\DPD\Delivery\DPD::getDeliveryCode($arOrder['DELIVERY_ID']);
$profile = \Ipolh\DPD\Delivery\DPD::getDeliveryProfile($deliveryCode);
$showButtonAlways = \Bitrix\Main\Config\Option::get('ipol.dpd', 'SHOW_ADMIN_BUTTON', '') == 'ALWAYS';
if ($profile !== false || $showButtonAlways)
{
$entity = \Ipolh\DPD\DB\Order\Table::findByOrder($ORDER_ID, true);
if (!$entity->id)
{
$errors = $entity->save();
}
if (!$entity->isCreated())
{
$entity->fillFromOrder($ORDER_ID);
}
$form = new \Ipolh\DPD\Admin\Order\Edit($entity);
$form->processAndShow();
}
}
elseif($order = CSaleOrder::GetByID($ORDER_ID) && $order['PAY_SYSTEM_ID']==2)
{// На проверке менеджером
CSaleOrder::StatusOrder($ORDER_ID, "CH");
}
}
|
p.s. если разработчик читает это сообщение и собирается внедрить это в модуль "по умолчанию" - прошу отписаться в комментариях или написать в чат сайта!