from odoo import api, fields, models from odoo.exceptions import ValidationError class McAcademicTerm(models.Model): _name = "mc.academic.term" _inherit = ["mail.thread"] _description = "Academic Term" _order = "year_id, sequence, date_start" _rec_name = "name" name = fields.Char(string="Name", required=True, tracking=True) year_id = fields.Many2one( "mc.academic.year", string="Academic Year", required=True, ondelete="cascade", tracking=True, ) date_start = fields.Date(string="Start Date", required=True, tracking=True) date_end = fields.Date(string="End Date", required=True, tracking=True) sequence = fields.Integer(string="Sequence", default=10) company_id = fields.Many2one( related="year_id.company_id", string="Company", store=True, readonly=True, ) _name_year_uniq = models.Constraint( "unique(name, year_id)", "A term with this name already exists for this academic year.", ) @api.constrains("date_start", "date_end") def _check_dates(self): for term in self: if term.date_start and term.date_end and term.date_end <= term.date_start: raise ValidationError( "Term '%s' end date must be after its start date." % term.name ) @api.constrains("date_start", "date_end", "year_id") def _check_within_year(self): for term in self: year = term.year_id if not (year.date_start and year.date_end and term.date_start and term.date_end): continue if term.date_start < year.date_start or term.date_end > year.date_end: raise ValidationError( "Term '%s' must fall within its academic year (%s)." % (term.name, year.name) )