Как и во многих интернет-магазинах в системе битрикс заказы могут принимать определённые статусы. Статус заказа в магазине определяет этап, на котором находится процесс обработки заказа. Таким образом, позволяет информировать клиентов о текущем состоянии выполнения заказа, а также могут выполняться другие операции. Для сотрудников интернет-магазина это так же служит информированием о том, на каком этапе заказ находится, облегчая им процесс обработки.
Настраиваются статусы заказов в администраторской части сайта, в разделе «Статусы»:
Магазин > Настройки магазина > Статусы
Логика обработки заказов может отличаться для разных интернет-магазинов. В некоторых случаях может возникнуть необходимость смены статусов через код. Например, после оформления заказа, следует переводить его в другой статус. Для этого существует метод StatusOrder, через который можно выставить у указанного заказа нужный статус.
if (CSaleOrder::StatusOrder($ORDER_ID, "F")){ echo "Статус заказа изменён успешно!"; } else { echo "Не удалось изменить статус заказа!"; }
В качестве параметров методу передаются два значения. Первый аргумент $ORDER_ID – ID заказа, второй – символьный код статуса.
Перед тем как статус изменяется происходит вызов обработчика OnSaleBeforeOrder модуля интернет магазина, в котором так же можно выполнять различные манипуляции с данными. После смены статуса вызывается обработчик OnSaleStatusOrder модуля интернет-магазина. При смене статуса заказа так же генерируется почтовое событие, которое представляется в виде SALE_STATUS_CHANGED_<код статуса>, и отправляется письмо, если существует почтовый шаблон. В ином случае, срабатывает почтовое событие общее для всех статусов SALE_STATUS_CHANGED. Используя эти почтовые события можно отправлять письма с уведомлениями клиенту, а также операторам интернет-магазина.
Стоит отметить что метод StatusOrder стал доступен в битриксе начиная с версии 3.3.0 однако начиная с версии 15.0.0 класс CSaleOrder в котором находится метод обозначен разработчиками как устаревший. Альтернативный класс, который может быть использован в свежих версиях битрикс с ядром D7 — \Bitrix\Sale\Order.
Новая версия ядра магазина Bitrix D7 основательно стала использоваться с версии 16.x. Таким образом версия 15.5 стала переходной версией, в которой так же могут работать новые классы для работы с интернет-магазином, которые были собраны в модуле sale. Для работы с методами класса воспользуемся пространством имен модуля интернет-магазина:
use Bitrix\Sale;
В этой концепции заказ представляет из себя объект класса Bitrix\Sale\Order. Особенность использования класса в том, что для сохранения изменений необходимо вызывать метод save(). После этого все изменения в заказе будут сохранены в базе данных.
Простой пример смены статуса заказа:
// получаем объект существующего заказа $order = Sale\Order::load($ORDER_ID); // задаем значение для поля STATUS_ID - N (статус: принят) $order->setField('STATUS_ID', 'N'); // сохраняем изменения $order->save();
После создания экземпляра класса, используя метод setFields() можно менять значения различных полей заказа. В данном примере мы задает значение поля STATUS_ID. После чего вызываем метод save() который и сохраняет наши изменения в базе данных. Метод setFields() универсальный, через него можно менять такие параметры как вес (ORDER_WEIGHT), сумму заказа (PRICE), а так же другие поля которые вы можете посмотреть вызвав метод: $order->getAvailableFields(). Таким образом можно манипулировать множеством данных заказа через один экземпляр класса. Существуют и множество других интересных методов класса для работы с заказом, но о них поговорим чуть позже.
На этом пока всё, всем всего доброго!