Antonio Espinosa
9 years ago
committed by
Alexandre Díaz
11 changed files with 150 additions and 154 deletions
-
33base_location_nuts/README.rst
-
4base_location_nuts/i18n/es.po
-
18base_location_nuts/models/res_country.py
-
139base_location_nuts/models/res_partner.py
-
6base_location_nuts/models/res_partner_nuts.py
-
10base_location_nuts/views/res_country_view.xml
-
3base_location_nuts/views/res_partner_nuts_view.xml
-
71base_location_nuts/views/res_partner_view.xml
-
6base_location_nuts/wizard/__init__.py
-
11base_location_nuts/wizard/nuts_import.py
-
3base_location_nuts/wizard/nuts_import_view.xml
@ -1,73 +1,122 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
############################################################################## |
|
||||
# For copyright and license notices, see __openerp__.py file in root directory |
|
||||
############################################################################## |
|
||||
|
# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa |
||||
|
# © 2015 Antiun Ingeniería S.L. - Jairo Llopis |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from openerp import models, fields, api |
from openerp import models, fields, api |
||||
from openerp.tools.translate import _ |
|
||||
|
|
||||
|
|
||||
class ResPartner(models.Model): |
class ResPartner(models.Model): |
||||
_inherit = 'res.partner' |
_inherit = 'res.partner' |
||||
|
|
||||
region_id = fields.Many2one( |
|
||||
'res.partner.nuts', |
|
||||
"Region", |
|
||||
oldname="region") |
|
||||
substate_id = fields.Many2one( |
|
||||
'res.partner.nuts', |
|
||||
"Substate", |
|
||||
oldname="substate") |
|
||||
lbl_region = fields.Char( |
|
||||
default=_("Region"), |
|
||||
compute='_labels_get') |
|
||||
lbl_substate = fields.Char( |
|
||||
default=_("Substate"), |
|
||||
compute='_labels_get') |
|
||||
|
nuts1_id = fields.Many2one( |
||||
|
comodel_name='res.partner.nuts', domain=[('level', '=', 1)], |
||||
|
string="NUTS L1") |
||||
|
nuts2_id = fields.Many2one( |
||||
|
comodel_name='res.partner.nuts', domain=[('level', '=', 2)], |
||||
|
string="NUTS L2", oldname="region") |
||||
|
nuts3_id = fields.Many2one( |
||||
|
comodel_name='res.partner.nuts', domain=[('level', '=', 3)], |
||||
|
string="NUTS L3", oldname="substate") |
||||
|
nuts4_id = fields.Many2one( |
||||
|
comodel_name='res.partner.nuts', domain=[('level', '=', 4)], |
||||
|
string="NUTS L4") |
||||
|
|
||||
@api.multi |
@api.multi |
||||
@api.depends('country_id') |
|
||||
def _labels_get(self): |
|
||||
for s in self: |
|
||||
s.lbl_region = s.country_id.region_label or _('Region') |
|
||||
s.lbl_substate = s.country_id.substate_label or _('Substate') |
|
||||
|
def _onchange_nuts(self, field): |
||||
|
country_id = self[field].country_id.id |
||||
|
state_id = self[field].state_id.id |
||||
|
if country_id and self.country_id.id != country_id: |
||||
|
self.country_id = country_id |
||||
|
if state_id and self.state_id.id != state_id: |
||||
|
self.state_id = state_id |
||||
|
level = int(field[:5][-1]) |
||||
|
if (level - 1) > 0: |
||||
|
parent_id = self[field].parent_id.id |
||||
|
if parent_id: |
||||
|
parent_field = 'nuts%d_id' % (level - 1) |
||||
|
if self[parent_field].id != parent_id: |
||||
|
self[parent_field] = parent_id |
||||
|
result = dict() |
||||
|
if country_id and level < 4: |
||||
|
result['domain'] = dict() |
||||
|
while level < 4: |
||||
|
parent_field = 'nuts%d_id' % level |
||||
|
domain_field = 'nuts%d_id' % (level + 1) |
||||
|
parent_id = self[parent_field].id |
||||
|
if parent_id: |
||||
|
result['domain'][domain_field] = [ |
||||
|
('parent_id', '=', parent_id), |
||||
|
] |
||||
|
level += 1 |
||||
|
return result |
||||
|
|
||||
@api.multi |
@api.multi |
||||
@api.onchange("substate_id") |
|
||||
def _onchange_substate_id(self): |
|
||||
if self.substate_id.country_id: |
|
||||
self.country_id = self.substate_id.country_id |
|
||||
return dict() |
|
||||
|
@api.onchange('nuts4_id') |
||||
|
def _onchange_nuts4_id(self): |
||||
|
return self._onchange_nuts('nuts4_id') |
||||
|
|
||||
@api.multi |
@api.multi |
||||
@api.onchange("region_id") |
|
||||
def _onchange_region_id(self): |
|
||||
if self.region_id.country_id: |
|
||||
self.country_id = self.region_id.country_id |
|
||||
return dict() |
|
||||
|
@api.onchange('nuts3_id') |
||||
|
def _onchange_nuts3_id(self): |
||||
|
return self._onchange_nuts('nuts3_id') |
||||
|
|
||||
@api.multi |
@api.multi |
||||
@api.onchange("country_id") |
|
||||
|
@api.onchange('nuts2_id') |
||||
|
def _onchange_nuts2_id(self): |
||||
|
return self._onchange_nuts('nuts2_id') |
||||
|
|
||||
|
@api.multi |
||||
|
@api.onchange('nuts1_id') |
||||
|
def _onchange_nuts1_id(self): |
||||
|
return self._onchange_nuts('nuts1_id') |
||||
|
|
||||
|
@api.multi |
||||
|
@api.onchange('country_id') |
||||
def _onchange_country_id(self): |
def _onchange_country_id(self): |
||||
"""Sensible values and domains for related fields.""" |
"""Sensible values and domains for related fields.""" |
||||
fields = {"state", "region", "substate"} |
|
||||
country_domain = ([("country_id", "=", self.country_id.id)] |
|
||||
|
fields = ['state_id', 'nuts1_id', 'nuts2_id', 'nuts3_id', 'nuts4_id'] |
||||
|
country_domain = ([('country_id', '=', self.country_id.id)] |
||||
if self.country_id else []) |
if self.country_id else []) |
||||
|
|
||||
domain = dict() |
domain = dict() |
||||
for field in fields: |
for field in fields: |
||||
field += "_id" |
|
||||
if self.country_id and self[field].country_id != self.country_id: |
if self.country_id and self[field].country_id != self.country_id: |
||||
self[field] = False |
self[field] = False |
||||
domain[field] = list(country_domain) # Using list() to copy |
domain[field] = list(country_domain) # Using list() to copy |
||||
|
|
||||
fields.remove("state") |
|
||||
|
fields.remove('state_id') |
||||
for field in fields: |
for field in fields: |
||||
level = self.country_id["%s_level" % field] |
|
||||
field += "_id" |
|
||||
|
level = int(field[:5][-1]) |
||||
if level: |
if level: |
||||
domain[field].append(("level", "=", level)) |
|
||||
|
|
||||
|
domain[field].append(('level', '=', level)) |
||||
|
if self.country_id: |
||||
|
nuts1 = self.env['res.partner.nuts'].search([ |
||||
|
('level', '=', 1), |
||||
|
('country_id', '=', self.country_id.id), |
||||
|
], limit=1) |
||||
|
if self.nuts1_id.id != nuts1.id: |
||||
|
self.nuts1_id = nuts1.id |
||||
return { |
return { |
||||
"domain": domain, |
|
||||
|
'domain': domain, |
||||
} |
} |
||||
|
|
||||
|
@api.multi |
||||
|
def onchange_state(self, state_id): |
||||
|
result = super(ResPartner, self).onchange_state(state_id) |
||||
|
state = self.env['res.country.state'].browse(state_id) |
||||
|
if state.country_id.state_level: |
||||
|
nuts_state = self.env['res.partner.nuts'].search([ |
||||
|
('level', '=', state.country_id.state_level), |
||||
|
('state_id', '=', state.id) |
||||
|
], limit=1) |
||||
|
if nuts_state: |
||||
|
field = 'nuts%d_id' % state.country_id.state_level |
||||
|
result.setdefault("value", dict()) |
||||
|
result['value'][field] = nuts_state.id |
||||
|
return result |
||||
|
|
||||
|
@api.model |
||||
|
def _address_fields(self): |
||||
|
fields = super(ResPartner, self)._address_fields() |
||||
|
if fields: |
||||
|
fields += ['nuts1_id', 'nuts2_id', 'nuts3_id', 'nuts4_id'] |
||||
|
return fields |
@ -1,6 +1,6 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||||
############################################################################## |
|
||||
# For copyright and license notices, see __openerp__.py file in root directory |
|
||||
############################################################################## |
|
||||
|
# © 2015 Antiun Ingeniería S.L. - Antonio Espinosa |
||||
|
# © 2015 Antiun Ingeniería S.L. - Jairo Llopis |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
from . import nuts_import |
from . import nuts_import |
Write
Preview
Loading…
Cancel
Save
Reference in new issue