from odoo import api, fields, models, Command class Partner(models.Model): _inherit = 'res.partner' equipment_count = fields.Integer(compute='_compute_equipment_count', string='Equipment Count') owned_equipment_ids = fields.One2many(comodel_name="bemade_fsm.equipment", compute="_compute_owned_equipment_ids", string="Owned Equipments") equipment_ids = fields.One2many(comodel_name='bemade_fsm.equipment', inverse_name='partner_location_id', string='Site Equipment') is_site_contact = fields.Boolean(string='Is a site contact', compute="_compute_is_site_contact", search="_search_is_site_contact", ) site_ids = fields.Many2many(string='Work Sites', comodel_name='res.partner', relation='res_partner_site_contact_rel', column1='site_contact_id', column2='site_id', tracking=True) site_contacts = fields.Many2many(string='Site Contacts', comodel_name='res.partner', relation='res_partner_site_contact_rel', column1='site_id', column2='site_contact_id', domain=[('is_company', '=', False)], tracking=True) work_order_contacts = fields.Many2many(string='Work Order Recipients', comodel_name='res.partner', relation='res_partner_work_order_contacts_rel', column1='res_partner_id', column2='work_order_contact_id', domain=[('is_company', '=', False)], tracking=True) @api.depends('equipment_ids', 'child_ids.company_type', 'child_ids.equipment_ids') def _compute_owned_equipment_ids(self): for rec in self: ids = rec.equipment_ids | rec.child_ids.filtered( lambda l: l.company_type == 'company').mapped('equipment_ids') rec.owned_equipment_ids = ids or False @api.depends('site_ids') def _compute_is_site_contact(self): for rec in self: rec.is_site_contact = rec.site_ids is not False @api.depends('equipment_ids') def _compute_equipment_count(self): for rec in self: all_equipment_ids = self.env['bemade_fsm.equipment'].search( [('partner_location_id', '=', rec.id)]) rec.equipment_count = len(all_equipment_ids) @api.model def _search_is_site_contact(self, operator, value): return [('site_contacts', '!=', False)]