feat(print): separate kitchen & bar printers via print stations UI
CI/CD / CI · API (dotnet build + test) (push) Successful in 47s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 28s
CI/CD / CI · Dashboard (tsc) (push) Has been cancelled
CI/CD / CI · Admin Web (tsc) (push) Has been cancelled
CI/CD / CI · Website (tsc) (push) Has been cancelled
CI/CD / CI · Koja (tsc) (push) Has been cancelled
CI/CD / Deploy · all services (push) Has been cancelled

The print engine already routed items to per-station printers (MenuCategory →
KitchenStation.PrinterIp, falling back to the branch kitchen printer) and prints
the customer receipt to the receipt printer — but there was no UI to set it up.
This exposes it:

- Settings → "Kitchen & bar printers": create/edit/delete print stations, each
  with its own printer IP/port, with a per-station test print (gated by
  ManageKitchenStations).
- Menu category editor: a "Print station" dropdown to route each category to a
  station (food → Kitchen, drinks → Bar); no station = branch kitchen printer.

Result: kitchen and bar tickets print on separate printers, while the customer
factor/receipt keeps printing on the receipt printer. fa/en/ar strings added.
No backend/migration changes — purely wiring the existing capability.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-21 09:56:14 +03:30
parent 97bd63015f
commit fb6a20eaa1
8 changed files with 386 additions and 4 deletions
+20 -1
View File
@@ -348,7 +348,23 @@
"configurePrinters": "رفتن به تنظیمات پرینتر",
"posDeviceSection": "دستگاه پوز (کارتخوان)",
"posDeviceHint": "هنگام پرداخت کارتی، مبلغ به آدرس HTTP دستگاه ارسال می‌شود (POST /pay).",
"posDeviceIp": "آدرس IP دستگاه پوز"
"posDeviceIp": "آدرس IP دستگاه پوز",
"testSent": "تست به پرینتر ارسال شد.",
"stations": {
"title": "ایستگاه‌های چاپ آشپزخانه و بار",
"subtitle": "برای هر بخش آماده‌سازی یک پرینتر جدا بگذارید و دسته‌های منو را به آن وصل کنید.",
"help": "یک ایستگاه (مثلاً آشپزخانه یا بار) با پرینتر مخصوص خودش بسازید، سپس در «منو» برای هر دسته ایستگاه چاپ را انتخاب کنید — غذا ← آشپزخانه، نوشیدنی ← بار. آیتم‌های دسته‌هایی که ایستگاه ندارند روی پرینتر آشپزخانهٔ شعبه چاپ می‌شوند. فاکتور مشتری همیشه روی پرینتر فاکتور چاپ می‌شود.",
"add": "افزودن ایستگاه",
"name": "نام ایستگاه",
"namePlaceholder": "مثلاً آشپزخانه، بار",
"printerIp": "آی‌پی پرینتر",
"noPrinter": "بدون پرینتر — از پرینتر آشپزخانه استفاده می‌شود",
"categoryCount": "{count} دسته",
"test": "تست",
"empty": "هنوز ایستگاهی ندارید. «آشپزخانه» و «بار» را اضافه کنید تا آیتم‌هایشان جدا چاپ شود.",
"deleteConfirm": "ایستگاه «{name}» حذف شود؟ دسته‌های آن به پرینتر آشپزخانه برمی‌گردند.",
"saveError": "ذخیرهٔ ایستگاه ناموفق بود."
}
},
"receipt": {
"table": "میز",
@@ -907,6 +923,8 @@
"newItem": "آیتم جدید",
"newCategory": "دسته جدید",
"editCategoryTitle": "ویرایش دسته",
"printStation": "ایستگاه چاپ",
"printStationNone": "پرینتر آشپزخانه (پیش‌فرض)",
"close": "بستن",
"saving": "در حال ذخیره…",
"model3d": "مدل سه‌بعدی",
@@ -1276,6 +1294,7 @@
"shopNotifications": "اعلان‌ها و صدا",
"printer": "پرینتر",
"printerSettings": "تنظیمات پرینتر",
"printerStations": "پرینتر آشپزخانه و بار",
"printTest": "صفحه تست چاپ",
"shopDiscover": "کشف و AI",
"team": "تیم و کارمندان",