Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузками и обменивается только статусами: "Принят", "Оплачен" и "Выполнен". Но, по закону, после выполнения заказа нужно отправлять на печать второй чек (чек отгрузки). Что бы сайт напечатал второй чек- статус отгрузки заказа должен быть переведен в "Отгружено".
Задача: так как менеджеры не хотят заходить на сайт и вручную переключать статус отгрузки, нужно делать это автоматически, при переходе статуса заказа в "Выполнен", который приходит из 1С.
Переключам статус доставки в "Разрешена" и "Отгружена"
Тут все штатно: переходим в "Настройки -> Настройки продукта -> Настройки модулей -> Интернет-магазин" и на вкладке Автоматизация процессов выставляем разрешение доставки при переводе заказа в статус "Оплачен" и смену отгрузки на "Отгружен" при отгрузке заказа.
Отгружаем заказ при выполнении
А теперь, осталось только отгрузить заказ при смене статуса на "Выполнен". Для этого создаем или добавляем в /local/php_interface/init.php (если уже есть):
use Bitrix\Main\Loader;
AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete");
function OrderComplete($orderID, &$arFields)
{
if ($arFields == 'F') {
Loader::includeModule("sale");
$order = \Bitrix\Sale\Order::load($orderID);
$collection = $order->getShipmentCollection()->getNotSystemItems();
foreach ($collection as $shipment)
{
$shipment->setField('DEDUCTED', 'Y');
}
$order->save();
}
}
- С помощью события OnSaleStatusOrder отслеживаем изменение статуса заказа.
- Если заказ перешел в статус "Выполнен" $arFields == 'F'
- Загружаем заказ по его ID, получаем все отгрузки заказа и в цикле переключаем статус на "Отгружен" $shipment->setField('DEDUCTED', 'Y');
- Сохраняем заказ $order->save();
Обратите внимание: у каждого заказа есть скрытая, системная отгрузка и ее нельзя изменять (в общем-то и не получится, выдаст исключение). Отгрузки получаем с помощью $order->getShipmentCollection()->getNotSystemItems(); что бы в переборе не было этой системной отгрузки. Она не влияет на смену статуса и печать чека.
На этом все. Выполненные заказы будут сами отгружаться и переводиться в статус "Отгружен", с последующей печатью второго чека.