# -*- coding: utf-8 -*- from odoo import api, fields, models class ResPartner(models.Model): _inherit = 'res.partner' iap_enrich_info = fields.Text('IAP Enrich Info', help='IAP response stored as a JSON string', compute='_compute_partner_iap_info') iap_search_domain = fields.Char('Search Domain / Email', compute='_compute_partner_iap_info') def _compute_partner_iap_info(self): partner_iaps = self.env['res.partner.iap'].sudo().search([('partner_id', 'in', self.ids)]) partner_iaps_per_partner = { partner_iap.partner_id: partner_iap for partner_iap in partner_iaps } for partner in self: partner_iap = partner_iaps_per_partner.get(partner) if partner_iap: partner.iap_enrich_info = partner_iap.iap_enrich_info partner.iap_search_domain = partner_iap.iap_search_domain else: partner.iap_enrich_info = False partner.iap_search_domain = False @api.model def create(self, vals): partner = super(ResPartner, self).create(vals) if vals.get('iap_enrich_info') or vals.get('iap_search_domain'): # Not done with inverse method so we do not need to search # for existing self.env['res.partner.iap'].sudo().create({ 'partner_id': partner.id, 'iap_enrich_info': vals.get('iap_enrich_info'), 'iap_search_domain': vals.get('iap_search_domain'), }) return partner def write(self, vals): super(ResPartner, self).write(vals) if 'iap_enrich_info' in vals or 'iap_search_domain' in vals: # Not done with inverse method so we do need to search # for existing only once partner_iaps = self.env['res.partner.iap'].sudo().search([('partner_id', 'in', self.ids)]) missing_partners = self for partner_iap in partner_iaps: if 'iap_enrich_info' in vals: partner_iap.iap_enrich_info = vals['iap_enrich_info'] if 'iap_search_domain' in vals: partner_iap.iap_search_domain = vals['iap_search_domain'] missing_partners -= partner_iap.partner_id if missing_partners: # Create new for missing records self.env['res.partner.iap'].sudo().create([ { 'partner_id': partner.id, 'iap_enrich_info': vals.get('iap_enrich_info'), 'iap_search_domain': vals.get('iap_search_domain'), } for partner in missing_partners ])