2026-09-28 11:03:02 +05:30

53 lines
2.2 KiB
Python

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.",
}
)