Skip to content

Commit ad16691

Browse files
committed
- **Refactored forms and staged transaction handling:**
- Consolidated and streamlined widgets, labels, and help texts for `TransactionModelForm`, `BankAccountCreateForm`, and `StagedTransactionModelForm` for consistency and usability. - Simplified queryset filters, removed redundant queries, and enhanced `BaseStagedTransactionModelFormSet` to handle more dynamic setups (e.g., `children`, `units`, `vendors`). - Improved `tx_import`, `tx_split`, and `bundle_split` handling logic with clearer validation and dynamic element visibility for child transactions and account selections. - Enhanced validation and cleaned data logic for specific fields including `matched_transaction` and `activity`. - **Enhanced `BankAccountModel` account selection:** - Expanded filters for account roles in `BankAccountCreateForm` and `BankAccountUpdateForm` to include `LIABILITY_CL_CREDIT_LINE`. - Adjusted widget definitions to improve uniformity and provide better placeholders and help texts. - **Major improvements to transaction matching logics:** - Added mechanisms to dynamically adjust querysets for match candidates against transfers and debt payments. - Introduced informative error messages for ambiguous match cases, ensuring user clarity in selection. ### **
1 parent 35747f2 commit ad16691

File tree

3 files changed

+341
-230
lines changed

3 files changed

+341
-230
lines changed
Lines changed: 47 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,36 @@
1-
from django.forms import ModelForm, TextInput, Select, ValidationError
1+
from django.forms import ModelForm, Select, TextInput, ValidationError
22
from django.utils.translation import gettext_lazy as _
33

4-
from django_ledger.io.roles import ASSET_CA_CASH, LIABILITY_CL_ACC_PAYABLE, LIABILITY_LTL_MORTGAGE_PAYABLE
4+
from django_ledger.io.roles import (
5+
ASSET_CA_CASH,
6+
LIABILITY_CL_ACC_PAYABLE,
7+
LIABILITY_CL_CREDIT_LINE,
8+
LIABILITY_LTL_MORTGAGE_PAYABLE,
9+
)
510
from django_ledger.models import BankAccountModel
611
from django_ledger.models.accounts import AccountModel
712
from django_ledger.settings import DJANGO_LEDGER_FORM_INPUT_CLASSES
813

914

1015
class BankAccountCreateForm(ModelForm):
11-
1216
def __init__(self, *args, entity_slug, user_model, **kwargs):
1317
super().__init__(*args, **kwargs)
1418
self.ENTITY_SLUG = entity_slug
1519
self.USER_MODEL = user_model
1620

1721
# todo: only the accounts that do not hava an associated bank account should be available to pick from...
18-
account_qs = AccountModel.objects.for_entity(
19-
user_model=self.USER_MODEL,
20-
entity_model=self.ENTITY_SLUG
21-
).available().filter(
22-
role__in=[
23-
ASSET_CA_CASH,
24-
LIABILITY_CL_ACC_PAYABLE,
25-
LIABILITY_LTL_MORTGAGE_PAYABLE
26-
])
22+
account_qs = (
23+
AccountModel.objects.for_entity(user_model=self.USER_MODEL, entity_model=self.ENTITY_SLUG)
24+
.available()
25+
.filter(
26+
role__in=[
27+
ASSET_CA_CASH,
28+
LIABILITY_CL_ACC_PAYABLE,
29+
LIABILITY_LTL_MORTGAGE_PAYABLE,
30+
LIABILITY_CL_CREDIT_LINE,
31+
]
32+
)
33+
)
2734
self.fields['account_model'].queryset = account_qs
2835

2936
def clean(self):
@@ -36,9 +43,7 @@ def clean(self):
3643

3744
# catching unique database constraint...
3845
if BankAccountModel.objects.filter(
39-
account_model=account_model,
40-
routing_number__exact=routing_number,
41-
account_number__exact=account_number
46+
account_model=account_model, routing_number__exact=routing_number, account_number__exact=account_number
4247
).exists():
4348
raise ValidationError('Duplicate bank account model.')
4449

@@ -52,35 +57,26 @@ class Meta:
5257
'aba_number',
5358
'swift_number',
5459
'account_model',
55-
'active'
60+
'active',
5661
]
5762
widgets = {
58-
'name': TextInput(attrs={
59-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
60-
'placeholder': _('Enter account name...')
61-
}),
62-
'account_number': TextInput(attrs={
63-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
64-
'placeholder': _('Enter account number...')
65-
}),
66-
'routing_number': TextInput(attrs={
67-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
68-
'placeholder': _('Enter routing number...')
69-
}),
70-
'aba_number': TextInput(attrs={
71-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
72-
'placeholder': _('Enter ABA number...')
73-
}),
74-
'swift_number': TextInput(attrs={
75-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
76-
'placeholder': _('Enter SWIFT number...')
77-
}),
78-
'account_type': Select(attrs={
79-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
80-
}),
81-
'account_model': Select(attrs={
82-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
83-
})
63+
'name': TextInput(
64+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter account name...')}
65+
),
66+
'account_number': TextInput(
67+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter account number...')}
68+
),
69+
'routing_number': TextInput(
70+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter routing number...')}
71+
),
72+
'aba_number': TextInput(
73+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter ABA number...')}
74+
),
75+
'swift_number': TextInput(
76+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter SWIFT number...')}
77+
),
78+
'account_type': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
79+
'account_model': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
8480
}
8581
labels = {
8682
'name': _('Account Name'),
@@ -96,23 +92,13 @@ class Meta:
9692
class BankAccountUpdateForm(BankAccountCreateForm):
9793
class Meta:
9894
model = BankAccountModel
99-
fields = [
100-
'name',
101-
'account_type',
102-
'account_model',
103-
'active'
104-
]
95+
fields = ['name', 'account_type', 'account_model', 'active']
10596
widgets = {
106-
'name': TextInput(attrs={
107-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES,
108-
'placeholder': _('Enter account name...')
109-
}),
110-
'account_type': Select(attrs={
111-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
112-
}),
113-
'account_model': Select(attrs={
114-
'class': DJANGO_LEDGER_FORM_INPUT_CLASSES
115-
})
97+
'name': TextInput(
98+
attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES, 'placeholder': _('Enter account name...')}
99+
),
100+
'account_type': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
101+
'account_model': Select(attrs={'class': DJANGO_LEDGER_FORM_INPUT_CLASSES}),
116102
}
117103

118104
def clean(self):
@@ -124,8 +110,8 @@ def clean(self):
124110
# catching unique database constraint...
125111
if 'cash_account' in self.changed_data:
126112
if BankAccountModel.objects.filter(
127-
cash_account=cash_account,
128-
routing_number__exact=self.instance.routing_number,
129-
account_number__exact=self.instance.account_number
113+
cash_account=cash_account,
114+
routing_number__exact=self.instance.routing_number,
115+
account_number__exact=self.instance.account_number,
130116
).exists():
131117
raise ValidationError('Duplicate bank account model.')

0 commit comments

Comments
 (0)