Задать вопрос
@daylight6

Как автоматически изменить статус заказа при смене статуса доставки?

Помогите разобраться, как можно сделать автоматизированную смену статуса заказа при смене статуса доставки при редактировании заказа? Например, выставляем статус доставки "Передан в службу доставки [DS]", и при этом автоматически меняется статус заказа на "Отправлен[O]"?
  • Вопрос задан
  • 449 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    DevOps-инженер
    6 месяцев
    Далее
  • Хекслет
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
$bxEventManager = \Bitrix\Main\EventManager::getInstance();

        $bxEventManager->addEventHandler(
            'sale',
            'OnSaleShipmentEntitySaved',
            array(
                "\\Gricuk\\Shipment",
                "onSaleShipmentSavedHandler"
            )
        );


<?php
namespace Gricuk;


use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Main\Result;

class Shipment
{
    public static function onSaleShipmentSavedHandler(\Bitrix\Main\Event $event)
    {
        /** @var \Bitrix\Sale\Shipment $shipment */
        $shipment = $event->getParameter("ENTITY");
        $oldValues = $event->getParameter("VALUES");

        $shipmentFields = $shipment->getFieldValues();
        /**
         * Ключ - статус ДОСТАВКИ
         * Значение - статус ЗАКАЗА
         */
        $statusMap = [
            "DR" => "F",
            "DB" => "RS"
        ];
        if (isset($statusMap[$shipmentFields["STATUS_ID"]])) {
            try {
                $orderId = $shipment->getParentOrderId();
                $order = \Bitrix\Sale\Order::load($orderId);
                $order->setField("STATUS_ID", $statusMap[$shipmentFields["STATUS_ID"]]);

                /** @var Result $saveResult */
                $saveResult = $order->save();
                if (!$saveResult->isSuccess()) {
                    \Bitrix\Main\Diag\Debug::dumpToFile($saveResult, '$saveResult', 'onSaleShipmentSavedHandler.log');
                }
            } catch (\Exception $e) {
                \Bitrix\Main\Diag\Debug::dumpToFile($e, '$e', 'onSaleShipmentSavedHandler.log');
            }
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы