Open MiAlLevin opened 1 year ago
В связи с этим вопрос - если iOrder.CLosed - может ли быть например в IOrderCookingItem.CookingStarted.
Хороший вопрос!
По историческим причинам реализация здесь расходится с предметной областью.
В текущей реализации при оплате заказа все его позиции принудительно доводятся до статуса «Подано» (Served
), так как ни официант в ресторане, ни кассир в фастфуде не возвращаются к закрытому заказу и не меняют в нём ничего. С их точки зрения, работа с заказом завершена. Таким образом, в закрытом заказе все позиции будут в статусе Served
(то есть ответ на ваш вопрос — нет).
Для кухни же не имеет значения, оплатили заказ или нет, повар видит задание и готовит его. Приготовление может начинаться/продолжаться/завершаться независимо от оплаты, поэтому кухонные заказы живут своей жизнью.
Нам требуется отправлять заказ уже на финальной его стадии - когда никаких изменений с позициями и т.д. уже не будет.
Оплаченный IOrder
можно вернуть (частичное сторнирование).
При использовании KDS повар может взять любое из ранее приготовленных (и даже поданных) блюд и вернуть его в статус «Готовится» (или даже «Не готовится», Idle
).
Финальной стадией, когда уже точно никаких изменений не будет, можно считать разве что физическое удаление обоих заказов (IOrder
и IKitchenOrder
) спустя какое-то время, то есть когда IOrder
оплатили, кассовую смену закрыли, на кухне долго не трогали IKitchenOrder
(каждое изменение продлевает время жизни). И даже после этого можно будет делать возвраты товаров из заказов прошлых кассовых смен.
И ничего с этим не поделаешь, люди могут ошибаться, поэтому необходима возможность исправлять ошибки. Если бы существовала финальная стадия, как вы этого хотите, случайный переход в эту стадию был бы непоправимой ошибкой. Кроме того, законодательство, как правило, предусматривает для покупателей возможность в случае претензий отказаться от исполнения сделки, когда она, казалось бы, в финальной стадии.
Есть ли у вас временная карта событий и какой статус нам не обходимо использовать для финальной отправки заказа?
Поскольку строго то, что вы просите, сделать не получится, давайте подумаем, какие могут быть компромиссы. Расскажите, куда и зачем вы отправляете заказ, и что плохого случится, если что-то поменяется после отправки?
IOrder - имеет следующие статусы New, Bill, Closed, Deleted. В тоже время у IOrderCookingItem - есть свои статусы - Added, PrintedNotCooking, CookingStarted, CookingCompleted, Served У IKitchenOrderCookingItem -еще пачка своих статусов Idle, Processing1, Processing2, Processing3, Processing4, Processed, Served
У нас в плагине реализована отправка финального заказа в нашу систему. Для этого мы используем iOrder.CLosed (подразумевая что это финальный статус заказа и всех его позиций). В связи с этим вопрос - если iOrder.CLosed - может ли быть например в IOrderCookingItem.CookingStarted. У нас есть позиции и которые требуют и которые не требуют приготовления на кухне. С другой стороны приходят и уже оплаченные заказы на доставку.
Нам требуется отправлять заказ уже на финальной его стадии - когда никаких изменений с позициями и т.д. уже не будет.
Есть ли у вас временная карта событий и какой статус нам не обходимо использовать для финальной отправки заказа?