diff --git a/website_sale_aplicoop/controllers/website_sale.py b/website_sale_aplicoop/controllers/website_sale.py
index e3fac6b..3d7a051 100644
--- a/website_sale_aplicoop/controllers/website_sale.py
+++ b/website_sale_aplicoop/controllers/website_sale.py
@@ -260,6 +260,7 @@ class AplicoopWebsiteSale(WebsiteSale):
# ============ MISC ============
"items": env_lang._("items"),
"added_to_cart": env_lang._("added to cart"),
+ "out_of_stock": env_lang._("Out of stock"),
}
return labels
diff --git a/website_sale_aplicoop/static/src/js/website_sale.js b/website_sale_aplicoop/static/src/js/website_sale.js
index 0acea67..9ccd9f7 100644
--- a/website_sale_aplicoop/static/src/js/website_sale.js
+++ b/website_sale_aplicoop/static/src/js/website_sale.js
@@ -792,6 +792,19 @@
var quantityInput = form.querySelector(".product-qty");
var quantity = quantityInput ? parseFloat(quantityInput.value) : 1;
+ // Block add-to-cart if product is flagged out of stock (from template)
+ var isOutOfStock =
+ (form.getAttribute("data-out-of-stock") || "false") === "true" ||
+ (cartBtn.getAttribute("data-out-of-stock") || "false") === "true";
+ if (isOutOfStock) {
+ var labels = self._getLabels();
+ self._showNotification(
+ labels.out_of_stock || "Product is out of stock",
+ "warning"
+ );
+ return;
+ }
+
console.log("Adding:", {
productId: productId,
productName: productName,
diff --git a/website_sale_aplicoop/views/website_templates.xml b/website_sale_aplicoop/views/website_templates.xml
index 9b3bd20..c5cdb78 100644
--- a/website_sale_aplicoop/views/website_templates.xml
+++ b/website_sale_aplicoop/views/website_templates.xml
@@ -666,7 +666,16 @@