Two gaps in the earlier i18n scaffolding: the Mini App's UA/EN switcher existed but most screens and all menu content stayed hardcoded Ukrainian. Menu content (business data, not UI chrome): - Category.name_en, Product.name_en/description_en (nullable, opt-in per item — untranslated items fall back to Ukrainian rather than showing blank). Editable from the existing category/product admin forms. - Allergen labels (a small fixed EU-mandated set) get an English label directly in ALLERGENS, no DB column needed. - /api/categories and /api/products take an optional ?locale= param (no session on these unauthenticated routes to read a stored preference from). Full EN coverage for everything else: - Every remaining webapp screen: MenuPage/ProductCard, CartItemRow (fixes a pre-existing gap in the "already translated" cart screen), OrdersPage, ContactsPage, ClosedScreen, BottomNav, AnnouncementPopup, plus app-level status/error text. - Every reachable bot message: /menu, /contacts (including its locale-dependent reply-keyboard button, matched by text across all locales since the label itself varies), and the rating thank-you flow. - Every customer-facing checkout/order error message (empty cart, closed, min order amount, payment/promo validation, cancel/pay errors) via locale params threaded through workhours.closed_message() and promo.validate_promo_code(). New: PATCH /api/me/locale persists an explicit in-app language choice back to TelegramUser.locale (fire-and-forget from the webapp switcher), so it also applies to the bot's own push notifications, not just the Mini App session that made the choice. Fixed a real bug caught while testing: product_form.html's allergen checklist unpacked ALLERGENS values as 2-tuples, which broke (ValueError) once they became 3-tuples (uk_label, emoji, en_label) — admin's "add product" page 500'd until this was caught in browser testing.
37 lines
5 KiB
Markdown
37 lines
5 KiB
Markdown
# Що потрібно узгодити із замовником (розділ 22 ТЗ)
|
||
|
||
Код повністю робочий на демо-даних, але для запуску в продакшн потрібні
|
||
реальні дані замовника. Все нижче редагується або через `.env`, або через
|
||
адмінку (`/admin/settings`), або через сідинг реального меню — коду
|
||
чіпати не треба.
|
||
|
||
| # | Пункт ТЗ | Де налаштовується | Статус |
|
||
|---|---|---|---|
|
||
| 1 | Вартість доставки: фіксована / по зонах / від суми | `Адмінка → Налаштування`: `delivery_fee`, `free_delivery_threshold` | Реалізовано найпростіший варіант — **фіксована сума + безкоштовно від порогу**. Логіка по зонах (наприклад, за районом) потребує окремого узгодження формату адрес і не закладена. |
|
||
| 2 | Місто та зона доставки | Наразі бот приймає будь-яке місто текстом, без валідації/обмеження зони | Потребує рішення замовника |
|
||
| 3 | Адреса закладу для самовивозу | `Адмінка → Налаштування → address` | Заповнити |
|
||
| 4 | Телефон Bober BBQ | `Адмінка → Налаштування → phone` | Заповнити |
|
||
| 5 | Telegram-акаунт/група менеджера (fallback) | `.env → OWNER_IDS` | Заповнити |
|
||
| 6 | Окремий чат для доставки | `Адмінка → Налаштування → Chat ID — Доставка` | Заповнити (додати бота адміном у чат) |
|
||
| 7 | Окремий чат для самовивозу | `Адмінка → Налаштування → Chat ID — Самовивіз` | Заповнити (додати бота адміном у чат) |
|
||
| 8 | Реквізити ФОП / дані monobank | `.env → MONOBANK_TOKEN` | **Без цього оплата карткою недоступна** — бот коректно переключається на «оплата при отриманні» і просить менеджера зв'язатися з клієнтом, нічого не падає |
|
||
| 9 | Фінальний перелік категорій меню | `Адмінка → Категорії` або `bober_bbq/seed.py` | Зараз — демо-категорії (Шашлик, BBQ, Піца, Бургери, Гарніри, Закуски, Соуси, Напої) |
|
||
| 10 | Повний перелік товарів, цін, описів, фото | `Адмінка → Товари` | Зараз — по 1-2 демо-товари на категорію |
|
||
| 11 | Прийом замовлень поза графіком з виконанням у робочий час | `Адмінка → Налаштування → allow_orders_outside_hours` | Реалізовано як перемикач: вимкнено за замовчуванням (бот відмовляє поза графіком і пропонує лише перегляд меню) |
|
||
| 12 | Додаткові поля до замовлення (напр. коментар клієнта) | — | Коментар до **адреси** доставки вже є (розділ 5, крок 2). Окремого поля "коментар до всього замовлення" немає — додати за потреби |
|
||
|
||
## Додатково варто уточнити
|
||
|
||
- **Часовий пояс**: за замовчуванням `Europe/Kyiv` (`.env → TIMEZONE`).
|
||
- **Формат номера телефону**: наразі приймається як є (текст або контакт
|
||
Telegram), без валідації на `+380...`. Додати regex-перевірку, якщо
|
||
потрібно жорсткіше.
|
||
- **Мова**: базово інтерфейс українською, як і вимагає ТЗ. Додано повноцінний
|
||
перемикач UA/EN у Mini App (з синхронізацією вибору назад у Telegram-бота
|
||
через `TelegramUser.locale`), що охоплює весь бот і весь клієнтський
|
||
Mini App — усі екрани, повідомлення бота, помилки при оформленні
|
||
замовлення. Назви й описи страв перекладаються опційно, по одному товару
|
||
(`Product.name_en`/`description_en`, заповнюється в адмінці) — товар без
|
||
перекладу просто показує українську версію в англійському інтерфейсі.
|
||
Адмінка залишається лише українською (внутрішній інструмент для персоналу).
|
||
Деталі: див. `docs/I18N.md`.
|