Feature #662
openCanteen: prototype-matching batch -- Reports, Tray rounds, Diet orders, Hygiene, Recipes, Settings, Meal sheet, Diet charges, Production
0%
Description
A batch of prototype-matching fixes and small bug fixes made page by page against the prototype (clinq-fnb-prototype), alongside the two features tracked separately above:
- Meal sheet: removed the freeze step again -- the 2026-10-19 restoration assumed the prototype needed a cut-off/frozen/addendum shape; it doesn't. Re-applies the "always live" architecture, RefreshFromActiveOrdersAsync is now the sole trigger for trays and the production plan.
- Diet charges: DietChargeAccrualService's idempotency check treated any existing accrual row as handled regardless of status, so a row stuck Pending (e.g. Billing had no charge master entry) could never be retried by "Post pending". Now only Posted/Cancelled short-circuits; a Pending row with an identified patient retries.
- Settings: Integrations tab rebuilt to the prototype's Module/Direction/What-flows/Status shape, re-verified against the code (Billing and both IPD write-backs are genuinely Connected now). Module licence tab uses real disabled toggles instead of badges, and fixed Dietary being hardcoded to false. Deliberately did not add the prototype's retired "Outsourced canteen mode" toggle (ADR-0005: operator is a tenant setting, not a licence flag).
- Reports: rebuilt as compact per-category rows matching the prototype's layout, Run still real (not a toast). Left out the prototype's 4 fake stat cards and reports with nothing real behind them (Forecast accuracy, Payroll deduction, FSSAI/NABH audit pack).
- Tray rounds overview / Ward meal sheet: removed two Print buttons that only called window.print() on the wrong content, not the real per-tray label print page. Tray round overview: whole row is now the click target, status badges fixed to match the prototype's exact pill colors (Plated/Collected/Dispatched/Delivered were collapsing into the same two colors).
- Diet orders: same status/diet-color pill-mapping fix as tray rounds, plus two stat-card accent mismatches.
- Hygiene: added a quick-pass toggle to the Daily checklist for a fast Passed=true log; left out the prototype's fake 4th stat card, the no-op "Today's checklist" button, and 8 checklist rows with no HygieneCheckType behind them.
- Kitchen store: a GRN-receipt row in an item's stock ledger now opens that GRN's real detail (extracted into a shared GrnDetailSheet).
- Recipes: detail sheet's stat cards and footer matched to the prototype (Portion/Std cost/Batch yield, Close button); kept the Sheet pattern over the prototype's modal for consistency with every other detail view in the module.
- Production: header subtitle, banner and card wording matched to the prototype field-for-field, except where the prototype claims the canteen forecast is a working feature -- that stays honestly 0 pending F4-1.
Commits (pushed under the wrong Redmine number, #398, a separate already-resolved issue -- corrected here): 5cf45af, 05aa727, 88e89a4, 3dcd44e, f276c56, d07cd21, b9c2194, 04f27df, 11967be, b52f2f1, 9472821, c06d530, 8fd92e9.
NP Updated by Navya P. 15 days ago
Follow-up: Menu & pricing matched to the prototype -- header subtitle now the prototype's own wording, Slot column moved after Margin to match column order, and the whole row now opens the edit dialog on click (not just the pencil icon), same pattern as diet-types/tray-round. Stat cards and banner already matched before this. Deliberately left out "Weekly menu planner" and "Import CSV" -- both are decorative no-ops in the prototype itself, nothing backs either in this codebase.
Commit: 02461c0.