# Copyright 2017-2021 Akretion # @author: Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models class ResPartner(models.Model): _inherit = 'res.partner' ref = fields.Char(copy=False) # To avoid blocking duplicate invalidate_display_name = fields.Boolean() _sql_constraints = [( 'ref_unique', 'unique(ref)', 'A partner already exists with this internal reference!' )] # add 'ref' in depends @api.depends('ref', 'invalidate_display_name') def _compute_display_name(self): super()._compute_display_name() def _get_name(self): partner = self name = partner.name or '' # START modif of native method if partner.ref: name = "[%s] %s" % (partner.ref, name) # END modif of native method if partner.company_name or partner.parent_id: if not name and partner.type in ['invoice', 'delivery', 'other']: name = dict(self.fields_get( ['type'])['type']['selection'])[partner.type] if not partner.is_company: # START modif of native name_get() method company_name = partner.commercial_company_name or partner.parent_id.name if partner.parent_id.ref: company_name = "[%s] %s" % (partner.parent_id.ref, company_name) name = "%s, %s" % (company_name, name) # END modif of native name_get() method if self._context.get('show_address_only'): name = partner._display_address(without_company=True) if self._context.get('show_address'): name = name + "\n" + partner._display_address(without_company=True) name = name.replace('\n\n', '\n') name = name.replace('\n\n', '\n') if self._context.get('address_inline'): splitted_names = name.split("\n") name = ", ".join([n for n in splitted_names if n.strip()]) if self._context.get('show_email') and partner.email: name = "%s <%s>" % (name, partner.email) if self._context.get('html_format'): name = name.replace('\n', '
') if self._context.get('show_vat') and partner.vat: name = "%s ‒ %s" % (name, partner.vat) return name @api.model def name_search(self, name='', args=None, operator='ilike', limit=100): if args is None: args = [] if name and operator == 'ilike': recs = self.search([('ref', '=', name)] + args, limit=limit) if recs: rec_childs = self.search([('id', 'child_of', recs.ids)]) return rec_childs.name_get() return super().name_search(name=name, args=args, operator=operator, limit=limit)