Автор Тема: Изменить стоимость доставки в заказе  (Прочитано 2462 раз)

13 Декабря 2012, 22:32:22
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не нашел возможности изменить тип и стоимость доставки в уже сформированном покупателем заказе.
Может модуль какой есть для этого, или еще что-то?
Версия престы: 1.5.2
14 Декабря 2012, 14:08:17
Ответ #1
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102470
  • Репутация: +34217/-0
    • Просмотр профиля
На странице заказа можно изменить методы оплаты и доставки.
Панель администратора > Заказы
Выбираете нужный заказ и меняете данные.

Стоимость доставки можно изменить:
Панель администратора > Доставка
16 Декабря 2012, 18:37:22
Ответ #2
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
На странице заказа можно изменить методы оплаты и доставки.
Панель администратора > Заказы
Выбираете нужный заказ и меняете данные.

Стоимость доставки можно изменить:
Панель администратора > Доставка

Вы сами пробовали менять стоимость доставки в уже сформированном заказе? В редактировании заказа такой возможности нет.
17 Декабря 2012, 12:52:42
Ответ #3
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22166
  • Репутация: +17111/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Цитировать
Вы сами пробовали менять стоимость доставки в уже сформированном заказе? В редактировании заказа такой возможности нет.
Редактировать заказ можно в зависимости от статуса.
Только Завершенный заказ менять нельзя, делать только возврат (если нужно его сохранить).
Можете сделать так
Цитировать
Стоимость доставки можно изменить:
Панель администратора > Доставка
Создаете нового перевозчика или новый диапазон веса. Назначаете новую цену.
Цитировать
На странице заказа можно изменить методы оплаты и доставки.
Панель администратора > Заказы
Выбираете нужный заказ и меняете данные.
Создаете новый или дублируете заказ, указав новый метод доставки.
Отправляте сообщение клиенту.

Можно установить модуль Changecarrier.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
17 Декабря 2012, 14:20:32
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 20853
  • Репутация: +25278/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
Только Завершенный заказ менять нельзя, делать только возврат (если нужно его сохранить).
Аннулировать заказ и создать новый.

Установить модуль SuperUser,  тогда можно от имени самого клиента изменить заказ.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
11 Марта 2014, 08:25:34
Ответ #5
  • Новичок
  • *
  • Сообщений: 27
  • Репутация: +0/-0
  • Fish-Point.ru
    • Просмотр профиля
Подниму тему, т.к. актуально.

Prestashop 1.5.6
Шаблон admin\themes\default\template\controllers\orders\_shipping.tpl

Ищем код
{if $order->getTaxCalculationMethod() == $smarty.const.PS_TAX_INC}
{displayPrice price=$line.shipping_cost_tax_incl currency=$currency->id}
{else}
{displayPrice price=$line.shipping_cost_tax_excl currency=$currency->id}
{/if}


Меняем на код

{if $order->getTaxCalculationMethod() == $smarty.const.PS_TAX_INC}
{$price1=$line.shipping_cost_tax_incl}
{else}
{$price1=$line.shipping_cost_tax_excl}
{/if}

{displayPrice price=$price1 currency=$currency->id}
             <form style="display: inline;" method="post" action="{$link->getAdminLink('AdminOrders')|escape:'htmlall':'UTF-8'}&vieworder&id_order={$order->id|escape:'htmlall':'UTF-8'}">
<span class="shipping_number_edit" style="display:none;">
<input type="hidden" name="id_order_carrier" value="{$line.id_order_carrier|htmlentities}" />
<input type="text" name="shipping_cost" value="{$price1}" />
<input type="submit" class="button" name="submitShippingCost" value="{l s='Update'}" />
</span>
<a href="#" class="edit_shipping_number_link"><img src="../img/admin/edit.gif" alt="{l s='Edit'}" /></a>
<a href="#" class="cancel_shipping_number_link" style="display: none;"><img src="../img/admin/disabled.gif" alt="{l s='Cancel'}" /></a>
</form>

По аналогии с полем для записи трек-номера. Ну и дальше в файле \controllers\admin\AdminOrdersController.php пишем обработчик измененных данных.

08 Апреля 2014, 15:08:51
Ответ #6
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
файл: \adm\themes\default\template\controllers\orders\helpers\view\view.tpl
//после
<!-- Shipping block -->
{if !$order->isVirtual()}
<fieldset>
line 423:
<legend><img src="../img/admin/delivery.gif" /> {l s='Shipping'}<a href="#" id="edit_shipping"><img src="../img/admin/edit.gif" alt="{l s='Add'}" /></a></legend>
файл: \adm\themes\default\template\controllers\orders\_shipping.tpl
// вставляем после
<tbody>
{foreach from=$order->getShipping() item=line}
Line 45:
<tr id="shipping_info"> // вставляем после
</tr>
{/foreach}
Line 73-101:
<form style="display: inline;" method="post" action="{$link->getAdminLink('AdminOrders')|escape:'htmlall':'UTF-8'}&vieworder&id_order={$order->id|escape:'htmlall':'UTF-8'}">
<tr id="edit_shipping_info" style="display: none">
<td>{date("Y-m-d H:i:m")}</td>
<td>{$line.type}</td>
<td>
<select size="1" name="shipping_method_id">
{foreach $carriers as $key=>$carrier}
<option value="{$carriers[$key]["id_carrier"]}">{$carriers[$key]["name"]}</option>
{/foreach}
</select>
</td>
<td class="weight">{$line.weight|string_format:"%.3f"} {Configuration::get('PS_WEIGHT_UNIT')}</td>
<td>
{if $order->getTaxCalculationMethod() == $smarty.const.PS_TAX_INC}
<input type="text" name="shipping_price" value="{number_format($line.shipping_cost_tax_excl, 2, '.', '')}">
{else}
<input type="text" name="shipping_price" value="{number_format($line.shipping_cost_tax_excl, 2, '.', '')}">
{/if}
</td>
<td><span id="shipping_number_show">{if $line.tracking_number}{$line.tracking_number}{/if}</span></td>
</tr>
<tr id="edit_shipping_form" style=" display: none">
<td colspan="6">
<input type="hidden" name="id_order_carrier" value="{$line.id_order_carrier|htmlentities}" />
<input type="submit" class="button" style="float: right;" name="submitShipping" value="{l s='Update'}" />
<a href="#" id="cancel_edit_shipping" style="float: right;"><img src="../img/admin/disabled.gif" alt="{l s='Cancel'}" /></a>
</td>
</tr>
</form>

файл: \override\controllers\admin\AdminOrdersController.php либо \controllers\admin\AdminOrdersController.php //in public function postProcess()
      if (Tools::isSubmit('submitShipping') && Tools::getValue('id_order'))
{
if ($this->tabAccess['edit'] === '1')
{
if (Tools::getValue('shipping_method_id') && Tools::getValue('shipping_price'))
{
$order_carrier = new OrderCarrier(Tools::getValue('id_order_carrier'));
if (!Validate::isLoadedObject($order_carrier))
$this->errors[] = Tools::displayError('The order carrier ID is invalid.');
else
{
$order_carrier->id_carrier = Tools::getValue('shipping_method_id');
if (Tools::getValue('shipping_price'))
{
if (Tools::getValue('shipping_price') == "0") $shipping_price = "0.0"; else $shipping_price = Tools::getValue('shipping_price');
$order_carrier->shipping_cost_tax_incl = $shipping_price;
$order_carrier->shipping_cost_tax_excl = $shipping_price;
$order = new Order(Tools::getValue('id_order'));
$order->id_carrier = Tools::getValue('shipping_method_id');
$order->total_shipping = $shipping_price;
$order->total_shipping_tax_incl = $shipping_price;
$order->total_shipping_tax_excl = $shipping_price;
}
if (!$order_carrier->update())
$this->errors[] = Tools::displayError('The order carrier cannot be updated.');
if (!$order->update())
$this->errors[] = Tools::displayError('The order carrier cannot be updated.');
}
} else {
if (!Tools::getValue('shipping_method_id'))
$this->errors[] = Tools::displayError('The shipping method id is invalid.');
if (!Tools::getValue('id_order'))
$this->errors[] = Tools::displayError('The order ID is invalid.');
}
}
}

файл: \controllers\admin\AdminOrdersController.php // in public function renderView()
   $carriers = Carrier::getCarriers($cookie->id_lang, true);    // Smarty assign добавляем смарти переменную
   $this->tpl_view_vars = array(
'carriers' => Carrier::getCarriers($cookie->id_lang, true),
файл: \js\admin_order.js
// вставляем перед
$('#add_voucher').unbind('click');
$('#add_voucher').click(function() {
$(this).parent().parent().hide();
$('#voucher_form').parent().show();

return false;
});

$('#edit_shipping').unbind('click');
$('#edit_shipping').click(function() {
$('#shipping_info').hide();
$('#edit_shipping_info').show();
$('#edit_shipping_form').show();
return false;
});
$('#cancel_edit_shipping').unbind('click');
$('#cancel_edit_shipping').click(function() {
$('#edit_shipping_info').hide();
$('#edit_shipping_form').hide();
$('#shipping_info').show();
return false;
});
12 Апреля 2014, 02:09:14
Ответ #7
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля

Проделал по Вашей инструкции, изменить курьера и стоимость доставки теперь могу, но вот не меняется общая сумма и нет изменений в PDF файле...  Помогите, пожалуйста решить оставшуюся часть проблемы.
14 Января 2015, 16:37:52
Ответ #8
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нужно дополнительно к представленному коду определить, какие ещё таблицы и поля в них нужно поправить.
PDF-файл берёт данные из таблицы order_invoice, следовательно дополнительно нужно дописать:
$order_invoice = new OrderInvoice($order_carrier->id_order_invoice);
        if (Validate::isLoadedObject($order_invoice))
        {
          // Update amounts of Order Invoice
          $order_invoice->total_shipping_tax_excl = $order->total_shipping_tax_excl;
          $order_invoice->total_shipping_tax_incl = $order->total_shipping_tax_incl;
          $order_invoice->total_paid_tax_incl = $order->total_paid_tax_incl;
          $order_invoice->total_paid_tax_excl = $order->total_paid_tax_excl;
       
           // Update Order Invoice
           $order_invoice->update();
         }
         else
$this->errors[] = Tools::displayError('The order invoice ID is invalid.');

Кстати, в коде советую изменить вот это:
$carriers = Carrier::getCarriers($cookie->id_lang, true);
'carriers' => Carrier::getCarriers($cookie->id_lang, true),
На вот это:
$carriers = Carrier::getCarriers($this->context->cookie->id_lang, true, false, false, null, 'PS_CARRIERS_OR_CARRIER_MODULES_NEED_RANGE');
'carriers' => $carriers,
Это на тот случай, если кроме созданных доставок есть модульные, например, Почта России. Стандартные параметры функции Carrier::getCarriers не позволят взять модульные доставки.

И теперь вопрос от меня, касаемо изменения поля $order_payment->amount: Я не могу догнать, как его изменить! День бьюсь, результата нет...
Вот что пишу, где ошибка:
$id_order = OrderPayment::getByOrderReference($order->reference);
$order_payment =new OrderPayment($id_order);
   if (Validate::isLoadedObject($order_payment))
   {
     $order_payment->amount = $order->total_paid;
     $order_payment->update();
    }
    else
     $this->errors[] = Tools::displayError('The order payment ID is invalid.');