Moved the make_txn_form_from_model utility to the from_model method in the TransactionForm in the accounting application.
This commit is contained in:
parent
6f019d23c0
commit
790e8da908
@ -23,6 +23,7 @@ import re
|
||||
from typing import Optional, List, Dict
|
||||
|
||||
from django import forms
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.validators import RegexValidator
|
||||
from django.db.models import Q, Max, Model
|
||||
from django.db.models.functions import Length
|
||||
@ -295,6 +296,46 @@ class TransactionForm(forms.Form):
|
||||
for key in new_post.keys():
|
||||
post[key] = new_post[key]
|
||||
|
||||
@staticmethod
|
||||
def from_model(txn: Transaction, txn_type: str):
|
||||
"""Converts a transaction data model to a transaction form.
|
||||
|
||||
Args:
|
||||
txn_type: The transaction type.
|
||||
txn: The transaction data model.
|
||||
|
||||
Returns:
|
||||
The transaction form.
|
||||
"""
|
||||
form = TransactionForm(
|
||||
{x: str(getattr(txn, x)) for x in ["date", "notes"]
|
||||
if getattr(txn, x) is not None})
|
||||
form.transaction = txn if txn.pk is not None else None
|
||||
form.txn_type = txn_type
|
||||
records = []
|
||||
if txn_type != "income":
|
||||
records = records + txn.debit_records
|
||||
if txn_type != "expense":
|
||||
records = records + txn.credit_records
|
||||
for record in records:
|
||||
data = {x: getattr(record, x)
|
||||
for x in ["summary", "amount"]
|
||||
if getattr(record, x) is not None}
|
||||
if record.pk is not None:
|
||||
data["id"] = record.pk
|
||||
try:
|
||||
data["account"] = record.account.code
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
record_form = RecordForm(data)
|
||||
record_form.txn_form = form
|
||||
record_form.is_credit = record.is_credit
|
||||
if record.is_credit:
|
||||
form.credit_records.append(record_form)
|
||||
else:
|
||||
form.debit_records.append(record_form)
|
||||
return form
|
||||
|
||||
def clean(self):
|
||||
"""Validates the form globally.
|
||||
|
||||
|
@ -24,7 +24,6 @@ import re
|
||||
from typing import Union, Tuple, List, Optional, Iterable, Mapping, Dict
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db.models import Q, Sum, Case, When, F, Count, Max, Min, Value, \
|
||||
CharField
|
||||
from django.db.models.functions import StrIndex, Left
|
||||
@ -35,7 +34,6 @@ from django.utils.translation import gettext as _
|
||||
from mia_core.period import Period
|
||||
from mia_core.templatetags.mia_core import smart_month
|
||||
from mia_core.utils import new_pk
|
||||
from .forms import TransactionForm, RecordForm
|
||||
from .models import Account, Transaction, Record
|
||||
|
||||
AccountData = Tuple[Union[str, int], str, str, str]
|
||||
@ -580,47 +578,6 @@ def fill_txn_from_post(txn_type: str, txn: Transaction,
|
||||
txn.records = records
|
||||
|
||||
|
||||
def make_txn_form_from_model(txn_type: str,
|
||||
txn: Transaction) -> TransactionForm:
|
||||
"""Converts a transaction data model to a transaction form.
|
||||
|
||||
Args:
|
||||
txn_type: The transaction type.
|
||||
txn: The transaction data model.
|
||||
|
||||
Returns:
|
||||
The transaction form.
|
||||
"""
|
||||
form = TransactionForm(
|
||||
{x: str(getattr(txn, x)) for x in ["date", "notes"]
|
||||
if getattr(txn, x) is not None})
|
||||
form.transaction = txn if txn.pk is not None else None
|
||||
form.txn_type = txn_type
|
||||
records = []
|
||||
if txn_type != "income":
|
||||
records = records + txn.debit_records
|
||||
if txn_type != "expense":
|
||||
records = records + txn.credit_records
|
||||
for record in records:
|
||||
data = {x: getattr(record, x)
|
||||
for x in ["summary", "amount"]
|
||||
if getattr(record, x) is not None}
|
||||
if record.pk is not None:
|
||||
data["id"] = record.pk
|
||||
try:
|
||||
data["account"] = record.account.code
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
record_form = RecordForm(data)
|
||||
record_form.txn_form = form
|
||||
record_form.is_credit = record.is_credit
|
||||
if record.is_credit:
|
||||
form.credit_records.append(record_form)
|
||||
else:
|
||||
form.debit_records.append(record_form)
|
||||
return form
|
||||
|
||||
|
||||
def _find_max_record_no(txn_type: str,
|
||||
post: Mapping[str, str]) -> Dict[str, int]:
|
||||
"""Finds the max debit and record numbers from the POSTed form.
|
||||
|
@ -827,7 +827,7 @@ class TransactionFormView(FormView):
|
||||
|
||||
def make_form_from_model(self, obj: Transaction) -> TransactionForm:
|
||||
"""Creates and returns the form from a data model."""
|
||||
return utils.make_txn_form_from_model(self.txn_type, obj)
|
||||
return TransactionForm.from_model(obj, self.txn_type)
|
||||
|
||||
def fill_model_from_form(self, obj: Transaction,
|
||||
form: TransactionForm) -> None:
|
||||
|
Loading…
Reference in New Issue
Block a user