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

silenty

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

Быстрый способ, "заплатка":

В файле /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, чтобы изменения вступили в силу.
 
Спасибо ОГРОМНОЕ! "Правильный" способ помог! Все заработало как часики

В 1.7 престе это поменяли. Можете подсказать, на какой файл глядеть или как исправить?
 
Последнее редактирование модератором:
Назад
Сверху