[FIX] website_sale_aplicoop: wire home delivery preference through all save flows

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 <noreply@anthropic.com>
This commit is contained in:
GitHub Copilot 2026-05-20 17:57:07 +02:00
parent a1899483c5
commit 27097004fb
2 changed files with 61 additions and 2 deletions

View file

@ -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");

View file

@ -503,16 +503,17 @@
</t>
</div>
<div class="oe_structure oe_empty mb-4" data-name="After Summary" />
<t t-if="group_order.home_delivery">
<div class="card border-0 shadow-sm mb-4">
<div class="card-body">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="home-delivery-checkbox" name="home_delivery" />
<input type="checkbox" class="form-check-input" id="home-delivery-checkbox" name="home_delivery" checked="checked" />
<label class="form-check-label fw-bold" for="home-delivery-checkbox">Home Delivery</label>
</div>
<div id="delivery-info-alert" class="alert alert-info mt-3 d-none">
<p class="mb-2">
<i class="fa fa-truck" aria-hidden="true" t-translation="off" />
<t t-if="group_order.delivery_date and group_order.home_delivery">
<t t-if="group_order.delivery_date">
<strong>Delivery Information:</strong> Your order will be delivered at
<t t-esc="day_names[(int(group_order.pickup_day) + 1) % 7]" />
<t t-esc="group_order.delivery_date.strftime('%d/%m/%Y')" />
@ -525,6 +526,7 @@
</div>
</div>
</div>
</t>
<div class="checkout-actions d-grid gap-3" id="checkout-form-labels">
<button class="btn btn-success btn-lg" id="confirm-order-btn" t-attf-data-order-id="{{ group_order.id }}" t-att-data-confirmed-label="labels.get('order_saved_as_draft', 'Order saved as draft')" t-att-data-pickup-label="labels.get('pickup_day_label', 'Pickup Day')" t-att-aria-label="labels.get('save_order_as_draft', 'Save order as draft')" t-att-data-bs-title="labels.get('save_draft', 'Save Draft')" data-bs-toggle="tooltip">
<i class="fa fa-save" aria-hidden="true" t-translation="off" />