[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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
+28
-71
@@ -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']
|
||||
Reference in New Issue
Block a user