Автор Тема: необходимо изменить стоимость доставки в зависимости от способа оплаты  (Прочитано 1206 раз)

25 Январь 2017, 08:51:56
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите, необходимо изменить стоимость доставки в зависимости от способа оплаты.
Например при оплате банковской картой необходимо доставку сделать равной нулю.

На последнем этапе:
validateOrder($ordernumber, Configuration::get('PS_OS_PAYMENT'), $amount, displayName, $obj->OrderStatus);
я могу уменьшить только общую стоимость

в этом случае:
В корзине стоимость доставки отображается верно - о руб., оплата снимается правильно.
А в личном кабинете клиента и в подтверждении, которое приходит на e-mail клиенту указывается, что доставка платная.

Подскажите, где и в какой момент я могу в зависимости от способа оплаты сделать стоимость доставки равной нулю.
25 Январь 2017, 12:41:30
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86694
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Есть готовый модуль pay2carrier. На форме была ссылка на этот модуль.
25 Январь 2017, 15:17:06
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
25 Январь 2017, 17:35:32
Ответ #3
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Можно в платежном модуле менять сумму оплаты.
Для банка в  в контроллере /modules/bankwire/controllers/front/validation.php
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
25 Январь 2017, 17:48:29
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Можно в платежном модуле менять сумму оплаты.
Для банка в  в контроллере /modules/bankwire/controllers/front/validation.php

Спасибо за ответ,
Не вижу где это происходит?

public function postProcess()
{
$cart = $this->context->cart;
if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active)
Tools::redirect('index.php?controller=order&step=1');

// Check that this payment option is still available in case the customer changed his address just before the end of the checkout process
$authorized = false;
foreach (Module::getPaymentModules() as $module)
if ($module['name'] == 'bankwire')
{
$authorized = true;
break;
}
if (!$authorized)
die($this->module->l('This payment method is not available.', 'validation'));

$customer = new Customer($cart->id_customer);
if (!Validate::isLoadedObject($customer))
Tools::redirect('index.php?controller=order&step=1');

$currency = $this->context->currency;
$total = (float)$cart->getOrderTotal(true, Cart::BOTH);
$mailVars = array(
'{bankwire_owner}' => Configuration::get('BANK_WIRE_OWNER'),
'{bankwire_details}' => nl2br(Configuration::get('BANK_WIRE_DETAILS')),
'{bankwire_address}' => nl2br(Configuration::get('BANK_WIRE_ADDRESS'))
);

$this->module->validateOrder($cart->id, Configuration::get('PS_OS_BANKWIRE'), $total, $this->module->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key);
Tools::redirect('index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$this->module->id.'&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key);
}
25 Январь 2017, 18:03:23
Ответ #5
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Простой вариант, изменить перевозчика (стоимость), так как по умолчанию изменить стоимость перевозки нельзя
$cart = $this->context->cart;После этого изменить id_carrier объекта Cart.


Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
25 Январь 2017, 18:19:09
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
/* стоимость доставки */
$total_shipping = $cart>getTotalShippingCost();
/* сумма товаров */
$total_products = $cart->getOrderTotal(false, Cart::ONLY_PRODUCTS);
Меняте сумму заказа total
$total = (float)$cart->getOrderTotal(true, Cart::BOTH);
26 Январь 2017, 08:59:16
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 527
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
/* стоимость доставки */
$total_shipping = $cart>getTotalShippingCost();
/* сумма товаров */
$total_products = $cart->getOrderTotal(false, Cart::ONLY_PRODUCTS);
Меняте сумму заказа total
$total = (float)$cart->getOrderTotal(true, Cart::BOTH);

Я как то так и сделал перед validateOrder:

$PurchaseAmt = $this->context->cart->getOrderTotal(true, 3);
$PurchaseAmt = $PurchaseAmt - $this->context->cart->getOrderTotal(true, Cart::ONLY_SHIPPING);

В этом случае возникает следующая проблема:

В корзине стоимость доставки отображается верно - о руб., оплата снимается правильно.
в личном кабинете клиента и в подтверждении, которое приходит на e-mail клиенту указывается, что доставка платная.
26 Январь 2017, 11:03:10
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Так в лк и в письмах тоже переменные менять нужно. Там такой же принцип, переменные определяются из таб. заказа. Замени на сумму без доставки.