From c62d637f56e050e5eea27d389387d8c0ecc65b9f Mon Sep 17 00:00:00 2001 From: git_admin Date: Tue, 28 Apr 2026 07:35:28 +0000 Subject: [PATCH] Tower: upload at_accounting 18.0.1.7 (via marketplace) --- .../models/account_fiscal_year.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 addons/at_accounting/models/account_fiscal_year.py diff --git a/addons/at_accounting/models/account_fiscal_year.py b/addons/at_accounting/models/account_fiscal_year.py new file mode 100644 index 0000000..64169f7 --- /dev/null +++ b/addons/at_accounting/models/account_fiscal_year.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +from odoo.exceptions import ValidationError +from odoo import api, fields, models, _ + + +from datetime import datetime + + +class AccountFiscalYear(models.Model): + _name = 'account.fiscal.year' + _description = 'Fiscal Year' + + name = fields.Char(string='Name', required=True) + date_from = fields.Date(string='Start Date', required=True, + help='Start Date, included in the fiscal year.') + date_to = fields.Date(string='End Date', required=True, + help='Ending Date, included in the fiscal year.') + company_id = fields.Many2one('res.company', string='Company', required=True, + default=lambda self: self.env.company) + + @api.constrains('date_from', 'date_to', 'company_id') + def _check_dates(self): + ''' + Check interleaving between fiscal years. + There are 3 cases to consider: + + s1 s2 e1 e2 + ( [----)----] + + s2 s1 e2 e1 + [----(----] ) + + s1 s2 e2 e1 + ( [----] ) + ''' + for fy in self: + # Starting date must be prior to the ending date + date_from = fy.date_from + date_to = fy.date_to + if date_to < date_from: + raise ValidationError(_('The ending date must not be prior to the starting date.')) + if fy.company_id.parent_id: + raise ValidationError(_('You cannot have a fiscal year on a child company.')) + + domain = [ + ('id', '!=', fy.id), + ('company_id', '=', fy.company_id.id), + '|', '|', + '&', ('date_from', '<=', fy.date_from), ('date_to', '>=', fy.date_from), + '&', ('date_from', '<=', fy.date_to), ('date_to', '>=', fy.date_to), + '&', ('date_from', '<=', fy.date_from), ('date_to', '>=', fy.date_to), + ] + + if self.search_count(domain) > 0: + raise ValidationError(_('You can not have an overlap between two fiscal years, please correct the start and/or end dates of your fiscal years.'))