Aplicoop desde el repo de kidekoop

This commit is contained in:
snt 2026-02-11 15:32:11 +01:00
parent 69917d1ec2
commit 7cff89e418
93 changed files with 313992 additions and 0 deletions

View file

@ -0,0 +1,207 @@
/**
* Home Delivery Checkout Handler
* Manages home delivery checkbox and product addition/removal
*/
(function() {
'use strict';
var HomeDeliveryManager = {
deliveryProductId: null,
deliveryProductPrice: 5.74,
deliveryProductName: 'Home Delivery', // Default fallback
orderId: null,
homeDeliveryEnabled: false,
init: function() {
// Get delivery product info from data attributes
var checkoutPage = document.querySelector('.eskaera-checkout-page');
if (checkoutPage) {
this.deliveryProductId = checkoutPage.getAttribute('data-delivery-product-id');
console.log('[HomeDelivery] deliveryProductId from attribute:', this.deliveryProductId, 'type:', typeof this.deliveryProductId);
var price = checkoutPage.getAttribute('data-delivery-product-price');
if (price) {
this.deliveryProductPrice = parseFloat(price);
}
// Get translated product name from data attribute (auto-translated by Odoo server)
var productName = checkoutPage.getAttribute('data-delivery-product-name');
if (productName) {
this.deliveryProductName = productName;
console.log('[HomeDelivery] Using translated product name from server:', this.deliveryProductName);
}
// Check if home delivery is enabled for this order
var homeDeliveryAttr = checkoutPage.getAttribute('data-home-delivery-enabled');
this.homeDeliveryEnabled = homeDeliveryAttr === 'true' || homeDeliveryAttr === 'True';
console.log('[HomeDelivery] Home delivery enabled:', this.homeDeliveryEnabled);
// Show/hide home delivery section based on configuration
this.toggleHomeDeliverySection();
}
// Get order ID from confirm button
var confirmBtn = document.getElementById('confirm-order-btn');
if (confirmBtn) {
this.orderId = confirmBtn.getAttribute('data-order-id');
console.log('[HomeDelivery] orderId from button:', this.orderId);
}
var checkbox = document.getElementById('home-delivery-checkbox');
if (!checkbox) return;
var self = this;
checkbox.addEventListener('change', function() {
if (this.checked) {
self.addDeliveryProduct();
self.showDeliveryInfo();
} else {
self.removeDeliveryProduct();
self.hideDeliveryInfo();
}
});
// Check if delivery product is already in cart on page load
this.checkDeliveryInCart();
},
toggleHomeDeliverySection: function() {
var homeDeliverySection = document.querySelector('[id*="home-delivery"], [class*="home-delivery"]');
var checkbox = document.getElementById('home-delivery-checkbox');
var homeDeliveryContainer = document.getElementById('home-delivery-container');
if (this.homeDeliveryEnabled) {
// Show home delivery option
if (checkbox) {
checkbox.closest('.form-check').style.display = 'block';
}
if (homeDeliveryContainer) {
homeDeliveryContainer.style.display = 'block';
}
console.log('[HomeDelivery] Home delivery option shown');
} else {
// Hide home delivery option and delivery info alert
if (checkbox) {
checkbox.closest('.form-check').style.display = 'none';
checkbox.checked = false;
}
if (homeDeliveryContainer) {
homeDeliveryContainer.style.display = 'none';
}
// Also hide the delivery info alert when home delivery is disabled
this.hideDeliveryInfo();
this.removeDeliveryProduct();
console.log('[HomeDelivery] Home delivery option and delivery info hidden');
}
},
checkDeliveryInCart: function() {
if (!this.deliveryProductId) return;
var cart = this.getCart();
if (cart[this.deliveryProductId]) {
var checkbox = document.getElementById('home-delivery-checkbox');
if (checkbox) {
checkbox.checked = true;
this.showDeliveryInfo();
}
}
},
getCart: function() {
if (!this.orderId) return {};
var cartKey = 'eskaera_' + this.orderId + '_cart';
var cartStr = localStorage.getItem(cartKey);
return cartStr ? JSON.parse(cartStr) : {};
},
saveCart: function(cart) {
if (!this.orderId) return;
var cartKey = 'eskaera_' + this.orderId + '_cart';
localStorage.setItem(cartKey, JSON.stringify(cart));
// Re-render checkout summary without reloading
var self = this;
setTimeout(function() {
// Use the global function from checkout_labels.js
if (typeof window.renderCheckoutSummary === 'function') {
window.renderCheckoutSummary();
}
}, 50);
},
renderCheckoutSummary: function() {
// Stub - now handled by global window.renderCheckoutSummary
},
addDeliveryProduct: function() {
if (!this.deliveryProductId) {
console.warn('[HomeDelivery] Delivery product ID not found');
return;
}
console.log('[HomeDelivery] Adding delivery product - deliveryProductId:', this.deliveryProductId, 'orderId:', this.orderId);
var cart = this.getCart();
console.log('[HomeDelivery] Current cart before adding:', cart);
cart[this.deliveryProductId] = {
id: this.deliveryProductId,
name: this.deliveryProductName,
price: this.deliveryProductPrice,
qty: 1
};
console.log('[HomeDelivery] Cart after adding delivery:', cart);
this.saveCart(cart);
console.log('[HomeDelivery] Delivery product added to localStorage');
},
removeDeliveryProduct: function() {
if (!this.deliveryProductId) {
console.warn('[HomeDelivery] Delivery product ID not found');
return;
}
console.log('[HomeDelivery] Removing delivery product - deliveryProductId:', this.deliveryProductId, 'orderId:', this.orderId);
var cart = this.getCart();
console.log('[HomeDelivery] Current cart before removing:', cart);
if (cart[this.deliveryProductId]) {
delete cart[this.deliveryProductId];
console.log('[HomeDelivery] Cart after removing delivery:', cart);
}
this.saveCart(cart);
console.log('[HomeDelivery] Delivery product removed from localStorage');
},
showDeliveryInfo: function() {
var alert = document.getElementById('delivery-info-alert');
if (alert) {
console.log('[HomeDelivery] Showing delivery info alert');
alert.classList.remove('d-none');
alert.style.display = 'block';
}
},
hideDeliveryInfo: function() {
var alert = document.getElementById('delivery-info-alert');
if (alert) {
console.log('[HomeDelivery] Hiding delivery info alert');
alert.classList.add('d-none');
alert.style.display = 'none';
}
}
};
// Initialize on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
HomeDeliveryManager.init();
});
} else {
HomeDeliveryManager.init();
}
// Export to global scope
window.HomeDeliveryManager = HomeDeliveryManager;
})();