diff --git a/stock_delivery_planner/wizard/stock_delivery_planner.py b/stock_delivery_planner/wizard/stock_delivery_planner.py index 0de30215..b3f0319f 100644 --- a/stock_delivery_planner/wizard/stock_delivery_planner.py +++ b/stock_delivery_planner/wizard/stock_delivery_planner.py @@ -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