Skip to content

Commit

Permalink
[MIG] l10n_nl_partner_name: Migration to 16.0
Browse files Browse the repository at this point in the history
  • Loading branch information
hbrunn committed Jul 22, 2024
1 parent 1a44e8c commit 016869d
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 233 deletions.
2 changes: 1 addition & 1 deletion l10n_nl_partner_name/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import model
from . import models
2 changes: 1 addition & 1 deletion l10n_nl_partner_name/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Dutch partner names",
"version": "13.0.1.0.0",
"version": "16.0.1.0.0",
"summary": "Adapt parter names to Dutch conventions (support infix)",
"author": "Therp BV, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/l10n-netherlands",
Expand Down
41 changes: 0 additions & 41 deletions l10n_nl_partner_name/model/res_partner.py

This file was deleted.

File renamed without changes.
60 changes: 60 additions & 0 deletions l10n_nl_partner_name/models/res_partner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Copyright 2017-2022 Therp BV <https://therp.nl>.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models


class ResPartner(models.Model):
"""Extend res.partner with extra fields for Dutch names."""

_inherit = "res.partner"
_l10n_nl_partner_name_infixes = ("van", "der", "den", "op", "ter", "de", "v/d")

initials = fields.Char()
infix = fields.Char()

@api.depends("firstname", "lastname", "initials", "infix")
def _compute_name(self):
for record in self:
record.name = record._get_computed_name(
record.lastname, record.firstname, record.initials, record.infix
)

def _inverse_name(self):
for record in self:
parts = record._get_inverse_name(record.name, record.is_company)
record.update(parts)

@api.model
def _get_computed_name(self, lastname, firstname, initials=None, infix=None):
return " ".join(
filter(
None,
(firstname, ("(%s)" % initials) if initials else None, infix, lastname),
)
)

@api.model
def _get_inverse_name(self, name, is_company=False):
if is_company:
return super()._get_inverse_name(name, is_company=is_company)

def add_token(key, value):
result[key] += (result[key] and " " or "") + value

result = dict.fromkeys(("firstname", "lastname", "initials", "infix"), "")
tokens = (name or "").split()
while len(tokens) > 1:
token = tokens.pop(0)
if all((c.isupper() or c == ".") for c in token):
add_token("initials", token)
elif token[:1] == "(" and token[-1:] == ")":
add_token("initials", token[1:-1])
elif token.lower() in self._l10n_nl_partner_name_infixes:
add_token("infix", token)
elif result["infix"]:
tokens.insert(0, token)
break
else:
add_token("firstname", token)
result["lastname"] = " ".join(tokens)
return result
108 changes: 0 additions & 108 deletions l10n_nl_partner_name/scripts/guess_names.py

This file was deleted.

20 changes: 18 additions & 2 deletions l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,23 @@ def test_l10n_nl_partner_name(self):
partner.firstname = "Willem-Alexander"
partner.lastname = "van Oranje-Nassau"
self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau")
partner.write({"name": partner.name})
partner.name = partner.name
self.assertEqual(partner.firstname, "Willem-Alexander")
self.assertEqual(partner.lastname, "van Oranje-Nassau")
self.assertEqual(partner.infix, "van")
self.assertEqual(partner.lastname, "Oranje-Nassau")
self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau")
partner.name = "Willem Frederik (W.F.) Hermans"
self.assertEqual(partner.firstname, "Willem Frederik")
self.assertEqual(partner.infix, "")
self.assertEqual(partner.initials, "W.F.")
self.assertEqual(partner.lastname, "Hermans")
self.assertEqual(partner.name, "Willem Frederik (W.F.) Hermans")
partner.name = "Alfred J. Kwack"
self.assertEqual(partner.firstname, "Alfred")
self.assertEqual(partner.infix, "")
self.assertEqual(partner.initials, "J.")
self.assertEqual(partner.lastname, "Kwack")
partner.write({"initials": "A.J."})
self.assertEqual(partner.name, "Alfred (A.J.) Kwack")
partner.name = "Willem-Alexander van Oranje Nassau"
self.assertEqual(partner.lastname, "Oranje Nassau")
94 changes: 14 additions & 80 deletions l10n_nl_partner_name/views/res_partner.xml
Original file line number Diff line number Diff line change
@@ -1,102 +1,36 @@
<odoo>
<record id="view_partner_simple_form_firstname" model="ir.ui.view">
<field name="name">res.partner.simplified.form.firstname</field>
<record id="view_partner_simple_form" model="ir.ui.view">
<field name="model">res.partner</field>
<field
name="inherit_id"
ref="partner_firstname.view_partner_simple_form_firstname"
/>
<field name="inherit_id" ref="partner_firstname.view_partner_simple_form" />
<field name="arch" type="xml">
<xpath
expr="//field[@name='firstname']/ancestor::group[1]"
position="inside"
>
<div name="partner_name_dutch">
</div>
</xpath>
<xpath expr="//div[@name='partner_name_dutch']" position="inside">
<xpath expr="//field[@name='firstname']" position="move" />
<xpath expr="//field[@name='lastname']" position="move" />
</xpath>
<xpath expr="//field[@name='lastname']" position="attributes">
<attribute name="placeholder">Last name</attribute>
<attribute name="style">max-width: calc(50% - 2.1em)</attribute>
</xpath>
<xpath expr="//field[@name='firstname']" position="attributes">
<attribute name="placeholder">First name</attribute>
<attribute name="style">max-width: calc(50% - 2.1em)</attribute>
<attribute name="default_focus">1</attribute>
</xpath>
<xpath expr="//field[@name='firstname']" position="after">
<field
name="initials"
placeholder="Initials"
class="oe_inline"
style="max-width: 2em"
/>
<field name="initials" placeholder="Initials" />
</xpath>
<xpath expr="//field[@name='lastname']" position="before">
<field
name="infix"
placeholder="Infix"
class="oe_inline"
style="max-width: 2em"
/>
<field name="infix" placeholder="Infix" />
</xpath>
</field>
</record>
<record id="view_partner_form_firstname" model="ir.ui.view">
<field name="name">res.partner.form.firstname</field>
<record id="view_partner_form" model="ir.ui.view">
<field name="model">res.partner</field>
<field name="inherit_id" ref="partner_firstname.view_partner_form_firstname" />
<field name="inherit_id" ref="partner_firstname.view_partner_form" />
<field name="arch" type="xml">
<xpath
expr="//field[@name='firstname']/ancestor::group[1]"
position="inside"
>
<div name="partner_name_dutch">
</div>
</xpath>
<xpath expr="//div[@name='partner_name_dutch']" position="inside">
<xpath expr="//field[@name='firstname']" position="move" />
<xpath expr="//field[@name='lastname']" position="move" />
</xpath>
<xpath expr="//field[@name='lastname']" position="attributes">
<attribute name="placeholder">Last name</attribute>
<attribute name="style">max-width: calc(50% - 2.1em)</attribute>
<attribute name="class">oe_inline</attribute>
<attribute name="nolabel">1</attribute>
</xpath>
<xpath expr="//field[@name='firstname']" position="attributes">
<attribute name="placeholder">First name</attribute>
<attribute name="style">max-width: calc(50% - 2.1em)</attribute>
<attribute name="default_focus">1</attribute>
<attribute name="class">oe_inline</attribute>
<attribute name="nolabel">1</attribute>
</xpath>
<xpath expr="//field[@name='firstname']" position="after">
<field
name="initials"
nolabel="1"
placeholder="Initials"
class="oe_inline"
style="max-width: 2em"
/>
<field name="initials" placeholder="Initials" />
</xpath>
<xpath expr="//field[@name='lastname']" position="before">
<field
name="infix"
nolabel="1"
placeholder="Infix"
class="oe_inline"
style="max-width: 2em"
/>
<field name="infix" placeholder="Infix" />
</xpath>
<xpath
expr="//field[@name='child_ids']/form/sheet//group/field[@name='lastname']"
expr="//field[@name='child_ids']/form/sheet//group/field[@name='firstname']"
position="after"
>
<field name="initials" />
</xpath>
<xpath
expr="//field[@name='child_ids']/form/sheet//group/field[@name='lastname']"
position="before"
>
<field name="infix" />
</xpath>
</field>
Expand Down

0 comments on commit 016869d

Please sign in to comment.