From 8358fcc4b295d22c9f7a625f53a109288292c05d Mon Sep 17 00:00:00 2001
From: Jacques-Etienne Baudoux
Date: Fri, 18 Sep 2020 13:54:50 +0200
Subject: [PATCH 01/17] Allow to make parsing hook based on
PartyIdentification/ID
Some industries still identify party with a GLN and schemeID="GLN"
or with a VAT number and schemeID=":VAT". This allow to
process it with a parsing hook in the partner matching.
Add module partner_identification_import to match partner by external
identifier using the above hook.
fixup! Allow to make parsing hook based on PartyIdentification/ID
---
partner_identification_import/README.rst | 76 ++++
partner_identification_import/__init__.py | 1 +
partner_identification_import/__manifest__.py | 17 +
.../models/__init__.py | 1 +
.../models/business_document_import.py | 43 ++
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 4 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 421 ++++++++++++++++++
.../tests/__init__.py | 1 +
.../tests/test_business_document_import.py | 27 ++
11 files changed, 592 insertions(+)
create mode 100644 partner_identification_import/README.rst
create mode 100644 partner_identification_import/__init__.py
create mode 100644 partner_identification_import/__manifest__.py
create mode 100644 partner_identification_import/models/__init__.py
create mode 100644 partner_identification_import/models/business_document_import.py
create mode 100644 partner_identification_import/readme/CONTRIBUTORS.rst
create mode 100644 partner_identification_import/readme/DESCRIPTION.rst
create mode 100644 partner_identification_import/static/description/icon.png
create mode 100644 partner_identification_import/static/description/index.html
create mode 100644 partner_identification_import/tests/__init__.py
create mode 100644 partner_identification_import/tests/test_business_document_import.py
diff --git a/partner_identification_import/README.rst b/partner_identification_import/README.rst
new file mode 100644
index 0000000000..08a92a4ef5
--- /dev/null
+++ b/partner_identification_import/README.rst
@@ -0,0 +1,76 @@
+=============================
+Partner Identification Import
+=============================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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%2Fedi-lightgray.png?logo=github
+ :target: https://github.com/OCA/edi/tree/13.0/partner_identification_import
+ :alt: OCA/edi
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/edi-13-0/edi-13-0-partner_identification_import
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/226/13.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Glue module between base_business_document_import and partner_identification (in OCA/partner-contact)
+
+Allow to define extra partner ID (thanks to partner_identification) and match
+the partner using for exemple the UBL PartyIdentification/ID
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+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 smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* BCIM
+
+Contributors
+~~~~~~~~~~~~
+
+* Jacques-Etienne Baudoux
+
+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.
+
+This module is part of the `OCA/edi `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/partner_identification_import/__init__.py b/partner_identification_import/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/partner_identification_import/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/partner_identification_import/__manifest__.py b/partner_identification_import/__manifest__.py
new file mode 100644
index 0000000000..6fb6da4c7d
--- /dev/null
+++ b/partner_identification_import/__manifest__.py
@@ -0,0 +1,17 @@
+# Copyright 2020 Jacques-Etienne Baudoux
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Partner Identification Import",
+ "version": "13.0.1.0.0",
+ "category": "Tools",
+ "license": "AGPL-3",
+ "summary": "Provides partner matching on extra ID",
+ "author": "BCIM, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/edi",
+ "depends": [
+ "base_business_document_import",
+ # OCA/partner-contact
+ "partner_identification",
+ ],
+}
diff --git a/partner_identification_import/models/__init__.py b/partner_identification_import/models/__init__.py
new file mode 100644
index 0000000000..d695bc5f59
--- /dev/null
+++ b/partner_identification_import/models/__init__.py
@@ -0,0 +1 @@
+from . import business_document_import
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
new file mode 100644
index 0000000000..4ae22daed8
--- /dev/null
+++ b/partner_identification_import/models/business_document_import.py
@@ -0,0 +1,43 @@
+# Copyright 2020 Jacques-Etienne Baudoux
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, models
+
+
+class BusinessDocumentImport(models.AbstractModel):
+ _inherit = "business.document.import"
+
+ @api.model
+ def _hook_match_partner(
+ self, partner_dict, chatter_msg, domain, partner_type_label
+ ):
+ if partner_dict.get("id_number") and partner_dict.get("id_schemeID"):
+ categ = self.env["res.partner.id_category"].search(
+ [("code", "=", partner_dict.get("id_schemeID"))]
+ )
+ if categ:
+ id_number = self.env["res.partner.id_number"].search(
+ [
+ ("category_id", "=", categ.id),
+ ("name", "=", partner_dict["id_number"]),
+ ("status", "!=", "close"),
+ ],
+ limit=1,
+ )
+ if id_number:
+ return id_number.partner_id
+ raise self.user_error_wrap(
+ _(
+ "Odoo couldn't find a partner corresponding to the "
+ "following information extracted from the business document:\n"
+ "ID Number: %s\n"
+ "ID Number Category: %s\n"
+ )
+ % (
+ partner_dict["id_number"],
+ partner_dict["id_schemeID"],
+ )
+ )
+ return super()._hook_match_partner(
+ partner_dict, chatter_msg, domain, partner_type_label
+ )
diff --git a/partner_identification_import/readme/CONTRIBUTORS.rst b/partner_identification_import/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..ed5b9eb64d
--- /dev/null
+++ b/partner_identification_import/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Jacques-Etienne Baudoux
diff --git a/partner_identification_import/readme/DESCRIPTION.rst b/partner_identification_import/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..412c2631c6
--- /dev/null
+++ b/partner_identification_import/readme/DESCRIPTION.rst
@@ -0,0 +1,4 @@
+Glue module between base_business_document_import and partner_identification (in OCA/partner-contact)
+
+Allow to define extra partner ID (thanks to partner_identification) and match
+the partner using for exemple the UBL PartyIdentification/ID
diff --git a/partner_identification_import/static/description/icon.png b/partner_identification_import/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/partner_identification_import/static/description/index.html b/partner_identification_import/static/description/index.html
new file mode 100644
index 0000000000..5f132edc6b
--- /dev/null
+++ b/partner_identification_import/static/description/index.html
@@ -0,0 +1,421 @@
+
+
+
+
+
+
+Partner Identification Import
+
+
+
+
+
Partner Identification Import
+
+
+

+
Glue module between base_business_document_import and partner_identification (in OCA/partner-contact)
+
Allow to define extra partner ID (thanks to partner_identification) and match
+the partner using for exemple the UBL PartyIdentification/ID
+
Table of contents
+
+
+
+
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 smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
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.
+
This module is part of the OCA/edi project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/partner_identification_import/tests/__init__.py b/partner_identification_import/tests/__init__.py
new file mode 100644
index 0000000000..12d28211d4
--- /dev/null
+++ b/partner_identification_import/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_business_document_import
diff --git a/partner_identification_import/tests/test_business_document_import.py b/partner_identification_import/tests/test_business_document_import.py
new file mode 100644
index 0000000000..4007f3df87
--- /dev/null
+++ b/partner_identification_import/tests/test_business_document_import.py
@@ -0,0 +1,27 @@
+# Copyright 2020 Jacques-Etienne Baudoux
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tests import common
+
+
+class TestBaseBusinessDocumentImport(common.SavepointCase):
+ def test_match_partner(self):
+ externalID = "MYEXTID"
+ externalSchemeID = "EXTCATEG"
+ partner1 = self.env["res.partner"].create({"name": "Extra ID"})
+ categ = self.env["res.partner.id_category"].create(
+ {"name": "Extra Categ", "code": externalSchemeID}
+ )
+ self.env["res.partner.id_number"].create(
+ {
+ "category_id": categ.id,
+ "name": externalSchemeID,
+ "partner_id": partner1.id,
+ }
+ )
+ bdio = self.env["business.document.import"]
+ partner_dict = {"id_number": externalID, "id_schemeID": externalSchemeID}
+ warn = []
+ res = bdio._match_partner(partner_dict, warn, partner_type=False)
+ self.assertEqual(res, partner1)
+ self.assertTrue(warn)
From 4be61ea101d31f64170518ed2c5dd87bc8b03b80 Mon Sep 17 00:00:00 2001
From: Jacques-Etienne Baudoux
Date: Sun, 4 Oct 2020 11:41:19 +0200
Subject: [PATCH 02/17] Improve partner contact matching
---
.../models/business_document_import.py | 22 ++++++-----
.../tests/test_business_document_import.py | 38 ++++++++++++++-----
2 files changed, 40 insertions(+), 20 deletions(-)
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index 4ae22daed8..101804a551 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -8,9 +8,7 @@ class BusinessDocumentImport(models.AbstractModel):
_inherit = "business.document.import"
@api.model
- def _hook_match_partner(
- self, partner_dict, chatter_msg, domain, partner_type_label
- ):
+ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
if partner_dict.get("id_number") and partner_dict.get("id_schemeID"):
categ = self.env["res.partner.id_category"].search(
[("code", "=", partner_dict.get("id_schemeID"))]
@@ -25,6 +23,15 @@ def _hook_match_partner(
limit=1,
)
if id_number:
+ partner = id_number.partner_id
+ # Search for a contact of this partner
+ domain = [
+ ("parent_id", "=", partner.id),
+ ("is_company", "=", False),
+ ]
+ contact = self._match_partner_contact(partner_dict, domain, order)
+ if contact:
+ return contact
return id_number.partner_id
raise self.user_error_wrap(
_(
@@ -33,11 +40,6 @@ def _hook_match_partner(
"ID Number: %s\n"
"ID Number Category: %s\n"
)
- % (
- partner_dict["id_number"],
- partner_dict["id_schemeID"],
- )
+ % (partner_dict["id_number"], partner_dict["id_schemeID"])
)
- return super()._hook_match_partner(
- partner_dict, chatter_msg, domain, partner_type_label
- )
+ return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
diff --git a/partner_identification_import/tests/test_business_document_import.py b/partner_identification_import/tests/test_business_document_import.py
index 4007f3df87..ebdbacba35 100644
--- a/partner_identification_import/tests/test_business_document_import.py
+++ b/partner_identification_import/tests/test_business_document_import.py
@@ -5,23 +5,41 @@
class TestBaseBusinessDocumentImport(common.SavepointCase):
- def test_match_partner(self):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
externalID = "MYEXTID"
externalSchemeID = "EXTCATEG"
- partner1 = self.env["res.partner"].create({"name": "Extra ID"})
- categ = self.env["res.partner.id_category"].create(
+ cls.partner1 = cls.env["res.partner"].create({"name": "Extra ID"})
+ categ = cls.env["res.partner.id_category"].create(
{"name": "Extra Categ", "code": externalSchemeID}
)
- self.env["res.partner.id_number"].create(
+ cls.env["res.partner.id_number"].create(
{
"category_id": categ.id,
- "name": externalSchemeID,
- "partner_id": partner1.id,
+ "name": externalID,
+ "partner_id": cls.partner1.id,
}
)
+ cls.partner1_contact = cls.env["res.partner"].create(
+ {"name": "Contact", "parent_id": cls.partner1.id, "type": "contact"}
+ )
+ cls.partner_dict = {"id_number": externalID, "id_schemeID": externalSchemeID}
+
+ def test_match_partner(self):
+ bdio = self.env["business.document.import"]
+ warn = []
+ res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ self.assertEqual(res, self.partner1)
+
+ def test_match_partner_contact(self):
bdio = self.env["business.document.import"]
- partner_dict = {"id_number": externalID, "id_schemeID": externalSchemeID}
warn = []
- res = bdio._match_partner(partner_dict, warn, partner_type=False)
- self.assertEqual(res, partner1)
- self.assertTrue(warn)
+ # Match contact
+ self.partner_dict["contact"] = "Contact"
+ res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ self.assertEqual(res, self.partner1_contact)
+ # Match partner
+ self.partner_dict["contact"] = "Contact2"
+ res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ self.assertEqual(res, self.partner1)
From 4a09c172852b2ab28146753497ecafe0a995a60f Mon Sep 17 00:00:00 2001
From: Jacques-Etienne Baudoux
Date: Mon, 5 Oct 2020 00:22:28 +0200
Subject: [PATCH 03/17] Parse and import Sales Order Invoicing Partner.
Refactor shipping partner matching.
A shipping partner is not especially related to the ordering party. It
could be any partner. However, we want to ensure that the address is
respected.
Fix-up: PartyIdentification/ID is a 1..N relation. Parse each of them for a match
---
.../models/business_document_import.py | 30 ++++++++++++++-----
.../tests/test_business_document_import.py | 4 ++-
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index 101804a551..c4e742d63e 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -9,15 +9,25 @@ class BusinessDocumentImport(models.AbstractModel):
@api.model
def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
- if partner_dict.get("id_number") and partner_dict.get("id_schemeID"):
- categ = self.env["res.partner.id_category"].search(
- [("code", "=", partner_dict.get("id_schemeID"))]
+ # Loop on all the partner_dict["id_number"] and search for a partner
+ # having one. If the schemeID matches an existing Id Number Category,
+ # then a match is required.
+ schemeIDs = [
+ e["schemeID"] for e in partner_dict.get("id_number", []) if e["schemeID"]
+ ]
+ if schemeIDs:
+ schemes = self.env["res.partner.id_category"].search(
+ [("code", "in", schemeIDs)]
)
- if categ:
+ unmatched = []
+ for ident in partner_dict.get("id_number", []):
+ if ident.get("schemeID") not in schemes.mapped("code"):
+ continue
+ categ = schemes.filtered(lambda s: s.code == ident["schemeID"])
id_number = self.env["res.partner.id_number"].search(
[
("category_id", "=", categ.id),
- ("name", "=", partner_dict["id_number"]),
+ ("name", "=", ident["value"]),
("status", "!=", "close"),
],
limit=1,
@@ -33,13 +43,17 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
if contact:
return contact
return id_number.partner_id
+ unmatched.append(
+ _("ID Number: %s\n" "ID Number Category: %s\n\n")
+ % (partner_dict["id_number"], partner_dict["id_schemeID"])
+ )
+ if unmatched:
raise self.user_error_wrap(
_(
"Odoo couldn't find a partner corresponding to the "
"following information extracted from the business document:\n"
- "ID Number: %s\n"
- "ID Number Category: %s\n"
+ "%s"
)
- % (partner_dict["id_number"], partner_dict["id_schemeID"])
+ % _("or\n").join(unmatched)
)
return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
diff --git a/partner_identification_import/tests/test_business_document_import.py b/partner_identification_import/tests/test_business_document_import.py
index ebdbacba35..9a35b1e3b9 100644
--- a/partner_identification_import/tests/test_business_document_import.py
+++ b/partner_identification_import/tests/test_business_document_import.py
@@ -24,7 +24,9 @@ def setUpClass(cls):
cls.partner1_contact = cls.env["res.partner"].create(
{"name": "Contact", "parent_id": cls.partner1.id, "type": "contact"}
)
- cls.partner_dict = {"id_number": externalID, "id_schemeID": externalSchemeID}
+ cls.partner_dict = {
+ "id_number": [{"value": externalID, "schemeID": externalSchemeID}]
+ }
def test_match_partner(self):
bdio = self.env["business.document.import"]
From 25e17784efeea4528aa6e9ddb6c442bec4d5050b Mon Sep 17 00:00:00 2001
From: Jacques-Etienne Baudoux
Date: Tue, 13 Oct 2020 15:08:37 +0200
Subject: [PATCH 04/17] Add UBL Order validation according to schema. + Fix
partner identification (remove wrong namespace in attribute)
squash! fixup! Allow to make parsing hook based on PartyIdentification/ID
Prevent to fail if 2 categories have the same code
---
.../i18n/partner_identification_import.pot | 42 +++++++++++++++++++
.../models/business_document_import.py | 4 +-
2 files changed, 44 insertions(+), 2 deletions(-)
create mode 100644 partner_identification_import/i18n/partner_identification_import.pot
diff --git a/partner_identification_import/i18n/partner_identification_import.pot b/partner_identification_import/i18n/partner_identification_import.pot
new file mode 100644
index 0000000000..e6acf591d6
--- /dev/null
+++ b/partner_identification_import/i18n/partner_identification_import.pot
@@ -0,0 +1,42 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * partner_identification_import
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.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: partner_identification_import
+#: model:ir.model,name:partner_identification_import.model_business_document_import
+msgid "Common methods to import business documents"
+msgstr ""
+
+#. module: partner_identification_import
+#: code:addons/partner_identification_import/models/business_document_import.py:0
+#, python-format
+msgid ""
+"ID Number: %s\n"
+"ID Number Category: %s\n"
+"\n"
+msgstr ""
+
+#. module: partner_identification_import
+#: code:addons/partner_identification_import/models/business_document_import.py:0
+#, python-format
+msgid ""
+"Odoo couldn't find a partner corresponding to the following information extracted from the business document:\n"
+"%s"
+msgstr ""
+
+#. module: partner_identification_import
+#: code:addons/partner_identification_import/models/business_document_import.py:0
+#, python-format
+msgid "or\n"
+msgstr ""
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index c4e742d63e..f13607c2a3 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -26,7 +26,7 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
categ = schemes.filtered(lambda s: s.code == ident["schemeID"])
id_number = self.env["res.partner.id_number"].search(
[
- ("category_id", "=", categ.id),
+ ("category_id", "in", categ.ids),
("name", "=", ident["value"]),
("status", "!=", "close"),
],
@@ -45,7 +45,7 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
return id_number.partner_id
unmatched.append(
_("ID Number: %s\n" "ID Number Category: %s\n\n")
- % (partner_dict["id_number"], partner_dict["id_schemeID"])
+ % (ident["value"], ident["schemeID"])
)
if unmatched:
raise self.user_error_wrap(
From b0f22ed31c5917f9cdebf07da546577104bb7ec6 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 4 Nov 2020 08:09:06 +0000
Subject: [PATCH 05/17] partner_identification_import 13.0.2.0.0
---
partner_identification_import/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/partner_identification_import/__manifest__.py b/partner_identification_import/__manifest__.py
index 6fb6da4c7d..13fce424a0 100644
--- a/partner_identification_import/__manifest__.py
+++ b/partner_identification_import/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Partner Identification Import",
- "version": "13.0.1.0.0",
+ "version": "13.0.2.0.0",
"category": "Tools",
"license": "AGPL-3",
"summary": "Provides partner matching on extra ID",
From babf270c2ffccaf6fcef398385e6b07613ce1d19 Mon Sep 17 00:00:00 2001
From: "dzung.tran"
Date: Sat, 27 Feb 2021 16:36:35 +0700
Subject: [PATCH 06/17] [MIG] partner_identification_import: Migration to 14.0
---
partner_identification_import/README.rst | 21 +++++++++++----
partner_identification_import/__manifest__.py | 2 +-
.../i18n/partner_identification_import.pot | 27 ++++++++++++-------
.../models/business_document_import.py | 10 ++++---
.../readme/CONTRIBUTORS.rst | 4 +++
.../readme/CREDITS.rst | 3 +++
.../static/description/index.html | 22 +++++++++++----
7 files changed, 65 insertions(+), 24 deletions(-)
create mode 100644 partner_identification_import/readme/CREDITS.rst
diff --git a/partner_identification_import/README.rst b/partner_identification_import/README.rst
index 08a92a4ef5..34e4168720 100644
--- a/partner_identification_import/README.rst
+++ b/partner_identification_import/README.rst
@@ -14,13 +14,13 @@ Partner Identification Import
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
- :target: https://github.com/OCA/edi/tree/13.0/partner_identification_import
+ :target: https://github.com/OCA/edi/tree/14.0/partner_identification_import
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/edi-13-0/edi-13-0-partner_identification_import
+ :target: https://translation.odoo-community.org/projects/edi-14-0/edi-14-0-partner_identification_import
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/226/13.0
+ :target: https://runbot.odoo-community.org/runbot/226/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -41,7 +41,7 @@ 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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -58,6 +58,17 @@ Contributors
* Jacques-Etienne Baudoux
+Trobz
+
+* Dung Tran
+
+Other credits
+~~~~~~~~~~~~~
+
+The development of this module has been financially supported by:
+
+* Camptocamp
+
Maintainers
~~~~~~~~~~~
@@ -71,6 +82,6 @@ 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/edi `_ project on GitHub.
+This module is part of the `OCA/edi `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/partner_identification_import/__manifest__.py b/partner_identification_import/__manifest__.py
index 13fce424a0..e61ac7ee53 100644
--- a/partner_identification_import/__manifest__.py
+++ b/partner_identification_import/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Partner Identification Import",
- "version": "13.0.2.0.0",
+ "version": "14.0.1.0.0",
"category": "Tools",
"license": "AGPL-3",
"summary": "Provides partner matching on extra ID",
diff --git a/partner_identification_import/i18n/partner_identification_import.pot b/partner_identification_import/i18n/partner_identification_import.pot
index e6acf591d6..4e85f0095c 100644
--- a/partner_identification_import/i18n/partner_identification_import.pot
+++ b/partner_identification_import/i18n/partner_identification_import.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -18,25 +18,34 @@ msgstr ""
msgid "Common methods to import business documents"
msgstr ""
+#. module: partner_identification_import
+#: model:ir.model.fields,field_description:partner_identification_import.field_business_document_import__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: partner_identification_import
+#: model:ir.model.fields,field_description:partner_identification_import.field_business_document_import__id
+msgid "ID"
+msgstr ""
+
#. module: partner_identification_import
#: code:addons/partner_identification_import/models/business_document_import.py:0
#, python-format
msgid ""
-"ID Number: %s\n"
-"ID Number Category: %s\n"
+"ID Number: {}\n"
+"ID Number Category: {}\n"
"\n"
msgstr ""
#. module: partner_identification_import
-#: code:addons/partner_identification_import/models/business_document_import.py:0
-#, python-format
-msgid ""
-"Odoo couldn't find a partner corresponding to the following information extracted from the business document:\n"
-"%s"
+#: model:ir.model.fields,field_description:partner_identification_import.field_business_document_import____last_update
+msgid "Last Modified on"
msgstr ""
#. module: partner_identification_import
#: code:addons/partner_identification_import/models/business_document_import.py:0
#, python-format
-msgid "or\n"
+msgid ""
+"Odoo couldn't find a partner corresponding to the following information extracted from the business document:\n"
+"{}"
msgstr ""
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index f13607c2a3..85b3ad0269 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -44,16 +44,18 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
return contact
return id_number.partner_id
unmatched.append(
- _("ID Number: %s\n" "ID Number Category: %s\n\n")
- % (ident["value"], ident["schemeID"])
+ _("ID Number: {}\nID Number Category: {}\n\n").format(
+ ident["value"], ident["schemeID"]
+ )
)
if unmatched:
raise self.user_error_wrap(
_(
"Odoo couldn't find a partner corresponding to the "
"following information extracted from the business document:\n"
- "%s"
+ "{}"
)
- % _("or\n").join(unmatched)
+ .format_("or\n")
+ .join(unmatched)
)
return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
diff --git a/partner_identification_import/readme/CONTRIBUTORS.rst b/partner_identification_import/readme/CONTRIBUTORS.rst
index ed5b9eb64d..0e357b3240 100644
--- a/partner_identification_import/readme/CONTRIBUTORS.rst
+++ b/partner_identification_import/readme/CONTRIBUTORS.rst
@@ -1 +1,5 @@
* Jacques-Etienne Baudoux
+
+Trobz
+
+* Dung Tran
diff --git a/partner_identification_import/readme/CREDITS.rst b/partner_identification_import/readme/CREDITS.rst
new file mode 100644
index 0000000000..f5cc070c78
--- /dev/null
+++ b/partner_identification_import/readme/CREDITS.rst
@@ -0,0 +1,3 @@
+The development of this module has been financially supported by:
+
+* Camptocamp
diff --git a/partner_identification_import/static/description/index.html b/partner_identification_import/static/description/index.html
index 5f132edc6b..a8189298b3 100644
--- a/partner_identification_import/static/description/index.html
+++ b/partner_identification_import/static/description/index.html
@@ -367,7 +367,7 @@ Partner Identification Import
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

Glue module between base_business_document_import and partner_identification (in OCA/partner-contact)
Allow to define extra partner ID (thanks to partner_identification) and match
the partner using for exemple the UBL PartyIdentification/ID
@@ -378,7 +378,8 @@ Partner Identification Import
Credits
@@ -388,7 +389,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -404,15 +405,26 @@
+
Trobz
+
+
+
+
+
The development of this module has been financially supported by:
+
-
+
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.
-
This module is part of the OCA/edi project on GitHub.
+
This module is part of the OCA/edi project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From 0884228ab1eaecd8e6c61614af640b8cbf42e375 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Thu, 4 Nov 2021 13:02:14 +0100
Subject: [PATCH 07/17] partner_identification_import: fix typo from v14 mig
---
.../models/business_document_import.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index 85b3ad0269..538bf41e5d 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -55,7 +55,7 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
"following information extracted from the business document:\n"
"{}"
)
- .format_("or\n")
+ .format("or\n")
.join(unmatched)
)
return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
From bcfb254dcf7a75207fddee529d8bebd3a74fe7e0 Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Sat, 30 Oct 2021 08:34:42 +0200
Subject: [PATCH 08/17] partner_identification_import: fix match partner
---
.../models/business_document_import.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index 538bf41e5d..4201bc89e6 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -39,7 +39,9 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
("parent_id", "=", partner.id),
("is_company", "=", False),
]
- contact = self._match_partner_contact(partner_dict, domain, order)
+ contact = self._match_partner_contact(
+ partner_dict, chatter_msg, domain, order
+ )
if contact:
return contact
return id_number.partner_id
From 709c78d22c88b08da064ef02fba08c4051c4827d Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Thu, 4 Nov 2021 15:24:17 +0100
Subject: [PATCH 09/17] partner_identification_import: user_error_wrap call
---
.../models/business_document_import.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index 4201bc89e6..dfdba4b2d8 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -52,12 +52,14 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
)
if unmatched:
raise self.user_error_wrap(
+ "_hook_match_partner",
+ partner_dict,
_(
"Odoo couldn't find a partner corresponding to the "
"following information extracted from the business document:\n"
"{}"
)
.format("or\n")
- .join(unmatched)
+ .join(unmatched),
)
return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
From 559394191a1eb198bc41be85e4ade0b0fbca0e6b Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 5 Nov 2021 09:07:15 +0000
Subject: [PATCH 10/17] partner_identification_import 14.0.1.0.1
---
partner_identification_import/README.rst | 15 +++++---
partner_identification_import/__manifest__.py | 2 +-
.../static/description/index.html | 38 ++++++++++---------
3 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/partner_identification_import/README.rst b/partner_identification_import/README.rst
index 34e4168720..562bcaa7b5 100644
--- a/partner_identification_import/README.rst
+++ b/partner_identification_import/README.rst
@@ -2,10 +2,13 @@
Partner Identification Import
=============================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:041f414c34955af0f78d39a3dd18311af1920907947fb7c00ba200076d0dd946
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Partner Identification Import
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/edi-14-0/edi-14-0-partner_identification_import
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/226/14.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=14.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Glue module between base_business_document_import and partner_identification (in OCA/partner-contact)
@@ -40,7 +43,7 @@ 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 smashing it by providing a detailed and welcomed
+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.
diff --git a/partner_identification_import/__manifest__.py b/partner_identification_import/__manifest__.py
index e61ac7ee53..0684eb083d 100644
--- a/partner_identification_import/__manifest__.py
+++ b/partner_identification_import/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Partner Identification Import",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.0.1",
"category": "Tools",
"license": "AGPL-3",
"summary": "Provides partner matching on extra ID",
diff --git a/partner_identification_import/static/description/index.html b/partner_identification_import/static/description/index.html
index a8189298b3..16967b0327 100644
--- a/partner_identification_import/static/description/index.html
+++ b/partner_identification_import/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Partner Identification Import
-
-
Partner Identification Import
+
+
+
+
+
+
+
Partner Identification Import
-

+

Glue module between base_business_document_import and
partner_identification (in OCA/partner-contact)
Allow to define extra partner ID (thanks to partner_identification) and
@@ -388,7 +393,7 @@
Partner Identification Import
-
+
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
@@ -396,15 +401,15 @@
Do not contact contributors directly about support or help with technical issues.
-
+
-
+
@@ -414,14 +419,14 @@
-
+
The development of this module has been financially supported by:
-
+
This module is maintained by the OCA.
@@ -434,5 +439,6 @@
+
diff --git a/partner_identification_import/tests/test_business_document_import.py b/partner_identification_import/tests/test_business_document_import.py
index 240b047be1..3ea6e6910e 100644
--- a/partner_identification_import/tests/test_business_document_import.py
+++ b/partner_identification_import/tests/test_business_document_import.py
@@ -8,6 +8,7 @@ class TestBaseBusinessDocumentImport(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
+ cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
externalID = "MYEXTID"
externalSchemeID = "EXTCATEG"
cls.partner1 = cls.env["res.partner"].create({"name": "Extra ID"})
From 123f6b570ab5432962ce9185f808c4b75a852954 Mon Sep 17 00:00:00 2001
From: mymage
Date: Tue, 17 Jun 2025 06:27:27 +0000
Subject: [PATCH 16/17] Translated using Weblate (Italian)
Currently translated at 100.0% (6 of 6 strings)
Translation: edi-18.0/edi-18.0-partner_identification_import
Translate-URL: https://translation.odoo-community.org/projects/edi-18-0/edi-18-0-partner_identification_import/it/
---
partner_identification_import/i18n/it.po | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/partner_identification_import/i18n/it.po b/partner_identification_import/i18n/it.po
index 695c6305b4..d7fcce5095 100644
--- a/partner_identification_import/i18n/it.po
+++ b/partner_identification_import/i18n/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2025-05-27 14:26+0000\n"
+"PO-Revision-Date: 2025-06-17 06:39+0000\n"
"Last-Translator: mymage \n"
"Language-Team: none\n"
"Language: it\n"
@@ -19,7 +19,7 @@ msgstr ""
#. module: partner_identification_import
#: model:ir.model,name:partner_identification_import.model_business_document_import
msgid "Common methods to import business documents"
-msgstr ""
+msgstr "Metodi comuni per l'importazione di documenti di lavoro"
#. module: partner_identification_import
#: model:ir.model.fields,field_description:partner_identification_import.field_business_document_import__display_name
@@ -39,11 +39,14 @@ msgid ""
"ID Number Category: {}\n"
"\n"
msgstr ""
+"Numero ID: {}\n"
+"Numero ID categoria: {}\n"
+"\n"
#. module: partner_identification_import
#: model:ir.model.fields,field_description:partner_identification_import.field_business_document_import____last_update
msgid "Last Modified on"
-msgstr ""
+msgstr "Ultima modifica il"
#. module: partner_identification_import
#: code:addons/partner_identification_import/models/business_document_import.py:0
@@ -52,3 +55,6 @@ msgid ""
"Odoo couldn't find a partner corresponding to the following information extracted from the business document:\n"
"{}"
msgstr ""
+"Odoo non trova un partner che corrisponda alle seguenti informazioni "
+"estratte dal documento commerciale\n"
+"{}"
From 91046e78f4623437bba2de3dd5d8f21da43a163a Mon Sep 17 00:00:00 2001
From: Maksym Yankin
Date: Fri, 3 Apr 2026 14:18:55 +0300
Subject: [PATCH 17/17] [19.0][MIG] partner_identification_import: Migration to
19.0
---
partner_identification_import/README.rst | 10 +++---
partner_identification_import/__manifest__.py | 2 +-
.../models/business_document_import.py | 32 +++++++++++--------
.../static/description/index.html | 6 ++--
.../tests/test_business_document_import.py | 14 ++++----
5 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/partner_identification_import/README.rst b/partner_identification_import/README.rst
index 2fb7f39d2e..743108d9ef 100644
--- a/partner_identification_import/README.rst
+++ b/partner_identification_import/README.rst
@@ -21,13 +21,13 @@ Partner Identification Import
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
- :target: https://github.com/OCA/edi/tree/18.0/partner_identification_import
+ :target: https://github.com/OCA/edi/tree/19.0/partner_identification_import
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/edi-18-0/edi-18-0-partner_identification_import
+ :target: https://translation.odoo-community.org/projects/edi-19-0/edi-19-0-partner_identification_import
: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/edi&target_branch=18.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -49,7 +49,7 @@ 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -90,6 +90,6 @@ 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/edi `_ project on GitHub.
+This module is part of the `OCA/edi `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/partner_identification_import/__manifest__.py b/partner_identification_import/__manifest__.py
index f60cca604a..94e885b35a 100644
--- a/partner_identification_import/__manifest__.py
+++ b/partner_identification_import/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Partner Identification Import",
- "version": "18.0.1.0.0",
+ "version": "19.0.1.0.0",
"category": "Tools",
"license": "AGPL-3",
"summary": "Provides partner matching on extra ID",
diff --git a/partner_identification_import/models/business_document_import.py b/partner_identification_import/models/business_document_import.py
index ff1b0969fa..459acd2149 100644
--- a/partner_identification_import/models/business_document_import.py
+++ b/partner_identification_import/models/business_document_import.py
@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
+from odoo.fields import Domain
class BusinessDocumentImport(models.AbstractModel):
@@ -17,7 +18,7 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
]
if schemeIDs:
schemes = self.env["res.partner.id_category"].search(
- [("code", "in", schemeIDs)]
+ Domain("code", "in", schemeIDs)
)
unmatched = []
for ident in partner_dict.get("id_number", []):
@@ -25,20 +26,24 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
continue
categ = schemes.filtered(lambda s, _id=ident: s.code == _id["schemeID"])
id_number = self.env["res.partner.id_number"].search(
- [
- ("category_id", "in", categ.ids),
- ("name", "=", ident["value"]),
- ("status", "!=", "close"),
- ],
+ Domain.AND(
+ [
+ Domain("category_id", "in", categ.ids),
+ Domain("name", "=", ident["value"]),
+ Domain("status", "!=", "close"),
+ ]
+ ),
limit=1,
)
if id_number:
partner = id_number.partner_id
# Search for a contact of this partner
- domain = [
- ("parent_id", "=", partner.id),
- ("is_company", "=", False),
- ]
+ domain = Domain.AND(
+ [
+ Domain("parent_id", "=", partner.id),
+ Domain("is_company", "=", False),
+ ]
+ )
contact = self._match_partner_contact(
partner_dict, chatter_msg, domain, order
)
@@ -58,9 +63,8 @@ def _hook_match_partner(self, partner_dict, chatter_msg, domain, order):
self.env._(
"Odoo couldn't find a partner corresponding to the "
"following information extracted from the business document:\n"
- "{}"
- )
- .format("or\n")
- .join(unmatched),
+ "%(join_unmatched)s",
+ join_unmatched="or\n".join(unmatched),
+ ),
)
return super()._hook_match_partner(partner_dict, chatter_msg, domain, order)
diff --git a/partner_identification_import/static/description/index.html b/partner_identification_import/static/description/index.html
index 01beba3e0c..211e353138 100644
--- a/partner_identification_import/static/description/index.html
+++ b/partner_identification_import/static/description/index.html
@@ -374,7 +374,7 @@ Partner Identification Import
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:4bfd68c6b919e15048cf359cd28bb03fbc267eb6f47891289f708a933eff9db8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

Glue module between base_business_document_import and
partner_identification (in OCA/partner-contact)
Allow to define extra partner ID (thanks to partner_identification) and
@@ -397,7 +397,7 @@
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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -434,7 +434,7 @@
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/edi project on GitHub.
+
This module is part of the OCA/edi project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/partner_identification_import/tests/test_business_document_import.py b/partner_identification_import/tests/test_business_document_import.py
index 3ea6e6910e..3efa3fb979 100644
--- a/partner_identification_import/tests/test_business_document_import.py
+++ b/partner_identification_import/tests/test_business_document_import.py
@@ -1,14 +1,14 @@
# Copyright 2020 Jacques-Etienne Baudoux
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests.common import TransactionCase
-from odoo.tests import common
-
-class TestBaseBusinessDocumentImport(common.TransactionCase):
+class TestBaseBusinessDocumentImport(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
+ cls.bdio = cls.env["business.document.import"]
externalID = "MYEXTID"
externalSchemeID = "EXTCATEG"
cls.partner1 = cls.env["res.partner"].create({"name": "Extra ID"})
@@ -30,19 +30,17 @@ def setUpClass(cls):
}
def test_match_partner(self):
- bdio = self.env["business.document.import"]
warn = []
- res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ res = self.bdio._match_partner(self.partner_dict, warn, partner_type=False)
self.assertEqual(res, self.partner1)
def test_match_partner_contact(self):
- bdio = self.env["business.document.import"]
warn = []
# Match contact
self.partner_dict["contact"] = "Contact"
- res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ res = self.bdio._match_partner(self.partner_dict, warn, partner_type=False)
self.assertEqual(res, self.partner1_contact)
# Match partner
self.partner_dict["contact"] = "Contact2"
- res = bdio._match_partner(self.partner_dict, warn, partner_type=False)
+ res = self.bdio._match_partner(self.partner_dict, warn, partner_type=False)
self.assertEqual(res, self.partner1)