Обработка события order.delivered (доставка заказа)

Уведомление может быть обработано при состоянии заказа «Собран» или «Передан курьеру». В остальных статусах это уведомление игнорируется. В результате обработки заказ переводится в состояние «Доставлен», в поле «Дата доставки/отмены» записываются текущие дата-время. Если поле «Дата передачи курьеру» пусто, то оно устанавливается равным дате доставки. Если признак оплаты заказа не установлен, то он устанавливается, и в строки заказа прописываются итоговые суммы и цены из payload.positions - аналогично order.paid.

Алгоритм обработки:

  • открыть транзакцию,
  • найти документ заказа по идентификатору заказа СМ, заблокировать его от изменений
  • если документ заказа с таким номером не найден, завершить обработку с кодом 404,
  • проверить статус заказа, если он не равен «Собран» или «Передан курьеру» - завершить обработку с кодом 200,
  • изменить статус заказа на «Доставлен», установить в шапке заказа дату доставки/отмены,
  • если поле дата передачи курьеру не заполнено, то записать в него дату доставки,
  • если не установлен признак «Оплачен», то записать в строки заказа итоговые цены и суммы из payload.positions, установить признак «Оплачен»,
  • если любой из перечисленных выше шагов внутри транзакции завершился с ошибкой, то выполнить откат транзакции,
  • фиксировать транзакцию,
  • вернуть СМ код завершения