from datetime import timedelta from odoo import api, fields, models class MaintenanceEquipment(models.Model): _inherit = "maintenance.equipment" maintenance_mode = fields.Boolean( string="Maintenance Mode", default=False, tracking=True, ) maintenance_mode_start = fields.Datetime( string="Maintenance Mode Start", readonly=True, ) maintenance_mode_end = fields.Datetime( string="Maintenance Mode End", readonly=True, help="Computed from start + configured duration", ) http_maintenance_request = fields.Many2one( "maintenance.request", string="HTTP Maintenance Request", readonly=True, ) def action_activate_maintenance_mode(self): for rec in self: duration = int( self.env["ir.config_parameter"] .sudo() .get_param( "maintenance_service_http_monitoring.maintenance_mode_duration", 4 ) ) now = fields.Datetime.now() rec.write( { "maintenance_mode": True, "maintenance_mode_start": now, "maintenance_mode_end": now + timedelta(hours=duration), } ) def action_deactivate_maintenance_mode(self): for rec in self: rec.write( { "maintenance_mode": False, "maintenance_mode_start": False, "maintenance_mode_end": False, } ) @api.model def cron_deactivate_expired_maintenance_mode(self): now = fields.Datetime.now() expired = self.search( [ ("maintenance_mode", "=", True), ("maintenance_mode_end", "<=", now), ] ) expired.action_deactivate_maintenance_mode() def create_http_maintenance_request(self, ko_services): self.ensure_one() today = fields.Date.context_today(self) name = f"[HTTP KO] {self.name}" domain = [ ("name", "=", name), ("equipment_id", "=", self.id), ("maintenance_type", "=", "corrective"), ("create_date", ">=", f"{today} 00:00:00"), ("create_date", "<=", f"{today} 23:59:59"), ] existing = self.env["maintenance.request"].search(domain, limit=1) # Check if a task with same name already exist for the day, if it’s the case : skip if existing: self.http_maintenance_request = existing.id return existing request = self.http_maintenance_request if request and not request.stage_id.done: return request vals = { "name": name, "equipment_id": self.id, "priority": "2", "maintenance_type": "corrective", "description": self._build_ko_services_description(ko_services), } if self.employee_id: vals["employee_id"] = self.employee_id.id if self.technician_user_id: vals["user_id"] = self.technician_user_id.id if self.maintenance_team_id: vals["maintenance_team_id"] = self.maintenance_team_id.id else: team = self.env["maintenance.team"].search([], limit=1) if team: vals["maintenance_team_id"] = team.id request = self.env["maintenance.request"].create(vals) self.http_maintenance_request = request.id return request def _build_ko_services_description(self, ko_services): lines = [f"Service KO: {s.service_url or s.name}" for s in ko_services] return "\n".join(lines)