Обработка события order.delivered (доставка заказа)
Уведомление может быть обработано при состоянии заказа «Собран» или «Передан курьеру». В остальных статусах это уведомление игнорируется. В результате обработки заказ переводится в состояние «Доставлен», в поле «Дата доставки/отмены» записываются текущие дата-время. Если поле «Дата передачи курьеру» пусто, то оно устанавливается равным дате доставки. Если признак оплаты заказа не установлен, то он устанавливается, и в строки заказа прописываются итоговые суммы и цены из payload.positions - аналогично order.paid.
Алгоритм обработки:
- открыть транзакцию,
- найти документ заказа по идентификатору заказа СМ, заблокировать его от изменений
- если документ заказа с таким номером не найден, завершить обработку с кодом 404,
- проверить статус заказа, если он не равен «Собран» или «Передан курьеру» - завершить обработку с кодом 200,
- изменить статус заказа на «Доставлен», установить в шапке заказа дату доставки/отмены,
- если поле дата передачи курьеру не заполнено, то записать в него дату доставки,
- если не установлен признак «Оплачен», то записать в строки заказа итоговые цены и суммы из payload.positions, установить признак «Оплачен»,
- если любой из перечисленных выше шагов внутри транзакции завершился с ошибкой, то выполнить откат транзакции,
- фиксировать транзакцию,
- вернуть СМ код завершения
Нет комментариев