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>
This commit is contained in:
@@ -7,16 +7,24 @@
|
||||
/// approvals and daySheets are deferred to later slices.
|
||||
enum ProgrammerTasksTab { monitor, approvals, mine, all, daySheets }
|
||||
|
||||
/// Returns the ordered tab list for the current role in this slice.
|
||||
/// Returns the ordered tab list for the current role.
|
||||
///
|
||||
/// Admin: [monitor, approvals, mine, all]
|
||||
/// Programmer: [mine, all, daySheets]
|
||||
List<ProgrammerTasksTab> programmerTasksTabsFor({required bool isStrictAdmin}) {
|
||||
if (isStrictAdmin) {
|
||||
return [
|
||||
ProgrammerTasksTab.monitor,
|
||||
ProgrammerTasksTab.approvals,
|
||||
ProgrammerTasksTab.mine,
|
||||
ProgrammerTasksTab.all,
|
||||
];
|
||||
}
|
||||
return [ProgrammerTasksTab.mine, ProgrammerTasksTab.all];
|
||||
return [
|
||||
ProgrammerTasksTab.mine,
|
||||
ProgrammerTasksTab.all,
|
||||
ProgrammerTasksTab.daySheets,
|
||||
];
|
||||
}
|
||||
|
||||
/// Parses a URL query-parameter value to a [ProgrammerTasksTab].
|
||||
|
||||
Reference in New Issue
Block a user