From 6892cc832233b956d69f01bd6be8acfdc4693bfc Mon Sep 17 00:00:00 2001 From: Arnold Moyaux Date: Mon, 14 May 2018 17:56:21 +0200 Subject: [PATCH] [IMP] delivery: handle multiple trackers Easypost return multiple tracker links for a single picking. Currently it returns one link per package. *_get_tracking_link instead of returning a simple string, it could return a list of list with data [[tracker number, tracker_puclic_url], ...] stored as a json dump. This commit add a check on carrier_tracking_url in order to check if it has a json format. In this case it will log a note and will not use the url action. --- addons/delivery/models/stock_picking.py | 28 +++++++++++++++++++------ addons/delivery/views/delivery_view.xml | 26 +++++++++++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py index 908b7587c51..2928a4d9c00 100644 --- a/addons/delivery/models/stock_picking.py +++ b/addons/delivery/models/stock_picking.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +import json + from odoo import models, fields, api, _ from odoo.exceptions import UserError @@ -181,12 +183,26 @@ class StockPicking(models.Model): if not self.carrier_tracking_url: raise UserError(_("Your delivery method has no redirect on courier provider's website to track this order.")) - client_action = {'type': 'ir.actions.act_url', - 'name': "Shipment Tracking Page", - 'target': 'new', - 'url': self.carrier_tracking_url, - } - return client_action + carrier_trackers = [] + try: + carrier_trackers = json.loads(self.carrier_tracking_url) + except ValueError: + carrier_trackers = self.carrier_tracking_url + + if len(carrier_trackers) > 1: + msg = "Tracking links for shipment:
" + for tracker in carrier_trackers: + msg += '' + tracker[0] + '
' + self.message_post(body=msg) + return self.env.ref('delivery.act_delivery_trackers_url').read()[0] + else: + client_action = { + 'type': 'ir.actions.act_url', + 'name': "Shipment Tracking Page", + 'target': 'new', + 'url': self.carrier_tracking_url, + } + return client_action @api.one def cancel_shipment(self): diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml index f0c867bce0f..02af51b57b1 100644 --- a/addons/delivery/views/delivery_view.xml +++ b/addons/delivery/views/delivery_view.xml @@ -298,4 +298,30 @@ + + delivery.carrier.warning.url.form + stock.picking + +
+ +
+

You have multiple URL, they should be available in the chatter.

+
+
+
+
+
+
+
+ + + Display tracking links + ir.actions.act_window + stock.picking + form + + form + new +