From 98072fa40512dca76b2c2ecc9c2ec5124374dab6 Mon Sep 17 00:00:00 2001 From: Cedric Collins Date: Wed, 8 Sep 2021 11:40:45 -0500 Subject: [PATCH 1/2] [IMP] delivery_hibou: new api for external providers --- delivery_hibou/models/delivery.py | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/delivery_hibou/models/delivery.py b/delivery_hibou/models/delivery.py index 03c30aea..89515975 100644 --- a/delivery_hibou/models/delivery.py +++ b/delivery_hibou/models/delivery.py @@ -157,3 +157,45 @@ class DeliveryCarrier(models.Model): def _get_recipient_out(self, picking): return picking.partner_id + + # -------------------------- # + # API for external providers # + # -------------------------- # + def rate_shipment_multi(self, order=None, picking=None): + ''' Compute the price of the order shipment + + :param order: record of sale.order or None + :param picking: record of stock.picking or None + :return list: dict: { + 'carrier': delivery.carrier(), + 'success': boolean, + 'price': a float, + 'error_message': a string containing an error message, + 'warning_message': a string containing a warning message, + 'date_planned': a datetime for when the shipment is supposed to leave, + 'requested_date': a datetime for when the shipment is supposed to arrive, + 'transit_days': a Float for how many days it takes in transit, + 'service_code': a string that represents the service level/agreement, + } + + e.g. self == delivery.carrier(5, 6) + then return might be: + [ + {'carrier': delivery.carrier(5), 'price': 10.50, 'service_code': 'GROUND_HOME_DELIVERY', ...}, + {'carrier': delivery.carrier(7), 'price': 12.99, 'service_code': 'FEDEX_EXPRESS_SAVER', ...}, # NEW! + {'carrier': delivery.carrier(6), 'price': 8.0, 'service_code': 'USPS_PRI', ...}, + ] + ''' + self.ensure_one() + + if picking: + self = self.with_context(date_planned=fields.Datetime.now()) + else: + self = self.with_context(date_planned=(order.date_planned or fields.Datetime.now())) + + res = [] + for carrier in self: + if hasattr(carrier, '%s_rate_shipment_multi' % self.delivery_type): + carrier_rates = getattr(carrier, '%s_rate_shipment_multi' % carrier.delivery_type)(order=order, picking=picking) + res += carrier_rates + return res From fb29afc11dd73ffdf4bfeacb12fa056ea0815915 Mon Sep 17 00:00:00 2001 From: Cedric Collins Date: Wed, 8 Sep 2021 11:43:40 -0500 Subject: [PATCH 2/2] [IMP] delivery_hibou: change expected parameter name --- delivery_hibou/models/delivery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/delivery_hibou/models/delivery.py b/delivery_hibou/models/delivery.py index 89515975..4b478dd8 100644 --- a/delivery_hibou/models/delivery.py +++ b/delivery_hibou/models/delivery.py @@ -173,7 +173,7 @@ class DeliveryCarrier(models.Model): 'error_message': a string containing an error message, 'warning_message': a string containing a warning message, 'date_planned': a datetime for when the shipment is supposed to leave, - 'requested_date': a datetime for when the shipment is supposed to arrive, + 'date_delivered': a datetime for when the shipment is supposed to arrive, 'transit_days': a Float for how many days it takes in transit, 'service_code': a string that represents the service level/agreement, }