Ошибка при смене статуса заказа
Появляется ошибка ms2_err_status_fixed «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.»
При повторном клике — Невозможно оформить пустой заказ.
Но статус заказа меняется.
Плагин на событие msOnCreateOrder — создание заказа
Версия minishop 4.1.5-pl
В файле /core/components/minishop2/model/minishop2/minishop2.class.php
Впечатление, что после смены статуса на Оплачен, заказ получает статус Новый.
Смена события на msOnSaveOrder — сохранение заказа — приводит к такому же результату.
При повторном клике — Невозможно оформить пустой заказ.
Плагин на событие msOnCreateOrder — создание заказа
<?php
switch ($modx->event->name) {
case 'msOnCreateOrder':
if($msOrder->get('payment') == 1) {
$miniShop2 = $modx->getService('miniShop2');
//смена статуса на Оплачен
$status_paid = $modx->getOption('ms2_status_paid', null, 2);
$miniShop2->changeOrderStatus($msOrder->get('id'), $status_paid);
}
break;
}
В файле msmyorderhandler.class.php обработчике смена статуса заказа тоже висит на событии msOnCreateOrder.Версия minishop 4.1.5-pl
В файле /core/components/minishop2/model/minishop2/minishop2.class.php
if ($old_status->get('fixed')) {
if ($status->get('rank') <= $old_status->get('rank')) {
$error = 'ms2_err_status_fixed';
return $this->modx->lexicon($error);
}
}
Если снимаю статус фиксирующего заказа у Оплачен, то приходит просто Новый.Впечатление, что после смены статуса на Оплачен, заказ получает статус Новый.
Смена события на msOnSaveOrder — сохранение заказа — приводит к такому же результату.
Комментарии: 7
В какой момент появляется ошибка?
Обе ошибки — при нажатии на Submit. Сначала «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.», затем Невозможно оформить пустой заказ.
'msOnCreateOrder' это событие срабатывает, когда заказ сохранён в базе, потом вы ему ставите статус Оплачен, а потом обработчик заказа пытается установить ему статус Новый, а по умолчанию этого сделать нельзя, вот вы и получаете ошибку. Рекомендую рассказать, какую задачу вы пытаетесь решить путём создание своего класса-обработчика и плагина.
Заказы с нулевой ценой (бесплатные) должны получать статус Оплачено.
Еще по идее есть задача не подключать к таким заказам платежную систему.
Это пока решено в виде способа оплаты «Без оплаты». Может, есть более изящный вариант?
Еще по идее есть задача не подключать к таким заказам платежную систему.
Это пока решено в виде способа оплаты «Без оплаты». Может, есть более изящный вариант?
Для смены статуса используйте событие msOnChangeOrderStatus.
А для заказов с нулевой ценой лучше написать плагин на событие msOnCreateOrder, в котором вы будете проверять стоимость заказа и, если она равна 0, то устанавливать способ оплаты «Без оплаты», чтобы избавить пользователя от этой задачи.
А для заказов с нулевой ценой лучше написать плагин на событие msOnCreateOrder, в котором вы будете проверять стоимость заказа и, если она равна 0, то устанавливать способ оплаты «Без оплаты», чтобы избавить пользователя от этой задачи.
Спасибо. А в плагине можно поставить способ оплаты «Без оплаты»? Или это через js callback делать надо?
А вы внимательно предыдущее сообщение перечитайте.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.