From bcbb3bda1fe877cf638fd352046082c68a5bd8bd Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Sat, 13 Jan 2024 18:52:37 -0500 Subject: [PATCH] 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. --- bemade_sports_clinic/__manifest__.py | 3 ++- .../data/demo/sports_clinic_demo_data.xml | 2 +- .../data/sports_clinic_data.xml | 23 ++++++++++++++++ .../migrations/16.0.1.5.4/post-migrate.py | 21 +++++++++++++++ bemade_sports_clinic/models/patient.py | 26 ++++++++++++++++++- 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 bemade_sports_clinic/data/sports_clinic_data.xml create mode 100644 bemade_sports_clinic/migrations/16.0.1.5.4/post-migrate.py diff --git a/bemade_sports_clinic/__manifest__.py b/bemade_sports_clinic/__manifest__.py index 5509180..abf3746 100644 --- a/bemade_sports_clinic/__manifest__.py +++ b/bemade_sports_clinic/__manifest__.py @@ -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', diff --git a/bemade_sports_clinic/data/demo/sports_clinic_demo_data.xml b/bemade_sports_clinic/data/demo/sports_clinic_demo_data.xml index c148dea..2b1dd30 100644 --- a/bemade_sports_clinic/data/demo/sports_clinic_demo_data.xml +++ b/bemade_sports_clinic/data/demo/sports_clinic_demo_data.xml @@ -186,4 +186,4 @@ - \ No newline at end of file + diff --git a/bemade_sports_clinic/data/sports_clinic_data.xml b/bemade_sports_clinic/data/sports_clinic_data.xml new file mode 100644 index 0000000..af83b45 --- /dev/null +++ b/bemade_sports_clinic/data/sports_clinic_data.xml @@ -0,0 +1,23 @@ + + + + + Patient File Update + sports.patient + + Patient's file has been updated. + + + + + + Patient Injury Status Update + sports.patient.injury + + Patient's injury was updated. + + + + + + diff --git a/bemade_sports_clinic/migrations/16.0.1.5.4/post-migrate.py b/bemade_sports_clinic/migrations/16.0.1.5.4/post-migrate.py new file mode 100644 index 0000000..2323c5d --- /dev/null +++ b/bemade_sports_clinic/migrations/16.0.1.5.4/post-migrate.py @@ -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)] + }) diff --git a/bemade_sports_clinic/models/patient.py b/bemade_sports_clinic/models/patient.py index b1b1e41..7e70019 100644 --- a/bemade_sports_clinic/models/patient.py +++ b/bemade_sports_clinic/models/patient.py @@ -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') +