# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) from odoo import api, fields, models class FpComplianceEvent(models.Model): _name = 'fusion.plating.compliance.event' _description = 'Fusion Plating - Compliance Event' _inherit = ['mail.thread', 'mail.activity.mixin'] _order = 'due_date, id' name = fields.Char(string='Title', required=True, tracking=True) event_type = fields.Selection( [('report_due', 'Report Due'), ('permit_renewal', 'Permit Renewal'), ('sample_due', 'Sample Due'), ('audit', 'Audit'), ('inspection', 'Inspection'), ('training_expiry', 'Training Expiry'), ('other', 'Other')], string='Type', required=True, default='report_due', tracking=True, ) facility_id = fields.Many2one('fusion.plating.facility', string='Facility', ondelete='cascade', tracking=True) company_id = fields.Many2one('res.company', related='facility_id.company_id', store=True, readonly=True) due_date = fields.Date(string='Due', required=True, tracking=True) owner_id = fields.Many2one('res.users', string='Owner', tracking=True) state = fields.Selection( [('upcoming', 'Upcoming'), ('due', 'Due'), ('overdue', 'Overdue'), ('done', 'Done'), ('skipped', 'Skipped')], string='Status', default='upcoming', required=True, tracking=True, ) permit_id = fields.Many2one('fusion.plating.permit', string='Related Permit', ondelete='set null') regulator_id = fields.Many2one('fusion.plating.regulator', string='Regulator', ondelete='set null') notes = fields.Html(string='Notes') @api.model def _cron_refresh_states(self): today = fields.Date.context_today(self) events = self.search([('state', 'in', ('upcoming', 'due'))]) for ev in events: if not ev.due_date: continue if ev.due_date < today: ev.state = 'overdue' elif ev.due_date == today: ev.state = 'due' def action_mark_done(self): self.write({'state': 'done'}) def action_skip(self): self.write({'state': 'skipped'})