details:   https://code.tryton.org/tryton/commit/7e5d3e3bef70
branch:    default
user:      Cédric Krier <[email protected]>
date:      Thu Feb 13 23:47:46 2025 +0100
description:
        Update to DPD Shipment Service 4.4
diffstat:

 modules/stock_package_shipping_dpd/CHANGELOG                       |   2 +
 modules/stock_package_shipping_dpd/carrier.py                      |  19 
++++++--
 modules/stock_package_shipping_dpd/configuration.py                |   2 +-
 modules/stock_package_shipping_dpd/doc/index.rst                   |   2 +-
 modules/stock_package_shipping_dpd/stock.py                        |  22 
++++++---
 modules/stock_package_shipping_dpd/tests/scenario_shipping_dpd.rst |   2 +-
 modules/stock_package_shipping_dpd/view/carrier_form.xml           |   4 +-
 7 files changed, 35 insertions(+), 18 deletions(-)

diffs (167 lines):

diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/CHANGELOG
--- a/modules/stock_package_shipping_dpd/CHANGELOG      Sat Feb 01 01:50:00 
2025 +0100
+++ b/modules/stock_package_shipping_dpd/CHANGELOG      Thu Feb 13 23:47:46 
2025 +0100
@@ -1,3 +1,5 @@
+* Update to Shipment Service 4.4
+* Support international shipping
 
 Version 7.6.0 - 2025-04-28
 --------------------------
diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/carrier.py
--- a/modules/stock_package_shipping_dpd/carrier.py     Sat Feb 01 01:50:00 
2025 +0100
+++ b/modules/stock_package_shipping_dpd/carrier.py     Thu Feb 13 23:47:46 
2025 +0100
@@ -80,19 +80,19 @@
             ('E12', "DPD 12:00"),
             ('E18', "DPD 18:00"),
             ('IE2', "DPD EXPRESS"),
+            ('MAIL', "DPD International Mail"),
+            ('MAX', "DPD MAX"),
             ('PL', "DPD PARCEL Letter"),
-            ('PL+', "DPD PARCEL Letter Plus"),
-            ('MAIL', "DPD International Mail"),
+            ('PM4', "DPD Priority"),
             ], "Product", sort=False, translate=False,
         states={
             'required': Eval('shipping_service') == 'dpd',
             'invisible': Eval('shipping_service') != 'dpd',
             })
-    dpd_printer_language = fields.Selection([
+    dpd_output_format = fields.Selection([
             (None, ''),
             ('PDF', "PDF"),
-            ('ZPL', "ZPL"),
-            ], "Printer Language", sort=False, translate=False,
+            ], "Output Format", sort=False, translate=False,
         states={
             'required': Eval('shipping_service') == 'dpd',
             'invisible': Eval('shipping_service') != 'dpd',
@@ -125,6 +125,15 @@
         cls.shipping_service.selection.append(('dpd', 'DPD'))
 
     @classmethod
+    def __register__(cls, module):
+        table_h = cls.__table_handler__(module)
+
+        # Migration from 7.4: rename dpd_printer_language to dpd_output_format
+        table_h.column_rename('dpd_printer_language', 'dpd_output_format')
+
+        super().__register__(module)
+
+    @classmethod
     def view_attributes(cls):
         return super().view_attributes() + [
             ("/form/separator[@id='dpd']", 'states', {
diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/configuration.py
--- a/modules/stock_package_shipping_dpd/configuration.py       Sat Feb 01 
01:50:00 2025 +0100
+++ b/modules/stock_package_shipping_dpd/configuration.py       Thu Feb 13 
23:47:46 2025 +0100
@@ -13,7 +13,7 @@
     }
 
 LOGIN_SERVICE = 'LoginService/V2_0/?wsdl'
-SHIPMENT_SERVICE = 'ShipmentService/V3_2/?wsdl'
+SHIPMENT_SERVICE = 'ShipmentService/V4_4/?wsdl'
 
 
 def get_client(server, service):
diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/doc/index.rst
--- a/modules/stock_package_shipping_dpd/doc/index.rst  Sat Feb 01 01:50:00 
2025 +0100
+++ b/modules/stock_package_shipping_dpd/doc/index.rst  Thu Feb 13 23:47:46 
2025 +0100
@@ -6,7 +6,7 @@
 DPD has many different web services, the module supports:
 
 - `LoginService 2.0 
<https://esolutions.dpd.com/dokumente/LoginService_V2_0.pdf>`_
-- `ShipmentService 3.2 
<https://esolutions.dpd.com/dokumente/ShipmentService_V3_2.pdf>`_
+- `ShipmentService 4.4 
<https://esolutions.dpd.com/dokumente/ShipmentService_V4_4.pdf>`_
 
 Carrier Credential
 ******************
diff -r fbd60460e3bf -r 7e5d3e3bef70 modules/stock_package_shipping_dpd/stock.py
--- a/modules/stock_package_shipping_dpd/stock.py       Sat Feb 01 01:50:00 
2025 +0100
+++ b/modules/stock_package_shipping_dpd/stock.py       Thu Feb 13 23:47:46 
2025 +0100
@@ -161,7 +161,7 @@
                     message=message))
 
         labels = []
-        labels_pdf = BytesIO(shipment_response.parcellabelsPDF)
+        labels_pdf = BytesIO(shipment_response.output.content)
         reader = PdfReader(labels_pdf)
         for page in iter_pdf_pages(reader):
             new_pdf = PdfWriter()
@@ -198,8 +198,11 @@
 
     def get_print_options(self, shipment):
         return {
-            'printerLanguage': shipment.carrier.dpd_printer_language,
-            'paperFormat': shipment.carrier.dpd_paper_format,
+            'printOption': [{
+                    'outputFormat': shipment.carrier.dpd_output_format,
+                    'paperFormat': shipment.carrier.dpd_paper_format,
+                    },
+                ],
             }
 
     def shipping_party(self, party, address, usage=None):
@@ -210,21 +213,24 @@
             street = address.street_name or ''
             house_no = address.numbers
         shipping_party = {
-            'name1': address.party_full_name[:35],
+            'name1': address.party_full_name[:50],
             'name2': '',
-            'street': street[:35],
+            'street': street[:50],
             'houseNo': house_no[:8],
             'country': address.country.code if address.country else '',
             'zipCode': address.postal_code[:9],
-            'city': address.city[:35],
+            'city': address.city[:50],
             'contact': party.full_name[:35],
             }
 
         phone = address.contact_mechanism_get({'phone', 'mobile'}, usage=usage)
         if phone and len(phone.value) <= 30:
             shipping_party['phone'] = phone.value
+        mobile = address.contact_mechanism_get('mobile', usage=usage)
+        if mobile and len(mobile.value) <= 30:
+            shipping_party['mobile'] = mobile.value
         email = address.contact_mechanism_get('email', usage=usage)
-        if email and len(email.value) <= 50:
+        if email and 5 <= len(email.value) <= 100:
             shipping_party['email'] = email.value
 
         return shipping_party
@@ -256,7 +262,7 @@
                     package.width_uom, package.width, cm, round=False))
             height = ceil(UoM.compute_qty(
                     package.height_uom, package.height, cm, round=False))
-            if length < 1000 and width < 1000 and height < 1000:
+            if 1 <= length < 1000 and 1 <= width < 1000 and 1 <= height < 1000:
                 parcel['volume'] = int(
                     '%03i%03i%03i' % (length, width, height))
 
diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/tests/scenario_shipping_dpd.rst
--- a/modules/stock_package_shipping_dpd/tests/scenario_shipping_dpd.rst        
Sat Feb 01 01:50:00 2025 +0100
+++ b/modules/stock_package_shipping_dpd/tests/scenario_shipping_dpd.rst        
Thu Feb 13 23:47:46 2025 +0100
@@ -170,7 +170,7 @@
     >>> carrier.carrier_product = carrier_product
     >>> carrier.shipping_service = 'dpd'
     >>> carrier.dpd_product = 'CL'
-    >>> carrier.dpd_printer_language = 'PDF'
+    >>> carrier.dpd_output_format = 'PDF'
     >>> carrier.dpd_paper_format = 'A6'
     >>> carrier.dpd_notification = 'sms'
     >>> carrier.save()
diff -r fbd60460e3bf -r 7e5d3e3bef70 
modules/stock_package_shipping_dpd/view/carrier_form.xml
--- a/modules/stock_package_shipping_dpd/view/carrier_form.xml  Sat Feb 01 
01:50:00 2025 +0100
+++ b/modules/stock_package_shipping_dpd/view/carrier_form.xml  Thu Feb 13 
23:47:46 2025 +0100
@@ -9,8 +9,8 @@
         <label name="dpd_notification"/>
         <field name="dpd_notification"/>
 
-        <label name="dpd_printer_language"/>
-        <field name="dpd_printer_language"/>
+        <label name="dpd_output_format"/>
+        <field name="dpd_output_format"/>
         <label name="dpd_paper_format"/>
         <field name="dpd_paper_format"/>
     </xpath>

Reply via email to