changeset c86889cf1cc5 in modules/stock_package_shipping_dpd:default
details: 
https://hg.tryton.org/modules/stock_package_shipping_dpd?cmd=changeset;node=c86889cf1cc5
description:
        Add tracking URL

        issue10136
        review341531002
diffstat:

 __init__.py                     |   1 +
 stock.py                        |  38 ++++++++++++++++++++++++++++++++++++++
 tests/scenario_shipping_dpd.rst |   4 ++++
 3 files changed, 43 insertions(+), 0 deletions(-)

diffs (70 lines):

diff -r 8806c086675f -r c86889cf1cc5 __init__.py
--- a/__init__.py       Sun Mar 07 10:04:08 2021 +0100
+++ b/__init__.py       Sat Mar 13 23:16:32 2021 +0100
@@ -11,6 +11,7 @@
     Pool.register(
         carrier.CredentialDPD,
         carrier.Carrier,
+        stock.Package,
         stock.ShipmentOut,
         stock.ShipmentInReturn,
         module='stock_package_shipping_dpd', type_='model')
diff -r 8806c086675f -r c86889cf1cc5 stock.py
--- a/stock.py  Sun Mar 07 10:04:08 2021 +0100
+++ b/stock.py  Sat Mar 13 23:16:32 2021 +0100
@@ -22,6 +22,44 @@
 from .configuration import get_client, SHIPMENT_SERVICE
 from .exceptions import DPDError
 
+TRACKING_URL = 'https://tracking.dpd.de/status/%(code)s/parcel/%(reference)s'
+
+
+class Package(metaclass=PoolMeta):
+    __name__ = 'stock.package'
+
+    def get_shipping_tracking_url(self, name):
+        pool = Pool()
+        ShipmentOut = pool.get('stock.shipment.out')
+        ShipmentInReturn = pool.get('stock.shipment.in.return')
+        url = super().get_shipping_tracking_url(name)
+        if (self.shipping_reference
+                and self.shipment
+                and self.shipment.id >= 0
+                and self.shipment.carrier
+                and self.shipment.carrier.shipping_service == 'dpd'):
+            party = address = None
+            if isinstance(self.shipment, ShipmentOut):
+                party = self.shipment.customer
+                address = self.shipment.delivery_address
+            elif isinstance(self.shipment, ShipmentInReturn):
+                party = self.shipment.supplier
+                address = self.shipment.delivery_address
+            if party and party.lang:
+                lang_code = party.lang.code
+            else:
+                lang_code = Transaction().language
+            if address and address.country:
+                code = '_'.join(
+                    (lang_code.split('_')[0], address.country.code))
+            else:
+                code = lang_code
+            url = TRACKING_URL % {
+                'code': code,
+                'reference': self.shipping_reference,
+                }
+        return url
+
 
 class ShippingDPDMixin:
 
diff -r 8806c086675f -r c86889cf1cc5 tests/scenario_shipping_dpd.rst
--- a/tests/scenario_shipping_dpd.rst   Sun Mar 07 10:04:08 2021 +0100
+++ b/tests/scenario_shipping_dpd.rst   Sat Mar 13 23:16:32 2021 +0100
@@ -222,3 +222,7 @@
     True
     >>> pack.shipping_reference is not None
     True
+    >>> 
pack.shipping_tracking_url.startswith('https://tracking.dpd.de/status/')
+    True
+    >>> pack.shipping_tracking_url.endswith(pack.shipping_reference)
+    True

Reply via email to