From 0a2ec5fd8d4e0ed2c44447700dbff176898c3234 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Tue, 20 Feb 2024 20:06:35 -0500 Subject: [PATCH] bemade_sports_clinic: add consent field, translations and general cleanup --- bemade_sports_clinic/__manifest__.py | 3 +- bemade_sports_clinic/i18n/fr_CA.po | 230 +++++++++++++----- bemade_sports_clinic/models/__init__.py | 2 + bemade_sports_clinic/models/patient.py | 135 +--------- .../models/patient_contact.py | 35 +++ bemade_sports_clinic/models/patient_injury.py | 120 +++++++++ .../views/sports_patient_injury_views.xml | 69 ++++++ .../views/sports_patient_views.xml | 65 +---- 8 files changed, 401 insertions(+), 258 deletions(-) create mode 100644 bemade_sports_clinic/models/patient_contact.py create mode 100644 bemade_sports_clinic/models/patient_injury.py create mode 100644 bemade_sports_clinic/views/sports_patient_injury_views.xml diff --git a/bemade_sports_clinic/__manifest__.py b/bemade_sports_clinic/__manifest__.py index 1815504..105f751 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.5', + 'version': '16.0.1.5.6', 'summary': 'Manage the patients of a sports medicine clinic.', 'description': """ Adds the notion of sports teams, players (patients), coaches and treatment @@ -45,6 +45,7 @@ 'data/sports_clinic_data.xml', 'views/sports_team_views.xml', 'views/sports_clinic_menus.xml', + 'views/sports_patient_injury_views.xml', 'views/sports_patient_views.xml', 'views/sports_clinic_portal_views.xml', 'views/res_partner_views.xml', diff --git a/bemade_sports_clinic/i18n/fr_CA.po b/bemade_sports_clinic/i18n/fr_CA.po index 138b7f6..6608832 100644 --- a/bemade_sports_clinic/i18n/fr_CA.po +++ b/bemade_sports_clinic/i18n/fr_CA.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-11-07 20:03+0000\n" -"PO-Revision-Date: 2023-11-07 20:03+0000\n" +"POT-Creation-Date: 2024-02-21 00:52+0000\n" +"PO-Revision-Date: 2024-02-21 00:52+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -25,11 +25,6 @@ msgstr "" msgid "/my/teams" msgstr "" -#. module: bemade_sports_clinic -#: model:ir.model,name:bemade_sports_clinic.model_sports_patient_injury -msgid "A patient's injury." -msgstr "La blessure d'un patient." - #. module: bemade_sports_clinic #. odoo-python #: code:addons/bemade_sports_clinic/models/sports_team.py:0 @@ -105,6 +100,11 @@ msgstr "Administrateur" msgid "Age" msgstr "Âge" +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__allergies +msgid "Allergies" +msgstr "" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__message_attachment_count #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__message_attachment_count @@ -112,14 +112,9 @@ msgid "Attachment Count" msgstr "Nombre de pièces jointes" #. module: bemade_sports_clinic -#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__stage__practice_ok -msgid "Cleared for Practice" -msgstr "Pratiques autorisées" - -#. module: bemade_sports_clinic -#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__stage__healthy -msgid "Cleared to Play" -msgstr "Matchs autorisés" +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__city +msgid "City" +msgstr "Ville" #. module: bemade_sports_clinic #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_team_staff__role__coach @@ -128,8 +123,9 @@ msgstr "Entraîneur" #. module: bemade_sports_clinic #: model:ir.model,name:bemade_sports_clinic.model_res_partner +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__partner_id msgid "Contact" -msgstr "Contact" +msgstr "" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_contact__contact_type @@ -139,7 +135,12 @@ msgstr "Type de contact" #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form msgid "Contacts" -msgstr "Contacts" +msgstr "" + +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__country_id +msgid "Country" +msgstr "Pays" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__create_uid @@ -159,15 +160,20 @@ msgstr "Créé par" msgid "Created on" msgstr "Créé le" +#. module: bemade_sports_clinic +#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_kanban +msgid "DOB:" +msgstr "DDN :" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__date_of_birth msgid "Date Of Birth" msgstr "Date de naissance" #. module: bemade_sports_clinic -#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__injury_date_time -msgid "Date and Time of Injury" -msgstr "Date et heure de la blessure" +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__injury_date +msgid "Date of Injury" +msgstr "Date de la blessure" #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_injury_view_tree @@ -189,6 +195,11 @@ msgstr "Diagnostique" msgid "Display Name" msgstr "Nom pour affichage" +#. module: bemade_sports_clinic +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_team_staff__role__doctor +msgid "Doctor" +msgstr "Docteur" + #. module: bemade_sports_clinic #: model:ir.model.constraint,message:bemade_sports_clinic.constraint_sports_team_staff_team_staff_unique msgid "Each partner can only be related to a given team once." @@ -301,7 +312,7 @@ msgstr "En santé :" #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team__id #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team_staff__id msgid "ID" -msgstr "ID" +msgstr "" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__activity_exception_icon @@ -329,6 +340,13 @@ msgstr "Si coché, des nouveaux messages nécessitent votre attention." msgid "If checked, some messages have a delivery error." msgstr "Si coché, certains messages ont une erreur de livraison." +#. module: bemade_sports_clinic +#. odoo-python +#: code:addons/bemade_sports_clinic/models/patient_injury.py:0 +#, python-format +msgid "If injury date is not set, the N/A box must be checked." +msgstr "Sa la date de la blessure n'est pas remplie, la case S/O doit être cochée." + #. module: bemade_sports_clinic #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__stage__no_play #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_teams @@ -463,7 +481,14 @@ msgstr "Erreur de livraison du message" #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__message_ids #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__message_ids msgid "Messages" -msgstr "Messages" +msgstr "" + +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__mobile +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_contact__mobile +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team_staff__mobile +msgid "Mobile" +msgstr "" #. module: bemade_sports_clinic #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient_contact__contact_type__mother @@ -476,6 +501,12 @@ msgstr "Mère" msgid "My Activity Deadline" msgstr "Date limite de mon activité" +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__injury_date_na +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient_injury__parental_consent__na +msgid "N/A" +msgstr "S/O" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__name #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_contact__name @@ -508,13 +539,15 @@ msgstr "Type de la prochaine activité" #. module: bemade_sports_clinic #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__match_status__no #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__practice_status__no +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient_injury__parental_consent__no msgid "No" msgstr "Non" #. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__team_info_notes #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_player_injuries msgid "Notes" -msgstr "Notes" +msgstr "" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__message_needaction_counter @@ -557,6 +590,11 @@ msgstr "Organisation" msgid "Other" msgstr "Autre" +#. module: bemade_sports_clinic +#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form +msgid "Other Contacts" +msgstr "Autres contacts" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_res_partner__owned_team_ids #: model:ir.model.fields,field_description:bemade_sports_clinic.field_res_users__owned_team_ids @@ -571,55 +609,96 @@ msgid "Parent Organization" msgstr "Organisation parente" #. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__parental_consent +msgid "Consent for Disclosure to Parent" +msgstr "Consentement pour divulgation au parent" + +#. module: bemade_sports_clinic +#: model:ir.model,name:bemade_sports_clinic.model_sports_patient +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_res_partner__patient_ids +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_res_users__patient_ids #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_contact__patient_id #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__patient_id msgid "Patient" -msgstr "Patient(e)" +msgstr "Patient dans une clinique de médecine sportive." + +#. module: bemade_sports_clinic +#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form +msgid "Patient Address" +msgstr "Adresse du patient" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__contact_ids msgid "Patient Contacts" msgstr "Contacts du patient" +#. module: bemade_sports_clinic +#: model:mail.message.subtype,name:bemade_sports_clinic.subtype_patient_update +msgid "Patient File Update" +msgstr "Mise à jour du dossier du patient" + #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form msgid "Patient Information" msgstr "Information du patient" +#. module: bemade_sports_clinic +#: model:ir.model,name:bemade_sports_clinic.model_sports_patient_injury +msgid "Patient Injury" +msgstr "La blessure d'un patient." + #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_injury_view_tree msgid "Patient Injury History" msgstr "Historique des blessures du patient" +#. module: bemade_sports_clinic +#: model:mail.message.subtype,name:bemade_sports_clinic.subtype_patient_injury_update +msgid "Patient Injury Status Update" +msgstr "Mise à jour du statut de la blessure d'un patient" + +#. module: bemade_sports_clinic +#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form +msgid "Patient Phone & Email" +msgstr "Téléphone et courriel du patient" + #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form msgid "Patient Record" msgstr "Dossier du patient" -#. module: bemade_sports_clinic -#: model:ir.model,name:bemade_sports_clinic.model_sports_patient -msgid "Patient at a sports medicine clinic." -msgstr "Patient dans une clinique de médecine sportive." - #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_form msgid "Patient's Contacts" msgstr "Contacts du patient" +#. module: bemade_sports_clinic +#: model:mail.message.subtype,description:bemade_sports_clinic.subtype_patient_update +msgid "Patient's file has been updated." +msgstr "Le dossier du patient a été mis à jour." + +#. module: bemade_sports_clinic +#: model:mail.message.subtype,description:bemade_sports_clinic.subtype_patient_injury_update +msgid "Patient's injury was updated." +msgstr "Le dossier de la blessure du patient a été mis à jour." + #. module: bemade_sports_clinic #: model:ir.actions.act_window,name:bemade_sports_clinic.action_view_patient #: model:ir.ui.menu,name:bemade_sports_clinic.sports_clinic_patients #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_list #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_list_embedded msgid "Patients" -msgstr "Patients" +msgstr "" #. module: bemade_sports_clinic -#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__mobile -#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_contact__mobile -#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team_staff__mobile -msgid "Mobile" -msgstr "Mobile" +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__phone +msgid "Phone" +msgstr "Téléphone" + +#. module: bemade_sports_clinic +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__stage__healthy +msgid "Play OK" +msgstr "Matchs autorisés" #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team__player_count @@ -635,6 +714,11 @@ msgstr "Nombre de joueurs" msgid "Players" msgstr "Joueurs" +#. module: bemade_sports_clinic +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__stage__practice_ok +msgid "Practice OK" +msgstr "Pratiques autorisées" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__practice_status #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_players @@ -652,11 +736,6 @@ msgstr "Date prévue de résolution" msgid "Predicted Return Date" msgstr "Date prévue de retour" -#. module: bemade_sports_clinic -#: model:ir.model,name:bemade_sports_clinic.model_sports_team_staff -msgid "Relationship between staff members and their teams." -msgstr "Relation entre les membres du personnel et leurs équipes." - #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient_injury__resolution_date msgid "Resolution Date" @@ -720,6 +799,11 @@ msgstr "Gestion de clinique de médecine sportive" msgid "Sports Team" msgstr "Équipe sportive" +#. module: bemade_sports_clinic +#: model:ir.model,name:bemade_sports_clinic.model_sports_team_staff +msgid "Sports Team Staff" +msgstr "Relation entre les membres du personnel et leurs équipes." + #. module: bemade_sports_clinic #: model:ir.actions.act_window,name:bemade_sports_clinic.action_view_team #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_team_view_list @@ -744,6 +828,11 @@ msgstr "Membre du personnel" msgid "Stage" msgstr "Étape" +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__state_id +msgid "State" +msgstr "État" + #. module: bemade_sports_clinic #: model:ir.model.fields,help:bemade_sports_clinic.field_sports_patient__activity_state #: model:ir.model.fields,help:bemade_sports_clinic.field_sports_patient_injury__activity_state @@ -758,6 +847,21 @@ msgstr "" "Aujourd'hui: La date d'échéance est aujourd'hui\n" "Planifiées: Activités futures." +#. module: bemade_sports_clinic +#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.sports_patient_view_kanban +msgid "Status:" +msgstr "Statut :" + +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__street +msgid "Street" +msgstr "Rue" + +#. module: bemade_sports_clinic +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__street2 +msgid "Street2" +msgstr "Rue2" + #. module: bemade_sports_clinic #: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_team_staff__team_id msgid "Team" @@ -804,6 +908,11 @@ msgstr "La date quand la blessure a été résolue." msgid "The teams this person works for." msgstr "Les équipes pour lesquelles cette personne travaille." +#. module: bemade_sports_clinic +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_team_staff__role__therapist +msgid "Therapist" +msgstr "Thérapeute" + #. module: bemade_sports_clinic #. odoo-python #: code:addons/bemade_sports_clinic/controllers/team_staff_portal.py:0 @@ -818,21 +927,18 @@ msgstr "Ce joueur n'a pu être trouvé." msgid "This team could not be found." msgstr "Cette équipe n'a pu être trouvée." +#. module: bemade_sports_clinic +#. odoo-python +#: code:addons/bemade_sports_clinic/models/res_partner.py:0 +#, python-format +msgid "To change a patient's name, change it from the patient form." +msgstr "Pour changer le nom d'un patient, changez le à partir du formulaire patient." + #. module: bemade_sports_clinic #: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_teams msgid "Total Players" msgstr "Total des joueurs" -#. module: bemade_sports_clinic -#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_team_staff__role__therapist -msgid "Therapist" -msgstr "Thérapeute" - -#. module: bemade_sports_clinic -#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_team_staff__role__doctor -msgid "Doctor" -msgstr "Docteur" - #. module: bemade_sports_clinic #: model:res.groups,name:bemade_sports_clinic.group_sports_clinic_treatment_professional msgid "Treatment Professional" @@ -879,11 +985,22 @@ msgstr "Historique de communication du site web" #. module: bemade_sports_clinic #: model:ir.model.fields,help:bemade_sports_clinic.field_sports_patient__return_date msgid "When the player was cleared by medical staff to return to match play." -msgstr "Quand le joueur a été autorisé par le personnel médical à retourner au jeu." +msgstr "" +"Quand le joueur a été autorisé par le personnel médical à retourner au jeu." + +#. module: bemade_sports_clinic +#: model:ir.model.fields,help:bemade_sports_clinic.field_sports_patient_injury__parental_consent +msgid "" +"Whether the patient has given their consent to share injury details with " +"their parents." +msgstr "" +"Indique si le patient a donné son consentement pour que les détails de la blessure soient partagés avec " +"ses parents." #. module: bemade_sports_clinic #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__match_status__yes #: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient__practice_status__yes +#: model:ir.model.fields.selection,name:bemade_sports_clinic.selection__sports_patient_injury__parental_consent__yes msgid "Yes" msgstr "Oui" @@ -903,11 +1020,6 @@ msgid "Your Teams" msgstr "Vos équipes" #. module: bemade_sports_clinic -#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_home -msgid "players_count" -msgstr "" - -#. module: bemade_sports_clinic -#: model_terms:ir.ui.view,arch_db:bemade_sports_clinic.portal_my_home -msgid "teams_count" -msgstr "" +#: model:ir.model.fields,field_description:bemade_sports_clinic.field_sports_patient__zip +msgid "Zip" +msgstr "Code postal" diff --git a/bemade_sports_clinic/models/__init__.py b/bemade_sports_clinic/models/__init__.py index bd829d6..f71cd05 100644 --- a/bemade_sports_clinic/models/__init__.py +++ b/bemade_sports_clinic/models/__init__.py @@ -1,4 +1,6 @@ from . import patient +from . import patient_injury +from . import patient_contact from . import res_partner from . import sports_team from . import res_users diff --git a/bemade_sports_clinic/models/patient.py b/bemade_sports_clinic/models/patient.py index 357edd1..acc3566 100644 --- a/bemade_sports_clinic/models/patient.py +++ b/bemade_sports_clinic/models/patient.py @@ -1,9 +1,8 @@ from odoo import models, fields, _, api, Command from odoo.exceptions import ValidationError -from datetime import date, datetime +from datetime import date from dateutil.relativedelta import relativedelta from odoo.addons.phone_validation.tools import phone_validation -import pytz class Patient(models.Model): @@ -205,135 +204,3 @@ class Patient(models.Model): -class PatientContact(models.Model): - _name = 'sports.patient.contact' - _description = "Emergency or other contacts for a patient." - - sequence = fields.Integer(required=True, default=0) - name = fields.Char(unaccent=False) - contact_type = fields.Selection(selection=[ - ('mother', 'Mother'), - ('father', 'Father'), - ('other', 'Other'), - ], required=True) - mobile = fields.Char(unaccent=False, required=True) - # TODO: add email here and on views - patient_id = fields.Many2one(comodel_name='sports.patient', string='Patient') - - @api.onchange('mobile') - def _onchange_mobile_validation(self): - if self.mobile: - self.mobile = self._phone_format(self.mobile, force_format="INTERNATIONAL") - - def _phone_format(self, number, force_format='E164'): - country = self.patient_id.country_id or self.env.company.country_id - if not country or not number: - return number - return phone_validation.phone_format( - number, - country.code if country else None, - country.phone_code if country else None, - force_format=force_format, - raise_exception=False - ) - - -class PatientInjury(models.Model): - _name = 'sports.patient.injury' - _description = "Patient Injury" - _inherit = ['mail.thread', 'mail.activity.mixin'] - _rec_name = 'diagnosis' - - @api.model - def _today(self): - """Get the current date in the user's time zone.""" - return datetime.now(pytz.timezone(self.env.user.tz or 'GMT')) - - # TODO: Find a way to improve notifications send about tracking injury details - # TODO: Add field consentement_parental = fields.Selection(oui, non, non-applicable) - - patient_id = fields.Many2one(comodel_name='sports.patient', - string="Patient", - readonly=True, - required=True) - patient_name = fields.Char(related="patient_id.name") - diagnosis = fields.Char(tracking=True) - - injury_date = fields.Date( - string='Date of Injury', - default=_today, - ) - injury_date_na = fields.Boolean(string="N/A", default=False) - internal_notes = fields.Html(tracking=True) - external_notes = fields.Html(tracking=True) - treatment_professional_ids = fields.Many2many(comodel_name='res.users', - relation='patient_injury_treatment_pro_rel', - column1='patient_injury_id', - column2='treatment_pro_id', string='Treatment Professionals', - domain=[ - ('is_treatment_professional', '=', - True)], tracking=True) - predicted_resolution_date = fields.Date(tracking=True) - resolution_date = fields.Date(tracking=True, - help="The date when the injury was actually resolved.") - stage = fields.Selection(selection=[('active', 'Active'), ('resolved', 'Resolved')], compute='_compute_stage') - - @api.constrains('injury_date_na', 'injury_date') - def constrain_date_blank_only_if_na(self): - for rec in self: - if not rec.injury_date_na and not rec.injury_date: - raise ValidationError(_("If injury date is not set, the N/A box must be checked.")) - - @api.onchange('injury_date_na') - def _onchange_injury_date_na(self): - for rec in self: - if rec.injury_date_na: - rec.injury_date = None - - @api.onchange('injury_date') - def _onchange_injury_date(self): - for rec in self: - if rec.injury_date: - rec.injury_date_na = False - - @api.depends('resolution_date') - def _compute_stage(self): - for rec in self: - if rec.resolution_date and rec.resolution_date <= date.today(): - rec.stage = 'resolved' - else: - rec.stage = 'active' - - def write(self, vals): - super().write(vals) - if 'treatment_professional_ids' in vals: - to_subscribe = (self.treatment_professional_ids.mapped('partner_id') - - self.message_follower_ids.mapped('partner_id')) - self.message_subscribe(to_subscribe.ids) - - @api.model_create_multi - def create(self, vals_list): - res = super().create(vals_list) - for rec in res: - to_subscribe = (rec.treatment_professional_ids.mapped('partner_id') - - rec.message_follower_ids.mapped('partner_id')) - rec.message_subscribe(to_subscribe.ids) - return res - - def action_view_injury_form(self): - self.ensure_one() - return { - 'type': 'ir.actions.act_window', - 'view_mode': 'form', - 'res_model': 'sports.patient.injury', - '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') - diff --git a/bemade_sports_clinic/models/patient_contact.py b/bemade_sports_clinic/models/patient_contact.py new file mode 100644 index 0000000..36e70cc --- /dev/null +++ b/bemade_sports_clinic/models/patient_contact.py @@ -0,0 +1,35 @@ +from odoo import models, fields, api +from odoo.addons.phone_validation.tools import phone_validation + + +class PatientContact(models.Model): + _name = 'sports.patient.contact' + _description = "Emergency or other contacts for a patient." + + sequence = fields.Integer(required=True, default=0) + name = fields.Char(unaccent=False) + contact_type = fields.Selection(selection=[ + ('mother', 'Mother'), + ('father', 'Father'), + ('other', 'Other'), + ], required=True) + mobile = fields.Char(unaccent=False, required=True) + # TODO: add email here and on views + patient_id = fields.Many2one(comodel_name='sports.patient', string='Patient') + + @api.onchange('mobile') + def _onchange_mobile_validation(self): + if self.mobile: + self.mobile = self._phone_format(self.mobile, force_format="INTERNATIONAL") + + def _phone_format(self, number, force_format='E164'): + country = self.patient_id.country_id or self.env.company.country_id + if not country or not number: + return number + return phone_validation.phone_format( + number, + country.code if country else None, + country.phone_code if country else None, + force_format=force_format, + raise_exception=False + ) diff --git a/bemade_sports_clinic/models/patient_injury.py b/bemade_sports_clinic/models/patient_injury.py new file mode 100644 index 0000000..c1d32b2 --- /dev/null +++ b/bemade_sports_clinic/models/patient_injury.py @@ -0,0 +1,120 @@ +from odoo import models, fields, api, _ +from datetime import datetime, date +import pytz +from odoo.exceptions import ValidationError + + +class PatientInjury(models.Model): + _name = 'sports.patient.injury' + _description = "Patient Injury" + _inherit = ['mail.thread', 'mail.activity.mixin'] + _rec_name = 'diagnosis' + + @api.model + def _today(self): + """Get the current date in the user's time zone.""" + return datetime.now(pytz.timezone(self.env.user.tz or 'GMT')) + + # TODO: Find a way to improve notifications send about tracking injury details + # TODO: Add field consentement_parental = fields.Selection(oui, non, non-applicable) + + patient_id = fields.Many2one( + comodel_name='sports.patient', + string="Patient", + readonly=True, + required=True + ) + patient_name = fields.Char(related="patient_id.name") + diagnosis = fields.Char(tracking=True) + + injury_date = fields.Date( + string='Date of Injury', + default=_today, + ) + injury_date_na = fields.Boolean(string="N/A", default=False) + internal_notes = fields.Html(tracking=True) + external_notes = fields.Html(tracking=True) + treatment_professional_ids = fields.Many2many( + comodel_name='res.users', + relation='patient_injury_treatment_pro_rel', + column1='patient_injury_id', + column2='treatment_pro_id', string='Treatment Professionals', + domain=[ + ('is_treatment_professional', '=', + True)], tracking=True + ) + predicted_resolution_date = fields.Date(tracking=True) + resolution_date = fields.Date( + tracking=True, + help="The date when the injury was actually resolved." + ) + stage = fields.Selection(selection=[('active', 'Active'), ('resolved', 'Resolved')], compute='_compute_stage') + parental_consent = fields.Selection( + string="Consent for Disclosure to Parent", + selection=[ + ('yes', 'Yes'), + ('no', 'No'), + ('na', 'N/A') + ], + help="Whether the patient has given their consent to share injury details with their parents.", + tracking=True, + ) + + @api.constrains('injury_date_na', 'injury_date') + def constrain_date_blank_only_if_na(self): + for rec in self: + if not rec.injury_date_na and not rec.injury_date: + raise ValidationError(_("If injury date is not set, the N/A box must be checked.")) + + @api.onchange('injury_date_na') + def _onchange_injury_date_na(self): + for rec in self: + if rec.injury_date_na: + rec.injury_date = None + + @api.onchange('injury_date') + def _onchange_injury_date(self): + for rec in self: + if rec.injury_date: + rec.injury_date_na = False + + @api.depends('resolution_date') + def _compute_stage(self): + for rec in self: + if rec.resolution_date and rec.resolution_date <= date.today(): + rec.stage = 'resolved' + else: + rec.stage = 'active' + + def write(self, vals): + super().write(vals) + if 'treatment_professional_ids' in vals: + to_subscribe = (self.treatment_professional_ids.mapped('partner_id') + - self.message_follower_ids.mapped('partner_id')) + self.message_subscribe(to_subscribe.ids) + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + for rec in res: + to_subscribe = (rec.treatment_professional_ids.mapped('partner_id') + - rec.message_follower_ids.mapped('partner_id')) + rec.message_subscribe(to_subscribe.ids) + return res + + def action_view_injury_form(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'sports.patient.injury', + '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') diff --git a/bemade_sports_clinic/views/sports_patient_injury_views.xml b/bemade_sports_clinic/views/sports_patient_injury_views.xml new file mode 100644 index 0000000..bb57cb5 --- /dev/null +++ b/bemade_sports_clinic/views/sports_patient_injury_views.xml @@ -0,0 +1,69 @@ + + + + sports.patient.injury.view.form + sports.patient.injury + +
+
+ +
+ +
+

+ Injury Details for + +

+
+ + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + sports.patient.injury.view.tree + sports.patient.injury + + + + + + + + + + +