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": "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 categorys 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",