Skip to content

Commit

Permalink
Always raise exception when fiscal year or period are not found
Browse files Browse the repository at this point in the history
  • Loading branch information
cedk committed Mar 8, 2023
1 parent 0551bbc commit 641cb7c
Show file tree
Hide file tree
Showing 12 changed files with 129 additions and 86 deletions.
1 change: 1 addition & 0 deletions modules/account/CHANGELOG
@@ -1,3 +1,4 @@
* Always raise exception when fiscal year or period are not found
* Remove support for Python 3.7
* Add support for Python 3.11
* Add reversal option when cancelling move
Expand Down
21 changes: 14 additions & 7 deletions modules/account/account.py
Expand Up @@ -28,7 +28,8 @@

from .common import ActivePeriodMixin, ContextCompanyMixin, PeriodMixin
from .exceptions import (
AccountValidationError, ChartWarning, SecondCurrencyError)
AccountValidationError, ChartWarning, FiscalYearNotFoundError,
SecondCurrencyError)


def TypeMixin(template=False):
Expand Down Expand Up @@ -2167,9 +2168,12 @@ def default_fiscalyear(cls):
period = Period(context['period'])
return period.fiscalyear.id
else:
fiscalyear = FiscalYear.find(
context.get('company'), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
context.get('company'), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id

@classmethod
def default_start_period(cls):
Expand Down Expand Up @@ -2678,9 +2682,12 @@ class IncomeStatementContext(ModelView):
def default_fiscalyear(cls):
pool = Pool()
FiscalYear = pool.get('account.fiscalyear')
fiscalyear = FiscalYear.find(
cls.default_company(), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
cls.default_company(), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id

@staticmethod
def default_company():
Expand Down
35 changes: 17 additions & 18 deletions modules/account/fiscalyear.py
Expand Up @@ -236,10 +236,10 @@ def create_periods(cls, fiscalyears):
pass

@classmethod
def find(cls, company, date=None, exception=True, test_state=True):
def find(cls, company, date=None, test_state=True):
'''
Return the fiscal year for the company at the date or the current date.
If exception is set it raises an exception if any fiscal year is found.
Return the fiscal year for the company at the date or the current date
or raise FiscalYearNotFoundError.
If test_state is true, it searches on non-closed fiscal years
'''
pool = Pool()
Expand Down Expand Up @@ -270,21 +270,20 @@ def find(cls, company, date=None, exception=True, test_state=True):
fiscalyear = cls(fiscalyear)
found = fiscalyear and (not test_state or fiscalyear.state == 'open')
if not found:
if exception:
lang = Lang.get()
if company is not None and not isinstance(company, Company):
company = Company(company)
if not fiscalyear:
raise FiscalYearNotFoundError(
gettext('account.msg_no_fiscalyear_date',
date=lang.strftime(date),
company=company.rec_name if company else ''))
else:
raise FiscalYearNotFoundError(
gettext('account.msg_no_open_fiscalyear_date',
date=lang.strftime(date),
fiscalyear=fiscalyear.rec_name,
company=company.rec_name if company else ''))
lang = Lang.get()
if company is not None and not isinstance(company, Company):
company = Company(company)
if not fiscalyear:
raise FiscalYearNotFoundError(
gettext('account.msg_no_fiscalyear_date',
date=lang.strftime(date),
company=company.rec_name if company else ''))
else:
raise FiscalYearNotFoundError(
gettext('account.msg_no_open_fiscalyear_date',
date=lang.strftime(date),
fiscalyear=fiscalyear.rec_name,
company=company.rec_name if company else ''))
else:
return fiscalyear

Expand Down
24 changes: 16 additions & 8 deletions modules/account/move.py
Expand Up @@ -29,8 +29,8 @@

from .exceptions import (
CancelDelegatedWarning, CancelWarning, DelegateLineError, GroupLineError,
PostError, ReconciliationDeleteWarning, ReconciliationError,
RescheduleLineError)
PeriodNotFoundError, PostError, ReconciliationDeleteWarning,
ReconciliationError, RescheduleLineError)

_MOVE_STATES = {
'readonly': Eval('state') == 'posted',
Expand Down Expand Up @@ -156,8 +156,11 @@ def default_company():
def default_period(cls):
Period = Pool().get('account.period')
company = cls.default_company()
period = Period.find(company, exception=False)
return period.id if period else None
try:
period = Period.find(company)
except PeriodNotFoundError:
return None
return period.id

@staticmethod
def default_state():
Expand Down Expand Up @@ -192,8 +195,10 @@ def on_change_date(self):
or not (
self.period.start_date <= self.date
<= self.period.end_date)):
self.period = Period.find(
company, date=self.date, exception=False)
try:
self.period = Period.find(company, date=self.date)
except PeriodNotFoundError:
self.period = None
for line in (self.lines or []):
line.date = self.date

Expand Down Expand Up @@ -1671,8 +1676,11 @@ def default_period(cls):
pool = Pool()
Period = pool.get('account.period')
company = Transaction().context.get('company')
period = Period.find(company, exception=False)
return period.id if period else None
try:
period = Period.find(company)
except PeriodNotFoundError:
return None
return period.id


class OpenJournal(Wizard):
Expand Down
9 changes: 6 additions & 3 deletions modules/account/move_template.py
Expand Up @@ -15,7 +15,7 @@
from trytond.wizard import (
Button, StateAction, StateTransition, StateView, Wizard)

from .exceptions import MoveTemplateExpressionError
from .exceptions import MoveTemplateExpressionError, PeriodNotFoundError


class MoveTemplate(DeactivableMixin, ModelSQL, ModelView):
Expand Down Expand Up @@ -410,8 +410,11 @@ def default_period(cls):
pool = Pool()
Period = pool.get('account.period')
company = Transaction().context.get('company')
period = Period.find(company, exception=False)
return period.id if period else None
try:
period = Period.find(company)
except PeriodNotFoundError:
return None
return period.id


class CreateMoveKeywords(ModelView):
Expand Down
35 changes: 17 additions & 18 deletions modules/account/period.py
Expand Up @@ -182,10 +182,10 @@ def check_post_move_sequence(cls, periods, field_names=None):
second=periods[0].rec_name))

@classmethod
def find(cls, company, date=None, exception=True, test_state=True):
def find(cls, company, date=None, test_state=True):
'''
Return the period for the company at the date or the current date.
If exception is set it raises an exception if no period is found.
Return the period for the company at the date or the current date
or raise PeriodNotFoundError.
If test_state is true, it searches on non-closed periods
'''
pool = Pool()
Expand Down Expand Up @@ -217,21 +217,20 @@ def find(cls, company, date=None, exception=True, test_state=True):
period = cls(period)
found = period and (not test_state or period.state == 'open')
if not found:
if exception:
lang = Lang.get()
if company is not None and not isinstance(company, Company):
company = Company(company)
if not period:
raise PeriodNotFoundError(
gettext('account.msg_no_period_date',
date=lang.strftime(date),
company=company.rec_name if company else ''))
else:
raise PeriodNotFoundError(
gettext('account.msg_no_open_period_date',
date=lang.strftime(date),
period=period.rec_name,
company=company.rec_name if company else ''))
lang = Lang.get()
if company is not None and not isinstance(company, Company):
company = Company(company)
if not period:
raise PeriodNotFoundError(
gettext('account.msg_no_period_date',
date=lang.strftime(date),
company=company.rec_name if company else ''))
else:
raise PeriodNotFoundError(
gettext('account.msg_no_open_period_date',
date=lang.strftime(date),
period=period.rec_name,
company=company.rec_name if company else ''))
else:
return period

Expand Down
9 changes: 6 additions & 3 deletions modules/account/tax.py
Expand Up @@ -23,6 +23,7 @@
from trytond.wizard import Button, StateAction, StateView, Wizard

from .common import ActivePeriodMixin, ContextCompanyMixin, PeriodMixin
from .exceptions import PeriodNotFoundError

KINDS = [
('sale', 'Sale'),
Expand Down Expand Up @@ -557,9 +558,11 @@ def default_method(cls):
def default_period(cls):
pool = Pool()
Period = pool.get('account.period')
period = Period.find(
cls.default_company(), exception=False, test_state=False)
return period.id if period else None
try:
period = Period.find(cls.default_company(), test_state=False)
except PeriodNotFoundError:
return None
return period.id

@fields.depends(
'method', 'company',
Expand Down
10 changes: 7 additions & 3 deletions modules/account_be/account.py
Expand Up @@ -6,6 +6,7 @@
from sql.operators import Concat

from trytond.model import ModelSQL, ModelView, fields
from trytond.modules.account.exceptions import FiscalYearNotFoundError
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
Expand Down Expand Up @@ -163,7 +164,10 @@ def default_fiscalyear(cls):
FiscalYear = pool.get('account.fiscalyear')
context = Transaction().context
if 'fiscalyear' not in context:
fiscalyear = FiscalYear.find(
cls.default_company(), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
cls.default_company(), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id
return context['fiscalyear']
37 changes: 23 additions & 14 deletions modules/account_budget/account.py
Expand Up @@ -10,6 +10,7 @@
from trytond.i18n import gettext
from trytond.model import (
Index, ModelSQL, ModelView, Unique, fields, sequence_ordered, tree)
from trytond.modules.account.exceptions import FiscalYearNotFoundError
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool
from trytond.pyson import Bool, Eval, If
Expand Down Expand Up @@ -282,15 +283,17 @@ def default_budget(cls):
context = Transaction().context
if 'budget' in context:
return context.get('budget')
fiscalyear = FiscalYear.find(
context.get('company'), exception=False, test_state=False)
if fiscalyear:
budgets = Budget.search([
('fiscalyear', '=', fiscalyear.id),
], limit=1)
if budgets:
budget, = budgets
return budget.id
try:
fiscalyear = FiscalYear.find(
context.get('company'), test_state=False)
except FiscalYearNotFoundError:
return None
budgets = Budget.search([
('fiscalyear', '=', fiscalyear.id),
], limit=1)
if budgets:
budget, = budgets
return budget.id

@fields.depends('budget')
def on_change_with_fiscalyear(self, name=None):
Expand Down Expand Up @@ -334,17 +337,23 @@ def __setup__(cls):
def default_fiscalyear(cls):
pool = Pool()
FiscalYear = pool.get('account.fiscalyear')
fiscalyear = FiscalYear.find(
cls.default_company(), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
cls.default_company(), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id

@fields.depends('company', 'fiscalyear')
def on_change_company(self):
pool = Pool()
FiscalYear = pool.get('account.fiscalyear')
if not self.fiscalyear or self.fiscalyear.company != self.company:
self.fiscalyear = FiscalYear.find(
self.company, exception=False, test_state=False)
try:
self.fiscalyear = FiscalYear.find(
self.company, test_state=False)
except FiscalYearNotFoundError:
pass

def get_rec_name(self, name):
return '%s - %s' % (self.name, self.fiscalyear.rec_name)
Expand Down
10 changes: 7 additions & 3 deletions modules/account_es/reporting_tax.py
Expand Up @@ -21,6 +21,7 @@
from trytond.i18n import gettext
from trytond.model import ModelSQL, ModelView, fields
from trytond.model.modelsql import convert_from
from trytond.modules.account.exceptions import FiscalYearNotFoundError
from trytond.modules.account_eu.account import ECSalesList, ECSalesListContext
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool
Expand Down Expand Up @@ -757,9 +758,12 @@ def default_company(cls):
def default_fiscalyear(cls):
pool = Pool()
FiscalYear = pool.get('account.fiscalyear')
fiscalyear = FiscalYear.find(
cls.default_company(), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
cls.default_company(), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id


class ESVATBook(ModelSQL, ModelView):
Expand Down
10 changes: 7 additions & 3 deletions modules/account_eu/account.py
Expand Up @@ -5,6 +5,7 @@
from sql.functions import CurrentTimestamp

from trytond.model import ModelSQL, ModelView, fields
from trytond.modules.account.exceptions import FiscalYearNotFoundError
from trytond.modules.currency.fields import Monetary
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Bool, Eval
Expand Down Expand Up @@ -133,7 +134,10 @@ def default_fiscalyear(cls):
FiscalYear = pool.get('account.fiscalyear')
context = Transaction().context
if 'fiscalyear' not in context:
fiscalyear = FiscalYear.find(
cls.default_company(), exception=False, test_state=False)
return fiscalyear.id if fiscalyear else None
try:
fiscalyear = FiscalYear.find(
cls.default_company(), test_state=False)
except FiscalYearNotFoundError:
return None
return fiscalyear.id
return context['fiscalyear']

0 comments on commit 641cb7c

Please sign in to comment.