Заказы
Вкладка Заказы - это живая панель для всех заказов Кафетерии, сделанных вашими клиентами. Она опрашивает облако каждые 3 секунды и показывает новую активность с уведомлением на рабочем столе, звуковым сигналом и значком количества ожидающих заказов в заголовке вкладки.
Макет
У страницы Заказы есть две области:
| Область | Назначение |
|---|---|
| Вкладки статусов | Фильтрация по состоянию заказа: все, создан, подтвержден, готовится, готов, подан. Отмененные и возвращенные заказы скрываются по умолчанию. |
| Список заказов | По одной карточке на заказ, отсортировано от новых к старым. На каждой карточке показаны код стола, телефон клиента, если он указан, позиции, суммы и кнопки действий. |
Опрос в реальном времени
Панель Заказы опрашивает /v1/cafeteria/admin/orders/poll каждые 3 секунды. Каждый новый заказ вызывает:
- Уведомление на рабочем столе с кодом стола и количеством позиций.
- Звуковой сигнал на динамиках сервера, если в Настройки > Кафетерия включены звуковые уведомления.
- Увеличение значка количества ожидающих заказов на вкладке Заказы.
- Автоматическую печать чека, если в настройках принтера включен автодрук при новом заказе.
Значок остается видимым, пока каждый заказ со статусом placed или confirmed не перейдет в более позднее состояние или не будет скрыт. Значок глобально виден в разделе Кафетерия на боковой панели; чтобы видеть его, не нужно держать вкладку Заказы открытой.
Жизненный цикл заказа
Каждый заказ проходит через определенную последовательность состояний.
| Состояние | Значение |
|---|---|
| placed | Клиент отправил заказ. Персонал еще не успел отреагировать. |
| confirmed | Персонал подтвердил заказ. |
| preparing | Кухня готовит заказ. |
| ready | Заказ готов к подаче или выдаче. |
| served | Заказ доставлен клиенту. |
| cancelled | Заказ отменен персоналом. Он остается в истории, но исчезает из живого представления. |
| refunded | Оформлен возврат после оплаты. |
Панель действий на каждой карточке показывает следующее доступное состояние. Перевод выполняется одним нажатием. Интерфейс использует оптимистичное обновление: новый статус отображается сразу. Если сервер отклоняет изменение, статус возвращается назад и появляется уведомление об ошибке.
Статус по позициям
В некоторых заказах несколько позиций, готовящихся в разное время. Например, бургер может быть готов раньше пиццы. Статус по позиции позволяет отслеживать каждую строку отдельно.
У каждой позиции есть свой выпадающий список с пятью вариантами: placed, preparing, ready, served, cancelled. У каждой позиции также есть три временные метки:
created_atустанавливается, когда заказ поступает.ready_atустанавливается в первый момент, когда позиция переходит вready.served_atустанавливается, когда позиция переходит вserved.
В меню для клиентов рядом с каждой строкой показывается значок, чтобы клиент видел, какие позиции готовы или уже в пути.
Отмена заказа
- Откройте карточку заказа.
- Нажмите Отменить.
- Подтвердите в появившемся диалоге.
- Заказ перейдет в состояние
cancelled. Он останется в истории, но исчезнет из стандартного живого списка.
Отмена применяется ко всему заказу целиком. Чтобы отменить одну строку, измените статус этой позиции на cancelled.
Закрытие счета
Закрытие счета завершает все открытые заказы на столе одним шагом. Используйте это, когда клиент уходит и хочет оплатить весь счет.
- Откройте стол на странице Столы или в меню действий Плана зала.
- Нажмите Закрыть счет.
- В модальном окне отобразятся все заказы на столе, которые еще не переведены в
served. - Выберите способ оплаты. Доступны: Наличные, Карта, Онлайн, Другое.
- Подтвердите.
Сервер выполняет такие действия атомарно:
- Каждый открытый заказ на столе переходит в
servedсо статусом оплатыpaid. - Создается запись
cafeteria_settlementsс общей суммой, способом оплаты и временем создания. - Создается журнал
settlement-orders, который показывает, какие заказы относятся к этому закрытию счета. - Код безопасности стола истекает, поэтому QR становится недействительным.
- Стол возвращается в
idle.
Если вы выбрали способ оплаты Онлайн, запись о закрытии счета помечается как оплаченная онлайн. Эта операция не инициирует оплату Stripe. Онлайн-оплата на стороне клиента происходит при оформлении заказа; действие закрытия счета только фиксирует денежный поток для учета.
Таймер opened_at
У каждого стола есть временная метка opened_at, которая устанавливается при посадке клиента. На страницах План зала и Столы показывается живой таймер с момента этой отметки. Это помогает персоналу замечать столы, которые долго заняты без заказов, или столы, подходящие к окончанию сессии.
Таймер сбрасывается в ноль при действии Закрыть стол или Закрыть счет.
Отображение динамического времени приготовления
Когда для товара активно динамическое время приготовления, карточка заказа показывает эту оценку рядом с названием позиции. Персонал видит ее даже если для клиентов переключатель Показывать время приготовления в меню выключен.
Оценка обновляется каждый раз, когда поступает новый заказ и каждый раз, когда заказ завершается. Система обучается на реальном темпе вашей кухни.
Поведение уведомлений о новых заказах
Уведомления срабатывают для всего приложения, а не только для текущей вкладки. Это значит, что вы будете получать сигналы, даже если просматриваете другой раздел HandyCafe, например Панель администратора или Настройки. Звуковое оповещение включается или выключается в Настройки > Кафетерия > Звуковое уведомление.
Для показа уведомлений на рабочем столе операционная система должна выдать HandyCafe разрешение на уведомления. Если после нового заказа уведомление не появляется, проверьте настройки уведомлений ОС.
Советы
- Используйте вкладки статусов, чтобы разделить нагрузку. Один экран с фильтром
preparingпоказывает очередь кухни. Другой экран сreadyпоказывает, что уже нужно доставить. - Закрытие счета - самый быстрый способ закрыть стол. Отмену используйте только для явных ошибок в отдельных заказах.
- Обучайте персонал последовательно менять статусы. Динамический расчет времени приготовления учится на этих сигналах, поэтому пропуск состояний снижает точность.
- Периодически проверяйте отмененные и возвращенные заказы через административный endpoint, чтобы находить типичные ошибки персонала.