From 27097004fb103bf666aebdc164635e4f0e3cea1d Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Wed, 20 May 2026 17:57:07 +0200 Subject: [PATCH] [FIX] website_sale_aplicoop: wire home delivery preference through all save flows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three bugs prevented home_delivery from reaching sale.order: 1. #home-delivery-btn (shop sidebar) had no JS handler — clicking it did nothing. Now it toggles active state and persists choice to sessionStorage. 2. _executeSaveCartAsDraft (Save Cart button) never included is_delivery in the request body. Now reads the toggle button state (or the page-level data-home-delivery-enabled fallback) and sends is_delivery correctly. 3. #home-delivery-checkbox on checkout page was unchecked by default and always shown. Now it is pre-checked when group_order.home_delivery is True, wrapped in t-if to hide it when delivery is not configured, and synced bidirectionally with sessionStorage so the shop-page toggle state carries over to checkout. Co-Authored-By: Claude Sonnet 4.6 --- .../static/src/js/website_sale.js | 57 +++++++++++++++++++ .../views/website_templates.xml | 6 +- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/website_sale_aplicoop/static/src/js/website_sale.js b/website_sale_aplicoop/static/src/js/website_sale.js index ad4a311..5326427 100644 --- a/website_sale_aplicoop/static/src/js/website_sale.js +++ b/website_sale_aplicoop/static/src/js/website_sale.js @@ -806,6 +806,30 @@ }); } + // On checkout page: apply sessionStorage delivery preference to checkbox. + // The shop-page toggle may have stored a "false" preference even though + // the checkbox is checked by default in the template. + var checkoutCheckbox = document.getElementById("home-delivery-checkbox"); + if (checkoutCheckbox) { + var storedDeliveryPref = sessionStorage.getItem( + "eskaera_is_delivery_" + self.orderId + ); + if (storedDeliveryPref !== null) { + checkoutCheckbox.checked = storedDeliveryPref === "true"; + console.log( + "[CHECKOUT] Restored delivery checkbox from sessionStorage:", + checkoutCheckbox.checked + ); + } + // Sync sessionStorage when user manually changes the checkbox + checkoutCheckbox.addEventListener("change", function () { + sessionStorage.setItem( + "eskaera_is_delivery_" + self.orderId, + this.checked ? "true" : "false" + ); + }); + } + // Button to reload from draft (in My Cart header - cart pages) var reloadCartBtn = document.getElementById("reload-cart-btn"); console.log("[_attachEventListeners] reload-cart-btn found:", !!reloadCartBtn); @@ -830,6 +854,28 @@ }); } + // Home-delivery toggle button (shop sidebar) + var homeDeliveryBtn = document.getElementById("home-delivery-btn"); + if (homeDeliveryBtn) { + // Restore persisted preference on page load + var storedDelivery = sessionStorage.getItem( + "eskaera_is_delivery_" + self.orderId + ); + if (storedDelivery === "true") { + homeDeliveryBtn.classList.add("active"); + } + homeDeliveryBtn.addEventListener("click", function (e) { + e.preventDefault(); + var isNowActive = !homeDeliveryBtn.classList.contains("active"); + homeDeliveryBtn.classList.toggle("active", isNowActive); + sessionStorage.setItem( + "eskaera_is_delivery_" + self.orderId, + isNowActive ? "true" : "false" + ); + console.log("[HOME_DELIVERY_BTN] toggled to:", isNowActive); + }); + } + // Buttons to clear cart (header + footer) var clearCartBtns = [ document.getElementById("clear-cart-btn"), @@ -1553,6 +1599,17 @@ merge_action: "replace", }; + // Include delivery preference: read from toggle button state, + // falling back to the page-level home-delivery-enabled attribute. + var deliveryBtn = document.getElementById("home-delivery-btn"); + if (deliveryBtn) { + orderData.is_delivery = deliveryBtn.classList.contains("active"); + } else { + var wrap = document.getElementById("wrap"); + var enabledAttr = wrap && wrap.getAttribute("data-home-delivery-enabled"); + orderData.is_delivery = enabledAttr === "true"; + } + var xhr = new XMLHttpRequest(); xhr.open("POST", "/eskaera/save-order", true); xhr.setRequestHeader("Content-Type", "application/json"); diff --git a/website_sale_aplicoop/views/website_templates.xml b/website_sale_aplicoop/views/website_templates.xml index f34a93a..e393ed0 100644 --- a/website_sale_aplicoop/views/website_templates.xml +++ b/website_sale_aplicoop/views/website_templates.xml @@ -503,16 +503,17 @@
+
- +