bemade-addons/bemade_sports_clinic/models/res_partner.py

62 lines
No EOL
3 KiB
Python

from odoo import models, fields, api, _
from odoo.exceptions import UserError
class Partner(models.Model):
_inherit = 'res.partner'
patient_ids = fields.Many2many(comodel_name='sports.patient',
relation='sports_team_patient_rel',
column1='team_id',
column2='patient_id',
string='Players')
player_count = fields.Integer(compute="_compute_player_counts")
injured_count = fields.Integer(compute="_compute_player_counts")
type = fields.Selection(selection_add=[('team', 'Sports Team'), ])
staff_partner_ids = fields.Many2many(comodel_name='res.partner',
relation='sports_team_staff_partner_rel',
column1='team_id',
column2='staff_partner_id',
string='Staff')
staff_team_ids = fields.Many2many(comodel_name='res.partner',
relation='sports_team_staff_partner_rel',
column1='staff_partner_id',
column2='team_id',
string='Teams')
is_treatment_professional = fields.Boolean(
compute="_compute_is_treatment_professional",
store=True)
def write(self, vals):
teams = self.filtered(lambda r: r.type == 'team')
if teams and 'type' in vals and vals['type'] != 'team':
if teams.mapped('staff_partner_ids') or teams.mapped('patient_ids'):
raise UserError(_('Sports team is related to patients and/or staff. '
'Its type cannot be changed until these relations are '
'removed.'))
return super().write(vals)
def unlink(self):
teams = self.filtered(lambda r: r.type == 'team')
if teams:
if teams.mapped('staff_partner_ids') or teams.mapped('patient_ids'):
raise UserError(_('Sports team is related to patients and/or staff. '
'Its type cannot be deleted until these relations are '
'removed. You may try archiving it instead.'))
return super().unlink()
@api.depends('user_ids.groups_id')
def _compute_is_treatment_professional(self):
user_partners = self.filtered(lambda r: r.user_ids)
non_user_partners = self - user_partners
non_user_partners.is_treatment_professional = False
group = self.env.ref(
'bemade_sports_clinic.group_sports_clinic_treatment_professional')
for rec in user_partners:
rec.is_treatment_professional = group in rec.user_ids.groups_id
def _compute_player_counts(self):
for rec in self:
rec.player_count = len(rec.patient_ids)
rec.injured_count = len(rec.patient_ids.filtered(lambda p: p.is_injured))