updated existing import
This commit is contained in:
parent
8288e3d8aa
commit
4bf7c2a6f6
|
|
@ -12,6 +12,8 @@ import '../../shared/widgets/financial_table.dart';
|
||||||
import 'member_selection_dialog.dart';
|
import 'member_selection_dialog.dart';
|
||||||
import 'add_user_dialog.dart';
|
import 'add_user_dialog.dart';
|
||||||
import 'combined_draw_dialog.dart';
|
import 'combined_draw_dialog.dart';
|
||||||
|
import 'add_past_draw_dialog.dart';
|
||||||
|
import 'add_past_payments_dialog.dart';
|
||||||
import 'record_payment_dialog.dart';
|
import 'record_payment_dialog.dart';
|
||||||
import 'payment_history_page.dart';
|
import 'payment_history_page.dart';
|
||||||
import '../../features/chitfund_schedule/chitfund_schedule_page.dart';
|
import '../../features/chitfund_schedule/chitfund_schedule_page.dart';
|
||||||
|
|
@ -114,6 +116,41 @@ class _GroupDetailsPageState extends State<GroupDetailsPage> with SingleTickerPr
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
// Backfill menu for imported/active groups
|
||||||
|
if (widget.group.isActive)
|
||||||
|
PopupMenuButton<String>(
|
||||||
|
icon: Icon(Icons.more_vert, size: 24.w, color: Colors.grey.shade700),
|
||||||
|
tooltip: 'More Options',
|
||||||
|
onSelected: (value) {
|
||||||
|
if (value == 'add_past_draw') {
|
||||||
|
_showAddPastDrawDialog(context);
|
||||||
|
} else if (value == 'add_past_payments') {
|
||||||
|
_showAddPastPaymentsDialog(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemBuilder: (context) => [
|
||||||
|
PopupMenuItem(
|
||||||
|
value: 'add_past_draw',
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(Icons.history, color: Colors.blue.shade600),
|
||||||
|
SizedBox(width: 12.w),
|
||||||
|
const Text('Add Past Draw Result'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
PopupMenuItem(
|
||||||
|
value: 'add_past_payments',
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(Icons.payment_outlined, color: Colors.green.shade600),
|
||||||
|
SizedBox(width: 12.w),
|
||||||
|
const Text('Add Past Payments'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
bottom: PreferredSize(
|
bottom: PreferredSize(
|
||||||
preferredSize: Size.fromHeight(64.h),
|
preferredSize: Size.fromHeight(64.h),
|
||||||
|
|
@ -1651,6 +1688,90 @@ class _GroupDetailsPageState extends State<GroupDetailsPage> with SingleTickerPr
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _showAddPastDrawDialog(BuildContext context) {
|
||||||
|
// Determine which month to add based on existing draws
|
||||||
|
final existingDraws = _service.monthlyDraws;
|
||||||
|
final nextMonth = existingDraws.length + 1;
|
||||||
|
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (context) => AddPastDrawDialog(
|
||||||
|
group: widget.group,
|
||||||
|
monthNumber: nextMonth,
|
||||||
|
),
|
||||||
|
).then((result) {
|
||||||
|
if (result == true) {
|
||||||
|
// Reload draws after adding
|
||||||
|
_service.loadGroupMonthlyDraws(widget.group.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showAddPastPaymentsDialog(BuildContext context) {
|
||||||
|
// Ask which month to add payments for
|
||||||
|
_showMonthSelectionDialog(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showMonthSelectionDialog(BuildContext context) {
|
||||||
|
final monthController = TextEditingController(text: '1');
|
||||||
|
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => AlertDialog(
|
||||||
|
title: const Text('Select Month'),
|
||||||
|
content: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
const Text('Which month do you want to add payments for?'),
|
||||||
|
SizedBox(height: 16.h),
|
||||||
|
TextField(
|
||||||
|
controller: monthController,
|
||||||
|
keyboardType: TextInputType.number,
|
||||||
|
decoration: const InputDecoration(
|
||||||
|
labelText: 'Month Number',
|
||||||
|
hintText: 'e.g., 1, 2, 3',
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(context),
|
||||||
|
child: const Text('Cancel'),
|
||||||
|
),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () {
|
||||||
|
final month = int.tryParse(monthController.text);
|
||||||
|
if (month != null && month >= 1) {
|
||||||
|
Navigator.pop(context);
|
||||||
|
_showAddPastPaymentsDialogForMonth(context, month);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: const Text('Continue'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _showAddPastPaymentsDialogForMonth(BuildContext context, int monthNumber) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (context) => AddPastPaymentsDialog(
|
||||||
|
group: widget.group,
|
||||||
|
monthNumber: monthNumber,
|
||||||
|
),
|
||||||
|
).then((result) {
|
||||||
|
if (result == true) {
|
||||||
|
// Reload payments after adding
|
||||||
|
_paymentService.loadGroupPayments(widget.group.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void _conductDraw(BuildContext context) {
|
void _conductDraw(BuildContext context) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import '../../features/settings/settings_page.dart';
|
||||||
import '../../features/notifications/notification_center_page.dart';
|
import '../../features/notifications/notification_center_page.dart';
|
||||||
import 'chit_groups_page.dart';
|
import 'chit_groups_page.dart';
|
||||||
import 'create_group_page.dart';
|
import 'create_group_page.dart';
|
||||||
|
import 'import_existing_group_dialog.dart';
|
||||||
import '../../test_animated_draw.dart';
|
import '../../test_animated_draw.dart';
|
||||||
import '../../features/recordings/recordings_page.dart';
|
import '../../features/recordings/recordings_page.dart';
|
||||||
|
|
||||||
|
|
@ -450,11 +451,18 @@ class ManagerDashboard extends StatelessWidget {
|
||||||
color: Colors.green.shade600,
|
color: Colors.green.shade600,
|
||||||
onTap: () => _showCreateGroupDialog(Get.context!),
|
onTap: () => _showCreateGroupDialog(Get.context!),
|
||||||
),
|
),
|
||||||
|
QuickActionCard(
|
||||||
|
title: 'Import Existing Chitfund',
|
||||||
|
subtitle: 'Add a group that already started',
|
||||||
|
icon: Icons.upload,
|
||||||
|
color: Colors.blue.shade600,
|
||||||
|
onTap: () => _showImportGroupDialog(Get.context!),
|
||||||
|
),
|
||||||
QuickActionCard(
|
QuickActionCard(
|
||||||
title: 'View All Chitfunds',
|
title: 'View All Chitfunds',
|
||||||
subtitle: 'Manage your existing groups',
|
subtitle: 'Manage your existing groups',
|
||||||
icon: Icons.list,
|
icon: Icons.list,
|
||||||
color: Colors.blue.shade600,
|
color: Colors.teal.shade600,
|
||||||
onTap: () => _navigateToGroups(),
|
onTap: () => _navigateToGroups(),
|
||||||
),
|
),
|
||||||
QuickActionCard(
|
QuickActionCard(
|
||||||
|
|
@ -580,6 +588,23 @@ class ManagerDashboard extends StatelessWidget {
|
||||||
Get.to(() => const CreateGroupPage());
|
Get.to(() => const CreateGroupPage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _showImportGroupDialog(BuildContext context) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (context) => const ImportExistingGroupDialog(),
|
||||||
|
).then((result) {
|
||||||
|
if (result == true) {
|
||||||
|
// Reload groups after successful import
|
||||||
|
ChitGroupService.to.loadManagerChitGroups();
|
||||||
|
SnackbarUtil.showSuccess(
|
||||||
|
'Group imported! Now add members and backfill past data.',
|
||||||
|
title: 'Success',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void _navigateToGroups() {
|
void _navigateToGroups() {
|
||||||
Get.to(() => const ChitGroupsPage());
|
Get.to(() => const ChitGroupsPage());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue