[IMP] stock_delivery_planner: wrap rate collection to provide better error

This commit is contained in:
Jared Kipe
2022-01-19 10:28:08 -08:00
parent 68c923cbf0
commit 7446d982b9

View File

@@ -1,7 +1,7 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.tools import safe_eval
from odoo.exceptions import UserError, ValidationError
import logging
_logger = logging.getLogger(__name__)
@@ -37,22 +37,25 @@ class StockDeliveryPlanner(models.TransientModel):
pass
for carrier in base_carriers:
rates = carrier.rate_shipment_multi(picking=planner.picking_id)
for rate in filter(lambda r: not r.get('success'), rates):
_logger.warning(rate.get('error_message'))
for rate in filter(lambda r: r.get('success'), rates):
rate = self.calculate_delivery_window(rate)
# added late in API dev cycle
package = rate.get('package') or self.env['stock.quant.package'].browse()
planner.plan_option_ids |= planner.plan_option_ids.create({
'plan_id': self.id,
'carrier_id': rate['carrier'].id,
'package_id': package.id,
'price': rate['price'],
'date_planned': rate['date_planned'],
'requested_date': rate['date_delivered'],
'transit_days': rate['transit_days'],
})
try:
rates = carrier.rate_shipment_multi(picking=planner.picking_id)
for rate in filter(lambda r: not r.get('success'), rates):
_logger.warning(rate.get('error_message'))
for rate in filter(lambda r: r.get('success'), rates):
rate = self.calculate_delivery_window(rate)
# added late in API dev cycle
package = rate.get('package') or self.env['stock.quant.package'].browse()
planner.plan_option_ids |= planner.plan_option_ids.create({
'plan_id': self.id,
'carrier_id': rate['carrier'].id,
'package_id': package.id,
'price': rate['price'],
'date_planned': rate['date_planned'],
'requested_date': rate.get('date_delivered', False),
'transit_days': rate.get('transit_days', 0),
})
except (UserError, ValidationError) as e:
_logger.warning('Exception during delivery planning. %s' % str(e))
return planner
@api.model