From c78674bdb55de18b01823a0ad60c6aad5b8eaef2 Mon Sep 17 00:00:00 2001 From: Benas Date: Mon, 30 May 2022 17:33:34 +0300 Subject: [PATCH 1/8] [ADD] OD-1996 zpl format labels in using paazl as carrier. --- .../models/delivery_carrier_option.py | 1 + .../views/delivery.xml | 1 + .../models/stock_picking.py | 8 +++- .../test_delivery_carrier_label_paazl.py | 37 +++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/base_delivery_carrier_label/models/delivery_carrier_option.py b/base_delivery_carrier_label/models/delivery_carrier_option.py index ea4135458e..2eb99371bf 100644 --- a/base_delivery_carrier_label/models/delivery_carrier_option.py +++ b/base_delivery_carrier_label/models/delivery_carrier_option.py @@ -44,6 +44,7 @@ class DeliveryCarrierOption(models.Model): compute="_compute_color", help="Orange if the option is mandatory, otherwise no color", ) + label_file_type = fields.Selection([("pdf", "PDF"), ("zpl", "ZPL")]) @api.depends("mandatory") def _compute_color(self): diff --git a/base_delivery_carrier_label/views/delivery.xml b/base_delivery_carrier_label/views/delivery.xml index 6cc32de0d2..a128cd2043 100644 --- a/base_delivery_carrier_label/views/delivery.xml +++ b/base_delivery_carrier_label/views/delivery.xml @@ -49,6 +49,7 @@ + diff --git a/delivery_carrier_label_paazl/models/stock_picking.py b/delivery_carrier_label_paazl/models/stock_picking.py index e257de463f..9e23dea487 100644 --- a/delivery_carrier_label_paazl/models/stock_picking.py +++ b/delivery_carrier_label_paazl/models/stock_picking.py @@ -73,6 +73,8 @@ def _paazl_generate_labels(self): # as we have the labels anyways, attach them account = self._get_carrier_account() file_type = (account.file_format or "").lower() or "pdf" + if self.option_ids: + file_type = self.option_ids[0].label_file_type label = { "name": self._paazl_reference(), "file": base64.b64encode(status.labels), @@ -261,9 +263,13 @@ def _paazl_generate_labels_data(self): self.ensure_one() auth_order_id = self._paazl_auth_order_id() account = self._get_carrier_account() + file_format = account.file_format or "PDF" + if self.option_ids and self.option_ids.label_file_type: + # Secure because it's only allowed to save 1 option at a time. + file_format = self.option_ids.label_file_type.upper() return { "webshop": auth_order_id.pop("webshop"), - "labelFormat": account.file_format or "PDF", + "labelFormat": file_format, "order": auth_order_id, "includeMetaData": True, } diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index b7a0596027..7c7d77aff2 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -114,6 +114,11 @@ def _request(self, path, method="POST", data=None, headers=None): class TestDeliveryCarrierLabelPaazl( DeliveryCarrierLabelPaazlCase, carrier_label_case.TestCarrierLabel): + def _picking_data(self): + """Add the boxes that vanmoof_shipping module makes required for Paazl""" + self.picking.paazl_pack_detail_ids = [(0, 0, {"name": __name__})] + return super()._picking_data() + def test_cancel_shipment(self): self.assertTrue(self.picking.carrier_tracking_ref) with self._setup_mock_client() as mock_client: @@ -186,6 +191,38 @@ def test_change_order(self): self.picking._paazl_send_update_order(change_order=True) self.assertTrue(self.picking.carrier_tracking_ref) + def test_label_type_format_from_paazl(self): + """ + Test if getting .zpl format label after using delivery option with zpl format + """ + picking = self.picking.copy() + picking.option_ids.label_file_type = "zpl" + picking.move_lines.quantity_done = 1 + picking.paazl_pack_detail_ids = [(0, 0, {"name": __name__})] + with self._setup_mock_client(): + picking.button_paazl_send_order() + with self._setup_mock_client(): + picking.button_paazl_get_label() + picking.button_validate() + labels = self.env["shipping.label"].search([ + ("res_id", "=", picking.id), + ("res_model", "=", "stock.picking")]) + self.assertEqual( + picking.message_main_attachment_id.mimetype, + labels[0].attachment_id.mimetype) + self.assertEqual( + labels[0].attachment_id.mimetype, + "application/octet-stream" + ) + self.assertEqual( + picking.message_main_attachment_id.mimetype, + "application/octet-stream" + ) + self.assertEqual( + picking.message_main_attachment_id.datas_fname.split('.')[1], + "zpl" + ) + class TestDeliveryCarrierLabelPaazlPackaging(TestDeliveryCarrierLabelPaazl): def _picking_data(self): From 1c1221c5b20a37fc9d0c05b3fce74924dc1003fe Mon Sep 17 00:00:00 2001 From: Benas Date: Wed, 1 Jun 2022 17:39:39 +0300 Subject: [PATCH 2/8] [ADD] OD-1996: Moved paazl_label_file_type to delivery_carrier_label_paazl module, reworked label method to search format from options that has this type set up. --- .../models/delivery_carrier_option.py | 1 - base_delivery_carrier_label/views/delivery.xml | 1 - delivery_carrier_label_paazl/__manifest__.py | 1 + delivery_carrier_label_paazl/models/__init__.py | 1 + .../models/delivery_carrier_option.py | 13 +++++++++++++ .../models/stock_picking.py | 15 ++++++++++----- .../tests/test_delivery_carrier_label_paazl.py | 2 +- .../views/delivery_carrier_option.xml | 14 ++++++++++++++ 8 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 delivery_carrier_label_paazl/models/delivery_carrier_option.py create mode 100644 delivery_carrier_label_paazl/views/delivery_carrier_option.xml diff --git a/base_delivery_carrier_label/models/delivery_carrier_option.py b/base_delivery_carrier_label/models/delivery_carrier_option.py index 2eb99371bf..ea4135458e 100644 --- a/base_delivery_carrier_label/models/delivery_carrier_option.py +++ b/base_delivery_carrier_label/models/delivery_carrier_option.py @@ -44,7 +44,6 @@ class DeliveryCarrierOption(models.Model): compute="_compute_color", help="Orange if the option is mandatory, otherwise no color", ) - label_file_type = fields.Selection([("pdf", "PDF"), ("zpl", "ZPL")]) @api.depends("mandatory") def _compute_color(self): diff --git a/base_delivery_carrier_label/views/delivery.xml b/base_delivery_carrier_label/views/delivery.xml index a128cd2043..6cc32de0d2 100644 --- a/base_delivery_carrier_label/views/delivery.xml +++ b/base_delivery_carrier_label/views/delivery.xml @@ -49,7 +49,6 @@ - diff --git a/delivery_carrier_label_paazl/__manifest__.py b/delivery_carrier_label_paazl/__manifest__.py index 6fe4e03c50..797eb54075 100644 --- a/delivery_carrier_label_paazl/__manifest__.py +++ b/delivery_carrier_label_paazl/__manifest__.py @@ -15,6 +15,7 @@ "data/delivery_carrier.xml", "data/delivery_carrier_template_option.xml", "views/carrier_account.xml", + "views/delivery_carrier_option.xml", ], "demo": [], "external_dependencies": {"python": ["zeep"]}, diff --git a/delivery_carrier_label_paazl/models/__init__.py b/delivery_carrier_label_paazl/models/__init__.py index 281a0a6d9a..97d163c65e 100644 --- a/delivery_carrier_label_paazl/models/__init__.py +++ b/delivery_carrier_label_paazl/models/__init__.py @@ -3,3 +3,4 @@ from . import carrier_account from . import delivery_carrier from . import stock_picking +from . import delivery_carrier_option diff --git a/delivery_carrier_label_paazl/models/delivery_carrier_option.py b/delivery_carrier_label_paazl/models/delivery_carrier_option.py new file mode 100644 index 0000000000..1ab19eb34b --- /dev/null +++ b/delivery_carrier_label_paazl/models/delivery_carrier_option.py @@ -0,0 +1,13 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class DeliveryCarrierOption(models.Model): + _inherit = 'delivery.carrier.option' + + paazl_label_file_type = fields.Selection( + [("pdf", "PDF"), ("zpl", "ZPL")], + string="Paazl Label Type", + ) + delivery_type = fields.Selection(related="carrier_id.delivery_type") diff --git a/delivery_carrier_label_paazl/models/stock_picking.py b/delivery_carrier_label_paazl/models/stock_picking.py index 9e23dea487..f6f6578b6e 100644 --- a/delivery_carrier_label_paazl/models/stock_picking.py +++ b/delivery_carrier_label_paazl/models/stock_picking.py @@ -73,8 +73,11 @@ def _paazl_generate_labels(self): # as we have the labels anyways, attach them account = self._get_carrier_account() file_type = (account.file_format or "").lower() or "pdf" - if self.option_ids: - file_type = self.option_ids[0].label_file_type + options_paazl_label_format = self.option_ids.filtered( + lambda x: x.paazl_label_file_type + ) + if options_paazl_label_format: + file_type = options_paazl_label_format[0].paazl_label_file_type label = { "name": self._paazl_reference(), "file": base64.b64encode(status.labels), @@ -264,9 +267,11 @@ def _paazl_generate_labels_data(self): auth_order_id = self._paazl_auth_order_id() account = self._get_carrier_account() file_format = account.file_format or "PDF" - if self.option_ids and self.option_ids.label_file_type: - # Secure because it's only allowed to save 1 option at a time. - file_format = self.option_ids.label_file_type.upper() + options_paazl_label_format = self.option_ids.filtered( + lambda x: x.paazl_label_file_type + ) + if options_paazl_label_format: + file_format = options_paazl_label_format[0].paazl_label_file_type.upper() return { "webshop": auth_order_id.pop("webshop"), "labelFormat": file_format, diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index 7c7d77aff2..eeeb01efe3 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -196,7 +196,7 @@ def test_label_type_format_from_paazl(self): Test if getting .zpl format label after using delivery option with zpl format """ picking = self.picking.copy() - picking.option_ids.label_file_type = "zpl" + picking.option_ids.paazl_label_file_type = "zpl" picking.move_lines.quantity_done = 1 picking.paazl_pack_detail_ids = [(0, 0, {"name": __name__})] with self._setup_mock_client(): diff --git a/delivery_carrier_label_paazl/views/delivery_carrier_option.xml b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml new file mode 100644 index 0000000000..02a2670ae4 --- /dev/null +++ b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml @@ -0,0 +1,14 @@ + + + + delivery_base.delivery_carrier_option.view_form + delivery.carrier.option + + + + + + + + + From 18962c795cfca129c8d867ccef021428573b05c7 Mon Sep 17 00:00:00 2001 From: Benas Date: Thu, 2 Jun 2022 21:33:27 +0300 Subject: [PATCH 3/8] [ADD] OD-1996: Changes to unittests to use specifically OCA methods. --- .../tests/test_delivery_carrier_label_paazl.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index eeeb01efe3..78de38eee3 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -198,11 +198,10 @@ def test_label_type_format_from_paazl(self): picking = self.picking.copy() picking.option_ids.paazl_label_file_type = "zpl" picking.move_lines.quantity_done = 1 - picking.paazl_pack_detail_ids = [(0, 0, {"name": __name__})] with self._setup_mock_client(): - picking.button_paazl_send_order() + picking._paazl_send_update_order() with self._setup_mock_client(): - picking.button_paazl_get_label() + picking.with_context(only_labels=True).send_to_shipper() picking.button_validate() labels = self.env["shipping.label"].search([ ("res_id", "=", picking.id), From 07fcfc085986a0aaa9bd4ca6d06ae46f97764877 Mon Sep 17 00:00:00 2001 From: Benas Date: Mon, 6 Jun 2022 17:51:24 +0300 Subject: [PATCH 4/8] [RM] OD-1996: changed namings, selection names, reworked unittests to reuse delivery_carrier methods. --- .../models/delivery_carrier_option.py | 5 +-- .../models/stock_picking.py | 8 ++--- .../test_delivery_carrier_label_paazl.py | 32 ++++++++----------- .../views/delivery_carrier_option.xml | 2 +- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/delivery_carrier_label_paazl/models/delivery_carrier_option.py b/delivery_carrier_label_paazl/models/delivery_carrier_option.py index 1ab19eb34b..7db27f1383 100644 --- a/delivery_carrier_label_paazl/models/delivery_carrier_option.py +++ b/delivery_carrier_label_paazl/models/delivery_carrier_option.py @@ -6,8 +6,5 @@ class DeliveryCarrierOption(models.Model): _inherit = 'delivery.carrier.option' - paazl_label_file_type = fields.Selection( - [("pdf", "PDF"), ("zpl", "ZPL")], - string="Paazl Label Type", - ) + file_format = fields.Selection([("PDF", "PDF"), ("ZPL", "ZPL")]) delivery_type = fields.Selection(related="carrier_id.delivery_type") diff --git a/delivery_carrier_label_paazl/models/stock_picking.py b/delivery_carrier_label_paazl/models/stock_picking.py index f6f6578b6e..8dfc609ef1 100644 --- a/delivery_carrier_label_paazl/models/stock_picking.py +++ b/delivery_carrier_label_paazl/models/stock_picking.py @@ -74,10 +74,10 @@ def _paazl_generate_labels(self): account = self._get_carrier_account() file_type = (account.file_format or "").lower() or "pdf" options_paazl_label_format = self.option_ids.filtered( - lambda x: x.paazl_label_file_type + lambda x: x.file_format ) if options_paazl_label_format: - file_type = options_paazl_label_format[0].paazl_label_file_type + file_type = options_paazl_label_format[0].file_format.lower() label = { "name": self._paazl_reference(), "file": base64.b64encode(status.labels), @@ -268,10 +268,10 @@ def _paazl_generate_labels_data(self): account = self._get_carrier_account() file_format = account.file_format or "PDF" options_paazl_label_format = self.option_ids.filtered( - lambda x: x.paazl_label_file_type + lambda x: x.file_format ) if options_paazl_label_format: - file_format = options_paazl_label_format[0].paazl_label_file_type.upper() + file_format = options_paazl_label_format[0].file_format return { "webshop": auth_order_id.pop("webshop"), "labelFormat": file_format, diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index 78de38eee3..32885a0484 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -114,10 +114,6 @@ def _request(self, path, method="POST", data=None, headers=None): class TestDeliveryCarrierLabelPaazl( DeliveryCarrierLabelPaazlCase, carrier_label_case.TestCarrierLabel): - def _picking_data(self): - """Add the boxes that vanmoof_shipping module makes required for Paazl""" - self.picking.paazl_pack_detail_ids = [(0, 0, {"name": __name__})] - return super()._picking_data() def test_cancel_shipment(self): self.assertTrue(self.picking.carrier_tracking_ref) @@ -181,28 +177,18 @@ def test_push_api(self): ) self.assertTrue(self.picking.message_ids - messages_before) - def test_change_order(self): - """Test change order in paazl""" - self.assertTrue(self.picking.carrier_tracking_ref) - with self._setup_mock_client() as mock_client: - mock_client.service.commitOrder.return_value = Mock( - error=Mock(code=1003, message="") - ) - self.picking._paazl_send_update_order(change_order=True) - self.assertTrue(self.picking.carrier_tracking_ref) - def test_label_type_format_from_paazl(self): """ Test if getting .zpl format label after using delivery option with zpl format """ picking = self.picking.copy() - picking.option_ids.paazl_label_file_type = "zpl" + picking.option_ids.file_format = "ZPL" picking.move_lines.quantity_done = 1 with self._setup_mock_client(): picking._paazl_send_update_order() - with self._setup_mock_client(): - picking.with_context(only_labels=True).send_to_shipper() - picking.button_validate() + picking.send_to_shipper() + picking._paazl_generate_labels() + labels = self.env["shipping.label"].search([ ("res_id", "=", picking.id), ("res_model", "=", "stock.picking")]) @@ -222,6 +208,16 @@ def test_label_type_format_from_paazl(self): "zpl" ) + def test_change_order(self): + """Test change order in paazl""" + self.assertTrue(self.picking.carrier_tracking_ref) + with self._setup_mock_client() as mock_client: + mock_client.service.commitOrder.return_value = Mock( + error=Mock(code=1003, message="") + ) + self.picking._paazl_send_update_order(change_order=True) + self.assertTrue(self.picking.carrier_tracking_ref) + class TestDeliveryCarrierLabelPaazlPackaging(TestDeliveryCarrierLabelPaazl): def _picking_data(self): diff --git a/delivery_carrier_label_paazl/views/delivery_carrier_option.xml b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml index 02a2670ae4..9531a0bfac 100644 --- a/delivery_carrier_label_paazl/views/delivery_carrier_option.xml +++ b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml @@ -7,7 +7,7 @@ - + From d70dfa221e1722a77a8dd38aab800559e328a0a7 Mon Sep 17 00:00:00 2001 From: Benas Date: Mon, 20 Jun 2022 18:45:27 +0300 Subject: [PATCH 5/8] [ADD] OD-1996: Add related functionality information to README.rst --- delivery_carrier_label_paazl/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/delivery_carrier_label_paazl/README.rst b/delivery_carrier_label_paazl/README.rst index 73bb78ff6e..a19c9ce9f3 100644 --- a/delivery_carrier_label_paazl/README.rst +++ b/delivery_carrier_label_paazl/README.rst @@ -23,7 +23,7 @@ Carrier labels for paazl :target: https://runbot.odoo-community.org/runbot/99/12.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds `paazl `_ to the available carriers. @@ -38,6 +38,7 @@ Configuration To configure this module, you need to: #. Add options to your paazl carrier +#. Select wanted paazl label format (PDF or ZPL) on delivery carrier options, if nothing is set default label format will be PDF. #. Add a carrier account with delivery type ``paazl``, fill in your webshop id as account number, and the integration password as password. You find those values in Integrations/SOAP API on paazl's website #. If you want to receive status updates (including the carrier's tracking url), you need to enable the push API in your paazl account, and fill in ``https://$yourdomain/_paazl/push_api/v1`` as notification URL. You should enable client authentication and fill in the token generated there in the `Bearer token` field of the carrier account in Odoo @@ -50,6 +51,7 @@ To use this module, you need to: #. Set exactly one delivery option #. As a label needs to be generated for the tracking code, there's no need to manually generate labels via the button #. Note that the addon passes the package's dimensions if a packaging is set on the package, and on the product's dimensions otherwise +#. Depending on the label format settings attached to the carrier option, get .zpl or .pdf format labels. Bug Tracker =========== From 2008a5fc61e3d10c092f342cc9dad336f19bcb63 Mon Sep 17 00:00:00 2001 From: Benas Date: Fri, 24 Jun 2022 01:35:56 +0300 Subject: [PATCH 6/8] [ADD] OD-1996: Improve unittests. --- .../test_delivery_carrier_label_paazl.py | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index 32885a0484..432c32702a 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -183,30 +183,16 @@ def test_label_type_format_from_paazl(self): """ picking = self.picking.copy() picking.option_ids.file_format = "ZPL" + self.assertEqual(picking.option_ids.file_format, "ZPL") picking.move_lines.quantity_done = 1 with self._setup_mock_client(): - picking._paazl_send_update_order() - picking.send_to_shipper() - picking._paazl_generate_labels() - - labels = self.env["shipping.label"].search([ - ("res_id", "=", picking.id), - ("res_model", "=", "stock.picking")]) - self.assertEqual( - picking.message_main_attachment_id.mimetype, - labels[0].attachment_id.mimetype) - self.assertEqual( - labels[0].attachment_id.mimetype, - "application/octet-stream" - ) - self.assertEqual( - picking.message_main_attachment_id.mimetype, - "application/octet-stream" - ) - self.assertEqual( - picking.message_main_attachment_id.datas_fname.split('.')[1], - "zpl" - ) + payload = picking._paazl_generate_labels() + + labels = payload["labels"][0] + self.assertTrue(labels) + self.assertTrue(labels["file"]) + self.assertEqual(labels["file_type"], "zpl") + self.assertEqual(labels["filename"].split('.')[1], "zpl") def test_change_order(self): """Test change order in paazl""" From b72f84e3716f698a0468d6ff1f96702bee68a26a Mon Sep 17 00:00:00 2001 From: Kevin Graveman Date: Tue, 31 Jan 2023 10:24:02 +0100 Subject: [PATCH 7/8] [IMP] OD-2370: Service point delivery orders --- delivery_carrier_label_paazl/models/delivery_carrier_option.py | 2 ++ delivery_carrier_label_paazl/models/stock_picking.py | 2 +- delivery_carrier_label_paazl/views/delivery_carrier_option.xml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/delivery_carrier_label_paazl/models/delivery_carrier_option.py b/delivery_carrier_label_paazl/models/delivery_carrier_option.py index 7db27f1383..b1cf33e0b5 100644 --- a/delivery_carrier_label_paazl/models/delivery_carrier_option.py +++ b/delivery_carrier_label_paazl/models/delivery_carrier_option.py @@ -8,3 +8,5 @@ class DeliveryCarrierOption(models.Model): file_format = fields.Selection([("PDF", "PDF"), ("ZPL", "ZPL")]) delivery_type = fields.Selection(related="carrier_id.delivery_type") + shipping_method_type = fields.Selection([('delivery', 'Delivery'), ('servicepoint', 'Service point')], + default="delivery") diff --git a/delivery_carrier_label_paazl/models/stock_picking.py b/delivery_carrier_label_paazl/models/stock_picking.py index 8dfc609ef1..9128cddbfb 100644 --- a/delivery_carrier_label_paazl/models/stock_picking.py +++ b/delivery_carrier_label_paazl/models/stock_picking.py @@ -212,7 +212,7 @@ def _paazl_commit_order_data(self): customerEmail=self.partner_id.email, customerPhoneNumber=self.partner_id.phone, shippingMethod=dict( - type="delivery", + type=self.option_ids[:1].shipping_method_type, identifier=0, option=self.option_ids[:1].code, orderWeight=sum( diff --git a/delivery_carrier_label_paazl/views/delivery_carrier_option.xml b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml index 9531a0bfac..6b68dbd8c1 100644 --- a/delivery_carrier_label_paazl/views/delivery_carrier_option.xml +++ b/delivery_carrier_label_paazl/views/delivery_carrier_option.xml @@ -8,6 +8,7 @@ + From 856cb7343f29a3bf2ebcad2761575ec173bd8069 Mon Sep 17 00:00:00 2001 From: Kevin Graveman Date: Tue, 31 Jan 2023 10:24:02 +0100 Subject: [PATCH 8/8] [IMP] OD-2370: Use nearest DHL servicepoint --- .../models/stock_picking.py | 25 ++++++++++++++++++- .../test_delivery_carrier_label_paazl.py | 15 +++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/delivery_carrier_label_paazl/models/stock_picking.py b/delivery_carrier_label_paazl/models/stock_picking.py index 9128cddbfb..3529b97216 100644 --- a/delivery_carrier_label_paazl/models/stock_picking.py +++ b/delivery_carrier_label_paazl/models/stock_picking.py @@ -206,6 +206,12 @@ def _paazl_commit_order_data(self): shipping_address["customerName"] = shipping_address.pop("addresseeLine") if self.partner_id.parent_id: shipping_address["companyName"] = self.partner_id.parent_id.name + if self.option_ids[:1].shipping_method_type == "servicepoint": + identifier = self._paazl_get_servicepoints().shippingOption[0]["servicePoint"][0]["code"] + servicepointNotificationEmail = self.partner_id.email + else: + identifier = 0 + servicepointNotificationEmail = False return dict( **self._paazl_auth_order_id(), pendingOrderReference=self._paazl_reference(), @@ -213,8 +219,9 @@ def _paazl_commit_order_data(self): customerPhoneNumber=self.partner_id.phone, shippingMethod=dict( type=self.option_ids[:1].shipping_method_type, - identifier=0, + identifier=identifier, option=self.option_ids[:1].code, + servicepointNotificationEmail=servicepointNotificationEmail, orderWeight=sum( product["quantity"] * product["weight"] for product in self._paazl_order_data()["products"]["product"] @@ -298,3 +305,19 @@ def _paazl_reference(self): """Return a reference for a picking to be used for paazl""" self.ensure_one() return self.name + + def _paazl_get_servicepoints(self): + """Return servicepoints response for the order's partner hardcoded to only return the nearest DHL servicepoint + """ + api = self._paazl_api() + account = self._get_carrier_account() + country = self.partner_id.country_id.code + postcode = self.partner_id.zip + hash_data = hashlib.sha1((account.account + account.password + country + postcode).encode()).hexdigest() + webshop = account.account + response = api.service.servicePoints( + hash=hash_data, webshop=webshop, country=country, postcode=postcode, + shippingOption="DHL_PARCEL_CONNECT_SHOP", + limit=1, + ) + return response diff --git a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py index 432c32702a..491e3aff4d 100644 --- a/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py +++ b/delivery_carrier_label_paazl/tests/test_delivery_carrier_label_paazl.py @@ -56,6 +56,9 @@ def _setup_mock_client(self): mock_client.service.generateLabels.return_value = Mock( error=False, labels=b"hello world", metaData=[{"trackingNumber": "number"}], ) + mock_client.service.servicePoints.return_value = Mock( + error=False, shippingOption=[{"servicePoint": [{"code": "1234-NL-123456"}]}], + ) with patch.object(zeep, "Client") as mock_client_class: mock_client_class.return_value = mock_client yield mock_client @@ -204,6 +207,18 @@ def test_change_order(self): self.picking._paazl_send_update_order(change_order=True) self.assertTrue(self.picking.carrier_tracking_ref) + def test_servicepoint_order(self): + """Test committing an order with type servicepoint""" + picking = self.picking.copy() + picking.option_ids.shipping_method_type = "servicepoint" + picking.partner_id.country_id = self.env.ref("base.nl") + picking.partner_id.zip = "1092AD" + with self._setup_mock_client() as mock_client: + mock_client.service.servicePoints.return_value = Mock( + error=False, shippingOption=[{"servicePoint": [{"code": "1234-NL-123456"}]}], + ) + picking._paazl_send_update_order() + class TestDeliveryCarrierLabelPaazlPackaging(TestDeliveryCarrierLabelPaazl): def _picking_data(self):