feat(menu): per-item print station (cold bar / kitchen / barista)
CI/CD / CI · API (dotnet build + test) (push) Successful in 41s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 29s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m6s
CI/CD / CI · Admin Web (tsc) (push) Successful in 38s
CI/CD / CI · Website (tsc) (push) Successful in 45s
CI/CD / CI · Koja (tsc) (push) Successful in 49s
CI/CD / Deploy · all services (push) Successful in 3m28s
CI/CD / CI · API (dotnet build + test) (push) Successful in 41s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 29s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m6s
CI/CD / CI · Admin Web (tsc) (push) Successful in 38s
CI/CD / CI · Website (tsc) (push) Successful in 45s
CI/CD / CI · Koja (tsc) (push) Successful in 49s
CI/CD / Deploy · all services (push) Successful in 3m28s
Each menu item can now pick its own print station, overriding the category's — so a category can fan out to different printers (e.g. a drink → cold bar, a food → kitchen). Adds MenuItem.KitchenStationId (+ migration, FK SetNull), wires create/update/DTO, and updates kitchen-ticket routing to group by the item's station ?? the category's station ?? the branch kitchen printer. Deleting a station now also clears item assignments. Menu item editor gains a "Print station" dropdown (default = "same as category"). fa/en/ar added. Backend built clean via the Nexus mirror; migration applies on deploy (MigrateAsync). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -76,15 +76,16 @@ public class NetworkPrinterService : IPrinterService
|
||||
return PrintResult.Ok();
|
||||
|
||||
var menuItemIds = activeItems.Select(i => i.MenuItemId).Distinct().ToList();
|
||||
var categoryStations = await (
|
||||
// Per-item station overrides the category's station; fall back to category.
|
||||
var itemStations = await (
|
||||
from m in _db.MenuItems.AsNoTracking()
|
||||
join c in _db.MenuCategories.AsNoTracking() on m.CategoryId equals c.Id
|
||||
where menuItemIds.Contains(m.Id) && m.CafeId == cafeId
|
||||
select new { m.Id, c.KitchenStationId }
|
||||
select new { m.Id, StationId = m.KitchenStationId ?? c.KitchenStationId }
|
||||
).ToListAsync(ct);
|
||||
|
||||
var stationIds = categoryStations
|
||||
.Select(x => x.KitchenStationId)
|
||||
var stationIds = itemStations
|
||||
.Select(x => x.StationId)
|
||||
.Where(id => !string.IsNullOrEmpty(id))
|
||||
.Distinct()
|
||||
.ToList();
|
||||
@@ -99,8 +100,8 @@ public class NetworkPrinterService : IPrinterService
|
||||
var groups = activeItems
|
||||
.GroupBy(item =>
|
||||
{
|
||||
var cat = categoryStations.FirstOrDefault(c => c.Id == item.MenuItemId);
|
||||
return cat?.KitchenStationId;
|
||||
var map = itemStations.FirstOrDefault(c => c.Id == item.MenuItemId);
|
||||
return map?.StationId;
|
||||
})
|
||||
.ToList();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user