From 6d55d0102df3820f6f388ebfb6d255564306b73c Mon Sep 17 00:00:00 2001 From: nyxst4ck <289980115+nyxst4ck@users.noreply.github.com> Date: Thu, 20 Aug 2026 23:11:09 -0300 Subject: [PATCH 1/2] fix: restrict reconciliation transaction edits --- .../create_transaction_page.dart | 58 +++++++++++++++---- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/lib/pages/transactions/create_transaction/create_transaction_page.dart b/lib/pages/transactions/create_transaction/create_transaction_page.dart index 2538fd30..24b4d191 100644 --- a/lib/pages/transactions/create_transaction/create_transaction_page.dart +++ b/lib/pages/transactions/create_transaction/create_transaction_page.dart @@ -15,6 +15,7 @@ import '../../../ui/extensions.dart'; import "widgets/account_selector.dart"; import 'widgets/amount_section.dart'; import "widgets/category_selector.dart"; +import 'widgets/details_list_disabled_tile.dart'; import 'widgets/details_list_tile.dart'; import 'widgets/duplicate_transaction_dialog.dart'; import 'widgets/label_list_tile.dart'; @@ -36,6 +37,9 @@ class _CreateTransactionPage extends ConsumerState { bool recurrencyEditingPermitted = true; bool _isSaveEnabled = false; + bool get _isReconciliationTransaction => + widget.transaction?.note == 'Reconciliation'; + @override void initState() { if (widget.transaction != null) { @@ -215,7 +219,7 @@ class _CreateTransactionPage extends ConsumerState { : "New transaction", ), actions: [ - if (widget.transaction != null) ...[ + if (widget.transaction != null && !_isReconciliationTransaction) ...[ IconButton( icon: Icon( Icons.copy, @@ -299,10 +303,25 @@ class _CreateTransactionPage extends ConsumerState { color: Theme.of(context).colorScheme.surface, child: Column( children: [ - LabelListTile(noteController), + if (_isReconciliationTransaction) + NonEditableDetailsListTile( + title: 'Label', + icon: Icons.label_outline, + value: noteController.text, + ) + else + LabelListTile(noteController), const Divider(), if (selectedType != TransactionType.transfer) ...[ - DetailsListTile( + (_isReconciliationTransaction + ? NonEditableDetailsListTile( + title: "Account", + icon: Icons.account_balance_wallet, + value: ref + .watch(selectedBankAccountProvider) + ?.name, + ) + : DetailsListTile( title: "Account", icon: Icons.account_balance_wallet, value: ref.watch(selectedBankAccountProvider)?.name, @@ -329,9 +348,15 @@ class _CreateTransactionPage extends ConsumerState { ), ); }, - ), + )), const Divider(), - DetailsListTile( + (_isReconciliationTransaction + ? NonEditableDetailsListTile( + title: "Category", + icon: Icons.list_alt, + value: ref.watch(selectedCategoryProvider)?.name, + ) + : DetailsListTile( title: "Category", icon: Icons.list_alt, value: ref.watch(selectedCategoryProvider)?.name, @@ -358,10 +383,18 @@ class _CreateTransactionPage extends ConsumerState { ), ); }, - ), + )), const Divider(), ], - DetailsListTile( + (_isReconciliationTransaction + ? NonEditableDetailsListTile( + title: "Date", + icon: Icons.calendar_month, + value: ref + .watch(selectedDateProvider) + .formatEDMY(), + ) + : DetailsListTile( title: "Date", icon: Icons.calendar_month, value: ref.watch(selectedDateProvider).formatEDMY(), @@ -401,11 +434,12 @@ class _CreateTransactionPage extends ConsumerState { } } }, - ), - RecurrenceListTile( - recurrencyEditingPermitted: recurrencyEditingPermitted, - selectedTransaction: widget.transaction, - ), + )), + if (!_isReconciliationTransaction) + RecurrenceListTile( + recurrencyEditingPermitted: recurrencyEditingPermitted, + selectedTransaction: widget.transaction, + ), ], ), ), From 2c238a4f09b33490635957ff11033bf5557a1ae4 Mon Sep 17 00:00:00 2001 From: nyxst4ck Date: Fri, 21 Aug 2026 13:04:39 -0300 Subject: [PATCH 2/2] fix: keep reconciliation deletion available --- .../create_transaction_page.dart | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/pages/transactions/create_transaction/create_transaction_page.dart b/lib/pages/transactions/create_transaction/create_transaction_page.dart index 24b4d191..c8553153 100644 --- a/lib/pages/transactions/create_transaction/create_transaction_page.dart +++ b/lib/pages/transactions/create_transaction/create_transaction_page.dart @@ -219,20 +219,21 @@ class _CreateTransactionPage extends ConsumerState { : "New transaction", ), actions: [ - if (widget.transaction != null && !_isReconciliationTransaction) ...[ - IconButton( - icon: Icon( - Icons.copy, - size: 20, - color: Theme.of(context).colorScheme.primary, - ), - onPressed: () => showDialog( - context: context, - builder: (_) => DuplicateTransactionDialog( - transaction: widget.transaction!, + if (widget.transaction != null) ...[ + if (!_isReconciliationTransaction) + IconButton( + icon: Icon( + Icons.copy, + size: 20, + color: Theme.of(context).colorScheme.primary, + ), + onPressed: () => showDialog( + context: context, + builder: (_) => DuplicateTransactionDialog( + transaction: widget.transaction!, + ), ), ), - ), IconButton( icon: Icon( Icons.delete_outline, @@ -313,15 +314,14 @@ class _CreateTransactionPage extends ConsumerState { LabelListTile(noteController), const Divider(), if (selectedType != TransactionType.transfer) ...[ - (_isReconciliationTransaction - ? NonEditableDetailsListTile( - title: "Account", - icon: Icons.account_balance_wallet, - value: ref - .watch(selectedBankAccountProvider) - ?.name, - ) - : DetailsListTile( + if (_isReconciliationTransaction) + NonEditableDetailsListTile( + title: "Account", + icon: Icons.account_balance_wallet, + value: ref.watch(selectedBankAccountProvider)?.name, + ) + else + DetailsListTile( title: "Account", icon: Icons.account_balance_wallet, value: ref.watch(selectedBankAccountProvider)?.name, @@ -348,15 +348,16 @@ class _CreateTransactionPage extends ConsumerState { ), ); }, - )), + ), const Divider(), - (_isReconciliationTransaction - ? NonEditableDetailsListTile( - title: "Category", - icon: Icons.list_alt, - value: ref.watch(selectedCategoryProvider)?.name, - ) - : DetailsListTile( + if (_isReconciliationTransaction) + NonEditableDetailsListTile( + title: "Category", + icon: Icons.list_alt, + value: ref.watch(selectedCategoryProvider)?.name, + ) + else + DetailsListTile( title: "Category", icon: Icons.list_alt, value: ref.watch(selectedCategoryProvider)?.name, @@ -383,18 +384,17 @@ class _CreateTransactionPage extends ConsumerState { ), ); }, - )), + ), const Divider(), ], - (_isReconciliationTransaction - ? NonEditableDetailsListTile( - title: "Date", - icon: Icons.calendar_month, - value: ref - .watch(selectedDateProvider) - .formatEDMY(), - ) - : DetailsListTile( + if (_isReconciliationTransaction) + NonEditableDetailsListTile( + title: "Date", + icon: Icons.calendar_month, + value: ref.watch(selectedDateProvider).formatEDMY(), + ) + else + DetailsListTile( title: "Date", icon: Icons.calendar_month, value: ref.watch(selectedDateProvider).formatEDMY(), @@ -434,7 +434,7 @@ class _CreateTransactionPage extends ConsumerState { } } }, - )), + ), if (!_isReconciliationTransaction) RecurrenceListTile( recurrencyEditingPermitted: recurrencyEditingPermitted,