bemade-addons/bemade_sports_clinic/models/res_users.py

58 lines
2.2 KiB
Python

from odoo import models, fields, api, _, Command
class User(models.Model):
_inherit = "res.users"
is_treatment_professional = fields.Boolean(
compute="_compute_is_treatment_professional", store=True
)
accessible_team_ids = fields.Many2many(
comodel_name="sports.team",
compute="_compute_accessible_team_ids",
inverse="_inverse_accessible_team_ids",
)
@api.depends("groups_id", "partner_id", "partner_id.staff_ids", "partner_id.staff_ids.role")
def _compute_is_treatment_professional(self):
for rec in self:
# Check if user has the security group
has_security_group = rec.has_group(
"bemade_sports_clinic.group_sports_clinic_treatment_professional"
)
# Check if user is linked to any team staff as head therapist or therapist
is_therapist_staff = False
if rec.partner_id:
staff_records = self.env['sports.team.staff'].sudo().search([
('partner_id', '=', rec.partner_id.id),
('role', 'in', ['head_therapist', 'therapist'])
])
is_therapist_staff = bool(staff_records)
# Set field based on either condition
rec.is_treatment_professional = has_security_group or is_therapist_staff
def _compute_accessible_team_ids(self):
for rec in self:
rec.accessible_team_ids = rec.partner_id.teams_served_ids
def _inverse_accessible_team_ids(self):
for rec in self:
removed_teams = rec.partner_id.teams_served_ids - rec.accessible_team_ids
added_teams = rec.accessible_team_ids - rec.partner_id.teams_served_ids
removed_teams = rec.partner_id.teams_served_ids.filtered(
lambda team: team in removed_teams
)
removed_teams.remove_access(self)
self.env["sports.team.staff"].create(
[
{
"team_id": team.id,
"partner_id": rec.partner_id.id,
"role": "other",
}
for team in added_teams
]
)