Смена статуса заказа

Добрый день.

Пишу плагин.

Подскажите пожалуйста, как средствами Webasyst сменить статус заказу?

Не нашел функции.

Я могу, конечно, прямо в БД поменять, но тогда надо еще записывать данные в таблицу истории заказа ну и еще много чего прописывать.

Было бы хорошо использовать готовую функцию, чтобы все моменты прописывались + была возможность отправлять письма о смене статуса.

3 ответа

  • 2

    Статус — это состояние. Он меняется в результате действия.

    У каждого статуса-состояния есть определенный набор действий, которые можно произвести. Например если заказ в состоянии "Отменен" его можно только "восстановить" (в результате статус изменится на тот, который был до отмены). Список статусов и возможных действий сами знаете, где настраивается.

    Поэтому стратегия такая:

    1. Узнать текущий статус заказа
    2. Узнать возможно-ли в этом статусе нужное действие
    3. Если возможно, произвести.

    Вот так, я например, удаляю заказы из плагина.

  • 1

    Спасибо.

    будем юзать :)

  • 1

    Мой вариант на основе предложенного, за что спасибо!!!

    работает переключая все статусы согласно параметрам шопскрипта.

    Для ленивых =)

    public function execute() {
    wa('shop', true);
    $app_id = wa()->getApp();
    $this->workflow = new shopWorkflow();
    $data = waRequest::post();
    $order_model = new shopOrderModel();
    $order = $order_model->getOrder($data['id']);
    $states = $data['states'];
    $actions = $this->workflow->getStateById($order['state_id'])->getActions(NULL, TRUE);
    if (!isset($actions[$states])) {
    $status = $this->workflow->getStateById($order['state_id'])->getName();
    throw new waException("Failed to '$states' order {$order['id']}. Action '$states' is not available for order status '$status'");
    }
    $done_action = $this->workflow->getActionById($states);
    if (!$done_action) {
    throw new waException("Failed to $states order {$order['id']}. getActionById('$states') fail.");
    }
    $this->response = $done_action->run($order['id']);
    }

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите