Метод assignCollector. Назначить сборщика на заказ

Метод назначает нового сборщика на заказ, уже находящийся в состоянии «В сборке», создаёт телеграмм- уведомление о передаче заказа для старого и нового сборщиков и магазина (применимо и для перевода заказа с магазина на конкретного сборщика, и со сборщика на магазин). Новый сборщик должен иметь открытую смену по магазину. Возвращает обновлённое содержание заказа, включая строки (order.positions).

Алгоритм:

  • открывает транзакцию,
  • находит заказ по идентификатору подразделения и заказа, читает его с блокировкой (for update),
  • проверяет текущий статус заказа, должен быть «В сборке»
  • находит нового сборщика (если это передача другому сборщику, а не магазину),
  • проверяет, что для сборщика активна смена по указанному магазину, и что это не передача заказа самому себе,
  • записывает нового сборщика в заказ,
  • если любой из перечисленных выше шагов завершился с ошибкой, то выполняет откат транзакции
  • фиксирует транзакцию
  • записывает в очередь телеграмм-уведомлений сообщения «Заказ NN передан сборщику ХХ, завершить сборку до HH:MM» для обоих сборщиков и магазина,
  • возвращает обновлённое содержание заказа

Параметры

requestData : {

  storeId : <Идентификатор магазина СМ, обязательный, string>,

  orderId : <Идентификатор заказа СМ, обязательный, string>

  collector : <Сборщик, не обязательный, string>,

}

Возвращаемый ответ

responseData : {

  order : {

      <Заказ в виде объекта типа order, включая строки (order.positions)>

  }

}