From 62d73253f355fc857cfc6ca11bd5259957a94474 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Thu, 26 Jul 2018 12:44:24 +0200 Subject: [PATCH] [ADD] website, base: improve name_get in case of multi_Website mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some case like for website_menu or res.partner from the sale_order form view it is nice to know easily on which website this record is depending. Co-authored-by: Derie Romain Co-authored-by: Kersten Jérémy --- addons/website/models/res_partner.py | 17 +++++++ addons/website/models/website.py | 10 ++++- .../website_sale/views/sale_order_views.xml | 3 ++ odoo/addons/base/models/res_partner.py | 44 +++++++++++-------- 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/addons/website/models/res_partner.py b/addons/website/models/res_partner.py index 2329e0ff1c8..caa3f992335 100644 --- a/addons/website/models/res_partner.py +++ b/addons/website/models/res_partner.py @@ -4,6 +4,7 @@ import werkzeug from odoo import api, fields, models +from odoo.tools.pycompat import izip def urlplus(url, params): @@ -36,3 +37,19 @@ class Partner(models.Model): 'z': zoom, } return urlplus('https://maps.google.com/maps', params) + + @api.multi + def _get_name(self): + name = super(Partner, self)._get_name() + if self._context.get('display_website') and self.env.user.has_group('website.group_multi_website'): + if self.website_id: + name += ' [%s]' % self.website_id.name + return name + + def _compute_display_name(self): + self2 = self.with_context(display_website=False) + super(Partner, self2)._compute_display_name() + + # onchange uses the cache to retrieve value, we need to copy computed_value into the initial env + for record, record2 in izip(self, self2): + record.display_name = record2.display_name diff --git a/addons/website/models/website.py b/addons/website/models/website.py index e8eea753f80..8fee73ac109 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -967,6 +967,14 @@ class Menu(models.Model): parent_path = fields.Char(index=True) is_visible = fields.Boolean(compute='_compute_visible', string='Is Visible') + @api.multi + def name_get(self): + res = [] + for menu in self: + website_suffix = '%s - %s' % (menu.name, menu.website_id.name) + res.append((menu.id, website_suffix if menu.website_id and self.env.user.has_group('website.group_multi_website') else menu.name)) + return res + @api.model def create(self, vals): ''' In case a menu without a website_id is trying to be created, we duplicate @@ -987,7 +995,7 @@ class Menu(models.Model): 'parent_id': website.menu_id.id, }) res = super(Menu, self).create(vals) - return res # create loop, what to return ? last created record ? + return res # Only one record is returned but multiple could have been created @api.one def _compute_visible(self): diff --git a/addons/website_sale/views/sale_order_views.xml b/addons/website_sale/views/sale_order_views.xml index 0bad33449e3..42759994435 100644 --- a/addons/website_sale/views/sale_order_views.xml +++ b/addons/website_sale/views/sale_order_views.xml @@ -233,6 +233,9 @@ sale.order + + {'display_website': True} + diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index f17c0cd209f..a423af7835d 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -596,29 +596,35 @@ class Partner(models.Model): 'target': 'new', 'flags': {'form': {'action_buttons': True}}} + def _get_name(self): + """ Utility method to allow name_get to be overrided without re-browse the partner """ + partner = self + name = partner.name or '' + + 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: + name = "%s, %s" % (partner.commercial_company_name or partner.parent_id.name, name) + 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'): + name = name.replace('\n', ', ') + 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', '
') + return name + @api.multi def name_get(self): res = [] for partner in self: - name = partner.name or '' - - 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: - name = "%s, %s" % (partner.commercial_company_name or partner.parent_id.name, name) - 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'): - name = name.replace('\n', ', ') - 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', '
') + name = partner._get_name() res.append((partner.id, name)) return res