Skip to main content

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

8 июня, 2020 18:53
Просмотров 401
Section background

Нередко, возникает задача автоматизации смены статуса заказа на сайте, по данным из 1С, например, когда раннее выгруженный заказ с сайта, был помечен в 1С на удаление или проведен или является теперь оплаченным/отгруженным.

В плагине есть настройки для смены статуса заказа на сайте на основе данных в реквизитах заказа, который 1С ранее получила с сайта, а теперь выгружает заказ обратно на сайт, по причине того, что он был изменен. Конечно же это не будет работать, если выгрузка заказов с сайта в 1С не производится.

Состояние реквизитов проверяется последовательно, сверху — вниз, то есть итоговый статус будет по последнему выполненному условию. На примере, предположим, что из 1С поступил заказ, у которого задан реквизит «Дата оплаты по 1С», а также «ПометкаУдаления» в значении «true», итоговый статус получится «Отменен».
 

Пример данных по реквизитам в содержимом заказа, поступившего из 1С на сайт

 
 
 
Если, например, вам не требуется смена статуса при реквизите «Проведен» в значении «true», вы можете оставить выбор статуса для него в состоянии «Не выбрано», чтобы не производить никаких действий.

Свое поведение смены статуса

Вполне возможно, что вам потребуется какой-то другой вариант смены статуса и по другим данным. В данном случае, можно не выбирать ничего в селектах, только включить обработку изменений статуса и использовать фильтр `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);

 

Поделиться: