Browse Source

[13.0][MIG] base_location_nuts

14.0
Andrea 5 years ago
committed by Andrii Skrypka
parent
commit
a7817d108c
  1. 2
      base_location_nuts/README.rst
  2. 6
      base_location_nuts/__manifest__.py
  3. 6
      base_location_nuts/migrations/12.0.1.0.0/post-migration.py
  4. 20
      base_location_nuts/models/res_partner.py
  5. 11
      base_location_nuts/models/res_partner_nuts.py
  6. 2
      base_location_nuts/readme/CONFIGURE.rst
  7. 1
      base_location_nuts/readme/CONTRIBUTORS.rst
  8. 1
      base_location_nuts/readme/INSTALL.rst
  9. 6
      base_location_nuts/tests/test_base_location_nuts.py
  10. 1
      base_location_nuts/views/res_partner_nuts_view.xml
  11. 11
      base_location_nuts/wizard/nuts_import.py
  12. 1
      base_location_nuts/wizard/nuts_import_view.xml

2
base_location_nuts/README.rst

@ -58,7 +58,7 @@ Configuration
After installation, you must click at import wizard to populate NUTS items After installation, you must click at import wizard to populate NUTS items
in Odoo database in: in Odoo database in:
Sales > Configuration > Address Book > Import NUTS 2013
Contacts > Configuration > Localization > Import NUTS 2013
This wizard will download from Europe RAMON service the metadata to This wizard will download from Europe RAMON service the metadata to
build NUTS in Odoo. Each localization addon (l10n_es_location_nuts, build NUTS in Odoo. Each localization addon (l10n_es_location_nuts,

6
base_location_nuts/__manifest__.py

@ -6,8 +6,8 @@
{ {
"name": "NUTS Regions", "name": "NUTS Regions",
"category": "Localisation/Europe", "category": "Localisation/Europe",
"version": "12.0.1.0.0",
"depends": ["contacts",],
"version": "13.0.1.0.0",
"depends": ["contacts"],
"data": [ "data": [
"views/res_country_view.xml", "views/res_country_view.xml",
"views/res_partner_nuts_view.xml", "views/res_partner_nuts_view.xml",
@ -15,7 +15,7 @@
"wizard/nuts_import_view.xml", "wizard/nuts_import_view.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
], ],
"images": ["images/new_fields.png",],
"images": ["images/new_fields.png"],
"author": "Tecnativa, " "Agile Business Group, " "Odoo Community Association (OCA)", "author": "Tecnativa, " "Agile Business Group, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/partner-contact/", "website": "https://github.com/OCA/partner-contact/",
"license": "AGPL-3", "license": "AGPL-3",

6
base_location_nuts/migrations/12.0.1.0.0/post-migration.py

@ -1,6 +0,0 @@
from openupgradelib import openupgrade
@openupgrade.migrate()
def migrate(env, version):
env["res.partner.nuts"]._parent_store_compute()

20
base_location_nuts/models/res_partner.py

@ -12,16 +12,10 @@ class ResPartner(models.Model):
comodel_name="res.partner.nuts", domain=[("level", "=", 1)], string="NUTS L1" comodel_name="res.partner.nuts", domain=[("level", "=", 1)], string="NUTS L1"
) )
nuts2_id = fields.Many2one( nuts2_id = fields.Many2one(
comodel_name="res.partner.nuts",
domain=[("level", "=", 2)],
string="NUTS L2",
oldname="region",
comodel_name="res.partner.nuts", domain=[("level", "=", 2)], string="NUTS L2"
) )
nuts3_id = fields.Many2one( nuts3_id = fields.Many2one(
comodel_name="res.partner.nuts",
domain=[("level", "=", 3)],
string="NUTS L3",
oldname="substate",
comodel_name="res.partner.nuts", domain=[("level", "=", 3)], string="NUTS L3"
) )
nuts4_id = fields.Many2one( nuts4_id = fields.Many2one(
comodel_name="res.partner.nuts", domain=[("level", "=", 4)], string="NUTS L4" comodel_name="res.partner.nuts", domain=[("level", "=", 4)], string="NUTS L4"
@ -50,9 +44,7 @@ class ResPartner(models.Model):
domain_field = "nuts%d_id" % (level + 1) domain_field = "nuts%d_id" % (level + 1)
parent_id = self[parent_field].id parent_id = self[parent_field].id
if parent_id: if parent_id:
result["domain"][domain_field] = [
("parent_id", "=", parent_id),
]
result["domain"][domain_field] = [("parent_id", "=", parent_id)]
level += 1 level += 1
return result return result
@ -90,13 +82,11 @@ class ResPartner(models.Model):
domain[field].append(("level", "=", level)) domain[field].append(("level", "=", level))
if self.country_id: if self.country_id:
nuts1 = self.env["res.partner.nuts"].search( nuts1 = self.env["res.partner.nuts"].search(
[("level", "=", 1), ("country_id", "=", self.country_id.id),], limit=1
[("level", "=", 1), ("country_id", "=", self.country_id.id)], limit=1
) )
if self.nuts1_id.id != nuts1.id: if self.nuts1_id.id != nuts1.id:
self.nuts1_id = nuts1.id self.nuts1_id = nuts1.id
return {
"domain": domain,
}
return {"domain": domain}
@api.onchange("state_id") @api.onchange("state_id")
def onchange_state_id_base_location_nuts(self): def onchange_state_id_base_location_nuts(self):

11
base_location_nuts/models/res_partner_nuts.py

@ -16,17 +16,12 @@ class ResPartnerNuts(models.Model):
level = fields.Integer(required=True) level = fields.Integer(required=True)
code = fields.Char(required=True) code = fields.Char(required=True)
name = fields.Char(required=True, translate=True) name = fields.Char(required=True, translate=True)
country_id = fields.Many2one(
comodel_name="res.country", string="Country", required=True
)
state_id = fields.Many2one(comodel_name="res.country.state", string="State")
country_id = fields.Many2one(comodel_name="res.country", required=True)
state_id = fields.Many2one(comodel_name="res.country.state")
not_updatable = fields.Boolean() not_updatable = fields.Boolean()
# Parent hierarchy # Parent hierarchy
parent_id = fields.Many2one(comodel_name="res.partner.nuts", ondelete="restrict") parent_id = fields.Many2one(comodel_name="res.partner.nuts", ondelete="restrict")
parent_path = fields.Char(index=True) parent_path = fields.Char(index=True)
child_ids = fields.One2many( child_ids = fields.One2many(
comodel_name="res.partner.nuts",
inverse_name="parent_id",
string="Children",
oldname="children",
comodel_name="res.partner.nuts", inverse_name="parent_id", string="Children"
) )

2
base_location_nuts/readme/CONFIGURE.rst

@ -1,6 +1,6 @@
After installation, you must click at import wizard to populate NUTS items After installation, you must click at import wizard to populate NUTS items
in Odoo database in: in Odoo database in:
Sales > Configuration > Address Book > Import NUTS 2013
Contacts > Configuration > Localization > Import NUTS 2013
This wizard will download from Europe RAMON service the metadata to This wizard will download from Europe RAMON service the metadata to
build NUTS in Odoo. Each localization addon (l10n_es_location_nuts, build NUTS in Odoo. Each localization addon (l10n_es_location_nuts,

1
base_location_nuts/readme/CONTRIBUTORS.rst

@ -4,3 +4,4 @@
* David Vidal <david.vidal@tecnativa.com> * David Vidal <david.vidal@tecnativa.com>
* Simone Rubino <simone.rubino@agilebg.com> * Simone Rubino <simone.rubino@agilebg.com>
* Alexandre Díaz <alexandre.diaz@tecnativa.com> * Alexandre Díaz <alexandre.diaz@tecnativa.com>
* Andrea Stirpe <a.stirpe@onestein.nl>

1
base_location_nuts/readme/INSTALL.rst

@ -3,3 +3,4 @@ NUTS with states defined by each localization addon, for example:
* l10n_es_location_nuts : Spanish Provinces (NUTS level 4) related to Partner State * l10n_es_location_nuts : Spanish Provinces (NUTS level 4) related to Partner State
* l10n_de_location_nuts : German states (NUTS level 2) related to Partner State * l10n_de_location_nuts : German states (NUTS level 2) related to Partner State
* l10n_nl_location_nuts : Dutch provinces (NUTS level 3 and 4) related to Partner State

6
base_location_nuts/tests/test_base_location_nuts.py

@ -20,14 +20,14 @@ class TestBaseLocationNuts(common.SavepointCase):
cls.nuts4_1 = cls.nuts_model.search([("code", "=", "ES243")]) cls.nuts4_1 = cls.nuts_model.search([("code", "=", "ES243")])
cls.nuts4_2 = cls.nuts_model.search([("code", "=", "ES300")]) cls.nuts4_2 = cls.nuts_model.search([("code", "=", "ES300")])
cls.partner = cls.env["res.partner"].create( cls.partner = cls.env["res.partner"].create(
{"name": "Test partner", "country_id": cls.country_1.id,}
{"name": "Test partner", "country_id": cls.country_1.id}
) )
cls.state_1 = cls.env["res.country.state"].create( cls.state_1 = cls.env["res.country.state"].create(
{"name": "Zaragoza Test", "code": "ZT", "country_id": cls.country_1.id,}
{"name": "Zaragoza Test", "code": "ZT", "country_id": cls.country_1.id}
) )
cls.nuts4_1.state_id = cls.state_1 cls.nuts4_1.state_id = cls.state_1
cls.state_2 = cls.env["res.country.state"].create( cls.state_2 = cls.env["res.country.state"].create(
{"name": "Madrid Test", "code": "MT", "country_id": cls.country_1.id,}
{"name": "Madrid Test", "code": "MT", "country_id": cls.country_1.id}
) )
cls.nuts4_2.state_id = cls.state_2 cls.nuts4_2.state_id = cls.state_2
cls.country_1.state_level = 4 cls.country_1.state_level = 4

1
base_location_nuts/views/res_partner_nuts_view.xml

@ -35,7 +35,6 @@
<record id="res_partner_nuts_action" model="ir.actions.act_window"> <record id="res_partner_nuts_action" model="ir.actions.act_window">
<field name="name">NUTS Items</field> <field name="name">NUTS Items</field>
<field name="res_model">res.partner.nuts</field> <field name="res_model">res.partner.nuts</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
<field name="help">You must click at import wizard to populate NUTS items <field name="help">You must click at import wizard to populate NUTS items
in Odoo database in: in Odoo database in:

11
base_location_nuts/wizard/nuts_import.py

@ -113,7 +113,7 @@ class NutsImport(models.TransientModel):
try: try:
value = int(value) value = int(value)
except (ValueError, TypeError): except (ValueError, TypeError):
logger.warn(
logger.warning(
"Value {} for field {} replaced by 0".format(value, k) "Value {} for field {} replaced by 0".format(value, k)
) )
value = 0 value = 0
@ -170,9 +170,7 @@ class NutsImport(models.TransientModel):
code = data.get("code", "") code = data.get("code", "")
if level == 1: if level == 1:
self._current_country = self._countries[code] self._current_country = self._countries[code]
return {
"country_id": self._current_country.id,
}
return {"country_id": self._current_country.id}
@api.model @api.model
def create_or_update_nuts(self, node): def create_or_update_nuts(self, node):
@ -183,7 +181,7 @@ class NutsImport(models.TransientModel):
data = self._mapping(node) data = self._mapping(node)
data.update(self.state_mapping(data, node)) data.update(self.state_mapping(data, node))
level = data.get("level", 0) level = data.get("level", 0)
if level >= 2 and level <= 5:
if 2 <= level <= 5:
data["parent_id"] = self._parents[level - 2] data["parent_id"] = self._parents[level - 2]
nuts = nuts_model.search( nuts = nuts_model.search(
[("level", "=", data["level"]), ("code", "=", data["code"])] [("level", "=", data["level"]), ("code", "=", data["code"])]
@ -192,11 +190,10 @@ class NutsImport(models.TransientModel):
nuts.filtered(lambda n: not n.not_updatable).write(data) nuts.filtered(lambda n: not n.not_updatable).write(data)
else: else:
nuts = nuts_model.create(data) nuts = nuts_model.create(data)
if level >= 1 and level <= 4:
if 1 <= level <= 4:
self._parents[level - 1] = nuts.id self._parents[level - 1] = nuts.id
return nuts return nuts
@api.multi
def run_import(self): def run_import(self):
nuts_model = self.env["res.partner.nuts"].with_context( nuts_model = self.env["res.partner.nuts"].with_context(
defer_parent_store_computation=True defer_parent_store_computation=True

1
base_location_nuts/wizard/nuts_import_view.xml

@ -31,7 +31,6 @@
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">nuts.import</field> <field name="res_model">nuts.import</field>
<field name="view_id" ref="nuts_import_form" /> <field name="view_id" ref="nuts_import_form" />
<field name="view_type">form</field>
<field name="view_mode">form</field> <field name="view_mode">form</field>
<field name="target">new</field> <field name="target">new</field>
</record> </record>

Loading…
Cancel
Save