From f830f14d987b88e3dbcf680c3b15583ac27105ef Mon Sep 17 00:00:00 2001 From: Richard Mathot Date: Thu, 20 Jul 2017 11:44:14 +0200 Subject: [PATCH] [FIX] website_sale_delivery: carrier selection is now working and faster Since f963500a9fed7a1c983940e35582cb2a907488f9, users of the ecommerce were able to select carriers even if they actually were not shipping to their address. Also, using an integrated carrier (eg: Fedex) caused a crash at the payment page. With this commit, delivery price is now computed only on the payment page and when selected. Editing the cart after selecting a delivery method will now be much faster, since delivery prices are not recomputed anywhere else than on the payment page (we also fix minor CSS and JS issues) --- addons/website_sale/views/templates.xml | 2 +- addons/website_sale_delivery/controllers/main.py | 8 +++++++- addons/website_sale_delivery/models/sale_order.py | 10 +++------- .../static/src/js/website_sale_delivery.js | 3 ++- .../views/website_sale_delivery_templates.xml | 10 ++-------- 5 files changed, 15 insertions(+), 18 deletions(-) diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 18f3bd4957f..806b215ed02 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1257,7 +1257,7 @@
-
+

diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py index cbb456d7968..e9403cb26bb 100644 --- a/addons/website_sale_delivery/controllers/main.py +++ b/addons/website_sale_delivery/controllers/main.py @@ -44,8 +44,14 @@ class WebsiteSaleDelivery(WebsiteSale): has_stockable_products = any(line.product_id.type in ['consu', 'product'] for line in order.order_line) if has_stockable_products: + if order.carrier_id and not order.delivery_rating_success: + values['errors'].append( + (_("Ouch, you cannot choose this carrier!"), + _("%s does not ship to your address, please choose another one.") % order.carrier_id.name)) + order._remove_delivery_line() + delivery_carriers = order._get_delivery_methods() - values['deliveries'] = delivery_carriers.sudo().with_context(order_id=order.id) + values['deliveries'] = delivery_carriers.sudo() values['delivery_action_id'] = request.env.ref('delivery.action_delivery_carrier_form').id return values diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index 996ae6eaf89..036d2a13a4f 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -2,8 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import logging -from odoo import api, fields, models, _ -from odoo.exceptions import ValidationError +from odoo import api, fields, models _logger = logging.getLogger(__name__) @@ -61,7 +60,8 @@ class SaleOrder(models.Model): self.write({'carrier_id': carrier.id}) if carrier: self.get_delivery_price() - self.set_delivery_line() + if self.delivery_rating_success: + self.set_delivery_line() else: self._remove_delivery_line() @@ -85,8 +85,4 @@ class SaleOrder(models.Model): values = super(SaleOrder, self)._cart_update(product_id, line_id, add_qty, set_qty, **kwargs) - if add_qty or set_qty is not None: - for sale_order in self: - self._check_carrier_quotation() - return values diff --git a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js index 46caab18e0e..ff48ebd9dfd 100644 --- a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js +++ b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js @@ -1,3 +1,4 @@ +'use strict'; $(document).ready(function () { // When choosing an delivery carrier, update the quotation and the acquirers @@ -11,7 +12,7 @@ $(document).ready(function () { var value = $(this).val(); var $provider_free = $("select[name='country_id']:not(.o_provider_restricted), select[name='state_id']:not(.o_provider_restricted)"); var $provider_restricted = $("select[name='country_id'].o_provider_restricted, select[name='state_id'].o_provider_restricted"); - if (value == 0) { + if (value === 0) { // Ship to the same address : only show shipping countries available for billing $provider_free.hide().attr('disabled', true); $provider_restricted.show().attr('disabled', false).change(); diff --git a/addons/website_sale_delivery/views/website_sale_delivery_templates.xml b/addons/website_sale_delivery/views/website_sale_delivery_templates.xml index e7989274a34..6b4d5ef79be 100644 --- a/addons/website_sale_delivery/views/website_sale_delivery_templates.xml +++ b/addons/website_sale_delivery/views/website_sale_delivery_templates.xml @@ -25,20 +25,14 @@
-

Choose a delivery method

+

Choose a delivery method