Moved the AccountExists, IsDebitAccount, and IsCreditAccount validators from the "accounting.journal_entry.forms.line_item" module to the "accounting.forms" module, to share it with the "accounting.option.forms" module. Removed the redundant AccountExists, IsExpenseAccount, and IsIncomeAccount validators from the "accounting.option.forms" module.
This commit is contained in:
parent
68c810d492
commit
5a9e08f2c4
@ -17,12 +17,15 @@
|
|||||||
"""The forms.
|
"""The forms.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
|
|
||||||
|
from flask_babel import LazyString
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import StringField, ValidationError
|
from wtforms import StringField, ValidationError
|
||||||
|
|
||||||
from accounting import db
|
from accounting import db
|
||||||
from accounting.locale import lazy_gettext
|
from accounting.locale import lazy_gettext
|
||||||
from accounting.models import Currency
|
from accounting.models import Currency, Account
|
||||||
|
|
||||||
|
|
||||||
class CurrencyExists:
|
class CurrencyExists:
|
||||||
@ -34,3 +37,60 @@ class CurrencyExists:
|
|||||||
if db.session.get(Currency, field.data) is None:
|
if db.session.get(Currency, field.data) is None:
|
||||||
raise ValidationError(lazy_gettext(
|
raise ValidationError(lazy_gettext(
|
||||||
"The currency does not exist."))
|
"The currency does not exist."))
|
||||||
|
|
||||||
|
|
||||||
|
class AccountExists:
|
||||||
|
"""The validator to check if the account exists."""
|
||||||
|
|
||||||
|
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
||||||
|
if field.data is None:
|
||||||
|
return
|
||||||
|
if Account.find_by_code(field.data) is None:
|
||||||
|
raise ValidationError(lazy_gettext(
|
||||||
|
"The account does not exist."))
|
||||||
|
|
||||||
|
|
||||||
|
class IsDebitAccount:
|
||||||
|
"""The validator to check if the account is for debit line items."""
|
||||||
|
|
||||||
|
def __init__(self, message: str | LazyString | None = None):
|
||||||
|
"""Constructs the validator.
|
||||||
|
|
||||||
|
:param message: The optional custom error message.
|
||||||
|
"""
|
||||||
|
if message is None:
|
||||||
|
message = lazy_gettext(
|
||||||
|
"This account is not for debit line items.")
|
||||||
|
self.__message: str | LazyString = message
|
||||||
|
|
||||||
|
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
||||||
|
if field.data is None:
|
||||||
|
return
|
||||||
|
if re.match(r"^(?:[1235689]|7[5678])", field.data) \
|
||||||
|
and not field.data.startswith("3351-") \
|
||||||
|
and not field.data.startswith("3353-"):
|
||||||
|
return
|
||||||
|
raise ValidationError(self.__message)
|
||||||
|
|
||||||
|
|
||||||
|
class IsCreditAccount:
|
||||||
|
"""The validator to check if the account is for credit line items."""
|
||||||
|
|
||||||
|
def __init__(self, message: str | LazyString | None = None):
|
||||||
|
"""Constructs the validator.
|
||||||
|
|
||||||
|
:param message: The optional custom error message.
|
||||||
|
"""
|
||||||
|
if message is None:
|
||||||
|
message = lazy_gettext(
|
||||||
|
"This account is not for credit line items.")
|
||||||
|
self.__message: str | LazyString = message
|
||||||
|
|
||||||
|
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
||||||
|
if field.data is None:
|
||||||
|
return
|
||||||
|
if re.match(r"^(?:[123489]|7[1234])", field.data) \
|
||||||
|
and not field.data.startswith("3351-") \
|
||||||
|
and not field.data.startswith("3353-"):
|
||||||
|
return
|
||||||
|
raise ValidationError(self.__message)
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
"""The line item sub-forms for the journal entry management.
|
"""The line item sub-forms for the journal entry management.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import re
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
@ -29,6 +28,7 @@ from wtforms import StringField, ValidationError, DecimalField, IntegerField
|
|||||||
from wtforms.validators import DataRequired, Optional
|
from wtforms.validators import DataRequired, Optional
|
||||||
|
|
||||||
from accounting import db
|
from accounting import db
|
||||||
|
from accounting.forms import AccountExists, IsDebitAccount, IsCreditAccount
|
||||||
from accounting.locale import lazy_gettext
|
from accounting.locale import lazy_gettext
|
||||||
from accounting.models import Account, JournalEntryLineItem
|
from accounting.models import Account, JournalEntryLineItem
|
||||||
from accounting.template_filters import format_amount
|
from accounting.template_filters import format_amount
|
||||||
@ -105,45 +105,6 @@ class OriginalLineItemNotOffset:
|
|||||||
"The original line item cannot be an offset item."))
|
"The original line item cannot be an offset item."))
|
||||||
|
|
||||||
|
|
||||||
class AccountExists:
|
|
||||||
"""The validator to check if the account exists."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if Account.find_by_code(field.data) is None:
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"The account does not exist."))
|
|
||||||
|
|
||||||
|
|
||||||
class IsDebitAccount:
|
|
||||||
"""The validator to check if the account is for debit line items."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if re.match(r"^(?:[1235689]|7[5678])", field.data) \
|
|
||||||
and not field.data.startswith("3351-") \
|
|
||||||
and not field.data.startswith("3353-"):
|
|
||||||
return
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"This account is not for debit line items."))
|
|
||||||
|
|
||||||
|
|
||||||
class IsCreditAccount:
|
|
||||||
"""The validator to check if the account is for credit line items."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if re.match(r"^(?:[123489]|7[1234])", field.data) \
|
|
||||||
and not field.data.startswith("3351-") \
|
|
||||||
and not field.data.startswith("3353-"):
|
|
||||||
return
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"This account is not for credit line items."))
|
|
||||||
|
|
||||||
|
|
||||||
class SameAccountAsOriginalLineItem:
|
class SameAccountAsOriginalLineItem:
|
||||||
"""The validator to check if the account is the same as the
|
"""The validator to check if the account is the same as the
|
||||||
original line item."""
|
original line item."""
|
||||||
|
@ -17,15 +17,14 @@
|
|||||||
"""The forms for the option management.
|
"""The forms for the option management.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import re
|
|
||||||
|
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from flask_babel import LazyString
|
from flask_babel import LazyString
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import StringField, FieldList, FormField, IntegerField
|
from wtforms import StringField, FieldList, FormField, IntegerField
|
||||||
from wtforms.validators import DataRequired, ValidationError
|
from wtforms.validators import DataRequired, ValidationError
|
||||||
|
|
||||||
from accounting.forms import CurrencyExists
|
from accounting.forms import CurrencyExists, AccountExists, IsDebitAccount, \
|
||||||
|
IsCreditAccount
|
||||||
from accounting.locale import lazy_gettext
|
from accounting.locale import lazy_gettext
|
||||||
from accounting.models import Account
|
from accounting.models import Account
|
||||||
from accounting.utils.current_account import CurrentAccount, current_accounts
|
from accounting.utils.current_account import CurrentAccount, current_accounts
|
||||||
@ -33,45 +32,6 @@ from accounting.utils.options import Options
|
|||||||
from accounting.utils.strip_text import strip_text
|
from accounting.utils.strip_text import strip_text
|
||||||
|
|
||||||
|
|
||||||
class AccountExists:
|
|
||||||
"""The validator to check if the account exists."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if Account.find_by_code(field.data) is None:
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"The account does not exist."))
|
|
||||||
|
|
||||||
|
|
||||||
class IsExpenseAccount:
|
|
||||||
"""The validator to check if the account is for expense."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if re.match(r"^(?:[1235689]|7[5678])", field.data) \
|
|
||||||
and not field.data.startswith("3351-") \
|
|
||||||
and not field.data.startswith("3353-"):
|
|
||||||
return
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"This account is not for expense."))
|
|
||||||
|
|
||||||
|
|
||||||
class IsIncomeAccount:
|
|
||||||
"""The validator to check if the account is for income."""
|
|
||||||
|
|
||||||
def __call__(self, form: FlaskForm, field: StringField) -> None:
|
|
||||||
if field.data is None:
|
|
||||||
return
|
|
||||||
if re.match(r"^(?:[123489]|7[1234])", field.data) \
|
|
||||||
and not field.data.startswith("3351-") \
|
|
||||||
and not field.data.startswith("3353-"):
|
|
||||||
return
|
|
||||||
raise ValidationError(lazy_gettext(
|
|
||||||
"This account is not for income."))
|
|
||||||
|
|
||||||
|
|
||||||
class NotStartPayableFromExpense:
|
class NotStartPayableFromExpense:
|
||||||
"""The validator to check that a payable line item does not start from
|
"""The validator to check that a payable line item does not start from
|
||||||
expense."""
|
expense."""
|
||||||
@ -143,9 +103,10 @@ class RecurringExpenseForm(RecurringItemForm):
|
|||||||
"""The name of the recurring item."""
|
"""The name of the recurring item."""
|
||||||
account_code = StringField(
|
account_code = StringField(
|
||||||
filters=[strip_text],
|
filters=[strip_text],
|
||||||
validators=[AccountExists(),
|
validators=[
|
||||||
IsExpenseAccount(),
|
AccountExists(),
|
||||||
NotStartPayableFromExpense()])
|
IsDebitAccount(lazy_gettext("This account is not for expense.")),
|
||||||
|
NotStartPayableFromExpense()])
|
||||||
"""The account code."""
|
"""The account code."""
|
||||||
description_template = StringField(
|
description_template = StringField(
|
||||||
filters=[strip_text],
|
filters=[strip_text],
|
||||||
@ -165,9 +126,10 @@ class RecurringIncomeForm(RecurringItemForm):
|
|||||||
"""The name of the recurring item."""
|
"""The name of the recurring item."""
|
||||||
account_code = StringField(
|
account_code = StringField(
|
||||||
filters=[strip_text],
|
filters=[strip_text],
|
||||||
validators=[AccountExists(),
|
validators=[
|
||||||
IsIncomeAccount(),
|
AccountExists(),
|
||||||
NotStartReceivableFromIncome()])
|
IsCreditAccount(lazy_gettext("This account is not for income.")),
|
||||||
|
NotStartReceivableFromIncome()])
|
||||||
"""The account code."""
|
"""The account code."""
|
||||||
description_template = StringField(
|
description_template = StringField(
|
||||||
filters=[strip_text],
|
filters=[strip_text],
|
||||||
|
Loading…
Reference in New Issue
Block a user