53 lines
2.2 KiB
Python
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.",
|
|
}
|
|
)
|