Minishop2. Изменение статуса заказа

Здравствуйте! Прошу помощи. Хочу, чтобы автоматически статус заказа менялся на «Оплачен» (id=2).
Для этого создаю плагин, ставлю системное событие «msOnCreateOrder», далее нашел код (вопрос тут ранее поднимался, но почему-то у меня это не работает):
<?php
switch ($modx->event->name) {
    case 'msOnCreateOrder':
        $order = $modx->getOption('msOrder', $scriptProperties);
        if (!is_object($order)) { return; }
        $modx->log(modX::LOG_LEVEL_ERROR, $msOrder->get('id'));
        
        $miniShop2 = $modx->getService('miniShop2');
        $miniShop2->changeOrderStatus($msOrder->get('id'), 2);
        
        $modx->toJSON(array(
            'success' => true,
            'message' => '',
            'data'    => array(),
        ));
        exit(true);
	break;
}
При этом статус заказа меняется, но пользователь остается в корзине с заказами. Как и описывалось в ответе, в котором нашел этот кусок кода, если убрать exit; то происходит переход на страницу успешного заказа, но статус не меняется. В чем может быть проблема.

Там же приводился кусок кода такой (но он вообще не работает):
<?php
switch ($modx->event->name) {
    case 'msOnCreateOrder':
        
	    if($newStatus == true)
	    {
            $msOrder->set("status","2");
            $msOrder->save();
        }
	break;
}
В чем может быть проблема, подскажите пожалуйста?
Роман
16 декабря 2018, 19:28
modx.pro
2 275
0

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

Роман
16 декабря 2018, 19:50
0
По возможности хотелось бы также узнать, как изменить дату заказа. Задача такая, что если после определенного времени оформляется заказ, то переносить его на +2 дня вперед.
Сейчас пишу так, но не меняется:
// Date
        $hour = date("H");
        $createdon = date('Y-m-d H:i:s');
        $day = 60*60*24*2;
        
        if( $hour > 15 )
            $createdon = date('Y-m-d H:i:s', time()+$day);
        
        $msOrder->set("createdon", $createdon);
    Роман
    16 декабря 2018, 20:16
    0
    Вроде вопрос решился. Поставил все на событие «msOnSaveOrder» и все заработало.
    Вопрос по изменению даты еще открыт. Прошу помощи.
    Роман
    16 декабря 2018, 23:42
    0
    Попробовал прямое обращение к базе данных, почему-то не меняет дату заказа, в чем может быть ошибка?
    $hour = date("H");
    $createdon = date('Y-m-d H:i:s');
    $day = 60*60*24*2;
    
    if( $hour > 15 ) {
        $createdon = date('Y-m-d H:i:s', time()+$day);
        
        $sql = "UPDATE modx_ms2_orders SET createdon=$createdon WHERE id=$order_id";
        $result = $modx->query($sql);
    }
      Роман
      17 декабря 2018, 18:19
      0
      Так и не смог решить вопрос, может кто-то подсказать? Буду очень благодарен.
        Роман
        13 мая 2019, 13:02
        0
        Получилось сделать так:
        switch ($modx->event->name) {
            case 'msOnBeforeSaveOrder':
               
                $msOrder->set('status',2);
                $hour = date("H");
        
                $after_2day = date("d-m-Y", (time()+3600*24*1));
                
                if( $hour > 14 )
                    $after_2day=date("d-m-Y", (time()+3600*24*2));
        
                $msOrder->set('createdon',$after_2day);
        	break;
        }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          5