From d160997c9515dd6178da83fcb1daebad0086cb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 3 Jan 2020 12:04:34 +0000 Subject: [PATCH] [MOV] base_address_extended: reorganize python code Purpose is to reorganize code according to guidelines and split the main badly named python file, to understand that 3 models are impacted: res.company, res.country and res.partner. Task ID 2158302 PR odoo/odoo#42678 --- .../base_address_extended/models/__init__.py | 4 +- .../models/res_company.py | 31 ++++++ .../models/res_country.py | 18 ++++ ...ase_address_extended.py => res_partner.py} | 99 ++++++------------- 4 files changed, 80 insertions(+), 72 deletions(-) create mode 100644 addons/base_address_extended/models/res_company.py create mode 100644 addons/base_address_extended/models/res_country.py rename addons/base_address_extended/models/{base_address_extended.py => res_partner.py} (75%) diff --git a/addons/base_address_extended/models/__init__.py b/addons/base_address_extended/models/__init__.py index 029aa7201b4..9af974249f4 100644 --- a/addons/base_address_extended/models/__init__.py +++ b/addons/base_address_extended/models/__init__.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import base_address_extended +from . import res_company +from . import res_country +from . import res_partner diff --git a/addons/base_address_extended/models/res_company.py b/addons/base_address_extended/models/res_company.py new file mode 100644 index 00000000000..e08dfa37448 --- /dev/null +++ b/addons/base_address_extended/models/res_company.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class Company(models.Model): + _inherit = 'res.company' + + street_name = fields.Char('Street Name', compute='_compute_address', + inverse='_inverse_street_name') + street_number = fields.Char('House Number', compute='_compute_address', + inverse='_inverse_street_number') + street_number2 = fields.Char('Door Number', compute='_compute_address', + inverse='_inverse_street_number2') + + def _get_company_address_field_names(self): + fields_matching = super(Company, self)._get_company_address_field_names() + return list(set(fields_matching + ['street_name', 'street_number', 'street_number2'])) + + def _inverse_street_name(self): + for company in self: + company.partner_id.street_name = company.street_name + + def _inverse_street_number(self): + for company in self: + company.partner_id.street_number = company.street_number + + def _inverse_street_number2(self): + for company in self: + company.partner_id.street_number2 = company.street_number2 diff --git a/addons/base_address_extended/models/res_country.py b/addons/base_address_extended/models/res_country.py new file mode 100644 index 00000000000..38f13f3be2d --- /dev/null +++ b/addons/base_address_extended/models/res_country.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResCountry(models.Model): + _inherit = 'res.country' + + street_format = fields.Text( + help="Format to use for streets belonging to this country.\n\n" + "You can use the python-style string pattern with all the fields of the street " + "(for example, use '%(street_name)s, %(street_number)s' if you want to display " + "the street name, followed by a comma and the house number)" + "\n%(street_name)s: the name of the street" + "\n%(street_number)s: the house number" + "\n%(street_number2)s: the door number", + default='%(street_number)s/%(street_number2)s %(street_name)s', required=True) diff --git a/addons/base_address_extended/models/base_address_extended.py b/addons/base_address_extended/models/res_partner.py similarity index 75% rename from addons/base_address_extended/models/base_address_extended.py rename to addons/base_address_extended/models/res_partner.py index 5f5a9c643ef..fd2fb61c498 100644 --- a/addons/base_address_extended/models/base_address_extended.py +++ b/addons/base_address_extended/models/res_partner.py @@ -6,21 +6,6 @@ import re from odoo import api, fields, models, _ from odoo.exceptions import UserError -STREET_FIELDS = ['street_name', 'street_number', 'street_number2'] - - -class ResCountry(models.Model): - _inherit = 'res.country' - - street_format = fields.Text( - help="Format to use for streets belonging to this country.\n\n" - "You can use the python-style string pattern with all the fields of the street " - "(for example, use '%(street_name)s, %(street_number)s' if you want to display " - "the street name, followed by a comma and the house number)" - "\n%(street_name)s: the name of the street" - "\n%(street_number)s: the house number" - "\n%(street_number2)s: the door number", - default='%(street_number)s/%(street_number2)s %(street_name)s', required=True) class Partner(models.Model): _inherit = ['res.partner'] @@ -33,15 +18,6 @@ class Partner(models.Model): street_number2 = fields.Char('Door', compute='_split_street', help="Door Number", inverse='_set_street', store=True) - def _formatting_address_fields(self): - """Returns the list of address fields usable to format addresses.""" - return super(Partner, self)._formatting_address_fields() + self.get_street_fields() - - def get_street_fields(self): - """Returns the fields that can be used in a street format. - Overwrite this function if you want to add your own fields.""" - return STREET_FIELDS - def _set_street(self): """Updates the street field. Writes the `street` field on the partners when one of the sub-fields in STREET_FIELDS @@ -79,6 +55,27 @@ class Partner(models.Model): street_value += street_format[previous_pos:] partner.street = street_value + @api.depends('street') + def _split_street(self): + """Splits street value into sub-fields. + Recomputes the fields of STREET_FIELDS when `street` of a partner is updated""" + street_fields = self.get_street_fields() + for partner in self: + if not partner.street: + for field in street_fields: + partner[field] = None + continue + + street_format = (partner.country_id.street_format or + '%(street_number)s/%(street_number2)s %(street_name)s') + street_raw = partner.street + vals = self._split_street_with_params(street_raw, street_format) + # assign the values to the fields + for k, v in vals.items(): + partner[k] = v + for k in set(street_fields) - set(vals): + partner[k] = None + def _split_street_with_params(self, street_raw, street_format): street_fields = self.get_street_fields() vals = {} @@ -119,57 +116,17 @@ class Partner(models.Model): vals[field_name] = street_raw return vals - - @api.depends('street') - def _split_street(self): - """Splits street value into sub-fields. - Recomputes the fields of STREET_FIELDS when `street` of a partner is updated""" - street_fields = self.get_street_fields() - for partner in self: - if not partner.street: - for field in street_fields: - partner[field] = None - continue - - street_format = (partner.country_id.street_format or - '%(street_number)s/%(street_number2)s %(street_name)s') - street_raw = partner.street - vals = self._split_street_with_params(street_raw, street_format) - # assign the values to the fields - for k, v in vals.items(): - partner[k] = v - for k in set(street_fields) - set(vals): - partner[k] = None - def write(self, vals): res = super(Partner, self).write(vals) if 'country_id' in vals and 'street' not in vals: self._set_street() return res + def _formatting_address_fields(self): + """Returns the list of address fields usable to format addresses.""" + return super(Partner, self)._formatting_address_fields() + self.get_street_fields() -class Company(models.Model): - _inherit = 'res.company' - - street_name = fields.Char('Street Name', compute='_compute_address', - inverse='_inverse_street_name') - street_number = fields.Char('House Number', compute='_compute_address', - inverse='_inverse_street_number') - street_number2 = fields.Char('Door Number', compute='_compute_address', - inverse='_inverse_street_number2') - - def _get_company_address_field_names(self): - fields_matching = super(Company, self)._get_company_address_field_names() - return list(set(fields_matching + ['street_name', 'street_number', 'street_number2'])) - - def _inverse_street_name(self): - for company in self: - company.partner_id.street_name = company.street_name - - def _inverse_street_number(self): - for company in self: - company.partner_id.street_number = company.street_number - - def _inverse_street_number2(self): - for company in self: - company.partner_id.street_number2 = company.street_number2 + def get_street_fields(self): + """Returns the fields that can be used in a street format. + Overwrite this function if you want to add your own fields.""" + return ['street_name', 'street_number', 'street_number2']