Изменение статуса заказа на сайте, на основе реквизитов заказа из 1С

Нередко, возникает задача автоматизации смены статуса заказа на сайте, по данным из 1С, например, когда раннее выгруженный заказ с сайта, был помечен в 1С на удаление или проведен или является теперь оплаченным/отгруженным.
В плагине есть настройки для смены статуса заказа на сайте на основе данных в реквизитах заказа, который 1С ранее получила с сайта, а теперь выгружает заказ обратно на сайт, по причине того, что он был изменен. Конечно же это не будет работать, если выгрузка заказов с сайта в 1С не производится.
Пример данных по реквизитам в содержимом заказа, поступившего из 1С на сайт
Свое поведение смены статуса
Вполне возможно, что вам потребуется какой-то другой вариант смены статуса и по другим данным. В данном случае, можно не выбирать ничего в селектах, только включить обработку изменений статуса и использовать фильтр `itglx_wc1c_handle_order_result_status` (может передать в callback до четырех параметров — текущее значение, массив реквизитов документа, SimpleXml объект узла документа, а также объект заказа на сайте) для реализации своего поведения по статусу.
Предположим, что у документа есть какой-то реквизит «Статус для сайта», который содержит необходимое значение статуса, также предположим, что он содержит уже конкретный код статуса, то есть processing
, pending
и т.д.
В итоге получится следующее (устанавливать статус не нужно, из фильтра ожидается лишь необходимое значение кода статуса, который нужно установить):
// в данном случае, мы ограничимся только двумя аргументами, так как этого достаточно
\add_filter('itglx_wc1c_handle_order_result_status', function ($currentStatus, $requisitesArray) {
// возможно такого реквизита нет или он пуст, если так, то просто вернем текущее значение
if (empty($requisitesArray['Статус для сайта'])) {
return $currentStatus;
}
// вернем обратно в логику значение реквизита, чтобы оно было применено, как статус заказа на сайте
return $requisitesArray['Статус для сайта'];
}, 10, 2);