fix recurrent spendings

This commit is contained in:
davmar
2026-09-10 09:23:40 +02:00
parent 5b22fc8694
commit 200ff72e2e
6 changed files with 116 additions and 150 deletions
+25 -6
View File
@@ -12,13 +12,16 @@ import '../providers/tx_meta_provider.dart';
import '../utils/helpers.dart';
import '../utils/look_ahead.dart';
Future<void> showCreateRecurringTemplateSheet(BuildContext context) {
Future<void> showCreateRecurringTemplateSheet(
BuildContext context, {
BankTransaction? initialTx,
}) {
return showModalBottomSheet<void>(
context: context,
isScrollControlled: true,
useSafeArea: true,
showDragHandle: true,
builder: (context) => const _RecurringTemplateSheet(),
builder: (context) => _RecurringTemplateSheet(initialTx: initialTx),
);
}
@@ -36,9 +39,10 @@ Future<void> showEditRecurringTemplateSheet(
}
class _RecurringTemplateSheet extends StatefulWidget {
const _RecurringTemplateSheet({this.existing});
const _RecurringTemplateSheet({this.existing, this.initialTx});
final RecurringTemplate? existing;
final BankTransaction? initialTx;
@override
State<_RecurringTemplateSheet> createState() =>
@@ -71,15 +75,28 @@ class _RecurringTemplateSheetState extends State<_RecurringTemplateSheet> {
_labelId = existing?.labelId;
_currency = existing?.currency ?? 'EUR';
if (existing?.sourceTxId != null) {
BankTransaction? seed = widget.initialTx;
if (seed == null && existing?.sourceTxId != null) {
final txs = context.read<BankController>().transactions;
for (final tx in txs) {
if (tx.id == existing!.sourceTxId) {
_pickedTx = tx;
seed = tx;
break;
}
}
}
if (seed != null) {
_pickedTx = seed;
_currency = seed.currency;
_source = RecurringTemplateSource.transaction;
if (_nameController.text.trim().isEmpty) {
_nameController.text = seed.description;
}
if (existing == null) {
_dayController.text =
'${(DateTime.tryParse(seed.date)?.day ?? 1).clamp(1, 28)}';
}
}
}
@override
@@ -252,7 +269,9 @@ class _RecurringTemplateSheetState extends State<_RecurringTemplateSheet> {
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
widget.existing == null ? 'New recurring template' : 'Edit template',
widget.existing == null
? 'New recurring spending'
: 'Edit recurring spending',
style: theme.textTheme.titleLarge,
),
const SizedBox(height: 16),