Switches RFID employee lookup, meal session resolution, and menu lookup from live HRMS queries to the local SQLite cache.
Adds cache availability checks and shared site ID normalization for scan validation.
The FromGradeType method in HrmsMenuItemForMapping was modified to handle the new mapping rules, ensuring that menu items and lunch order items align with the updated grade-to-menu mapping:
Contractual and MTO/TE/Intern are now mapped to MANAGEMENT menu.
Unassigned and empty values are mapped to NON_MANAGEMENT.
- Added mealName parameter to IMenuLookupService.GetMenuItemsForSiteAndDateAsync
- Updated SQL query to filter by li.meal_name in MenuLookupService
- Added meal_name to SELECT and result mapping
- Updated RfidService to pass mealLabel from resolved session
- Maintained backward compatibility with existing method
- Updated `item_for` column in `menu_item` table to reflect correct values based on employee grade type (Management/NonManagement).
- Added 'MANAGEMENT' to items with id 51 and 53.
- Added 'NON_MANAGEMENT' to item with id 54.
- Modified the employee photo fetching logic to use the external link instead of the database for fetching employee photos.
- Added missing fields in the `lunch_order_transactions` table to ensure no fields are left blank or null during the scan process.
Seed per-user config from deployed appsettings.json when missing, so production SiteId and connection strings are preserved
Add centralized Logger writing to %LocalAppData%\UtopiaCanteenSystem\Logs\error.log with global unhandled exception handling
Extend scan flow to resolve HRMS menu (lunch_menu_week → lunch_menu_item → menu_item) per site/date and persist MealLabel, MealItems, and TotalPrice in SQLite
Fix menu lookups to use scanner local date instead of MySQL CURDATE(), avoiding time-zone mismatches
Restrict Meal Schedules view to only show schedules for the current configured site and remove multi-site filter options
Extend HRMS RFID lookup to include uind_serial, function_id, department_id, created_by, and tag created timestamp
Persist new tag fields + meal session code in SQLite scan records; auto-migrate schema and drop deprecated EmployeeDbId column
Enforce “once per meal session per local day” scan rule (keep short per-card debounce; remove global cooldown)
Enhance sync: insert scans into production lunch_order_transactions (MySqlConnectionString) and into HRMS/local lunch_order (HrmsLookupConnectionString) with duplicate guard; include location_site_id from SQLite SiteId
Store meal/session label, menu items, total price, department, and department type on each ScanRecord in SQLite so every scan keeps its own metadata.
Add lightweight schema upgrades for lunch_order_transactions to include MealLabel, MealItems, TotalPrice, Department, and DepartmentType.
Update RfidService to populate these new fields and expose UpdateLastScanMealInfo for post-scan enrichment.
Fix dashboard startup logic to restore last scanned employee (ID, name, department, department type, meal) from the last ScanRecord.
Refactor order history and “View All” modal to read Meal/Items and Price from each row’s stored values instead of a global in-memory label.
Include Meal and Price columns in the CSV export, using per-record data.
Remove unused local MealSchedules/OrderItems SQLite tables and ensure they are dropped as legacy schema.
Add LocationSiteId to HrmsEmployeeInfo populated from employee_rfid_tag.location_site_id.
Update EmployeeLookupService query to select and map the site id.
Change ScannerDashboardViewModel to load lunch_menu_week using the site id from the scanned employee’s RFID tag instead of only config.