Ошибка при смене статуса заказа

Появляется ошибка ms2_err_status_fixed «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.»
При повторном клике — Невозможно оформить пустой заказ.

Но статус заказа меняется.
Плагин на событие 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 — сохранение заказа — приводит к такому же результату.
Валентина Павлова
12 апреля 2023, 19:29
modx.pro
382
0

Комментарии: 7

Артур Шевченко
12 апреля 2023, 20:50
0
В какой момент появляется ошибка?
    Валентина Павлова
    12 апреля 2023, 21:01
    0
    Обе ошибки — при нажатии на Submit. Сначала «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.», затем Невозможно оформить пустой заказ.
      Артур Шевченко
      12 апреля 2023, 21:26
      0
      'msOnCreateOrder' это событие срабатывает, когда заказ сохранён в базе, потом вы ему ставите статус Оплачен, а потом обработчик заказа пытается установить ему статус Новый, а по умолчанию этого сделать нельзя, вот вы и получаете ошибку. Рекомендую рассказать, какую задачу вы пытаетесь решить путём создание своего класса-обработчика и плагина.
        Валентина Павлова
        12 апреля 2023, 21:48
        0
        Заказы с нулевой ценой (бесплатные) должны получать статус Оплачено.
        Еще по идее есть задача не подключать к таким заказам платежную систему.
        Это пока решено в виде способа оплаты «Без оплаты». Может, есть более изящный вариант?
          Артур Шевченко
          12 апреля 2023, 23:29
          0
          Для смены статуса используйте событие msOnChangeOrderStatus.
          А для заказов с нулевой ценой лучше написать плагин на событие msOnCreateOrder, в котором вы будете проверять стоимость заказа и, если она равна 0, то устанавливать способ оплаты «Без оплаты», чтобы избавить пользователя от этой задачи.
            Валентина Павлова
            13 апреля 2023, 12:20
            0
            Спасибо. А в плагине можно поставить способ оплаты «Без оплаты»? Или это через js callback делать надо?
              Артур Шевченко
              13 апреля 2023, 15:16
              0
              А вы внимательно предыдущее сообщение перечитайте.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7