diff --git a/l10n_nl_kvk/README.rst b/l10n_nl_kvk/README.rst index 576c267f1..e53ecb079 100644 --- a/l10n_nl_kvk/README.rst +++ b/l10n_nl_kvk/README.rst @@ -23,13 +23,13 @@ Integration with Kamer van Koophandel :target: https://runbot.odoo-community.org/runbot/176/11.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module integrates Odoo with the official Dutch chamber of commerce -`Kamer van Koophandel (KvK) API search `_. +`Kamer van Koophandel (KvK) Zoeken API `_. The KvK API service allows lookups by the *Chamber Of Commerce Registration Number* -(KvK field) providing company name, street name, postcode and city. The lookups will be +(KvK field) providing company name, street name and city. The lookups will be triggered in the partner form views by entering a KvK field and pressing its lookup button. The lookup works also on the company name field, providing Kvk number, street name, postcode and city. @@ -37,7 +37,7 @@ and city. The KvK field is already provided by the OCA module `partner_coc`. That field is visible when the partner is a Company (flag *is_company* = true). -More info about the lookup service here: https://developers.kvk.nl/documentation +More info about the lookup service here: https://developers.kvk.nl/apis/zoeken **Table of contents** diff --git a/l10n_nl_kvk/data/api_kvk_nl_bundle.crt b/l10n_nl_kvk/data/api_kvk_nl_bundle.crt index b83ba4052..198f48d94 100644 --- a/l10n_nl_kvk/data/api_kvk_nl_bundle.crt +++ b/l10n_nl_kvk/data/api_kvk_nl_bundle.crt @@ -1,17 +1,17 @@ -----BEGIN CERTIFICATE----- -MIIG8TCCBNmgAwIBAgIUPKycY2I8JUq855Fqu47uMGgDNJkwDQYJKoZIhvcNAQEL +MIIG8TCCBNmgAwIBAgIUG3ZRWvKOeTV1mnRrABAdXxPbQOowDQYJKoZIhvcNAQEL BQAwgYAxCzAJBgNVBAYTAk5MMSAwHgYDVQQKDBdRdW9WYWRpcyBUcnVzdGxpbmsg Qi5WLjEXMBUGA1UEYQwOTlRSTkwtMzAyMzc0NTkxNjA0BgNVBAMMLVF1b1ZhZGlz -IFBLSW92ZXJoZWlkIFByaXZhdGUgU2VydmljZXMgQ0EgLSBHMTAeFw0yMDA5MDkw -ODQ0NTZaFw0yMzA5MDkwODU0MDBaMGAxCzAJBgNVBAYTAk5MMR0wGwYDVQQKDBRL +IFBLSW92ZXJoZWlkIFByaXZhdGUgU2VydmljZXMgQ0EgLSBHMTAeFw0yMTA0MDgx +MjAyMTJaFw0yNDA0MDgxMjEyMDBaMGAxCzAJBgNVBAYTAk5MMR0wGwYDVQQKDBRL YW1lciB2YW4gS29vcGhhbmRlbDEdMBsGA1UEBRMUMDAwMDAwMDEwMDYwMzM0MDQw MDAxEzARBgNVBAMMCmFwaS5rdmsubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDEgUq23boeuUY8jlAQvim+cZMJOLfRoVl+lJyXMqGwBUtDoZHJTv3x -LDyDVOgKkTULMtVPWXL42Qsv6Sfgdee7sdQCpYC2heNl7XYOxSp5Q9PnVbN9nVdb -9/F2wFi1BX2mg/a5p1Qs7nxxXz38u6vFF1A1RyvFPiINg5wc5dkr6KghnY5qfvZp -dhiV/OMTbLwU2JaWUvVlJfKW78G//Tcv84g/qSDJa6VDG+DAZBjSU0bLq/zBd194 -R08/uzya7GA2+ycyIBaIan/8/Ct1+G1c4gOI8OlyOR5mWuLwMHjrPYMiHEvgwvGc -DEexSwvscwo8fiS5JHw+UZpwplTCfgTxAgMBAAGjggKAMIICfDAfBgNVHSMEGDAW +ggEKAoIBAQCpDTQqDXFhJM8RHL/fdB8dHLkEU5F/uL0AcW99RqaRr2rikgMMEh6R +46U5ZHBzA+BUqPmUSqxSIfCPmwgqqcUZnqymkKGWH4ZEPIb+uIBOjyeM76YGtgYZ +lDjR5xjVP6y2jlb7Vu+7UEiQH1cqkeKcx/G0QQFrols0l+vFQzwyNeyv8aJuH5VO +cGT0SXG1cyqsUQSxhG44juN4WcOIelqI+n08GQz6tdZyRZxbxgM5OM1ppC8Y6IDb +EpRt4u8eNuGrN2DGjsIyKt4LLtXZbrIOZ2tUu/+zPdO1QVpNVcZPeO4aNKdGkA0i +WL9k3CXfC58Q+0LtOdEGRi7qLj7NxVDdAgMBAAGjggKAMIICfDAfBgNVHSMEGDAW gBS5bKYTursvNGODMS75fkkd3wD1YzB9BggrBgEFBQcBAQRxMG8wPgYIKwYBBQUH MAKGMmh0dHA6Ly90cnVzdC5xdW92YWRpc2dsb2JhbC5jb20vcGtpb3ByaXZzZXJ2 ZzEuY3J0MC0GCCsGAQUFBzABhiFodHRwOi8vc2wub2NzcC5xdW92YWRpc2dsb2Jh @@ -24,19 +24,19 @@ YWN0aWNlIFN0YXRlbWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzIGluIHRoZSBRdW9W YWRpcyByZXBvc2l0b3J5IChodHRwOi8vd3d3LnF1b3ZhZGlzZ2xvYmFsLmNvbSku MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATBBBgNVHR8EOjA4MDagNKAy hjBodHRwOi8vY3JsLnF1b3ZhZGlzZ2xvYmFsLmNvbS9wa2lvcHJpdnNlcnZnMS5j -cmwwHQYDVR0OBBYEFEoVWAcAcDlxW4ejVSImN0gmskqEMA4GA1UdDwEB/wQEAwIF -oDANBgkqhkiG9w0BAQsFAAOCAgEApuCQL+M4w7KTKnu4D+Q6m4EetzavUJOJQNRj -alJtMGzcYE/eg05+Ft2KJiacLuxCrghWmvKzB+8oAKCDK55WjUqCEhe1YtfacPTA -v1ec44Oe3hUlYwMMlMhQut33ZhaOMcwLwbRoq7Fs7s7QJqQNDUqMHFD4L6yjRZdZ -EAP3KFz7afhmJL/cgnv7UfPksDoWuJz/rj2ULf37Y4MHnaCvPUkRSqn7zHCmg9Go -aBKrzmCQTPS/5PgTH+RyYOTgOBoo5qJQilr520FmXZ0CBb3sJUNVolp4hcyhO8Zr -6540+rV1cs7qvhxTqVfAis35sS3gRV/mR0J9TrL1ZGxgkmUeCV8/iLZm80Av5CAf -t68rnvfJHcYyA05TtflxY2OkesTm2cY5XlJl8PA4k6LjDm6xvECCdfH+3EMALQyP -ghM5+D0gFiYxNC1+EW88r26QU303bGhxxscu8sWfbdt+66kmw1bVFv5p4JWoTJVn -CDS0mLT1OvhSQtdK02b75R5Ve2XQmctdlquDKkxRZ171/h+T5lI0H3hyDxvOlUWd -JyFSl1eBwAZRLm+7vgLOeHwoL+kZ6j3SiYG4X2LJA3lOcpjj8bHjdipm83lCWvsl -Wj51zhrRut75zzR/90U3hEsH6B2/4jSoTx86jBK4Ab+4Pg1TIOr58nftTSE+xitE -xeLU4Hg= +cmwwHQYDVR0OBBYEFCkOOq+POnbbG9DgPt5kiBkW0zWNMA4GA1UdDwEB/wQEAwIF +oDANBgkqhkiG9w0BAQsFAAOCAgEAOXXD7jhWpHtj0ko0RMpAPlVf6iXC78rsxyHu +sjRdrq1mg+7BJBIKhxvGQre3uuRPeWs8Wlit70A33k6diZyzvNx28DLH0JAa4Xht +auf6jfygLKAXIMr/VCNwOAMeh+Z/EXM6Tt8cDqx9MIsSRnroEPqBTcmLMWRCTtPM +bXUCMdmDIrRYFLrqMrSqUU3N97MAKhYsEyyjAVq1xRa5Lj88ptyKBBNNPDVtn6Rs +L7N6Ef8axVGSbHtZEeNTq6dXq9ZDjhtl8DFjXge+0znc0Tk2oeGQFyw5JM0j8SxJ +FFXtwnZDMMJMS5OkC6QPsmJJIwWUd4LpRi5qscd0eb9d2o/QBP6akYRwP9LZphM/ +BUtgbJ+xavh3Mmm2rDBSZfKw/88kiq2VgukVYMjyWV7LjqC820EVX9kfwHNSnSuN +inpc7vjz37iSfrDAAJmJAVQpRXHTiQYA0SKAQoJhvqTmnRfMl3V9pPhGUPJNmA1l +PpIRcF/x0Z8yBwA0oiyn7VGDcN1IvmHihJKRlTi1pUbdLMZtCfYmXhLh0QMHcL3B +I+J731z8vOjt1I5RcWY+Mhpm5bybYNZwmtrZOPE/O+l7kD9nDOef8V7pAT+cVuhq +3ldOJbcWmCNjb/v3TjLSExHP8B/Jc62oFVVUk5eAWZxrQKb5QCN5HagxExhUfQWO +mfZDqUs= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIG/DCCBOSgAwIBAgIIU2w5U7TnvlwwDQYJKoZIhvcNAQELBQAwZjELMAkGA1UE diff --git a/l10n_nl_kvk/examples/kvk_68727720.json b/l10n_nl_kvk/examples/kvk_68727720.json index 9ca8acee4..3cdad5474 100644 --- a/l10n_nl_kvk/examples/kvk_68727720.json +++ b/l10n_nl_kvk/examples/kvk_68727720.json @@ -1,61 +1,36 @@ { - "apiVersion": "2.0", - "meta": - { - - }, - "data": - { - "itemsPerPage": 10, - "startPage": 1, - "totalItems": 2, - "items": [ - { - "kvkNumber": "68727720", - "rsin": "857567433", - "tradeNames": + "pagina": 1, + "aantal": 10, + "totaal": 2, + "resultaten": [ + { + "kvkNummer": "68727720", + "vestigingsnummer": "000037143557", + "handelsnaam": "Test NV Katrien", + "straatnaam": "Rietdekkershof", + "plaats": "Veendam", + "type": "rechtspersoon", + "links": [ { - "shortBusinessName": "Test NV Katrien", - "currentStatutoryNames": [ "Test NV Katrien" - ] + "rel": "basisprofiel", + "href": "https://api.kvk.nl/test/api/v1/basisprofielen/68727720" }, - "hasEntryInBusinessRegister": true, - "hasNonMailingIndication": true, - "isLegalPerson": true, - "isBranch": false, - "isMainBranch": false - }, - - { - "kvkNumber": "68727720", - "branchNumber": "000037143557", - "rsin": "857567433", - "tradeNames": { - "businessName": "Test NV Katrien", - "shortBusinessName": "Test NV Katrien", - "currentTradeNames": [ "Test NV Katrien" - ], - "currentStatutoryNames": [ "Test NV Katrien" - ] - }, - "hasEntryInBusinessRegister": true, - "hasNonMailingIndication": true, - "isLegalPerson": false, - "isBranch": true, - "isMainBranch": true, - "addresses": [ - { - "type": "vestigingsadres", - "street": "Rietdekkershof", - "houseNumber": "8", - "houseNumberAddition": "", - "postalCode": "9646AS", - "city": "Veendam", - "country": "Nederland" - } - ] - } - ] - } + "rel": "vestigingsprofiel", + "href": "https://api.kvk.nl/test/api/v1/vestigingsprofielen/000037143557" + } + ] + }, + { + "kvkNummer": "68727720", + "handelsnaam": "Test NV Katrien", + "type": "rechtspersoon", + "links": [ + { + "rel": "basisprofiel", + "href": "https://api.kvk.nl/test/api/v1/basisprofielen/68727720" + } + ] + } + ] } diff --git a/l10n_nl_kvk/examples/kvk_69599084.json b/l10n_nl_kvk/examples/kvk_69599084.json index fafdeee69..12ca7dd0c 100644 --- a/l10n_nl_kvk/examples/kvk_69599084.json +++ b/l10n_nl_kvk/examples/kvk_69599084.json @@ -1,69 +1,43 @@ { - "apiVersion": "2.0", - "meta": {}, - "data": { - "itemsPerPage": 10, - "startPage": 1, - "totalItems": 2, - "items": [ - { - "kvkNumber": "69599084", - "branchNumber": "000038509520", - "tradeNames": { - "businessName": "Test EMZ Nevenvestiging Govert", - "currentTradeNames": [ - "Test EMZ Nevenvestiging Govert", - "Tweede handelsnaam Vestiging2", - "Derde handelsnaam Vestiging2", - "Vierde handelsnaam Vestiging2" - ] + "pagina": 1, + "aantal": 10, + "totaal": 2, + "resultaten": [ + { + "kvkNummer": "69599084", + "vestigingsnummer": "000038509504", + "handelsnaam": "Test EMZ Dagobert", + "straatnaam": "Abebe Bikilalaan", + "plaats": "Amsterdam", + "type": "hoofdvestiging", + "links": [ + { + "rel": "basisprofiel", + "href": "https://api.kvk.nl/test/api/v1/basisprofielen/69599084" }, - "hasEntryInBusinessRegister": true, - "hasNonMailingIndication": true, - "isLegalPerson": false, - "isBranch": true, - "isMainBranch": false, - "addresses": [ - { - "type": "vestigingsadres", - "street": "Geneinde", - "houseNumber": "73", - "houseNumberAddition": "", - "postalCode": "6223GT", - "city": "Maastricht", - "country": "Nederland" - } - ] - }, - { - "kvkNumber": "69599084", - "branchNumber": "000038509504", - "tradeNames": { - "businessName": "Test EMZ Dagobert", - "currentTradeNames": [ - "Test EMZ Dagobert", - "Tweede handelsnaam 1MZ", - "Derde handelsnaam 1MZ", - "Vierde handelsnaam 1MZ" - ] + { + "rel": "vestigingsprofiel", + "href": "https://api.kvk.nl/test/api/v1/vestigingsprofielen/000038509504" + } + ] + }, + { + "kvkNummer": "69599084", + "vestigingsnummer": "000038509520", + "handelsnaam": "Test EMZ Nevenvestiging Govert", + "straatnaam": "Geneinde", + "plaats": "Maastricht", + "type": "nevenvestiging", + "links": [ + { + "rel": "basisprofiel", + "href": "https://api.kvk.nl/test/api/v1/basisprofielen/69599084" }, - "hasEntryInBusinessRegister": true, - "hasNonMailingIndication": true, - "isLegalPerson": false, - "isBranch": true, - "isMainBranch": true, - "addresses": [ - { - "type": "vestigingsadres", - "street": "Abebe Bikilalaan", - "houseNumber": "17", - "houseNumberAddition": "", - "postalCode": "1034WL", - "city": "Amsterdam", - "country": "Nederland" - } - ] - } - ] - } -} \ No newline at end of file + { + "rel": "vestigingsprofiel", + "href": "https://api.kvk.nl/test/api/v1/vestigingsprofielen/000038509520" + } + ] + } + ] +} diff --git a/l10n_nl_kvk/examples/kvk_90004760.json b/l10n_nl_kvk/examples/kvk_90004760.json index 828464acd..4d6f797a3 100644 --- a/l10n_nl_kvk/examples/kvk_90004760.json +++ b/l10n_nl_kvk/examples/kvk_90004760.json @@ -1,41 +1,20 @@ { - "apiVersion": "2.0", - "meta": - { - - }, - "data": - { - "itemsPerPage": 10, - "startPage": 1, - "totalItems": 1, - "items": [ - { - "kvkNumber": "90004760", - "rsin": "992235534", - "tradeNames": + "pagina": 1, + "aantal": 10, + "totaal": 1, + "resultaten": [ + { + "kvkNummer": "90004760", + "handelsnaam": "Local Funzoom N.V.", + "straatnaam": "Eikenlaan", + "plaats": "Leiderdorp", + "type": "rechtspersoon", + "links": [ { - "shortBusinessName": "Local Funzoom N.V.", - "currentStatutoryNames": [ "Local Funzoom N.V." - ] - }, - "hasEntryInBusinessRegister": true, - "hasNonMailingIndication": false, - "isLegalPerson": true, - "isBranch": false, - "isMainBranch": false, - "addresses": [ - { - "type": "bezoekadres", - "street": "Eikenlaan", - "houseNumber": "9", - "houseNumberAddition": "", - "postalCode": "2351NT", - "city": "Leiderdorp", - "country": "Nederland" - } - ] - } - ] - } + "rel": "basisprofiel", + "href": "https://api.kvk.nl/test/api/v1/basisprofielen/90004760" + } + ] + } + ] } diff --git a/l10n_nl_kvk/models/l10n_nl_kvk_api_handler.py b/l10n_nl_kvk/models/l10n_nl_kvk_api_handler.py index 6d56fdb42..a53a733d0 100644 --- a/l10n_nl_kvk/models/l10n_nl_kvk_api_handler.py +++ b/l10n_nl_kvk/models/l10n_nl_kvk_api_handler.py @@ -16,6 +16,7 @@ class KvkApiHandler(models.AbstractModel): @api.model def _get_config(self, val): + """ Get configuration parameters """ get_param = self.env['ir.config_parameter'].sudo().get_param config_dict = { 'service': get_param('l10n_nl_kvk_service', 'test'), @@ -27,7 +28,7 @@ def _get_config(self, val): @api.model def _retrieve_data_by_api(self, url_query): - + """ Execute search query via GET request """ headers = self._kvk_http_header() request_timeout = self._get_config('timeout') @@ -81,7 +82,11 @@ def _retrieve_data_by_api(self, url_query): @api.model def _kvk_http_header(self): - headers = {'test': 'test', } + """ Format header to contain API key/value """ + # In case of test we use the standard test value + headers = {'apikey': 'l7xx1f2691f2520d487b902f4e0b57a0b197', } + + # In case of production, take key/value from the configuration if self._get_config('service') == 'kvk': kvk_api_key = self._get_config('kvk_api_key') kvk_api_value = self._get_config('kvk_api_value') @@ -89,27 +94,27 @@ def _kvk_http_header(self): return headers @api.model - def _get_url_query_kvk_api(self, kvk): - url_query = 'https://api.kvk.nl/api/v2/' - + def _get_url_zoeken(self): + """ Returns Zoeken API endpoint """ if self._get_config('service') == 'kvk': - url_query += 'search/companies?kvkNumber={0}' + url_query = 'https://api.kvk.nl/api/v1/zoeken' else: - url_query += 'testsearch/companies?kvkNumber={0}' - - url_query = url_query.format(kvk) + url_query = 'https://api.kvk.nl/test/api/v1/zoeken' return url_query @api.model - def _get_url_query_name_api(self, name): - url_query = 'https://api.kvk.nl/api/v2/testsearch/companies?q={0}' - - if self._get_config('service') == 'kvk': - url_query = 'https://api.kvk.nl/api/v2/search/companies?q={0}' - url_query = url_query.format(name) + def _get_url_query_kvk_api(self, kvk): + """ Format URL query to search by KvK number """ + url_query = self._get_url_zoeken() + url_query += '?kvkNummer={0}' + return url_query.format(kvk) - url_query = url_query.format(name) - return url_query + @api.model + def _get_url_query_name_api(self, name): + """ Format URL query to search by company name """ + url_query = self._get_url_zoeken() + url_query += '?handelsnaam={0}' + return url_query.format(name) @api.model def _kvk_format_street(self, street, number, extra): diff --git a/l10n_nl_kvk/tests/test_l10n_nl_kvk.py b/l10n_nl_kvk/tests/test_l10n_nl_kvk.py index ed443f628..af4605b10 100644 --- a/l10n_nl_kvk/tests/test_l10n_nl_kvk.py +++ b/l10n_nl_kvk/tests/test_l10n_nl_kvk.py @@ -1,10 +1,10 @@ -# Copyright 2018 Onestein () +# Copyright 2018-2020 Onestein ( # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import json from mock import patch -from odoo.modules.module import get_module_resource +from odoo.modules.module import get_resource_path from odoo.exceptions import UserError from odoo.tools import mute_logger from odoo.tests.common import TransactionCase, at_install, post_install @@ -15,7 +15,7 @@ class TestNLKvK(TransactionCase): def setUp(self): - super(TestNLKvK, self).setUp() + super().setUp() self.set_param = self.env['ir.config_parameter'].set_param self.get_param = self.env['ir.config_parameter'].get_param @@ -157,7 +157,7 @@ def test_07_kvk_api_key_not_valid(self): self.assertFalse(wizard_action) def test_08_json_load(self): - json_resource = get_module_resource( + json_resource = get_resource_path( 'l10n_nl_kvk', 'examples', 'kvk_69599084.json', @@ -166,17 +166,6 @@ def test_08_json_load(self): res_data = json.loads(json_file.decode()) self.assertTrue(res_data) - api_version = res_data['apiVersion'] - self.assertTrue(api_version) - self.assertEqual(api_version, '2.0') - - data_items_list = res_data['data']['items'] - self.assertTrue(data_items_list) - self.assertEqual(len(data_items_list), 2) - - for kvk_item in data_items_list: - self.assertEqual(kvk_item['kvkNumber'], '69599084') - @at_install(False) @post_install(True) def test_09_mocked_api_load(self): @@ -190,7 +179,7 @@ def test_09_mocked_api_load(self): self.set_param('l10n_nl_kvk_api_key', 'apikeytest') self.set_param('l10n_nl_kvk_api_value', API_KEY) - json_resource = get_module_resource( + json_resource = get_resource_path( 'l10n_nl_kvk', 'examples', 'kvk_69599084.json', @@ -213,32 +202,28 @@ def test_09_mocked_api_load(self): self.assertEqual(test_line.kvk, '69599084') self.assertEqual( test_line.partner_name, - 'Test EMZ Nevenvestiging Govert') - self.assertEqual(test_line.partner_city, 'Maastricht') - self.assertEqual(test_line.partner_zip, '6223GT') + 'Test EMZ Dagobert') + self.assertEqual(test_line.partner_city, 'Amsterdam') self.assertEqual(test_line.entity_type, 'headquarters') test_line.set_partner_fields() self.assertEqual( my_partner.name, - 'Test EMZ Nevenvestiging Govert') - self.assertEqual(my_partner.city, 'Maastricht') - self.assertEqual(my_partner.zip, '6223GT') + 'Test EMZ Dagobert') + self.assertEqual(my_partner.city, 'Amsterdam') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, self.env.ref('base.nl')) test_line = wizard.line_ids[1] self.assertEqual(test_line.name, '69599084') self.assertEqual(test_line.kvk, '69599084') - self.assertEqual(test_line.partner_name, 'Test EMZ Dagobert') - self.assertEqual(test_line.partner_city, 'Amsterdam') - self.assertEqual(test_line.partner_zip, '1034WL') - self.assertEqual(test_line.entity_type, 'headquarters') + self.assertEqual(test_line.partner_name, 'Test EMZ Nevenvestiging Govert') + self.assertEqual(test_line.partner_city, 'Maastricht') + self.assertEqual(test_line.entity_type, 'branch') test_line.set_partner_fields() - self.assertEqual(my_partner.name, 'Test EMZ Dagobert') - self.assertEqual(my_partner.city, 'Amsterdam') - self.assertEqual(my_partner.zip, '1034WL') + self.assertEqual(my_partner.name, 'Test EMZ Nevenvestiging Govert') + self.assertEqual(my_partner.city, 'Maastricht') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, self.env.ref('base.nl')) @@ -262,26 +247,32 @@ def test_10_api_load_test_mode(self): self.assertEqual(len(wizard.line_ids), 2) - test_line = wizard.line_ids[0] + test_line = wizard.line_ids[1] self.assertEqual(test_line.name, '69599084') self.assertEqual(test_line.kvk, '69599084') self.assertEqual( test_line.partner_name, - 'Test EMZ Dagobert') - self.assertEqual(test_line.entity_type, 'headquarters') + 'Test EMZ Nevenvestiging Govert') + self.assertEqual(test_line.partner_city, 'Maastricht') + self.assertEqual(test_line.entity_type, 'branch') test_line.set_partner_fields() self.assertEqual(my_partner.name, - 'Test EMZ Dagobert') + 'Test EMZ Nevenvestiging Govert') + self.assertEqual(my_partner.city, 'Maastricht') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, nl_country) - test_line = wizard.line_ids[1] + test_line = wizard.line_ids[0] self.assertEqual(test_line.name, '69599084') self.assertEqual(test_line.kvk, '69599084') + self.assertEqual(test_line.partner_name, 'Test EMZ Dagobert') + self.assertEqual(test_line.partner_city, 'Amsterdam') self.assertEqual(test_line.entity_type, 'headquarters') test_line.set_partner_fields() + self.assertEqual(my_partner.name, 'Test EMZ Dagobert') + self.assertEqual(my_partner.city, 'Amsterdam') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, nl_country) @@ -298,7 +289,7 @@ def test_11_api_internal_server_error(self): with patch(self.api_handler + '_get_url_query_kvk_api') as _my_mock: _my_mock.return_value = \ - 'https://api.kvk.nl/api/v2/testsearch/companies' + 'https://api.kvk.nl/test/api/v1/' with self.assertRaises(UserError): wizard_action = my_partner.load_partner_values_from_kvk() @@ -348,23 +339,29 @@ def test_13_api_load_with_wizard(self): self.assertEqual(len(wizard.line_ids), 2) - test_line = wizard.line_ids[0] + test_line = wizard.line_ids[1] self.assertEqual(test_line.name, '68727720') self.assertEqual(test_line.kvk, '68727720') self.assertEqual(test_line.partner_name, 'Test NV Katrien') + self.assertFalse(test_line.partner_city) + self.assertEqual(test_line.entity_type, 'legal_person') test_line.set_partner_fields() self.assertEqual(my_partner.name, 'Test NV Katrien') + self.assertFalse(my_partner.city) self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, nl_country) - test_line = wizard.line_ids[1] + test_line = wizard.line_ids[0] self.assertEqual(test_line.name, '68727720') self.assertEqual(test_line.kvk, '68727720') self.assertEqual(test_line.partner_name, 'Test NV Katrien') + self.assertEqual(test_line.partner_city, 'Veendam') + self.assertEqual(test_line.entity_type, 'headquarters') test_line.set_partner_fields() self.assertEqual(my_partner.name, 'Test NV Katrien') + self.assertEqual(my_partner.city, 'Veendam') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, nl_country) @@ -388,7 +385,6 @@ def test_14_api_load_no_wizard(self): # partner fields directly set (without popup) self.assertEqual(my_partner.name, 'Local Funzoom N.V.') self.assertEqual(my_partner.city, 'Leiderdorp') - self.assertEqual(my_partner.zip, '2351NT') self.assertFalse(my_partner.vat) self.assertEqual(my_partner.country_id, nl_country) @@ -415,7 +411,6 @@ def test_16_api_load_no_results(self): my_partner = self.env.ref('base.main_partner') my_partner_name = my_partner.name my_partner_city = my_partner.city - my_partner_zip = my_partner.zip my_partner_vat = my_partner.vat my_partner.country_id = self.env.ref('base.nl') my_partner.coc_registration_number = '90004841' @@ -435,6 +430,5 @@ def test_16_api_load_no_results(self): # partner not changed self.assertEqual(my_partner.name, my_partner_name) self.assertEqual(my_partner.city, my_partner_city) - self.assertEqual(my_partner.zip, my_partner_zip) self.assertEqual(my_partner.vat, my_partner_vat) self.assertEqual(my_partner.country_id, self.env.ref('base.nl')) diff --git a/l10n_nl_kvk/wizards/l10n_nl_kvk_preview_wizard.py b/l10n_nl_kvk/wizards/l10n_nl_kvk_preview_wizard.py index 2d914a669..f27a54bac 100644 --- a/l10n_nl_kvk/wizards/l10n_nl_kvk_preview_wizard.py +++ b/l10n_nl_kvk/wizards/l10n_nl_kvk_preview_wizard.py @@ -25,21 +25,13 @@ class KvKPreviewWizard(models.TransientModel): def _get_wizard_lines_values(self, target_item): def _get_partner_name(target_item): - trade_names = target_item['tradeNames'] - partner_name = trade_names.get( - 'businessName' - ) or trade_names.get( - 'shortBusinessName' - ) - return partner_name - - def _get_country(first_address): - country = None - if first_address.get('country') == 'Nederland': - country = self.env.ref('base.nl') - elif first_address.get('country'): + return target_item['handelsnaam'] + + def _get_country(target_item): + country = self.env.ref('base.nl') + if target_item.get('land') and target_item['land'] != 'Nederland': country = self.env['res.country'].search([ - ('name', 'ilike', first_address['country']) + ('name', 'ilike', target_item['land']) ], limit=1) return country @@ -47,51 +39,44 @@ def _get_country(first_address): partner_name = _get_partner_name(target_item) - first_address = target_item.get('addresses', [{}])[0] - - country = _get_country(first_address) + country = _get_country(target_item) item = { - 'kvk': target_item['kvkNumber'], - 'name': target_item['kvkNumber'], + 'kvk': target_item['kvkNummer'], + 'name': target_item['kvkNummer'], 'partner_name': partner_name, 'country_id': country and country.id or False, - 'partner_city': first_address.get('city'), - 'partner_zip': first_address.get('postalCode'), + 'partner_city': target_item.get('plaats'), + 'partner_zip': target_item.get('postcode'), } item['partner_street'] = Handler._kvk_format_street( - first_address.get('street'), - first_address.get('houseNumber'), - first_address.get('houseNumberAddition'), + target_item.get('straatnaam'), + target_item.get('huisnummer'), + False ) - if target_item.get('websites'): - item['partner_website'] = target_item['websites'][0] return item @api.model def _get_wizard_lines(self, res_data): def _get_entity_type(item_data): - entity_type = 'headquarters' - is_legal_person = item_data.get('isLegalPerson') - if is_legal_person: - entity_type = 'legal_person' - return entity_type + if not item_data.get("type"): + return False + entity_type_map = { + 'rechtspersoon': "legal_person", + 'hoofdvestiging': "headquarters", + 'nevenvestiging': "branch", + } + return entity_type_map[item_data["type"]] all_lines = [] - if 'apiVersion' not in res_data or 'data' not in res_data: - return [] - - if res_data['apiVersion'] != '2.0': - return [] - - if res_data['data']['totalItems'] == 0: + if res_data.get('totaal', 0) == 0: return [] - for target_item in res_data['data']['items']: + for target_item in res_data['resultaten']: item = self._get_wizard_lines_values(target_item) item['entity_type'] = _get_entity_type(target_item) all_lines.append((0, 0, item), ) @@ -139,7 +124,8 @@ class KvKPreviewWizardLines(models.TransientModel): kvk = fields.Char() entity_type = fields.Selection([ ('legal_person', 'Legal Person'), - ('headquarters', 'Headquarters') + ('headquarters', 'Headquarters'), + ('branch', 'Branch'), ]) partner_name = fields.Char() partner_city = fields.Char()