Автор Тема: Изменение типа доставки при редактировании заказов в админке PS 1.6  (Прочитано 189 раз)

15 Май 2020, 11:45:30
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
День добрый,

Стоит задача добавить возможность изменять тип доставки при редактировании заказов в административной части Prestashop.

Например в админке в заказах в разделе Доставка указано Доставка Почтой России, необходимо изменить например на Самовывоз

Подскажите куда копать?


В наличии PS 1.6
15 Май 2020, 15:00:31
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 33245
  • Репутация: +26765/-0
    • Просмотр профиля
Делал такое, /admin/themes/default/template/controllers/orders/_shipping.tpl менял.
В <td class="center"> добавил form с методом изменения заказа.
В контроллер /controllers/admin/AdminOrdersController.php добавил метод для изменения стоимости заказа при смене курьера.
15 Май 2020, 15:55:08
Ответ #2
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Делал такое, /admin/themes/default/template/controllers/orders/_shipping.tpl менял.
В <td class="center"> добавил form с методом изменения заказа.
В контроллер /controllers/admin/AdminOrdersController.php добавил метод для изменения стоимости заказа при смене курьера.

Спасибо за наводку.
Не покажете исходник метода для изменения стоимости заказа при смене курьера?
15 Май 2020, 16:07:59
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 33245
  • Репутация: +26765/-0
    • Просмотр профиля
Исходников давно нет, много времени прошло.
В public function postProcess() проверку на нажатие на кнопку формы изменения курьера добавлеяте if ( $_POST['myvar']) и изменение
$order->update();
$order_carrier->update();
...
15 Май 2020, 17:49:28
Ответ #4
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
21 Май 2020, 12:10:16
Ответ #5
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вот, что получилось.
Правильно я понимаю, что после этого необходимо обновить заказ?
$order->update();
Проблема в том, что не получается обновить весь заказ.

elseif (Tools::isSubmit('submitCarrierNumber') && isset($order)) {
            $carrier_date_update = Tools::getValue('carrier_date_update');
            $id_carrier_update = (int)Tools::getValue('id_carrier_update');
            $id_order_carrier = (int)Tools::getValue('id_order_carrier');
            // Update order_carrier
            if ($id_order_carrier) {
                $order_carrier = new OrderCarrier($id_order_carrier);
                $order_carrier->date_add = $carrier_date_update;
                $order_carrier->id_carrier = $id_carrier_update;
                $order_carrier->shipping_cost_tax_excl = (float)Tools::getShippingCost($id_carrier_update, $id_order_carrier);
                $order_carrier->shipping_cost_tax_incl = (float)Tools::getShippingCost($id_carrier_update, $id_order_carrier);
                $order_carrier->update();
            }
21 Май 2020, 13:02:05
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 33245
  • Репутация: +26765/-0
    • Просмотр профиля
Вот, что получилось.
Правильно я понимаю, что после этого необходимо обновить заказ?
$order->update();
Да, после всех изменений нужно обновить.
21 Май 2020, 13:51:12
Ответ #7
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Получается я должен пересчитать все параметры в order перед обновлением:

$order->delivery_date = $carrier_date_update;
$order->total_shipping = ...
$order->total_shipping_tax_incl = ...
$order->total_shipping_tax_excl = ...
$order->update();

Это я обновлю в заказе только сумму доставки,
после этого мне нужно пересчитать итоговую сумму, т.е. отнять старую доставку и прибавить новую.

$order->total_paid_tax_excl = ...
$order->total_paid_tax_incl = ...
$order->total_paid = ...

Потом изменить в : $cart => [id_carrier]
$cart = new Cart((int)$order->id_cart);

Как это сделать проще?
21 Май 2020, 15:03:18
Ответ #8
  • Пользователь
  • **
  • Сообщений: 86
  • Репутация: +1/-0
  • PrestaGeek
    • Просмотр профиля
skype: PrestaGeek
telegram: @PrestaGeek
21 Май 2020, 16:43:34
Ответ #9
  • Старожил
  • ****
  • Сообщений: 451
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Мой итоговый вариант.
Похоже на правду?

elseif (Tools::isSubmit('submitCarrierNumber') && isset($order)) {
            $carrier_date_update = Tools::getValue('carrier_date_update');
            $id_carrier_update = (int)Tools::getValue('id_carrier_update');
            $id_order_carrier = (int)Tools::getValue('id_order_carrier');

            if ($id_order_carrier) {
                // Update order_carrier
                $shipping_cost = Tools::getShippingCost($id_carrier_update, $id_order_carrier); //вычисляем стоимость доставки
                $shipping_cost = number_format($shipping_cost, 6, '.', '');

                $order_carrier = new OrderCarrier($id_order_carrier);
                $order_carrier->date_add = $carrier_date_update;
                $order_carrier->id_carrier = $id_carrier_update;
                $order_carrier->shipping_cost_tax_excl = $shipping_cost;
                $order_carrier->shipping_cost_tax_incl = $shipping_cost;
                $order_carrier->id_order_invoice = 0;
                $order_carrier->update();

                // Update order
                $order->id_carrier = $id_carrier_update;
                $order->delivery_date = $carrier_date_update;
                $order->total_shipping = $shipping_cost;
                $order->total_shipping_tax_incl = $shipping_cost;
                $order->total_shipping_tax_excl = $shipping_cost;

                $total_paid = $order->total_products - $order->total_discounts + $order->total_shipping;
                $total_paid = number_format($total_paid, 6, '.', '');

                $order->total_paid = $total_paid;
                $order->total_paid_tax_incl = $total_paid;
                $order->total_paid_tax_excl = $total_paid;

                $order->update();
            }
        }
21 Май 2020, 20:44:58
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 33245
  • Репутация: +26765/-0
    • Просмотр профиля
Проверьте, если пересчитывает стоимость заказа при смене курьера, то рабочий вариант.