redz1029
54ce528b02
feat(programmer): day sheets + approvals tabs
...
- day_sheet_snapshot_builder.dart: buildSnapshotForSheet (approved →
stored snapshot, else live buildDayRows), groupSheetsByDate (descending
keys), approvalCounts (pending/awaiting/approved)
- approvals_tab.dart: status filter chips, programmer dropdown,
ReportDateFilter.controlled, date-grouped cards with Auto/Early/Round
badges, checkbox multi-select, bulk Approve selected (n) flow
- day_sheets_tab.dart: Today card (live rows, total, status, Submit day),
Needs your attention (disapproved), history with AppStatusSummaryRow
All/Pending/Disapproved/Approved filter
- programmerTasksTabsFor: admin → [monitor, approvals, mine, all];
programmer → [mine, all, daySheets]
- programmer_tasks_list_screen.dart: wire approvals + daySheets cases
Tests: 15 passing (day_sheet_tabs_test + programmer_tabs_test)
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-09-28 14:43:52 +08:00
redz1029
7beb8e8713
feat(programmer): admin monitor tab + drill-down
...
- Add isStrictAdminProvider (role == 'admin' only)
- Add programmer_tasks_tabs.dart with ProgrammerTasksTab enum,
programmerTasksTabsFor, parseProgrammerTasksTab, programmerTasksTabLabel
- Make ProgrammerTasksListScreen role-aware via initialTab param and
programmerTasksTabsFor; admin sees Monitor/Mine/All tabs
- Add MonitorTab with AppStatusSummaryRow + responsive programmer grid
(1/2/3 cols) + HelpPanel side/bottom
- Add ProgrammerMonitorCard with state pills (Working/Paused/Idle/On leave/Pass slip)
- Add HelpPanel ConsumerStatefulWidget with day stepper and help-edge rows
- Add ProgrammerDrillDownScreen (/programmer-tasks/programmers/:userId);
non-admins see lock empty view
- Router: pass tab query param; add programmers/:userId before :id route
- Tests: 7/7 pass; analyze: 0 new issues
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-09-27 22:39:19 +08:00