bemade_sports_clinic: notify team staff of updates

Added two mail.message.subtypes to notify all followers of updates to
patient status and changes to injury fields. Added a post-migration
script to update all existing followers to subscribe to these new
subtypes.
This commit is contained in:
Marc Durepos 2024-01-13 18:52:37 -05:00
parent 47c8f9261c
commit bcbb3bda1f
5 changed files with 72 additions and 3 deletions

View file

@ -18,7 +18,7 @@
#
{
'name': 'Sports Clinic Management',
'version': '16.0.1.5.3',
'version': '16.0.1.5.4',
'summary': 'Manage the patients of a sports medicine clinic.',
'description': """
Adds the notion of sports teams, players (patients), coaches and treatment
@ -42,6 +42,7 @@
'security/sports_clinic_groups.xml',
'security/ir.model.access.csv',
'security/sports_clinic_rules.xml',
'data/sports_clinic_data.xml',
'views/sports_team_views.xml',
'views/sports_clinic_menus.xml',
'views/sports_patient_views.xml',

View file

@ -186,4 +186,4 @@
<field name="users" eval="[Command.link(ref('base.user_demo'))]"/>
</record>
</data>
</odoo>
</odoo>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="subtype_patient_update" model="mail.message.subtype">
<field name="name">Patient File Update</field>
<field name="res_model">sports.patient</field>
<field name="default" eval="True"/>
<field name="description">Patient's file has been updated.</field>
<field name="internal" eval="False"/>
<field name="sequence" eval="4"/>
<field name="hidden" eval="False"/>
</record>
<record id="subtype_patient_injury_update" model="mail.message.subtype">
<field name="name">Patient Injury Status Update</field>
<field name="res_model">sports.patient.injury</field>
<field name="default" eval="True"/>
<field name="description">Patient's injury was updated.</field>
<field name="internal" eval="False"/>
<field name="sequence" eval="4"/>
<field name="hidden" eval="False"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,21 @@
from odoo import api, SUPERUSER_ID, Command
def migrate(cr, version):
env = api.Environment(cr, SUPERUSER_ID, {})
patient_followers = env['mail.followers'].search([('res_model', '=',
'sports.patient')])
injury_followers = env['mail.followers'].search([('res_model', '=',
'sports.patient.injury')])
for f in patient_followers:
f.write(
{
'subtype_ids':
[Command.link(env.ref('bemade_sports_clinic.subtype_patient_update').id)]
}
)
for f in injury_followers:
f.write(
{
'subtype_ids':
[Command.link(env.ref('bemade_sports_clinic.subtype_patient_injury_update').id)]
})

View file

@ -63,7 +63,7 @@ class Patient(models.Model):
stage = fields.Selection(
selection=[('no_play', 'Injured'), ('practice_ok', 'Practice OK'), ('healthy', 'Play OK')],
compute='_compute_stage')
last_consultation_date = fields.Date()
last_consultation_date = fields.Date(tracking=True)
active_injury_count = fields.Integer(compute='_compute_active_injury_count')
allergies = fields.Text()
team_info_notes = fields.Html(string="Notes")
@ -187,6 +187,22 @@ class Patient(models.Model):
raise_exception=False
)
def _track_subtype(self, init_values):
# List of fields that should result in team staff notification
external_values = [
"last_consultation_date",
"match_status",
"practice_status",
"predicted_return_date",
"return_date",
"external_notes",
]
if any([v in init_values for v in external_values]):
return self.env.ref("bemade_sports_clinic.subtype_patient_update")
else:
return self.env.ref('mail.mt_note')
class PatientContact(models.Model):
_name = 'sports.patient.contact'
@ -300,3 +316,11 @@ class PatientInjury(models.Model):
'res_id': self.id,
'context': self._context,
}
def _track_subtype(self, init_values):
if 'treatment_professional_ids' in init_values \
and len(init_values) == 1:
return self.env.ref('mail.mt_note')
else:
return self.env.ref('bemade_sports_clinic.subtype_patient_injury_update')