diff --git a/lib/presentation/screens/payout/payout_report.dart b/lib/presentation/screens/payout/payout_report.dart index fa3dba4..1f725f6 100644 --- a/lib/presentation/screens/payout/payout_report.dart +++ b/lib/presentation/screens/payout/payout_report.dart @@ -12,6 +12,7 @@ import '../../layouts/responsive_layout.dart'; import '../../providers/manager_provider.dart'; import '../../providers/userRoleProvider.dart'; import '../../themes/indicators/date_field_theme.dart'; +import '../../themes/indicators/export_btn.dart'; import '../../themes/indicators/search_field_theme.dart'; /// Payout report — layout and styling aligned with [policylist] policy list screen. @@ -692,18 +693,68 @@ class _PayoutReportScreenState extends ConsumerState { ); } - void _onExport() { - if (!_hasSearched || _filtered.isEmpty) { + Future _onExport() async { + if (!_hasSearched) { ToastHelper.showWarningToast( context, 'Load report data with Search before exporting.', ); return; } - ToastHelper.showInfoToast( - context, - 'Export can be wired to the same filters as the report when needed.', - ); + if (_filtered.isEmpty) { + ToastHelper.showWarningToast( + context, + 'No rows to export. Adjust search or filters, or run Search again.', + ); + return; + } + + final stamp = DateFormat('yyyyMMdd_HHmmss').format(DateTime.now()); + final fileName = 'payout_report_$stamp'; + + // [ExcelExporter] reverses the list before writing; pass reversed filtered + // rows so the file order matches the on-screen table (top → bottom). + final exportInput = + _filtered.reversed.map((r) => Map.from(r)).toList(); + + try { + await ExcelExporter.exportToExcel( + sheetName: 'Payout Report', + fileName: fileName, + data: exportInput, + displayHeaders: const [ + 'S No', + 'Policy No', + 'Reg No', + 'Weight', + 'Fuel Type', + 'Vehicle Type', + 'Premium', + 'Commission Amount', + 'UTR No', + 'Received', + ], + keys: const [ + 'sno', + 'policy_no', + 'reg_no', + 'weight', + 'fuel_type', + 'vehicle_type', + 'premium', + 'commission_amount', + 'utr_no', + 'received_or_not', + ], + ); + if (mounted) { + ToastHelper.showSuccessToast(context, 'Export finished'); + } + } catch (e) { + if (mounted) { + ToastHelper.showErrorToast(context, 'Export failed: $e'); + } + } } Widget _buildDateField({