feat(report): accomplishment report dialog + entry points

Add AccomplishmentReportDialog with programmer/admin modes, date-range
filter (default this month), and include-unapproved toggle. Wire into
DaySheetsTab app-bar action, ApprovalsTab app-bar action, and
ProgrammerDrillDownScreen app-bar button.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-09-28 19:09:09 +08:00
parent 167e208ffa
commit 1101fb0a97
5 changed files with 489 additions and 1 deletions
@@ -15,6 +15,7 @@ import '../../../widgets/app_status_summary.dart';
import '../../../widgets/tech_chip.dart';
import '../../reports/report_date_filter.dart';
import 'day_sheet_snapshot_builder.dart';
import '../report/accomplishment_report_dialog.dart';
/// Admin tab for reviewing and bulk-approving programmer day sheets.
///
@@ -212,6 +213,16 @@ class _ApprovalsTabState extends ConsumerState<ApprovalsTab> {
}),
),
),
const SizedBox(width: 4),
IconButton(
icon: const Icon(Icons.description_outlined),
tooltip: 'Accomplishment Report',
onPressed: () => showAccomplishmentReportDialog(
context,
ref,
programmerId: _programmerFilter,
),
),
],
),
),
@@ -13,6 +13,7 @@ import '../../../utils/programmer_task_ledger.dart';
import '../../../widgets/app_state_view.dart';
import '../../../widgets/app_status_summary.dart';
import '../../../widgets/status_pill.dart';
import '../report/accomplishment_report_dialog.dart';
/// Programmer-facing tab for managing personal day sheets.
///
@@ -140,6 +141,16 @@ class _DaySheetsTabState extends ConsumerState<DaySheetsTab> {
return ListView(
padding: const EdgeInsets.all(16),
children: [
// ── Report action ──────────────────────────────────────────────────
Align(
alignment: Alignment.centerRight,
child: IconButton(
icon: const Icon(Icons.description_outlined),
tooltip: 'Accomplishment Report',
onPressed: () => showAccomplishmentReportDialog(context, ref),
),
),
// ── Today card ─────────────────────────────────────────────────────
_TodayCard(
total: todayTotal,