diff --git a/addons/website_sale/controllers/delivery.py b/addons/website_sale/controllers/delivery.py index 2ab0c5090cd..5d0221b9c72 100644 --- a/addons/website_sale/controllers/delivery.py +++ b/addons/website_sale/controllers/delivery.py @@ -15,7 +15,8 @@ class WebsiteSaleDelivery(WebsiteSale): @http.route(['/shop/update_carrier'], type='json', auth='public', methods=['POST'], website=True) def update_eshop_carrier(self, **post): order = request.website.sale_get_order() - order.access_point_address = {} + if not post.get('no_reset_access_point_address'): + order.access_point_address = {} carrier_id = int(post['carrier_id']) if order and carrier_id != order.carrier_id.id: if any(tx.sudo().state not in ('cancel', 'error', 'draft') for tx in order.transaction_ids): diff --git a/addons/website_sale/static/src/js/website_sale_delivery.js b/addons/website_sale/static/src/js/website_sale_delivery.js index 29f9b2c96d4..e16c429ded1 100644 --- a/addons/website_sale/static/src/js/website_sale_delivery.js +++ b/addons/website_sale/static/src/js/website_sale_delivery.js @@ -22,13 +22,13 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ * @override */ start: async function () { - const carriers = Array.from(document.querySelectorAll('input[name="delivery_type"]')); + this.carriers = Array.from(document.querySelectorAll('input[name="delivery_type"]')); this.dp = new concurrency.DropPrevious(); // Workaround to: // - update the amount/error on the label at first rendering // - prevent clicking on 'Pay Now' if the shipper rating fails - if (carriers.length > 0) { - const carrierChecked = carriers.filter(e =>e.checked) + if (this.carriers.length > 0) { + const carrierChecked = this.carriers.filter(e =>e.checked) if (carrierChecked.length === 0) { const payButton = document.querySelector('button[name="o_payment_submit_button"]'); payButton? payButton.disabled = true : null; @@ -38,7 +38,7 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ } await this._getCurrentLocation(); - await carriers.forEach(async (carrierInput) => { + await this.carriers.forEach(async (carrierInput) => { this._showLoading((carrierInput)); await this._handleCarrierUpdateResult(carrierInput) }); @@ -92,7 +92,7 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ } const currentCarrierChecked = docCarrier.closest("li").getElementsByTagName("input")[0].checked; const span = document.createElement("em"); - if (!currentCarrierChecked) { + if (!currentCarrierChecked || this.carriers.length == 1) { span.textContent = "select to see available Pick-Up Locations"; span.classList.add("text-muted"); } @@ -389,6 +389,7 @@ publicWidget.registry.websiteSaleDelivery = publicWidget.Widget.extend({ route: '/shop/update_carrier', params: { 'carrier_id': carrierId, + 'no_reset_access_point_address': true, }, }) this._setIsPayable(result.status)