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
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:
@@ -329,7 +329,23 @@
|
||||
"configurePrinters": "فتح إعدادات الطابعة",
|
||||
"posDeviceSection": "جهاز نقطة البيع (بطاقة)",
|
||||
"posDeviceHint": "عند الدفع بالبطاقة، يُرسل المبلغ عبر HTTP (POST /pay) إلى الجهاز على الشبكة المحلية.",
|
||||
"posDeviceIp": "عنوان IP لجهاز نقطة البيع"
|
||||
"posDeviceIp": "عنوان IP لجهاز نقطة البيع",
|
||||
"testSent": "تم إرسال الاختبار إلى الطابعة.",
|
||||
"stations": {
|
||||
"title": "محطات طباعة المطبخ والبار",
|
||||
"subtitle": "امنح كل قسم تحضير طابعته الخاصة ووجّه فئات القائمة إليها.",
|
||||
"help": "أنشئ محطة (مثل المطبخ أو البار) بطابعتها الخاصة، ثم من «القائمة» اختر محطة الطباعة لكل فئة — الطعام ← المطبخ، المشروبات ← البار. أصناف الفئات بدون محطة تُطبع على طابعة مطبخ الفرع. أما فاتورة العميل فتُطبع دائمًا على طابعة الفواتير.",
|
||||
"add": "إضافة محطة",
|
||||
"name": "اسم المحطة",
|
||||
"namePlaceholder": "مثل المطبخ، البار",
|
||||
"printerIp": "IP الطابعة",
|
||||
"noPrinter": "بدون طابعة — تُستخدم طابعة المطبخ",
|
||||
"categoryCount": "{count} فئات",
|
||||
"test": "اختبار",
|
||||
"empty": "لا توجد محطات بعد. أضف «المطبخ» و«البار» لطباعة أصنافهما بشكل منفصل.",
|
||||
"deleteConfirm": "حذف المحطة «{name}»؟ ستعود فئاتها إلى طابعة المطبخ.",
|
||||
"saveError": "تعذّر حفظ المحطة."
|
||||
}
|
||||
},
|
||||
"receipt": {
|
||||
"table": "الطاولة",
|
||||
@@ -873,6 +889,8 @@
|
||||
"newItem": "صنف جديد",
|
||||
"newCategory": "فئة جديدة",
|
||||
"editCategoryTitle": "تعديل الفئة",
|
||||
"printStation": "محطة الطباعة",
|
||||
"printStationNone": "طابعة المطبخ (افتراضي)",
|
||||
"close": "إغلاق",
|
||||
"saving": "جاري الحفظ…",
|
||||
"model3d": "نموذج ثلاثي الأبعاد",
|
||||
@@ -1203,6 +1221,7 @@
|
||||
"shopNotifications": "الإشعارات والصوت",
|
||||
"printer": "الطابعة",
|
||||
"printerSettings": "إعدادات الطابعة",
|
||||
"printerStations": "طابعات المطبخ والبار",
|
||||
"printTest": "صفحة اختبار الطباعة",
|
||||
"shopDiscover": "اكتشاف و AI",
|
||||
"team": "الفريق والموظفون",
|
||||
|
||||
@@ -348,7 +348,23 @@
|
||||
"configurePrinters": "Open printer settings",
|
||||
"posDeviceSection": "Card POS terminal",
|
||||
"posDeviceHint": "On card payment, the amount is sent via HTTP (POST /pay) to the device on your LAN.",
|
||||
"posDeviceIp": "POS device IP address"
|
||||
"posDeviceIp": "POS device IP address",
|
||||
"testSent": "Test sent to the printer.",
|
||||
"stations": {
|
||||
"title": "Kitchen & bar print stations",
|
||||
"subtitle": "Give each prep area its own printer and route menu categories to it.",
|
||||
"help": "Create a station (e.g. Kitchen, Bar) with its own printer, then in Menu set each category’s print station — food → Kitchen, drinks → Bar. Items in a category with no station fall back to the branch kitchen printer. The customer receipt always prints to the receipt printer.",
|
||||
"add": "Add station",
|
||||
"name": "Station name",
|
||||
"namePlaceholder": "e.g. Kitchen, Bar",
|
||||
"printerIp": "Printer IP",
|
||||
"noPrinter": "No printer — uses the kitchen printer",
|
||||
"categoryCount": "{count} categories",
|
||||
"test": "Test",
|
||||
"empty": "No stations yet. Add Kitchen and Bar to print their items separately.",
|
||||
"deleteConfirm": "Delete station “{name}”? Its categories will fall back to the kitchen printer.",
|
||||
"saveError": "Failed to save the station."
|
||||
}
|
||||
},
|
||||
"receipt": {
|
||||
"table": "Table",
|
||||
@@ -907,6 +923,8 @@
|
||||
"newItem": "New item",
|
||||
"newCategory": "New category",
|
||||
"editCategoryTitle": "Edit category",
|
||||
"printStation": "Print station",
|
||||
"printStationNone": "Kitchen printer (default)",
|
||||
"close": "Close",
|
||||
"saving": "Saving…",
|
||||
"model3d": "3D model",
|
||||
@@ -1275,6 +1293,7 @@
|
||||
"shopNotifications": "Notifications & sound",
|
||||
"printer": "Printer",
|
||||
"printerSettings": "Printer settings",
|
||||
"printerStations": "Kitchen & bar printers",
|
||||
"printTest": "Print test page",
|
||||
"shopDiscover": "Discover & AI",
|
||||
"team": "Team & Staff",
|
||||
|
||||
@@ -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": "تیم و کارمندان",
|
||||
|
||||
Reference in New Issue
Block a user