bemade-addons/bemade_sports_clinic/models/res_users.py

104 lines
4.2 KiB
Python
Raw Normal View History

from odoo import models, fields, api, _, Command
import logging
_logger = logging.getLogger(__name__)
class User(models.Model):
_inherit = "res.users"
accessible_team_ids = fields.Many2many(
comodel_name="sports.team",
compute="_compute_accessible_team_ids",
inverse="_inverse_accessible_team_ids",
)
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
]
)
def write(self, vals):
"""Override write to trigger treatment professional group assignment when portal access is granted."""
# Process user updates for portal access changes
# Check if groups_id is being modified (portal access being granted/revoked)
if 'groups_id' in vals:
# Get the portal group reference
portal_group = self.env.ref('base.group_portal')
# Store old group memberships before making changes
old_groups_by_user = {user.id: user.groups_id.ids for user in self}
# Store old group memberships for comparison
# Apply the changes first
result = super().write(vals)
# Check each user to see if portal access was granted
for user in self:
old_groups = old_groups_by_user[user.id]
new_groups = user.groups_id.ids
# Check if portal access was granted
if portal_group.id in new_groups and portal_group.id not in old_groups:
# Portal access was just granted - trigger treatment professional group assignment
# Portal access was just granted - trigger treatment professional group assignment
staff_records = self.env['sports.team.staff'].search([
('partner_id', '=', user.partner_id.id)
])
if staff_records:
staff_records._update_treatment_professional_group(user)
return result
else:
# No group changes, use normal write
pass
# If groups_id is not being modified, use normal write
return super().write(vals)
@api.model_create_multi
def create(self, vals_list):
"""Override create to trigger treatment professional group assignment when portal users are created."""
# Process user creation for portal access
# Create the users first
users = super().create(vals_list)
# Get the portal group reference
portal_group = self.env.ref('base.group_portal')
# Check for portal access in created users
# Check each created user to see if they were created with portal access
for user in users:
# Check if user was created with portal access
if portal_group.id in user.groups_id.ids:
# User was created with portal access - trigger treatment professional group assignment
# User was created with portal access - trigger treatment professional group assignment
staff_records = self.env['sports.team.staff'].search([
('partner_id', '=', user.partner_id.id)
])
if staff_records:
staff_records._update_treatment_professional_group(user)
return users