From 9392ede08565d59c6a628d9beffc7a2b118dafc2 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 4 Nov 2015 17:43:41 +0100 Subject: [PATCH 01/27] [ADD] l10n_nl_partner_name, l10n_nl_partner_salutation --- l10n_nl_partner_name/README.rst | 31 +++++++ l10n_nl_partner_name/__init__.py | 21 +++++ l10n_nl_partner_name/__openerp__.py | 40 +++++++++ .../i18n/l10n_nl_partner_name.pot | 39 +++++++++ l10n_nl_partner_name/i18n/nl.po | 31 +++++++ l10n_nl_partner_name/model/__init__.py | 24 ++++++ l10n_nl_partner_name/model/res_partner.py | 61 ++++++++++++++ l10n_nl_partner_name/scripts/guess_names.py | 78 ++++++++++++++++++ l10n_nl_partner_name/static/src/img/icon.png | Bin 0 -> 552 bytes l10n_nl_partner_name/view/res_partner.xml | 42 ++++++++++ 10 files changed, 367 insertions(+) create mode 100644 l10n_nl_partner_name/README.rst create mode 100644 l10n_nl_partner_name/__init__.py create mode 100644 l10n_nl_partner_name/__openerp__.py create mode 100644 l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot create mode 100644 l10n_nl_partner_name/i18n/nl.po create mode 100644 l10n_nl_partner_name/model/__init__.py create mode 100644 l10n_nl_partner_name/model/res_partner.py create mode 100644 l10n_nl_partner_name/scripts/guess_names.py create mode 100644 l10n_nl_partner_name/static/src/img/icon.png create mode 100644 l10n_nl_partner_name/view/res_partner.xml diff --git a/l10n_nl_partner_name/README.rst b/l10n_nl_partner_name/README.rst new file mode 100644 index 000000000..63e1dd68c --- /dev/null +++ b/l10n_nl_partner_name/README.rst @@ -0,0 +1,31 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +Module Dutch Partner Name +========================= + + Use Dutch conventions for partner names: + - have infixes + - have initials + - split first and last name (provided by partner_firstname) + +Contributors +------------ + +* Holger Brunn +* Ronald Portier + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/l10n_nl_partner_name/__init__.py b/l10n_nl_partner_name/__init__.py new file mode 100644 index 000000000..9da2ac3b6 --- /dev/null +++ b/l10n_nl_partner_name/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import model diff --git a/l10n_nl_partner_name/__openerp__.py b/l10n_nl_partner_name/__openerp__.py new file mode 100644 index 000000000..46ecc83fc --- /dev/null +++ b/l10n_nl_partner_name/__openerp__.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013-2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name': 'Dutch partner names', + 'version': '1.0', + 'author': 'Therp BV, Odoo Community Association (OCA)', + 'category': 'Contact management', + 'depends': [ + 'partner_firstname', + ], + 'data': [ + 'view/res_partner.xml', + ], + 'js': [], + 'css': [], + 'qweb': [], + 'auto_install': False, + 'installable': True, + 'external_dependencies': { + 'python': ['mako'], + }, +} diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot new file mode 100644 index 000000000..582a5db05 --- /dev/null +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -0,0 +1,39 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_nl_partner_name +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-02 12:30+0000\n" +"PO-Revision-Date: 2015-01-02 12:30+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_nl_partner_name +#: field:res.partner,infix:0 +msgid "Infix" +msgstr "" + +#. module: l10n_nl_partner_name +#: field:res.partner,initials:0 +msgid "Initials" +msgstr "" + +#. module: l10n_nl_partner_name +#: field:res.partner,parent_name:0 +msgid "Parent name" +msgstr "" + +#. module: l10n_nl_partner_name +#: code:_description:0 +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +#, python-format +msgid "Partner" +msgstr "" + diff --git a/l10n_nl_partner_name/i18n/nl.po b/l10n_nl_partner_name/i18n/nl.po new file mode 100644 index 000000000..3b6dd6488 --- /dev/null +++ b/l10n_nl_partner_name/i18n/nl.po @@ -0,0 +1,31 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_nl_partner_name +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-10-02 14:42+0000\n" +"PO-Revision-Date: 2013-10-02 14:42+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_nl_partner_name +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +msgid "Partner" +msgstr "Relatie" + +#. module: l10n_nl_partner_name +#: field:res.partner,infix:0 +msgid "Infix" +msgstr "Tussenvoegsel" + +#. module: l10n_nl_partner_name +#: field:res.partner,initials:0 +msgid "Initials" +msgstr "Voorletters" diff --git a/l10n_nl_partner_name/model/__init__.py b/l10n_nl_partner_name/model/__init__.py new file mode 100644 index 000000000..d6656d529 --- /dev/null +++ b/l10n_nl_partner_name/model/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +"""Extentions for models.""" +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import res_partner + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py new file mode 100644 index 000000000..b680832cf --- /dev/null +++ b/l10n_nl_partner_name/model/res_partner.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +"""Extend res.partner with extra fields for Dutch names.""" +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2013-2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from mako.template import Template +from openerp import models, fields, api + + +class ResPartner(models.Model): + """Extend res.partner with extra fields for Dutch names.""" + _inherit = 'res.partner' + + initials = fields.Char(size=16) + infix = fields.Char(size=32) + + @api.one + @api.depends("firstname", "lastname", "initials", "infix") + def _compute_name(self): + self.name = self._get_computed_name( + self.lastname, self.firstname, self.initials, self.infix) + + @api.one + @api.onchange("firstname", "lastname", "initials", "infix") + def _onchange_subnames(self): + return super(ResPartner, self)._onchange_subnames() + + @api.model + def _get_computed_name(self, lastname, firstname, initials=None, + infix=None): + name_template = Template( + self.env.context.get( + 'name_format', + "${firstname or initials or ''}" + "${(firstname or initials) and ' ' or ''}" + "${infix or ''}${infix and ' ' or ''}${lastname}")) + name = name_template.render(**{ + 'firstname': firstname, + 'lastname': lastname, + 'initials': initials, + 'infix': infix, + }) + return name if name else '' + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py new file mode 100644 index 000000000..d0f0ce8fa --- /dev/null +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -0,0 +1,78 @@ +#!/usr/bin/python + +import argparse +import xmlrpclib +import re +parser = argparse.ArgumentParser() +parser.add_argument('openerp_host') +parser.add_argument('openerp_db') +parser.add_argument('openerp_user') +parser.add_argument('openerp_passwd') +parser.add_argument('additional_search', nargs='?') +args = parser.parse_args() + +openerp_socket = xmlrpclib.ServerProxy( + 'http://%s/xmlrpc/common' % args.openerp_host) +openerp_uid = openerp_socket.login( + args.openerp_db, args.openerp_user, args.openerp_passwd) +openerp_socket = xmlrpclib.ServerProxy( + 'http://%s/xmlrpc/object' % args.openerp_host, allow_none=True) + + +def openerp_execute(model, method, *pargs, **kwargs): + return openerp_socket.execute( + args.openerp_db, openerp_uid, + args.openerp_passwd, model, method, *pargs, **kwargs) + +infixes = ['van', 'der', 'ter', 'de', 'v/d'] +initial = re.compile(r'^([A-Z]{1,3}\.{0,1}){1,4}$') + +limit = 100000 +offset = 0 + + +def add_token(values, key, token, delimiter=' '): + values[key] = (values[key] + ' ' if values[key] else '') + token + +while True: + ids = openerp_execute( + 'res.partner', 'search', + [ + ('lastname', '!=', False), + ('lastname', '!=', ''), + ('firstname', '=', False), + ('initials', '=', False), + ('infix', '=', False), + ('is_company', '=', False), + ] + + eval(args.additional_search or '[]'), + offset, + limit) + if not ids: + break + + for partner in openerp_execute( + 'res.partner', 'read', ids, + ['lastname', 'firstname', 'initials', 'infix']): + print partner['lastname'] + + have_infix = False + tokens = partner['lastname'].split() + while len(tokens) > 1: + token = tokens.pop(0) + if initial.match(token): + add_token(partner, 'initials', token) + elif any(map(lambda infix: re.match(infix, token, re.I), infixes)): + add_token(partner, 'infix', token.lower()) + have_infix = True + else: + if have_infix: + tokens.insert(0, token) + break + add_token(partner, 'firstname', token) + partner['lastname'] = ' '.join(tokens) + + print partner + openerp_execute('res.partner', 'write', partner['id'], partner) + + offset += limit diff --git a/l10n_nl_partner_name/static/src/img/icon.png b/l10n_nl_partner_name/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..48485f76ec0b82b6ed216c92c618c2429ecdc001 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSY)RhkE>8(%y`dEVi!oTtiUlHNH>77!9&AY3=E7qo-U3d6}R5rcH}+eAmVz_FIe);jR!2n z8JQeR6B-#>0#bZtRrfV*-!b#dGktELPADkIOWuE{@22vM^trYTJ6QzO8!Q-)a4PsQ z6f$)PJIrBtM6A&E-caV$$Gi96VQcGsY{4S%>~B9w`cW;u^R1>nEk9vV;a+>7fw}hE z7iRt=*-1!7!n_L%waveoe^&{LmUQi{1B$AaxJHzuB$lLFB^RXvDF!10LnB=S6I}zN z5JM9yV`D2LQ*8qyD+7b|(>Q8TH00)|WTsW3X)v&`GPHzf`1Z_U0Z@Y^$cEtjw370~ nqEv?R@^Zb*yzJuS#DY}4{G#;P?`))iiWody{an^LB{Ts5!#|;+ literal 0 HcmV?d00001 diff --git a/l10n_nl_partner_name/view/res_partner.xml b/l10n_nl_partner_name/view/res_partner.xml new file mode 100644 index 000000000..537f51554 --- /dev/null +++ b/l10n_nl_partner_name/view/res_partner.xml @@ -0,0 +1,42 @@ + + + + res.partner.simplified.form.firstname + res.partner + + + + + + + + + + + + + res.partner.form.firstname + res.partner + + + + + + + + + + + + + + + + + From faede2dfcfd250c053de20ee217e8a792d1bf90e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 4 Jan 2016 13:39:04 +0100 Subject: [PATCH 02/27] [FIX] show empty string if lastname is unset --- l10n_nl_partner_name/model/res_partner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index b680832cf..3e1ee5198 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -49,7 +49,7 @@ def _get_computed_name(self, lastname, firstname, initials=None, 'name_format', "${firstname or initials or ''}" "${(firstname or initials) and ' ' or ''}" - "${infix or ''}${infix and ' ' or ''}${lastname}")) + "${infix or ''}${infix and ' ' or ''}${lastname or ''}")) name = name_template.render(**{ 'firstname': firstname, 'lastname': lastname, From cd561c671e107c813bffa2b20ac9484c02d7006d Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 18 Apr 2016 20:24:43 +0200 Subject: [PATCH 03/27] [UPD] make it work with latest partner-contact --- l10n_nl_partner_name/model/res_partner.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 3e1ee5198..149a56600 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -58,4 +58,12 @@ def _get_computed_name(self, lastname, firstname, initials=None, }) return name if name else '' + @api.model + def _get_inverse_name(self, name, is_company=False): + result = super(ResPartner, self)._get_inverse_name( + name, is_company=is_company) + # super assumes $lastname $firstname, we want it the other way araound + return dict( + result, lastname=result['firstname'], firstname=result['lastname']) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From ea41c7d0f9aa19d8052c52dcc74f8e8a78b9d678 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 18 Apr 2016 20:29:41 +0200 Subject: [PATCH 04/27] [FIX] flake8 --- l10n_nl_partner_name/model/res_partner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 149a56600..1d0227aff 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -61,8 +61,8 @@ def _get_computed_name(self, lastname, firstname, initials=None, @api.model def _get_inverse_name(self, name, is_company=False): result = super(ResPartner, self)._get_inverse_name( - name, is_company=is_company) - # super assumes $lastname $firstname, we want it the other way araound + name, is_company=is_company) + # super assumes $lastname $firstname, we want it the other way around return dict( result, lastname=result['firstname'], firstname=result['lastname']) From 939c63edbb41e7d992625127f5a17db94ed5f8cf Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 19 Apr 2016 08:56:28 +0200 Subject: [PATCH 05/27] [ADD] tests --- l10n_nl_partner_name/tests/__init__.py | 4 ++++ .../tests/test_l10n_nl_partner_name.py | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 l10n_nl_partner_name/tests/__init__.py create mode 100644 l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py diff --git a/l10n_nl_partner_name/tests/__init__.py b/l10n_nl_partner_name/tests/__init__.py new file mode 100644 index 000000000..8e412f945 --- /dev/null +++ b/l10n_nl_partner_name/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# © 2016 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_l10n_nl_partner_name diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py new file mode 100644 index 000000000..bc28b3b84 --- /dev/null +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2016 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openerp.tests.common import TransactionCase + + +class TestL10nNlPartnerName(TransactionCase): + def test_l10n_nl_partner_name(self): + partner = self.env['res.partner'].create({ + 'name': 'Mark Rutte', + }) + self.assertEqual(partner.firstname, 'Mark') + self.assertEqual(partner.lastname, 'Rutte') + partner.firstname = 'Willem-Alexander' + partner.lastname = 'van Oranje-Nassau' + self.assertEqual( + partner.name, + 'Willem-Alexander van Oranje-Nassau' + ) + partner.write({ + 'name': partner.name, + }) + self.assertEqual(partner.firstname, 'Willem-Alexander') + self.assertEqual(partner.lastname, 'van Oranje-Nassau') From b6e0801130b759c691ee6f1ba0c2644387a9f540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Sat, 8 Oct 2016 11:17:34 +0200 Subject: [PATCH 06/27] [UPD] prefix versions with 8.0 --- l10n_nl_partner_name/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_nl_partner_name/__openerp__.py b/l10n_nl_partner_name/__openerp__.py index 46ecc83fc..672258162 100644 --- a/l10n_nl_partner_name/__openerp__.py +++ b/l10n_nl_partner_name/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { 'name': 'Dutch partner names', - 'version': '1.0', + 'version': '8.0.1.0.0', 'author': 'Therp BV, Odoo Community Association (OCA)', 'category': 'Contact management', 'depends': [ From f83297c7cad1a7a0aabb769ec8b5431681ce177b Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 11 Jan 2017 16:37:46 +0100 Subject: [PATCH 07/27] [FIX] linting --- l10n_nl_partner_name/scripts/guess_names.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py index d0f0ce8fa..542a7dc42 100644 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -24,6 +24,7 @@ def openerp_execute(model, method, *pargs, **kwargs): args.openerp_db, openerp_uid, args.openerp_passwd, model, method, *pargs, **kwargs) + infixes = ['van', 'der', 'ter', 'de', 'v/d'] initial = re.compile(r'^([A-Z]{1,3}\.{0,1}){1,4}$') @@ -34,6 +35,7 @@ def openerp_execute(model, method, *pargs, **kwargs): def add_token(values, key, token, delimiter=' '): values[key] = (values[key] + ' ' if values[key] else '') + token + while True: ids = openerp_execute( 'res.partner', 'search', From 524cd2501b20c18a375b84696a5c53536b9cd47c Mon Sep 17 00:00:00 2001 From: George Daramouskas Date: Thu, 17 Aug 2017 12:29:33 +0200 Subject: [PATCH 08/27] [MIG] Migrates l10n_nl_partner_name from 8.0 to 10.0 [MIG] Migrates l10n_nl_partner_salutation from 8.0 to 10.0 Adding a commiter, changing the format of the licence comment, removing deprecated Char init variable [FIX] Sort version of licencing, removing VIM comments, changing __openerp__ to __manifest__ [FIX] Adding tests to increase code coverage [FIX] Replaces api.one with api.multi and inserting api.model [FIX] Adds newlines on the xmls, adds licence on manifest, changes name of compute methods [FIX] Creates the res_partner_title_sir in the module instead on the base module --- l10n_nl_partner_name/README.rst | 1 + l10n_nl_partner_name/__init__.py | 21 +--------- l10n_nl_partner_name/__manifest__.py | 20 +++++++++ .../i18n/l10n_nl_partner_name.pot | 4 +- l10n_nl_partner_name/i18n/nl.po | 4 +- l10n_nl_partner_name/model/__init__.py | 24 +---------- l10n_nl_partner_name/model/res_partner.py | 39 +++++------------- l10n_nl_partner_name/scripts/guess_names.py | 36 ++++++++-------- .../static/description/icon.png | Bin 0 -> 552 bytes .../tests/test_l10n_nl_partner_name.py | 2 +- l10n_nl_partner_name/view/res_partner.xml | 9 ++-- 11 files changed, 62 insertions(+), 98 deletions(-) create mode 100644 l10n_nl_partner_name/__manifest__.py create mode 100644 l10n_nl_partner_name/static/description/icon.png diff --git a/l10n_nl_partner_name/README.rst b/l10n_nl_partner_name/README.rst index 63e1dd68c..b0dd28bcf 100644 --- a/l10n_nl_partner_name/README.rst +++ b/l10n_nl_partner_name/README.rst @@ -14,6 +14,7 @@ Contributors * Holger Brunn * Ronald Portier +* George Daramouskas Maintainer ---------- diff --git a/l10n_nl_partner_name/__init__.py b/l10n_nl_partner_name/__init__.py index 9da2ac3b6..479a49b96 100644 --- a/l10n_nl_partner_name/__init__.py +++ b/l10n_nl_partner_name/__init__.py @@ -1,21 +1,4 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013 Therp BV (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2017 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import model diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py new file mode 100644 index 000000000..a45b58b4b --- /dev/null +++ b/l10n_nl_partner_name/__manifest__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# © 2017 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Dutch partner names', + 'version': '10.0.1.0.0', + 'author': 'Therp BV, Odoo Community Association (OCA)', + 'category': 'Contact management', + 'depends': [ + 'partner_firstname', + ], + 'data': [ + 'view/res_partner.xml', + ], + 'auto_install': False, + 'installable': True, + 'external_dependencies': { + 'python': ['mako'], + }, +} diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot index 582a5db05..9bfe785f1 100644 --- a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -1,10 +1,10 @@ -# Translation of OpenERP Server. +# Translation of Odoo Server. # This file contains the translation of the following modules: # * l10n_nl_partner_name # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-02 12:30+0000\n" "PO-Revision-Date: 2015-01-02 12:30+0000\n" diff --git a/l10n_nl_partner_name/i18n/nl.po b/l10n_nl_partner_name/i18n/nl.po index 3b6dd6488..35b685434 100644 --- a/l10n_nl_partner_name/i18n/nl.po +++ b/l10n_nl_partner_name/i18n/nl.po @@ -1,10 +1,10 @@ -# Translation of OpenERP Server. +# Translation of Odoo Server. # This file contains the translation of the following modules: # * l10n_nl_partner_name # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-10-02 14:42+0000\n" "PO-Revision-Date: 2013-10-02 14:42+0000\n" diff --git a/l10n_nl_partner_name/model/__init__.py b/l10n_nl_partner_name/model/__init__.py index d6656d529..41d9e70d8 100644 --- a/l10n_nl_partner_name/model/__init__.py +++ b/l10n_nl_partner_name/model/__init__.py @@ -1,24 +1,4 @@ # -*- coding: utf-8 -*- -"""Extentions for models.""" -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013 Therp BV (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2017 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import res_partner - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 1d0227aff..2200e1f9a 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -1,42 +1,25 @@ # -*- coding: utf-8 -*- -"""Extend res.partner with extra fields for Dutch names.""" -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013-2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2017 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from mako.template import Template -from openerp import models, fields, api +from odoo import models, fields, api class ResPartner(models.Model): """Extend res.partner with extra fields for Dutch names.""" _inherit = 'res.partner' - initials = fields.Char(size=16) - infix = fields.Char(size=32) + initials = fields.Char() + infix = fields.Char() - @api.one + @api.multi @api.depends("firstname", "lastname", "initials", "infix") def _compute_name(self): - self.name = self._get_computed_name( - self.lastname, self.firstname, self.initials, self.infix) + for record in self: + record.name = record._get_computed_name( + record.lastname, record.firstname, record.initials, + record.infix) - @api.one @api.onchange("firstname", "lastname", "initials", "infix") def _onchange_subnames(self): return super(ResPartner, self)._onchange_subnames() @@ -65,5 +48,3 @@ def _get_inverse_name(self, name, is_company=False): # super assumes $lastname $firstname, we want it the other way around return dict( result, lastname=result['firstname'], firstname=result['lastname']) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py index 542a7dc42..eb94a9b6e 100644 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -1,28 +1,30 @@ #!/usr/bin/python +# © 2017 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import argparse import xmlrpclib import re parser = argparse.ArgumentParser() -parser.add_argument('openerp_host') -parser.add_argument('openerp_db') -parser.add_argument('openerp_user') -parser.add_argument('openerp_passwd') +parser.add_argument('odoo_host') +parser.add_argument('odoo_db') +parser.add_argument('odoo_user') +parser.add_argument('odoo_passwd') parser.add_argument('additional_search', nargs='?') args = parser.parse_args() -openerp_socket = xmlrpclib.ServerProxy( - 'http://%s/xmlrpc/common' % args.openerp_host) -openerp_uid = openerp_socket.login( - args.openerp_db, args.openerp_user, args.openerp_passwd) -openerp_socket = xmlrpclib.ServerProxy( - 'http://%s/xmlrpc/object' % args.openerp_host, allow_none=True) +odoo_socket = xmlrpclib.ServerProxy( + 'http://%s/xmlrpc/common' % args.odoo_host) +odoo_uid = odoo_socket.login( + args.odoo_db, args.odoo_user, args.odoo_passwd) +odoo_socket = xmlrpclib.ServerProxy( + 'http://%s/xmlrpc/object' % args.odoo_host, allow_none=True) -def openerp_execute(model, method, *pargs, **kwargs): - return openerp_socket.execute( - args.openerp_db, openerp_uid, - args.openerp_passwd, model, method, *pargs, **kwargs) +def odoo_execute(model, method, *pargs, **kwargs): + return odoo_socket.execute( + args.odoo_db, odoo_uid, + args.odoo_passwd, model, method, *pargs, **kwargs) infixes = ['van', 'der', 'ter', 'de', 'v/d'] @@ -37,7 +39,7 @@ def add_token(values, key, token, delimiter=' '): while True: - ids = openerp_execute( + ids = odoo_execute( 'res.partner', 'search', [ ('lastname', '!=', False), @@ -53,7 +55,7 @@ def add_token(values, key, token, delimiter=' '): if not ids: break - for partner in openerp_execute( + for partner in odoo_execute( 'res.partner', 'read', ids, ['lastname', 'firstname', 'initials', 'infix']): print partner['lastname'] @@ -75,6 +77,6 @@ def add_token(values, key, token, delimiter=' '): partner['lastname'] = ' '.join(tokens) print partner - openerp_execute('res.partner', 'write', partner['id'], partner) + odoo_execute('res.partner', 'write', partner['id'], partner) offset += limit diff --git a/l10n_nl_partner_name/static/description/icon.png b/l10n_nl_partner_name/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..48485f76ec0b82b6ed216c92c618c2429ecdc001 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSY)RhkE>8(%y`dEVi!oTtiUlHNH>77!9&AY3=E7qo-U3d6}R5rcH}+eAmVz_FIe);jR!2n z8JQeR6B-#>0#bZtRrfV*-!b#dGktELPADkIOWuE{@22vM^trYTJ6QzO8!Q-)a4PsQ z6f$)PJIrBtM6A&E-caV$$Gi96VQcGsY{4S%>~B9w`cW;u^R1>nEk9vV;a+>7fw}hE z7iRt=*-1!7!n_L%waveoe^&{LmUQi{1B$AaxJHzuB$lLFB^RXvDF!10LnB=S6I}zN z5JM9yV`D2LQ*8qyD+7b|(>Q8TH00)|WTsW3X)v&`GPHzf`1Z_U0Z@Y^$cEtjw370~ nqEv?R@^Zb*yzJuS#DY}4{G#;P?`))iiWody{an^LB{Ts5!#|;+ literal 0 HcmV?d00001 diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index bc28b3b84..0a32924a9 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # © 2016 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class TestL10nNlPartnerName(TransactionCase): diff --git a/l10n_nl_partner_name/view/res_partner.xml b/l10n_nl_partner_name/view/res_partner.xml index 537f51554..aea7eea52 100644 --- a/l10n_nl_partner_name/view/res_partner.xml +++ b/l10n_nl_partner_name/view/res_partner.xml @@ -1,5 +1,4 @@ - - + res.partner.simplified.form.firstname res.partner @@ -28,7 +27,7 @@ @@ -37,6 +36,4 @@ - - - + From c9d47ffe2420eb6452366a7937afe9cabd100aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Thu, 19 Apr 2018 10:57:48 +0200 Subject: [PATCH 09/27] [FIX] version number in l10n_nl_partner_name --- l10n_nl_partner_name/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_nl_partner_name/__openerp__.py b/l10n_nl_partner_name/__openerp__.py index 672258162..ab89757de 100644 --- a/l10n_nl_partner_name/__openerp__.py +++ b/l10n_nl_partner_name/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { 'name': 'Dutch partner names', - 'version': '8.0.1.0.0', + 'version': '10.0.1.0.0', 'author': 'Therp BV, Odoo Community Association (OCA)', 'category': 'Contact management', 'depends': [ From ce664ece972a8d659001991ac5388180f2c591d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Fri, 15 Jun 2018 23:25:20 +0200 Subject: [PATCH 10/27] remove obsolete .pot files [ci skip] --- .../i18n/l10n_nl_partner_name.pot | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot deleted file mode 100644 index 9bfe785f1..000000000 --- a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot +++ /dev/null @@ -1,39 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * l10n_nl_partner_name -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-02 12:30+0000\n" -"PO-Revision-Date: 2015-01-02 12:30+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: l10n_nl_partner_name -#: field:res.partner,infix:0 -msgid "Infix" -msgstr "" - -#. module: l10n_nl_partner_name -#: field:res.partner,initials:0 -msgid "Initials" -msgstr "" - -#. module: l10n_nl_partner_name -#: field:res.partner,parent_name:0 -msgid "Parent name" -msgstr "" - -#. module: l10n_nl_partner_name -#: code:_description:0 -#: model:ir.model,name:l10n_nl_partner_name.model_res_partner -#, python-format -msgid "Partner" -msgstr "" - From 4681ba88bf82954ab198374473a7a08aa7b4bb6c Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 23 Jun 2018 13:48:34 +0000 Subject: [PATCH 11/27] [UPD] Update l10n_nl_partner_name.pot --- .../i18n/l10n_nl_partner_name.pot | 32 +++++++++++++++++++ l10n_nl_partner_name/i18n/nl.po | 19 ++++++----- 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot new file mode 100644 index 000000000..6d20da191 --- /dev/null +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_nl_partner_name +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_nl_partner_name +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix +msgid "Infix" +msgstr "" + +#. module: l10n_nl_partner_name +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials +msgid "Initials" +msgstr "" + +#. module: l10n_nl_partner_name +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +msgid "Partner" +msgstr "" + diff --git a/l10n_nl_partner_name/i18n/nl.po b/l10n_nl_partner_name/i18n/nl.po index 35b685434..2655fe191 100644 --- a/l10n_nl_partner_name/i18n/nl.po +++ b/l10n_nl_partner_name/i18n/nl.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * l10n_nl_partner_name +# * l10n_nl_partner_name # msgid "" msgstr "" @@ -10,22 +10,25 @@ msgstr "" "PO-Revision-Date: 2013-10-02 14:42+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" #. module: l10n_nl_partner_name -#: model:ir.model,name:l10n_nl_partner_name.model_res_partner -msgid "Partner" -msgstr "Relatie" - -#. module: l10n_nl_partner_name -#: field:res.partner,infix:0 +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix msgid "Infix" msgstr "Tussenvoegsel" #. module: l10n_nl_partner_name -#: field:res.partner,initials:0 +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials msgid "Initials" msgstr "Voorletters" + +#. module: l10n_nl_partner_name +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +msgid "Partner" +msgstr "Relatie" From f6e7d366c54ad501a70e42d8dbcfa1bc3e14ea7b Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 19 Jul 2018 11:42:07 +0200 Subject: [PATCH 12/27] [10.0] l10n_nl_partner_name improvements (#128) * [DEL] obsolete manifest * [IMP] allow to fill in names in a more natural way --- l10n_nl_partner_name/README.rst | 6 ++ l10n_nl_partner_name/__manifest__.py | 5 +- l10n_nl_partner_name/__openerp__.py | 40 ----------- .../data/ir.config_parameter.xml | 7 ++ l10n_nl_partner_name/model/res_partner.py | 8 --- .../tests/test_l10n_nl_partner_name.py | 11 +++ l10n_nl_partner_name/view/res_partner.xml | 71 +++++++++++++------ 7 files changed, 79 insertions(+), 69 deletions(-) delete mode 100644 l10n_nl_partner_name/__openerp__.py create mode 100644 l10n_nl_partner_name/data/ir.config_parameter.xml diff --git a/l10n_nl_partner_name/README.rst b/l10n_nl_partner_name/README.rst index b0dd28bcf..350b2aa50 100644 --- a/l10n_nl_partner_name/README.rst +++ b/l10n_nl_partner_name/README.rst @@ -9,6 +9,12 @@ Module Dutch Partner Name - have initials - split first and last name (provided by partner_firstname) +Roadmap +------- + +- allow to turn on/off initials and infix separately +- add nickname (roepnaam) field to also turn on and off separately + Contributors ------------ diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index a45b58b4b..292ed2f96 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -3,18 +3,21 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Dutch partner names', - 'version': '10.0.1.0.0', + 'version': '10.0.1.1.0', 'author': 'Therp BV, Odoo Community Association (OCA)', 'category': 'Contact management', 'depends': [ 'partner_firstname', + 'base_view_inheritance_extension', ], 'data': [ 'view/res_partner.xml', + "data/ir.config_parameter.xml", ], 'auto_install': False, 'installable': True, 'external_dependencies': { 'python': ['mako'], }, + 'license': 'AGPL-3', } diff --git a/l10n_nl_partner_name/__openerp__.py b/l10n_nl_partner_name/__openerp__.py deleted file mode 100644 index ab89757de..000000000 --- a/l10n_nl_partner_name/__openerp__.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013-2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -{ - 'name': 'Dutch partner names', - 'version': '10.0.1.0.0', - 'author': 'Therp BV, Odoo Community Association (OCA)', - 'category': 'Contact management', - 'depends': [ - 'partner_firstname', - ], - 'data': [ - 'view/res_partner.xml', - ], - 'js': [], - 'css': [], - 'qweb': [], - 'auto_install': False, - 'installable': True, - 'external_dependencies': { - 'python': ['mako'], - }, -} diff --git a/l10n_nl_partner_name/data/ir.config_parameter.xml b/l10n_nl_partner_name/data/ir.config_parameter.xml new file mode 100644 index 000000000..d93903bf1 --- /dev/null +++ b/l10n_nl_partner_name/data/ir.config_parameter.xml @@ -0,0 +1,7 @@ + + + + partner_names_order + first_last + + diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 2200e1f9a..00e783b04 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -40,11 +40,3 @@ def _get_computed_name(self, lastname, firstname, initials=None, 'infix': infix, }) return name if name else '' - - @api.model - def _get_inverse_name(self, name, is_company=False): - result = super(ResPartner, self)._get_inverse_name( - name, is_company=is_company) - # super assumes $lastname $firstname, we want it the other way around - return dict( - result, lastname=result['firstname'], firstname=result['lastname']) diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index 0a32924a9..00d54e0e9 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -22,3 +22,14 @@ def test_l10n_nl_partner_name(self): }) self.assertEqual(partner.firstname, 'Willem-Alexander') self.assertEqual(partner.lastname, 'van Oranje-Nassau') + onchange_vals = { + 'lastname': 'Oranje-Nassau', + 'infix': 'van', + } + partner.onchange( + onchange_vals, ['lastname', 'infix'], partner._onchange_spec(), + ) + self.assertEqual( + partner.name, + 'Willem-Alexander van Oranje-Nassau' + ) diff --git a/l10n_nl_partner_name/view/res_partner.xml b/l10n_nl_partner_name/view/res_partner.xml index aea7eea52..a6789d095 100644 --- a/l10n_nl_partner_name/view/res_partner.xml +++ b/l10n_nl_partner_name/view/res_partner.xml @@ -7,33 +7,64 @@ ref="partner_firstname.view_partner_simple_form_firstname" /> - - - - - - + +
+
+
+ + + + Last name + max-width: calc(50% - 2.1em) + + + First name + max-width: calc(50% - 2.1em) + 1 + + + + + + +
- res.partner.form.firstname res.partner - - - - - - - - - - + + + + 1 + + + {'invisible': [('is_company', '=', True)]} + + + Last name + max-width: calc(50% - 2.1em) + + + First name + max-width: calc(50% - 2.1em) + 1 + + + + + + + + + + + From 12a3e6566454f857a38c0756a273a6d00edd7478 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 18 Sep 2018 12:34:58 +0000 Subject: [PATCH 13/27] [UPD] Update l10n_nl_partner_name.pot --- .../i18n/l10n_nl_partner_name.pot | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot index 6d20da191..6b30e8320 100644 --- a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -13,18 +13,34 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: l10n_nl_partner_name +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +msgid "First name" +msgstr "" + #. module: l10n_nl_partner_name #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Infix" msgstr "" #. module: l10n_nl_partner_name #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Initials" msgstr "" +#. module: l10n_nl_partner_name +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +msgid "Last name" +msgstr "" + #. module: l10n_nl_partner_name #: model:ir.model,name:l10n_nl_partner_name.model_res_partner msgid "Partner" From cab45b751c25210e8e9ffd3d0c969db66f9b449e Mon Sep 17 00:00:00 2001 From: George Daramouskas Date: Wed, 21 Nov 2018 17:32:31 +0100 Subject: [PATCH 14/27] [MIG] l10n_nl_partner_name: Migration to 11.0 --- l10n_nl_partner_name/__init__.py | 4 +--- l10n_nl_partner_name/__manifest__.py | 7 +++---- l10n_nl_partner_name/model/__init__.py | 4 +--- l10n_nl_partner_name/model/res_partner.py | 5 ++--- l10n_nl_partner_name/scripts/guess_names.py | 8 ++++---- l10n_nl_partner_name/tests/__init__.py | 3 --- .../tests/test_l10n_nl_partner_name.py | 14 ++++---------- 7 files changed, 15 insertions(+), 30 deletions(-) diff --git a/l10n_nl_partner_name/__init__.py b/l10n_nl_partner_name/__init__.py index 479a49b96..068613b2a 100644 --- a/l10n_nl_partner_name/__init__.py +++ b/l10n_nl_partner_name/__init__.py @@ -1,4 +1,2 @@ -# -*- coding: utf-8 -*- -# © 2017 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import model diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index 292ed2f96..2182af324 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- -# © 2017 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# Copyright 2017 Therp BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { 'name': 'Dutch partner names', - 'version': '10.0.1.1.0', + 'version': '11.0.0.0.0', 'author': 'Therp BV, Odoo Community Association (OCA)', 'category': 'Contact management', 'depends': [ diff --git a/l10n_nl_partner_name/model/__init__.py b/l10n_nl_partner_name/model/__init__.py index 41d9e70d8..73a41f174 100644 --- a/l10n_nl_partner_name/model/__init__.py +++ b/l10n_nl_partner_name/model/__init__.py @@ -1,4 +1,2 @@ -# -*- coding: utf-8 -*- -# © 2017 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from . import res_partner diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 00e783b04..d992efa59 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- -# © 2017 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# Copyright 2017 Therp BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from mako.template import Template from odoo import models, fields, api diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py index eb94a9b6e..d921fdd6d 100644 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -1,6 +1,6 @@ #!/usr/bin/python -# © 2017 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# Copyright 2017 Therp BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import argparse import xmlrpclib @@ -58,7 +58,7 @@ def add_token(values, key, token, delimiter=' '): for partner in odoo_execute( 'res.partner', 'read', ids, ['lastname', 'firstname', 'initials', 'infix']): - print partner['lastname'] + print(partner['lastname']) have_infix = False tokens = partner['lastname'].split() @@ -76,7 +76,7 @@ def add_token(values, key, token, delimiter=' '): add_token(partner, 'firstname', token) partner['lastname'] = ' '.join(tokens) - print partner + print(partner) odoo_execute('res.partner', 'write', partner['id'], partner) offset += limit diff --git a/l10n_nl_partner_name/tests/__init__.py b/l10n_nl_partner_name/tests/__init__.py index 8e412f945..ddf925ff7 100644 --- a/l10n_nl_partner_name/tests/__init__.py +++ b/l10n_nl_partner_name/tests/__init__.py @@ -1,4 +1 @@ -# -*- coding: utf-8 -*- -# © 2016 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_l10n_nl_partner_name diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index 00d54e0e9..fe1809751 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -1,10 +1,10 @@ -# -*- coding: utf-8 -*- -# © 2016 Therp BV -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# Copyright 2016 Therp BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.tests.common import TransactionCase class TestL10nNlPartnerName(TransactionCase): + def test_l10n_nl_partner_name(self): partner = self.env['res.partner'].create({ 'name': 'Mark Rutte', @@ -22,13 +22,7 @@ def test_l10n_nl_partner_name(self): }) self.assertEqual(partner.firstname, 'Willem-Alexander') self.assertEqual(partner.lastname, 'van Oranje-Nassau') - onchange_vals = { - 'lastname': 'Oranje-Nassau', - 'infix': 'van', - } - partner.onchange( - onchange_vals, ['lastname', 'infix'], partner._onchange_spec(), - ) + partner._onchange_subnames() self.assertEqual( partner.name, 'Willem-Alexander van Oranje-Nassau' From b49eef4ebc088fca7871adf62ad6b7cb8b3e5470 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 28 Jan 2019 13:25:42 +0000 Subject: [PATCH 15/27] [UPD] Update l10n_nl_partner_name.pot --- l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot index 6b30e8320..2e5884ef4 100644 --- a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: l10n_nl_partner_name +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +msgid "Contact" +msgstr "" + #. module: l10n_nl_partner_name #: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname #: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname @@ -41,8 +46,3 @@ msgstr "" msgid "Last name" msgstr "" -#. module: l10n_nl_partner_name -#: model:ir.model,name:l10n_nl_partner_name.model_res_partner -msgid "Partner" -msgstr "" - From 7a07af8ed74bdbb148e436bec93d453a3f9167e4 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 3 Mar 2019 15:41:20 +0000 Subject: [PATCH 16/27] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: l10n-netherlands-11.0/l10n-netherlands-11.0-l10n_nl_partner_name Translate-URL: https://translation.odoo-community.org/projects/l10n-netherlands-11-0/l10n-netherlands-11-0-l10n_nl_partner_name/ --- l10n_nl_partner_name/i18n/nl.po | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/l10n_nl_partner_name/i18n/nl.po b/l10n_nl_partner_name/i18n/nl.po index 2655fe191..846cd69dd 100644 --- a/l10n_nl_partner_name/i18n/nl.po +++ b/l10n_nl_partner_name/i18n/nl.po @@ -16,19 +16,38 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: l10n_nl_partner_name +#: model:ir.model,name:l10n_nl_partner_name.model_res_partner +msgid "Contact" +msgstr "" + +#. module: l10n_nl_partner_name +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +msgid "First name" +msgstr "" + #. module: l10n_nl_partner_name #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Infix" msgstr "Tussenvoegsel" #. module: l10n_nl_partner_name #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials #: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Initials" msgstr "Voorletters" #. module: l10n_nl_partner_name -#: model:ir.model,name:l10n_nl_partner_name.model_res_partner -msgid "Partner" -msgstr "Relatie" +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +msgid "Last name" +msgstr "" + +#~ msgid "Partner" +#~ msgstr "Relatie" From 407dc63fd02054cd00dbbe3d09d657aa50987543 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Sun, 12 Jan 2020 10:52:57 +0100 Subject: [PATCH 17/27] [MIG] [12.0] l10n_nl_partner_name --- l10n_nl_partner_name/__manifest__.py | 9 ++---- l10n_nl_partner_name/model/res_partner.py | 6 ++-- .../{view => views}/res_partner.xml | 30 +++++++++++-------- 3 files changed, 23 insertions(+), 22 deletions(-) rename l10n_nl_partner_name/{view => views}/res_partner.xml (67%) diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index 2182af324..0e2a4e81b 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -2,21 +2,16 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { 'name': 'Dutch partner names', - 'version': '11.0.0.0.0', + 'version': '12.0.1.0.0', 'author': 'Therp BV, Odoo Community Association (OCA)', 'category': 'Contact management', 'depends': [ 'partner_firstname', - 'base_view_inheritance_extension', ], 'data': [ - 'view/res_partner.xml', + "views/res_partner.xml", "data/ir.config_parameter.xml", ], - 'auto_install': False, 'installable': True, - 'external_dependencies': { - 'python': ['mako'], - }, 'license': 'AGPL-3', } diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index d992efa59..f781ac43f 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -1,7 +1,7 @@ # Copyright 2017 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from mako.template import Template from odoo import models, fields, api +from odoo.addons.mail.models.mail_template import mako_safe_template_env class ResPartner(models.Model): @@ -26,13 +26,13 @@ def _onchange_subnames(self): @api.model def _get_computed_name(self, lastname, firstname, initials=None, infix=None): - name_template = Template( + name_template = mako_safe_template_env.from_string( self.env.context.get( 'name_format', "${firstname or initials or ''}" "${(firstname or initials) and ' ' or ''}" "${infix or ''}${infix and ' ' or ''}${lastname or ''}")) - name = name_template.render(**{ + name = name_template.render({ 'firstname': firstname, 'lastname': lastname, 'initials': initials, diff --git a/l10n_nl_partner_name/view/res_partner.xml b/l10n_nl_partner_name/views/res_partner.xml similarity index 67% rename from l10n_nl_partner_name/view/res_partner.xml rename to l10n_nl_partner_name/views/res_partner.xml index a6789d095..4f3256a0c 100644 --- a/l10n_nl_partner_name/view/res_partner.xml +++ b/l10n_nl_partner_name/views/res_partner.xml @@ -7,12 +7,14 @@ ref="partner_firstname.view_partner_simple_form_firstname" /> - -
+ +
- - + + + + Last name max-width: calc(50% - 2.1em) @@ -35,28 +37,32 @@ res.partner - - - - 1 + +
+
- - {'invisible': [('is_company', '=', True)]} + + + Last name max-width: calc(50% - 2.1em) + oe_inline + 1 First name max-width: calc(50% - 2.1em) 1 + oe_inline + 1 - + - + Date: Thu, 13 Jan 2022 17:21:10 +0100 Subject: [PATCH 18/27] [IMP] l10n_nl_partner_name: black, isort, prettier --- l10n_nl_partner_name/__manifest__.py | 21 +-- .../data/ir.config_parameter.xml | 2 +- l10n_nl_partner_name/model/res_partner.py | 35 ++-- l10n_nl_partner_name/scripts/guess_names.py | 74 ++++---- .../tests/test_l10n_nl_partner_name.py | 31 ++-- l10n_nl_partner_name/views/res_partner.xml | 164 ++++++++++-------- 6 files changed, 174 insertions(+), 153 deletions(-) diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index 0e2a4e81b..1a556791a 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -1,17 +1,12 @@ # Copyright 2017 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': 'Dutch partner names', - 'version': '12.0.1.0.0', - 'author': 'Therp BV, Odoo Community Association (OCA)', - 'category': 'Contact management', - 'depends': [ - 'partner_firstname', - ], - 'data': [ - "views/res_partner.xml", - "data/ir.config_parameter.xml", - ], - 'installable': True, - 'license': 'AGPL-3', + "name": "Dutch partner names", + "version": "12.0.1.0.0", + "author": "Therp BV, Odoo Community Association (OCA)", + "category": "Contact management", + "depends": ["partner_firstname",], + "data": ["views/res_partner.xml", "data/ir.config_parameter.xml",], + "installable": True, + "license": "AGPL-3", } diff --git a/l10n_nl_partner_name/data/ir.config_parameter.xml b/l10n_nl_partner_name/data/ir.config_parameter.xml index d93903bf1..40b1a75d1 100644 --- a/l10n_nl_partner_name/data/ir.config_parameter.xml +++ b/l10n_nl_partner_name/data/ir.config_parameter.xml @@ -1,4 +1,4 @@ - + partner_names_order diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index f781ac43f..730a9515a 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -1,12 +1,14 @@ # Copyright 2017 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api +from odoo import api, fields, models + from odoo.addons.mail.models.mail_template import mako_safe_template_env class ResPartner(models.Model): """Extend res.partner with extra fields for Dutch names.""" - _inherit = 'res.partner' + + _inherit = "res.partner" initials = fields.Char() infix = fields.Char() @@ -16,26 +18,29 @@ class ResPartner(models.Model): def _compute_name(self): for record in self: record.name = record._get_computed_name( - record.lastname, record.firstname, record.initials, - record.infix) + record.lastname, record.firstname, record.initials, record.infix + ) @api.onchange("firstname", "lastname", "initials", "infix") def _onchange_subnames(self): return super(ResPartner, self)._onchange_subnames() @api.model - def _get_computed_name(self, lastname, firstname, initials=None, - infix=None): + def _get_computed_name(self, lastname, firstname, initials=None, infix=None): name_template = mako_safe_template_env.from_string( self.env.context.get( - 'name_format', + "name_format", "${firstname or initials or ''}" "${(firstname or initials) and ' ' or ''}" - "${infix or ''}${infix and ' ' or ''}${lastname or ''}")) - name = name_template.render({ - 'firstname': firstname, - 'lastname': lastname, - 'initials': initials, - 'infix': infix, - }) - return name if name else '' + "${infix or ''}${infix and ' ' or ''}${lastname or ''}", + ) + ) + name = name_template.render( + { + "firstname": firstname, + "lastname": lastname, + "initials": initials, + "infix": infix, + } + ) + return name if name else "" diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py index d921fdd6d..21d5c5eef 100644 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -3,80 +3,82 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). import argparse -import xmlrpclib import re +import xmlrpclib + parser = argparse.ArgumentParser() -parser.add_argument('odoo_host') -parser.add_argument('odoo_db') -parser.add_argument('odoo_user') -parser.add_argument('odoo_passwd') -parser.add_argument('additional_search', nargs='?') +parser.add_argument("odoo_host") +parser.add_argument("odoo_db") +parser.add_argument("odoo_user") +parser.add_argument("odoo_passwd") +parser.add_argument("additional_search", nargs="?") args = parser.parse_args() +odoo_socket = xmlrpclib.ServerProxy("http://%s/xmlrpc/common" % args.odoo_host) +odoo_uid = odoo_socket.login(args.odoo_db, args.odoo_user, args.odoo_passwd) odoo_socket = xmlrpclib.ServerProxy( - 'http://%s/xmlrpc/common' % args.odoo_host) -odoo_uid = odoo_socket.login( - args.odoo_db, args.odoo_user, args.odoo_passwd) -odoo_socket = xmlrpclib.ServerProxy( - 'http://%s/xmlrpc/object' % args.odoo_host, allow_none=True) + "http://%s/xmlrpc/object" % args.odoo_host, allow_none=True +) def odoo_execute(model, method, *pargs, **kwargs): return odoo_socket.execute( - args.odoo_db, odoo_uid, - args.odoo_passwd, model, method, *pargs, **kwargs) + args.odoo_db, odoo_uid, args.odoo_passwd, model, method, *pargs, **kwargs + ) -infixes = ['van', 'der', 'ter', 'de', 'v/d'] -initial = re.compile(r'^([A-Z]{1,3}\.{0,1}){1,4}$') +infixes = ["van", "der", "ter", "de", "v/d"] +initial = re.compile(r"^([A-Z]{1,3}\.{0,1}){1,4}$") limit = 100000 offset = 0 -def add_token(values, key, token, delimiter=' '): - values[key] = (values[key] + ' ' if values[key] else '') + token +def add_token(values, key, token, delimiter=" "): + values[key] = (values[key] + " " if values[key] else "") + token while True: ids = odoo_execute( - 'res.partner', 'search', + "res.partner", + "search", [ - ('lastname', '!=', False), - ('lastname', '!=', ''), - ('firstname', '=', False), - ('initials', '=', False), - ('infix', '=', False), - ('is_company', '=', False), - ] + - eval(args.additional_search or '[]'), + ("lastname", "!=", False), + ("lastname", "!=", ""), + ("firstname", "=", False), + ("initials", "=", False), + ("infix", "=", False), + ("is_company", "=", False), + ] + + eval(args.additional_search or "[]"), offset, - limit) + limit, + ) if not ids: break for partner in odoo_execute( - 'res.partner', 'read', ids, - ['lastname', 'firstname', 'initials', 'infix']): - print(partner['lastname']) + "res.partner", "read", ids, ["lastname", "firstname", "initials", "infix"] + ): + print(partner["lastname"]) have_infix = False - tokens = partner['lastname'].split() + tokens = partner["lastname"].split() while len(tokens) > 1: token = tokens.pop(0) if initial.match(token): - add_token(partner, 'initials', token) + add_token(partner, "initials", token) elif any(map(lambda infix: re.match(infix, token, re.I), infixes)): - add_token(partner, 'infix', token.lower()) + add_token(partner, "infix", token.lower()) have_infix = True else: if have_infix: tokens.insert(0, token) break - add_token(partner, 'firstname', token) - partner['lastname'] = ' '.join(tokens) + add_token(partner, "firstname", token) + partner["lastname"] = " ".join(tokens) print(partner) - odoo_execute('res.partner', 'write', partner['id'], partner) + odoo_execute("res.partner", "write", partner["id"], partner) offset += limit diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index fe1809751..720405a2d 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -4,26 +4,17 @@ class TestL10nNlPartnerName(TransactionCase): - def test_l10n_nl_partner_name(self): - partner = self.env['res.partner'].create({ - 'name': 'Mark Rutte', - }) - self.assertEqual(partner.firstname, 'Mark') - self.assertEqual(partner.lastname, 'Rutte') - partner.firstname = 'Willem-Alexander' - partner.lastname = 'van Oranje-Nassau' - self.assertEqual( - partner.name, - 'Willem-Alexander van Oranje-Nassau' + partner = self.env["res.partner"].create({"name": "Mark Rutte",}) + self.assertEqual(partner.firstname, "Mark") + self.assertEqual(partner.lastname, "Rutte") + partner.firstname = "Willem-Alexander" + partner.lastname = "van Oranje-Nassau" + self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau") + partner.write( + {"name": partner.name,} ) - partner.write({ - 'name': partner.name, - }) - self.assertEqual(partner.firstname, 'Willem-Alexander') - self.assertEqual(partner.lastname, 'van Oranje-Nassau') + self.assertEqual(partner.firstname, "Willem-Alexander") + self.assertEqual(partner.lastname, "van Oranje-Nassau") partner._onchange_subnames() - self.assertEqual( - partner.name, - 'Willem-Alexander van Oranje-Nassau' - ) + self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau") diff --git a/l10n_nl_partner_name/views/res_partner.xml b/l10n_nl_partner_name/views/res_partner.xml index 4f3256a0c..dcd8bbc4d 100644 --- a/l10n_nl_partner_name/views/res_partner.xml +++ b/l10n_nl_partner_name/views/res_partner.xml @@ -1,76 +1,104 @@ - res.partner.simplified.form.firstname - res.partner - - - -
+ res.partner.simplified.form.firstname + res.partner + + + +
-
- - - - - - Last name - max-width: calc(50% - 2.1em) - - - First name - max-width: calc(50% - 2.1em) - 1 - - - - - - - -
+ + + + + + + Last name + max-width: calc(50% - 2.1em) + + + First name + max-width: calc(50% - 2.1em) + 1 + + + + + + + +
- res.partner.form.firstname - res.partner - - - -
+ res.partner.form.firstname + res.partner + + + +
-
- - - - - - Last name - max-width: calc(50% - 2.1em) - oe_inline - 1 - - - First name - max-width: calc(50% - 2.1em) - 1 - oe_inline - 1 - - - - - - - - - - - -
+ + + + + + + Last name + max-width: calc(50% - 2.1em) + oe_inline + 1 + + + First name + max-width: calc(50% - 2.1em) + 1 + oe_inline + 1 + + + + + + + + + + + +
From 5cfdc3b74fb1770b6274289490f8704d9e6c38b6 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Thu, 13 Jan 2022 17:37:36 +0100 Subject: [PATCH 19/27] [MIG] l10n_nl_partner_name: Migration to 13.0 --- l10n_nl_partner_name/__manifest__.py | 10 ++++++---- l10n_nl_partner_name/model/res_partner.py | 7 +------ .../tests/test_l10n_nl_partner_name.py | 9 +++------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index 1a556791a..a7d12715c 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -1,12 +1,14 @@ -# Copyright 2017 Therp BV +# Copyright 2017-2022 Therp BV . # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Dutch partner names", - "version": "12.0.1.0.0", + "version": "13.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", "category": "Contact management", - "depends": ["partner_firstname",], - "data": ["views/res_partner.xml", "data/ir.config_parameter.xml",], + "depends": ["partner_firstname"], + "data": ["views/res_partner.xml", "data/ir.config_parameter.xml"], "installable": True, "license": "AGPL-3", } diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py index 730a9515a..3017b7924 100644 --- a/l10n_nl_partner_name/model/res_partner.py +++ b/l10n_nl_partner_name/model/res_partner.py @@ -1,4 +1,4 @@ -# Copyright 2017 Therp BV +# Copyright 2017-2022 Therp BV . # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models @@ -13,7 +13,6 @@ class ResPartner(models.Model): initials = fields.Char() infix = fields.Char() - @api.multi @api.depends("firstname", "lastname", "initials", "infix") def _compute_name(self): for record in self: @@ -21,10 +20,6 @@ def _compute_name(self): record.lastname, record.firstname, record.initials, record.infix ) - @api.onchange("firstname", "lastname", "initials", "infix") - def _onchange_subnames(self): - return super(ResPartner, self)._onchange_subnames() - @api.model def _get_computed_name(self, lastname, firstname, initials=None, infix=None): name_template = mako_safe_template_env.from_string( diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index 720405a2d..c521895ef 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -1,20 +1,17 @@ -# Copyright 2016 Therp BV +# Copyright 2016-2022 Therp BV . # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.tests.common import TransactionCase class TestL10nNlPartnerName(TransactionCase): def test_l10n_nl_partner_name(self): - partner = self.env["res.partner"].create({"name": "Mark Rutte",}) + partner = self.env["res.partner"].create({"name": "Mark Rutte"}) self.assertEqual(partner.firstname, "Mark") self.assertEqual(partner.lastname, "Rutte") partner.firstname = "Willem-Alexander" partner.lastname = "van Oranje-Nassau" self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau") - partner.write( - {"name": partner.name,} - ) + partner.write({"name": partner.name}) self.assertEqual(partner.firstname, "Willem-Alexander") self.assertEqual(partner.lastname, "van Oranje-Nassau") - partner._onchange_subnames() self.assertEqual(partner.name, "Willem-Alexander van Oranje-Nassau") From 1c9ec9e392a39a83332d4a0549c5e798b0effcc1 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Fri, 18 Feb 2022 17:46:23 +0100 Subject: [PATCH 20/27] [WIP] partner_name: update guess names script --- l10n_nl_partner_name/scripts/guess_names.py | 88 +++++++++++++-------- 1 file changed, 56 insertions(+), 32 deletions(-) mode change 100644 => 100755 l10n_nl_partner_name/scripts/guess_names.py diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py old mode 100644 new mode 100755 index 21d5c5eef..a09546146 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ b/l10n_nl_partner_name/scripts/guess_names.py @@ -1,10 +1,17 @@ #!/usr/bin/python -# Copyright 2017 Therp BV +# Copyright 2017-2022 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +"""Script to convert names using a Dutch specific guessing strategy.""" +# pylint: disable=invalid-name,eval-used import argparse +import ast +import logging import re -import xmlrpclib +import xmlrpc.client as xmlrpclib + +logging.basicConfig(level=logging.DEBUG) +logger = logging.getLogger(__name__) parser = argparse.ArgumentParser() parser.add_argument("odoo_host") @@ -14,6 +21,10 @@ parser.add_argument("additional_search", nargs="?") args = parser.parse_args() +extra_domain = ( + ast.literal_eval(args.additional_search) if args.additional_search else [] +) + odoo_socket = xmlrpclib.ServerProxy("http://%s/xmlrpc/common" % args.odoo_host) odoo_uid = odoo_socket.login(args.odoo_db, args.odoo_user, args.odoo_passwd) odoo_socket = xmlrpclib.ServerProxy( @@ -22,24 +33,51 @@ def odoo_execute(model, method, *pargs, **kwargs): + """Execute a model method on Odoo through xmlrpc.""" return odoo_socket.execute( args.odoo_db, odoo_uid, args.odoo_passwd, model, method, *pargs, **kwargs ) +field_names = ["lastname", "firstname", "initials", "infix"] infixes = ["van", "der", "ter", "de", "v/d"] initial = re.compile(r"^([A-Z]{1,3}\.{0,1}){1,4}$") -limit = 100000 +limit = 10000 offset = 0 -def add_token(values, key, token, delimiter=" "): +def add_token(values, key, token): + """Add a name part to the correct field value of the partner names.""" values[key] = (values[key] + " " if values[key] else "") + token -while True: - ids = odoo_execute( +def update_partner(partner): + """Update a single partner, reading old fields, adjusting names.""" + saved_lastname = partner["lastname"] + have_infix = False + tokens = partner["lastname"].split() + while len(tokens) > 1: + token = tokens.pop(0) + if initial.match(token): + add_token(partner, "initials", token) + elif any(map(lambda infix: re.match(infix, token, re.I), infixes)): + add_token(partner, "infix", token.lower()) + have_infix = True + else: + if have_infix: + tokens.insert(0, token) + break + add_token(partner, "firstname", token) + new_lastname = " ".join(tokens) + logger.info("Lastname was %s, lastname = %s", saved_lastname, new_lastname) + partner["lastname"] = new_lastname + odoo_execute("res.partner", "write", partner["id"], partner) + + +def get_partner_ids(): + """Search next batch of partners to process.""" + return odoo_execute( "res.partner", "search", [ @@ -50,35 +88,21 @@ def add_token(values, key, token, delimiter=" "): ("infix", "=", False), ("is_company", "=", False), ] - + eval(args.additional_search or "[]"), + + extra_domain, offset, limit, ) - if not ids: - break - for partner in odoo_execute( - "res.partner", "read", ids, ["lastname", "firstname", "initials", "infix"] - ): - print(partner["lastname"]) - - have_infix = False - tokens = partner["lastname"].split() - while len(tokens) > 1: - token = tokens.pop(0) - if initial.match(token): - add_token(partner, "initials", token) - elif any(map(lambda infix: re.match(infix, token, re.I), infixes)): - add_token(partner, "infix", token.lower()) - have_infix = True - else: - if have_infix: - tokens.insert(0, token) - break - add_token(partner, "firstname", token) - partner["lastname"] = " ".join(tokens) - - print(partner) - odoo_execute("res.partner", "write", partner["id"], partner) +def process_partners(): + """Read and process partners.""" + for partner in odoo_execute("res.partner", "read", ids, field_names): + update_partner(partner) + + +while True: + ids = get_partner_ids() + if not ids: + break + process_partners() offset += limit From 6185d214f02b3d4d758b3bd3b5ddf16049b80203 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 20 Feb 2023 11:03:02 +0000 Subject: [PATCH 21/27] [UPD] Update l10n_nl_partner_name.pot --- .../i18n/l10n_nl_partner_name.pot | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot index 2e5884ef4..481928206 100644 --- a/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot +++ b/l10n_nl_partner_name/i18n/l10n_nl_partner_name.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * l10n_nl_partner_name +# * l10n_nl_partner_name # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +19,29 @@ msgid "Contact" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "First name" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner__infix +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users__infix +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Infix" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner__initials +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users__initials +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Initials" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Last name" msgstr "" - From 208a1005e37554fdc060c505ede7e6bbd10774b3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 20 Feb 2023 12:09:30 +0000 Subject: [PATCH 22/27] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: l10n-netherlands-13.0/l10n-netherlands-13.0-l10n_nl_partner_name Translate-URL: https://translation.odoo-community.org/projects/l10n-netherlands-13-0/l10n-netherlands-13-0-l10n_nl_partner_name/ --- l10n_nl_partner_name/i18n/nl.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/l10n_nl_partner_name/i18n/nl.po b/l10n_nl_partner_name/i18n/nl.po index 846cd69dd..1610826de 100644 --- a/l10n_nl_partner_name/i18n/nl.po +++ b/l10n_nl_partner_name/i18n/nl.po @@ -22,30 +22,30 @@ msgid "Contact" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "First name" msgstr "" #. module: l10n_nl_partner_name -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_infix -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_infix -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner__infix +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users__infix +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Infix" msgstr "Tussenvoegsel" #. module: l10n_nl_partner_name -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner_initials -#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users_initials -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_partner__initials +#: model:ir.model.fields,field_description:l10n_nl_partner_name.field_res_users__initials +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Initials" msgstr "Voorletters" #. module: l10n_nl_partner_name -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname -#: model:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_form_firstname +#: model_terms:ir.ui.view,arch_db:l10n_nl_partner_name.view_partner_simple_form_firstname msgid "Last name" msgstr "" From e1b564ac6f531cad1d6e028ee4337acbbf17c723 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 22 Jul 2024 08:03:02 +0200 Subject: [PATCH 23/27] [IMP] l10n_nl_partner_name: pre-commit stuff --- setup/l10n_nl_partner_name/odoo/addons/l10n_nl_partner_name | 1 + setup/l10n_nl_partner_name/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/l10n_nl_partner_name/odoo/addons/l10n_nl_partner_name create mode 100644 setup/l10n_nl_partner_name/setup.py diff --git a/setup/l10n_nl_partner_name/odoo/addons/l10n_nl_partner_name b/setup/l10n_nl_partner_name/odoo/addons/l10n_nl_partner_name new file mode 120000 index 000000000..ecda720a5 --- /dev/null +++ b/setup/l10n_nl_partner_name/odoo/addons/l10n_nl_partner_name @@ -0,0 +1 @@ +../../../../l10n_nl_partner_name \ No newline at end of file diff --git a/setup/l10n_nl_partner_name/setup.py b/setup/l10n_nl_partner_name/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/l10n_nl_partner_name/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 257ed9c0e5da070b10cee5f2eb1efb01d6f1737c Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 22 Jul 2024 17:45:28 +0200 Subject: [PATCH 24/27] [MIG] l10n_nl_partner_name: Migration to 16.0 --- l10n_nl_partner_name/README.rst | 92 +++++++++++---- l10n_nl_partner_name/__init__.py | 2 +- l10n_nl_partner_name/__manifest__.py | 4 +- l10n_nl_partner_name/model/res_partner.py | 41 ------- .../{model => models}/__init__.py | 0 l10n_nl_partner_name/models/res_partner.py | 60 ++++++++++ l10n_nl_partner_name/readme/CONTRIBUTORS.md | 3 + l10n_nl_partner_name/readme/DESCRIPTION.md | 4 + l10n_nl_partner_name/readme/ROADMAP.md | 2 + l10n_nl_partner_name/scripts/guess_names.py | 108 ------------------ .../tests/test_l10n_nl_partner_name.py | 20 +++- l10n_nl_partner_name/views/res_partner.xml | 94 +++------------ 12 files changed, 176 insertions(+), 254 deletions(-) delete mode 100644 l10n_nl_partner_name/model/res_partner.py rename l10n_nl_partner_name/{model => models}/__init__.py (100%) create mode 100644 l10n_nl_partner_name/models/res_partner.py create mode 100644 l10n_nl_partner_name/readme/CONTRIBUTORS.md create mode 100644 l10n_nl_partner_name/readme/DESCRIPTION.md create mode 100644 l10n_nl_partner_name/readme/ROADMAP.md delete mode 100755 l10n_nl_partner_name/scripts/guess_names.py diff --git a/l10n_nl_partner_name/README.rst b/l10n_nl_partner_name/README.rst index 350b2aa50..424ab9340 100644 --- a/l10n_nl_partner_name/README.rst +++ b/l10n_nl_partner_name/README.rst @@ -1,38 +1,90 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +=================== +Dutch partner names +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f8cb1b98fe2136d949f732eeda2394f64a6938aff007ab5ad473286ba230240b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--netherlands-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-netherlands/tree/16.0/l10n_nl_partner_name + :alt: OCA/l10n-netherlands +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-netherlands-16-0/l10n-netherlands-16-0-l10n_nl_partner_name + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-netherlands&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Use Dutch conventions for partner names: + +- have infixes +- have initials +- split first and last name (provided by partner_firstname) + +**Table of contents** + +.. contents:: + :local: + +Known issues / Roadmap +====================== -Module Dutch Partner Name -========================= +- allow to turn on/off initials and infix separately +- add nickname (roepnaam) field to also turn on and off separately - Use Dutch conventions for partner names: - - have infixes - - have initials - - split first and last name (provided by partner_firstname) +Bug Tracker +=========== -Roadmap +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors ------- -- allow to turn on/off initials and infix separately -- add nickname (roepnaam) field to also turn on and off separately +* Hunki Enterprises BV +* Therp BV Contributors ------------ -* Holger Brunn -* Ronald Portier -* George Daramouskas - -Maintainer ----------- +- Holger Brunn + (https://hunki-enterprises.com) +- Ronald Portier +- George Daramouskas -.. image:: http://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: http://odoo-community.org +Maintainers +----------- This module is maintained by the OCA. +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit http://odoo-community.org. +This module is part of the `OCA/l10n-netherlands `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_nl_partner_name/__init__.py b/l10n_nl_partner_name/__init__.py index 068613b2a..c32fd62b7 100644 --- a/l10n_nl_partner_name/__init__.py +++ b/l10n_nl_partner_name/__init__.py @@ -1,2 +1,2 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from . import model +from . import models diff --git a/l10n_nl_partner_name/__manifest__.py b/l10n_nl_partner_name/__manifest__.py index a7d12715c..7a291b3c9 100644 --- a/l10n_nl_partner_name/__manifest__.py +++ b/l10n_nl_partner_name/__manifest__.py @@ -2,9 +2,9 @@ # 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)", + "author": "Hunki Enterprises BV, Therp BV, Odoo Community Association (OCA)", "website": "https://github.com/OCA/l10n-netherlands", "category": "Contact management", "depends": ["partner_firstname"], diff --git a/l10n_nl_partner_name/model/res_partner.py b/l10n_nl_partner_name/model/res_partner.py deleted file mode 100644 index 3017b7924..000000000 --- a/l10n_nl_partner_name/model/res_partner.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2017-2022 Therp BV . -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models - -from odoo.addons.mail.models.mail_template import mako_safe_template_env - - -class ResPartner(models.Model): - """Extend res.partner with extra fields for Dutch names.""" - - _inherit = "res.partner" - - 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 - ) - - @api.model - def _get_computed_name(self, lastname, firstname, initials=None, infix=None): - name_template = mako_safe_template_env.from_string( - self.env.context.get( - "name_format", - "${firstname or initials or ''}" - "${(firstname or initials) and ' ' or ''}" - "${infix or ''}${infix and ' ' or ''}${lastname or ''}", - ) - ) - name = name_template.render( - { - "firstname": firstname, - "lastname": lastname, - "initials": initials, - "infix": infix, - } - ) - return name if name else "" diff --git a/l10n_nl_partner_name/model/__init__.py b/l10n_nl_partner_name/models/__init__.py similarity index 100% rename from l10n_nl_partner_name/model/__init__.py rename to l10n_nl_partner_name/models/__init__.py diff --git a/l10n_nl_partner_name/models/res_partner.py b/l10n_nl_partner_name/models/res_partner.py new file mode 100644 index 000000000..2c9efb180 --- /dev/null +++ b/l10n_nl_partner_name/models/res_partner.py @@ -0,0 +1,60 @@ +# Copyright 2017-2022 Therp BV . +# 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 diff --git a/l10n_nl_partner_name/readme/CONTRIBUTORS.md b/l10n_nl_partner_name/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..7032d49f2 --- /dev/null +++ b/l10n_nl_partner_name/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- Holger Brunn \ (https://hunki-enterprises.com) +- Ronald Portier \ +- George Daramouskas \ diff --git a/l10n_nl_partner_name/readme/DESCRIPTION.md b/l10n_nl_partner_name/readme/DESCRIPTION.md new file mode 100644 index 000000000..ea29b0f68 --- /dev/null +++ b/l10n_nl_partner_name/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +Use Dutch conventions for partner names: +- have infixes +- have initials +- split first and last name (provided by partner\_firstname) diff --git a/l10n_nl_partner_name/readme/ROADMAP.md b/l10n_nl_partner_name/readme/ROADMAP.md new file mode 100644 index 000000000..686a0bd91 --- /dev/null +++ b/l10n_nl_partner_name/readme/ROADMAP.md @@ -0,0 +1,2 @@ +- allow to turn on/off initials and infix separately +- add nickname (roepnaam) field to also turn on and off separately diff --git a/l10n_nl_partner_name/scripts/guess_names.py b/l10n_nl_partner_name/scripts/guess_names.py deleted file mode 100755 index a09546146..000000000 --- a/l10n_nl_partner_name/scripts/guess_names.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/python -# Copyright 2017-2022 Therp BV -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -"""Script to convert names using a Dutch specific guessing strategy.""" -# pylint: disable=invalid-name,eval-used - -import argparse -import ast -import logging -import re -import xmlrpc.client as xmlrpclib - -logging.basicConfig(level=logging.DEBUG) -logger = logging.getLogger(__name__) - -parser = argparse.ArgumentParser() -parser.add_argument("odoo_host") -parser.add_argument("odoo_db") -parser.add_argument("odoo_user") -parser.add_argument("odoo_passwd") -parser.add_argument("additional_search", nargs="?") -args = parser.parse_args() - -extra_domain = ( - ast.literal_eval(args.additional_search) if args.additional_search else [] -) - -odoo_socket = xmlrpclib.ServerProxy("http://%s/xmlrpc/common" % args.odoo_host) -odoo_uid = odoo_socket.login(args.odoo_db, args.odoo_user, args.odoo_passwd) -odoo_socket = xmlrpclib.ServerProxy( - "http://%s/xmlrpc/object" % args.odoo_host, allow_none=True -) - - -def odoo_execute(model, method, *pargs, **kwargs): - """Execute a model method on Odoo through xmlrpc.""" - return odoo_socket.execute( - args.odoo_db, odoo_uid, args.odoo_passwd, model, method, *pargs, **kwargs - ) - - -field_names = ["lastname", "firstname", "initials", "infix"] -infixes = ["van", "der", "ter", "de", "v/d"] -initial = re.compile(r"^([A-Z]{1,3}\.{0,1}){1,4}$") - -limit = 10000 -offset = 0 - - -def add_token(values, key, token): - """Add a name part to the correct field value of the partner names.""" - values[key] = (values[key] + " " if values[key] else "") + token - - -def update_partner(partner): - """Update a single partner, reading old fields, adjusting names.""" - saved_lastname = partner["lastname"] - have_infix = False - tokens = partner["lastname"].split() - while len(tokens) > 1: - token = tokens.pop(0) - if initial.match(token): - add_token(partner, "initials", token) - elif any(map(lambda infix: re.match(infix, token, re.I), infixes)): - add_token(partner, "infix", token.lower()) - have_infix = True - else: - if have_infix: - tokens.insert(0, token) - break - add_token(partner, "firstname", token) - new_lastname = " ".join(tokens) - logger.info("Lastname was %s, lastname = %s", saved_lastname, new_lastname) - partner["lastname"] = new_lastname - odoo_execute("res.partner", "write", partner["id"], partner) - - -def get_partner_ids(): - """Search next batch of partners to process.""" - return odoo_execute( - "res.partner", - "search", - [ - ("lastname", "!=", False), - ("lastname", "!=", ""), - ("firstname", "=", False), - ("initials", "=", False), - ("infix", "=", False), - ("is_company", "=", False), - ] - + extra_domain, - offset, - limit, - ) - - -def process_partners(): - """Read and process partners.""" - for partner in odoo_execute("res.partner", "read", ids, field_names): - update_partner(partner) - - -while True: - ids = get_partner_ids() - if not ids: - break - process_partners() - offset += limit diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index c521895ef..1430afffa 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -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") diff --git a/l10n_nl_partner_name/views/res_partner.xml b/l10n_nl_partner_name/views/res_partner.xml index dcd8bbc4d..58cef7211 100644 --- a/l10n_nl_partner_name/views/res_partner.xml +++ b/l10n_nl_partner_name/views/res_partner.xml @@ -1,102 +1,36 @@ - - res.partner.simplified.form.firstname + res.partner - + - -
-
-
- - - - - - Last name - max-width: calc(50% - 2.1em) - - - First name - max-width: calc(50% - 2.1em) - 1 - - + - +
- - res.partner.form.firstname + res.partner - + - -
-
-
- - - - - - Last name - max-width: calc(50% - 2.1em) - oe_inline - 1 - - - First name - max-width: calc(50% - 2.1em) - 1 - oe_inline - 1 - - + - + + +
From ff42b331b85b69bf0032b58a9ae5ed6a1a04732f Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 22 Jul 2024 18:02:32 +0200 Subject: [PATCH 25/27] [FIX] l10n_nl_oin: make test compatible with l10n_nl_partner_name --- l10n_nl_oin/tests/test_l10n_nl_oin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/l10n_nl_oin/tests/test_l10n_nl_oin.py b/l10n_nl_oin/tests/test_l10n_nl_oin.py index ee1aaab45..82024790f 100644 --- a/l10n_nl_oin/tests/test_l10n_nl_oin.py +++ b/l10n_nl_oin/tests/test_l10n_nl_oin.py @@ -11,6 +11,7 @@ def setUp(self): self.partner_oin = self.env["res.partner"].create( { "name": "Partner with OIN", + "is_company": True, "company_id": self.env.company.id, "country_id": self.env.ref("base.nl").id, "company_type": "company", @@ -42,6 +43,7 @@ def test_03_oin_another_partner(self): new_partner_oin = self.env["res.partner"].create( { "name": "Partner with OIN - NEW", + "is_company": True, "l10n_nl_oin": "12345678901234567890", "company_id": self.env.company.id, } From f131cf2ec67e4422841aafac7a4749a55df78791 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 22 Jul 2024 18:14:13 +0200 Subject: [PATCH 26/27] [FIX] l10n_nl_bsn: make test compatible with l10n_nl_partner_name --- l10n_nl_bsn/tests/test_l10n_nl_bsn.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/l10n_nl_bsn/tests/test_l10n_nl_bsn.py b/l10n_nl_bsn/tests/test_l10n_nl_bsn.py index e79d27470..870e7c2f4 100644 --- a/l10n_nl_bsn/tests/test_l10n_nl_bsn.py +++ b/l10n_nl_bsn/tests/test_l10n_nl_bsn.py @@ -11,6 +11,7 @@ def setUp(self): self.partner_bsn = self.env["res.partner"].create( { "name": "Partner with BSN", + "is_company": True, "company_id": self.env.company.id, } ) @@ -40,6 +41,7 @@ def test_03_bsn_another_partner(self): new_partner_bsn = self.env["res.partner"].create( { "name": "Partner with BSN - NEW", + "is_company": True, "bsn_number": "1000.00.009", "company_id": self.env.company.id, } From 31b33a05fbc897f11e0bb7b067f6616759319583 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 2 Aug 2024 18:43:23 +0200 Subject: [PATCH 27/27] [IMP] l10n_nl_partner_name: allow to configure infixes --- l10n_nl_partner_name/README.rst | 17 + l10n_nl_partner_name/models/res_partner.py | 21 +- l10n_nl_partner_name/readme/CONFIGURE.md | 11 + .../static/description/index.html | 449 ++++++++++++++++++ .../tests/test_l10n_nl_partner_name.py | 9 + 5 files changed, 505 insertions(+), 2 deletions(-) create mode 100644 l10n_nl_partner_name/readme/CONFIGURE.md create mode 100644 l10n_nl_partner_name/static/description/index.html diff --git a/l10n_nl_partner_name/README.rst b/l10n_nl_partner_name/README.rst index 424ab9340..312313831 100644 --- a/l10n_nl_partner_name/README.rst +++ b/l10n_nl_partner_name/README.rst @@ -39,6 +39,23 @@ Use Dutch conventions for partner names: .. contents:: :local: +Configuration +============= + +The module relies on a list of known infixes to get the parsing right: + +van, der, den, op, ter, de, v/d, d', 't, te + +Also any combination, so *op den*, *van der* etc will also be +recognized. + +If you need a different set of infixes, set system parameter +``l10n_nl_partner_name_infixes`` to a comma separated list like + +infix1,infix2,etc + +Note this replaces the above list. + Known issues / Roadmap ====================== diff --git a/l10n_nl_partner_name/models/res_partner.py b/l10n_nl_partner_name/models/res_partner.py index 2c9efb180..8c4e012a2 100644 --- a/l10n_nl_partner_name/models/res_partner.py +++ b/l10n_nl_partner_name/models/res_partner.py @@ -7,7 +7,6 @@ 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() @@ -41,6 +40,7 @@ def _get_inverse_name(self, name, is_company=False): def add_token(key, value): result[key] += (result[key] and " " or "") + value + infixes = self._l10n_nl_partner_name_infixes() result = dict.fromkeys(("firstname", "lastname", "initials", "infix"), "") tokens = (name or "").split() while len(tokens) > 1: @@ -49,7 +49,12 @@ def add_token(key, value): 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: + elif ( + len(tokens) and " ".join([token.lower(), tokens[0].lower()]) in infixes + ): + add_token("infix", " ".join([token.lower(), tokens[0].lower()])) + tokens.pop(0) + elif token.lower() in infixes: add_token("infix", token) elif result["infix"]: tokens.insert(0, token) @@ -58,3 +63,15 @@ def add_token(key, value): add_token("firstname", token) result["lastname"] = " ".join(tokens) return result + + def _l10n_nl_partner_name_infixes(self): + return tuple( + map( + str.strip, + self.env["ir.config_parameter"] + .get_param( + "l10n_nl_partner_name_infixes", "van,der,den,op,ter,de,v/d,d','t,te" + ) + .split(","), + ) + ) diff --git a/l10n_nl_partner_name/readme/CONFIGURE.md b/l10n_nl_partner_name/readme/CONFIGURE.md new file mode 100644 index 000000000..fcd82c72c --- /dev/null +++ b/l10n_nl_partner_name/readme/CONFIGURE.md @@ -0,0 +1,11 @@ +The module relies on a list of known infixes to get the parsing right: + +van, der, den, op, ter, de, v/d, d', 't, te + +Also any combination, so *op den*, *van der* etc will also be recognized. + +If you need a different set of infixes, set system parameter `l10n_nl_partner_name_infixes` to a comma separated list like + +infix1,infix2,etc + +Note this replaces the above list. diff --git a/l10n_nl_partner_name/static/description/index.html b/l10n_nl_partner_name/static/description/index.html new file mode 100644 index 000000000..b1e27b9f4 --- /dev/null +++ b/l10n_nl_partner_name/static/description/index.html @@ -0,0 +1,449 @@ + + + + + +Dutch partner names + + + +
+

Dutch partner names

+ + +

Beta License: AGPL-3 OCA/l10n-netherlands Translate me on Weblate Try me on Runboat

+

Use Dutch conventions for partner names:

+
    +
  • have infixes
  • +
  • have initials
  • +
  • split first and last name (provided by partner_firstname)
  • +
+

Table of contents

+ +
+

Configuration

+

The module relies on a list of known infixes to get the parsing right:

+

van, der, den, op, ter, de, v/d, d’, ‘t, te

+

Also any combination, so op den, van der etc will also be +recognized.

+

If you need a different set of infixes, set system parameter +l10n_nl_partner_name_infixes to a comma separated list like

+

infix1,infix2,etc

+

Note this replaces the above list.

+
+
+

Known issues / Roadmap

+
    +
  • allow to turn on/off initials and infix separately
  • +
  • add nickname (roepnaam) field to also turn on and off separately
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Hunki Enterprises BV
  • +
  • Therp BV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/l10n-netherlands project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py index 1430afffa..d7bd50295 100644 --- a/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py +++ b/l10n_nl_partner_name/tests/test_l10n_nl_partner_name.py @@ -31,3 +31,12 @@ def test_l10n_nl_partner_name(self): self.assertEqual(partner.name, "Alfred (A.J.) Kwack") partner.name = "Willem-Alexander van Oranje Nassau" self.assertEqual(partner.lastname, "Oranje Nassau") + self.env["ir.config_parameter"].set_param( + "l10n_nl_partner_name_infixes", "von der, van" + ) + partner.name = "Ursula von der Leyen" + self.assertEqual(partner.lastname, "Leyen") + self.assertEqual(partner.firstname, "Ursula") + self.assertEqual(partner.infix, "von der") + partner.name = "Willem-Alexander van Oranje Nassau" + self.assertEqual(partner.lastname, "Oranje Nassau")