Как при переводе заказа в статус "отправлено" передать и номер трэкинга

В документации есть чудная глава https://developers.webasyst.ru... о том как программно менять статусы заказов. Это работает. Но у меня возникла трудность с переводом заказа в статус "отправлено". Когда это делается через интерфейс бэкэнда, то появляется дополнительный диалог, в котором можно ввести помимо всего прочего ещё и номер трэкинга, который потом используется плагином доставки и при этом формируются уведомления согласно настройкам магазина. Вопрос в том, а как всё то же сделать, если заказ переводится в статус "отправлено" программно? Есть способ инициировать всю это процедуру по схранению трэкинга, параметров и посылку уведомления не копируя в свой обработчик весь код из магазина?

1 ответ

  • 1
    Алексей Webasyst 15 марта 2019 14:10 #

    Можете добавить данные в таблицу shop_order_params и после этого менять статус.

    • +1
      Аркадий Глазов Аркадий Глазов 23 мая 2019 12:54 #

      Вынужден поднять тему. Предложенный рецепт сработал, но частично. Почему-то у заказов, у которых номер трэкинга добавлен вручную добавлением данных в таблицу при формировании уведомления параметр $action_data.params.tracking_number пустой и номер трэкинга в письме клиенту не отсылается, хотя если войти в личный кабинет заказа и в бакэнде результат трэкинга есть. Видимо номер трэкинга надо ещё куда-то записать?

      • +1
        enso_studio@mail.ru enso_studio@mail.ru 24 мая 2019 14:25 #

        еще нужна запись в таблицы shop_order_log, shop_order_log_params

        $shop_order_log = array( array( "id" => 8, "order_id" => 1, "contact_id" => 1, "action_id" => "ship", "datetime" => "2019-05-24 14:21:13", "before_state_id" => "new", "after_state_id" => "shipped", "text" => "Идентификатор отправления: track1001", ),
        );
        $shop_order_log_params = array( array( "id" => 1, "order_id" => 1, "log_id" => 8, "name" => "tracking_number", "value" => "track1001", ),
        );

        • +1
          Аркадий Глазов Аркадий Глазов 24 мая 2019 20:43 #

          Всё не совсем так. Да, запись в shop_order_log_params нужна для $action_data.params.tracking_number. Но туда пишет и shopWorkflowEditshippingdetailsAction при вызове 

          $workflow->getAcтам tionById($action_id)->run($order_id)

          и если до этого сделать запись в shop_order_log, то в результате будет дубликат действия. Log_id должен быть уникален и в хронологическом порядке для заказа, если я правильно пропарсил код shopscrip. К сожалению в shopWorkflowEditshippingdetailsAction->execute не передать параметры. там изначально стоит 

          public function execute($params = null)
          {
          $text = array();
          $params = array();
          $update = array();

          а номер трэкинга передаётся как 

          $tracking = waRequest::post('tracking_number', '', 'string')

          и это при вызове вручную Action я не понимаю как подменить.

          • +1
            enso_studio@mail.ru enso_studio@mail.ru 24 мая 2019 21:05 #

            $_POST/$_GET массивы не защищены от перезаписи т.ч. 

            $_POST['tracking_number'] = '12345';

            перед вызовом shopWorkflowEditshippingdetailsAction->execute

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите