from odoo import models class DanceSession(models.Model): _inherit = "dance.session" def write(self, vals): was_cancelled = {session.id: session.status == "cancelled" for session in self} result = super().write(vals) if vals.get("status") == "cancelled" or vals.get("is_cancelled"): sessions = self.filtered(lambda session: not was_cancelled.get(session.id)) sessions._send_session_cancelled_whatsapp() return result def _send_session_cancelled_whatsapp(self): template = self.env["dance.whatsapp.template"].search( [("trigger", "=", "session_cancelled"), ("active", "=", True)], limit=1, ) if not template: return for session in self: enrollments = self.env["dance.enrollment"].search( [ ("batch_id", "=", session.batch_id.id), ("status", "=", "active"), ] ) for enrollment in enrollments: student = enrollment.student_id guardian = student.guardian_id or student.guardian_ids[:1] phone = guardian.mobile or guardian.phone if guardian else False values = { "student": student.name or "", "batch": session.batch_id.name or "", "date": session.date or "", "reason": session.cancellation_reason or "schedule change", "session": session.name or "", } self.env["dance.whatsapp.log"].create( { "template_id": template.id, "trigger": "session_cancelled", "student_id": student.id, "guardian_id": guardian.id if guardian else False, "session_id": session.id, "phone": phone, "message": template.render_message(values), "status": "sent" if phone else "failed", "error_message": False if phone else "Guardian phone number is missing.", } )