Prestashop 1.6 - номер отслеживания не отображается в «отправленном» шаблоне после сохранения в БД и на странице заказов - PullRequest
0 голосов
/ 27 августа 2018

Я создал модуль для вставки трекинговых ссылок на новые заказы, которые использует определенный перевозчик.Я проверил, что номер отслеживания вставлен в базу данных, а также найден на странице заказов.В базе данных он хранится в orders_carrier.

$orderinfo = new Order($params['id_order']);
$carrierinifo = new Carrier($orderinfo->id_carrier);

if ($carrierinifo->name=='Standard Delivery') {
   $ordercarrier = new OrderCarrier($orderinfo->id_carrier);
   if ($ordercarrier->tracking_number=='') {
       $ordercarrier->tracking_number = $this->config['TRACK_PRE'].str_pad($orderinfo->id, $this->config['DIGI'], "0", STR_PAD_LEFT);
       Db::getInstance()->update(
       'order_carrier',
       array('tracking_number'=>$ordercarrier->tracking_number),
       'id_order='.$orderinfo->id
       );

Я не могу понять, почему номер отслеживания не отображается в шаблоне «Отправлено».Он будет успешно отображаться только в том случае, если я нажму изменить (на вкладке «Доставка» на странице «Заказы») и повторно сохраню номер отслеживания.(Когда номер отслеживания уже сохранен и отображается на странице «Заказы»).Это дополнительный шаг, и я не могу автоматизировать этот шаг.

Я назначил переменную в используемом шаблоне доставки, и она сработает при переходе в состояние «Отправлено».

Кто-нибудь сталкивается с такой же проблемой?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Удалось добраться до корня проблемы.Я на самом деле обновлял номер перевозчика, номер для отслеживания.Я также должен обновить заказы, shipping_number.Приятно знать, что это работает сейчас.

Я этого не осознавал.Поделитесь этим для тех, кто ищет решение аналогичной проблемы.

Спасибо.

0 голосов
/ 27 августа 2018

Вот код, который я использую:

$order = new Order($params['id_order']);
$tracking = 'NUMBER TRACKING';
$id_order_state = 'NUMBER OF STATUS';

if (!empty($tracking) && !is_array($tracking)) {
    $id_order_carrier = Db::getInstance()->getValue('
        SELECT `id_order_carrier`
        FROM `' . _DB_PREFIX_ . 'order_carrier`
        WHERE `id_order` = ' . (int) $order->id);
    if ($id_order_carrier) {
        $order_carrier = new OrderCarrier($id_order_carrier);
        $order_carrier->tracking_number = $tracking;
        $order_carrier->update();
    } else {
        $order->shipping_number = $tracking;
    }

}

if ($id_order_state && ($order->current_state != (int) $id_order_state)) {
        $new_oh = new OrderHistory();
        $new_oh->id_order = $order->id;
        $new_oh->id_order_state = (int) $id_order_state;
        $new_oh->date_add = date('Y-m-d H:i:s');
        $new_oh->add();
        $new_os = new OrderState((int) $id_order_state, $order->id_lang);
        Module::hookExec('actionOrderStatusUpdate', array('newOrderStatus' => $new_os, 'id_order' => (int) $order->id), null, false, true, false, $order->id_shop);
}

С уважением

...