58 lines
2.2 KiB
Python
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
|
|
]
|
|
)
|