Помощь Изменить "платеж принят" при бесплатном заказе

Тема в разделе "PrestaShop", создана пользователем silenty, 6 мар 2018.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. silenty

    silenty

    Регистр.:
    19 дек 2008
    Сообщения:
    264
    Симпатии:
    292
    Есть несколько виртуальных товаров, у которых цена 0.
    Есть модуль отправки СМС сообщений (PrestaSMS).
    Настроено следующим образом: при смене статуса заказ на "платеж принят" автоматом отправляется СМС клиенту о получении платежа. Но есть обратная сторона. При оформлении заказа с виртуальным товаром преста автоматом выставляет статус "платеж принят", что приводит к дополнительным (нежелательным) расходам. В настройке модуля СМС нельзя указать никаких условий, типа товар не виртуальный или сумма больше 0.
    Подскажите, как можно изменить настройку по-умолчанию у престы, чтобы при оформлении заказа на виртуальный товар она ставила другой статус?
     
  2. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    236
    Симпатии:
    324
    Какая версия престы и какой статус хотите ставить такому заказу?
     
  3. silenty

    silenty

    Регистр.:
    19 дек 2008
    Сообщения:
    264
    Симпатии:
    292
    Думал, что написал... Версия престы 1.6.1.16.
    Статус любой, к примеру "Заказ обработан" или свой
     
  4. Zveruga76

    Zveruga76

    Регистр.:
    20 июл 2013
    Сообщения:
    236
    Симпатии:
    324
    Быстрый способ, "заплатка":

    В файле /controllers/front/ParentOrderController.php в 174-ой строке

    $order->validateOrder($this->context->cart->id, Configuration::get('PS_OS_PAYMENT'), 0, Tools::displayError('Free order', false), null, array(), null, false, $this->context->cart->secure_key);

    замените Configuration::get('PS_OS_PAYMENT') на номер своего статуса, если он нестандартный или замените PS_OS_PAYMENT на один из официальных статусов заказа (PS_OS_DELIVERED, PS_OS_PREPARATION и т.п.). Но если в этих обозначениях надо разбираться, то номер статуса вы всегда можете посмотреть в админке. После возможного обновления на более новую версию эти изменения надо снова повторить.

    Правильный, официальный способ:

    В /override/controllers/front/ записать файл ParentOrderController.php содержащий в себе код:

    <?php
    class ParentOrderController extends ParentOrderControllerCore
    {
    protected function _checkFreeOrder()
    {
    if ($this->context->cart->getOrderTotal() <= 0) {
    $order = new FreeOrder();
    $order->free_order_class = true;
    $order->validateOrder($this->context->cart->id, [ЗДЕСЬ НОМЕР СТАТУСА ЗАКАЗА], 0, Tools::displayError('Free order', false), null, array(), null, false, $this->context->cart->secure_key);
    return (int)Order::getOrderByCartId($this->context->cart->id);
    }
    return false;
    }
    }

    Если такой файл там уже будет, то внутрь него аккуратно вставить только саму функцию _checkFreeOrder()
    Затем удалить файл /cache/class_index.php, чтобы изменения вступили в силу.
     
    silenty, Kolfg и _sashok нравится это.
  5. silenty

    silenty

    Регистр.:
    19 дек 2008
    Сообщения:
    264
    Симпатии:
    292
    Спасибо ОГРОМНОЕ! "Правильный" способ помог! Все заработало как часики

    В 1.7 престе это поменяли. Можете подсказать, на какой файл глядеть или как исправить?
     
    Последнее редактирование модератором: 16 июл 2018
    Kolfg и _sashok нравится это.