You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
8 months ago
|
# -*- 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.'))
|
||
|
|
||
|
|
||
|
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.'))
|