diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 0b1cd5d40fc..1d8287dada1 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -128,6 +128,17 @@ class DeliveryCarrier(models.Model):

'''), } + def _is_available_for_order(self, order): + self.ensure_one() + order.ensure_one() + if not self._match_address(order.partner_shipping_id): + return False + + if self.delivery_type == 'base_on_rule': + return self.rate_shipment(order).get('success') + + return True + def available_carriers(self, partner): return self.filtered(lambda c: c._match_address(partner)) diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 5fe71fb6ef3..6d510448df3 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -628,16 +628,10 @@ class SaleOrder(models.Model): return bool(carrier) def _get_delivery_methods(self): - def _is_carrier_available(carrier): - # Drop carriers where price computation fails (no price rule available/matching request) - res = carrier.rate_shipment(self) - return res['success'] # searching on website_published will also search for available website (_search method on computed field) return self.env['delivery.carrier'].sudo().search([ ('website_published', '=', True), - ]).available_carriers( - self.partner_shipping_id - ).filtered(_is_carrier_available) + ]).filtered(lambda carrier: carrier._is_available_for_order(self)) #=== TOOLING ===#