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:
		| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user