[FIX] delivery,website_sale: do not make api request on page rendering
Following a fix in 16.3 with 5052b9e4a15155c694cf005fdf330997770c6cac, backported in 16.0+ with commit d28a8f67da06e58358b40636d1dca1f91a84e1ad, the rates for the different carriers were computed on page loading, to make sure unavailable carriers were hidden. Nevertheless, this leads to significant increases of /shop/payment page loading time depending on the enabled carriers. This commit restricts the previous fix to the targeted type of carriers, aka `base_on_rule` ones, whose rates do not depend on third party API requests. closes odoo/odoo#149657 X-original-commit: 99c8bda43f6f3bb027f8e03a753aaf2bb7ac585f Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
@@ -128,6 +128,17 @@ class DeliveryCarrier(models.Model):
|
||||
</p>'''),
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
|
||||
@@ -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 ===#
|
||||
|
||||
|
||||
Reference in New Issue
Block a user