Без рубрики

Ошибка в формировании номеров заказа и присвоение номера на стороне Мс

После последних обновлений на стороне сервиса Мой Склад номера заказов переданные с сайта через плагин стали сбивать нумерацию заказов в Мой Склад тех заказов что формируются через интерфейс Мой Склад.

Так как Мой Склад стал прибавлять 1 к заказам созданым в системе мой склад, это стало вызывать ошибку что номер заказа такой уже существует.

Ошибка сохранения объекта: нарушено ограничение
уникальности параметра ‘name

Пока есть два решения это добавлять постпрефикс, но тогда появляется следующая ошибка Мой склад начинает добавлять к заказам созданым в интерфейсе сервиса цифры.

Например вы передали с сайта заказ с номером 5

Если был добавлен префикс то номер будет выглядеть так WC5

После вы создаете заказ в системе мой склад через их интерфейс этому заказу присвоится  автоматически номер WC6.

Следом с сайта вы пробуете передать заказ и у него номер 6 с префиксом WC6, такой заказ уже не пройдет вызовет ошибку которая описана выше.

Мы добавляем постпрефикс наример M, заказ получается такой WC6M, Этот заказ уже пройдет в систему.

После вы снова создаете заказ в системе мой склад через их интерфейс этому заказу присвоится  автоматически номер WC6M-1.

Что тоже не всегда хорошо такие номера придется в ручную исправлять, это может повлечь за собой ошибки.

 

Есть второй вариант это оставить формирование номеров заказа на стороне Мой Слад, они теперь это могут.

Единственный минус что номера на сайте и в мс не будут совпадать, но информация о номере заказа передается в комментарии к заказу.

На сайте же присвоенный номер пишиться в сообщениях о заказе, а также в мета поле.

Позже добавлю код для вывода номера в отдельном метабоксе с возможностью перехода в сервис .

Пока данный подход реализован в в виде сниппета.

Данный сниппет нужно добавить в functions.php вашей темы.

 

//отключаем передачу номера заказа, чтобы мс присваивал свой номер
add_filter( 'wms_order_action', function( $aMsOrder ){
    unset($aMsOrder['name']);
    return $aMsOrder;
}
, 1000);


//Передаем номер заказа на сайте в комментарии.
add_filter('wms_order_comment_action', function( $sComment, $oOrder ){
    
     return "Номер заказа на сайте: " . $oOrder->get_order_number() . PHP_EOL . $sComment;
    
}, 1000, 2); 

//передача и сохранение информации о номере заказа на сайт
add_action( 'wms_customerorder_create', function( $iOrderId, $aMsOrder, $oWCOrder ){
    
    update_post_meta($iOrderId, 'ms_order_number', $aMsOrder['name']);

    $oWCOrder->add_order_note('Заказу в  Мой Склад присвоен номер ' . $aMsOrder['name']);
        
}, 1000, 3 );