// ========================================================
// RECONSTRUCCIÓN BLINDADA DE BOTONES Y SELECTOR MAYORISTA
// ========================================================
(function() {
function forzarEstructuraMayorista() {
// Buscamos todas las tarjetas de producto en el Home (snippets/carruseles)
const tarjetas = document.querySelectorAll('.o_carousel_product_card, .oe_product_cart');
tarjetas.forEach(function(tarjeta) {
// Si ya le inyectamos nuestro contenedor, la salteamos para no duplicar
if (tarjeta.querySelector('.coti-mayorista-wrapper')) return;
// Buscamos la sección de información o el título para colgarnos de ahí
const infoText = tarjeta.querySelector('.o_wsale_product_information_text') || tarjeta.querySelector('.o_wsale_product_information');
if (infoText) {
// Creamos un contenedor limpio para nuestra lógica
const wrapper = document.createElement('div');
wrapper.className = 'coti-mayorista-wrapper mt-2 pt-2 border-top w-100';
// 1. Intentamos recuperar el ID del producto (Odoo suele dejarlo en un input oculto)
const hiddenInput = tarjeta.querySelector('input[name="product-id"], input[name="product_id"]');
const prodId = hiddenInput ? (hiddenInput.getAttribute('data-product-id') || hiddenInput.value) : '';
// 2. Armamos el HTML del Selector de Cantidad (+ / -) y el Botón de Compra
wrapper.innerHTML = `
`;
// 3. Lo inyectamos al final del bloque de texto de la tarjeta
infoText.appendChild(wrapper);
// 4. Le damos vida al botón para que mande la cantidad correcta y mute a "Agregado"
const botonAgregar = wrapper.querySelector('.coti-add-btn');
botonAgregar.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
const inputCantidad = wrapper.querySelector('.coti-input');
const cantidad = inputCantidad.value || 1;
// Buscamos si Odoo tiene un botón nativo oculto para simular el click,
// o le seteamos el atributo de cantidad al que acabamos de crear para el controlador nativo
const nativeBtn = tarjeta.querySelector('.js_add_cart');
if (nativeBtn) {
const nativeInput = tarjeta.querySelector('input[name="add_qty"]');
if (nativeInput) nativeInput.value = cantidad;
nativeBtn.setAttribute('data-quantity', cantidad);
nativeBtn.click();
} else {
// Si Odoo barrió el botón nativo, le pasamos los datos a nuestro evento
botonAgregar.setAttribute('data-quantity', cantidad);
// Trigger estándar de Odoo para añadir al carro por mutación de atributos
botonAgregar.classList.add('js_add_cart');
botonAgregar.click();
botonAgregar.classList.remove('js_add_cart');
}
// Efecto visual instantáneo de éxito: "Agregado ✅"
botonAgregar.className = 'btn btn-success btn-sm w-100 d-flex align-items-center justify-content-center gap-2';
botonAgregar.style.backgroundColor = '#28a745';
botonAgregar.style.borderColor = '#28a745';
botonAgregar.innerHTML = 'Agregado';
// Deshabilitamos temporalmente para evitar doble click accidental
botonAgregar.disabled = true;
setTimeout(() => {
botonAgregar.className = 'btn btn-primary btn-sm w-100 coti-add-btn d-flex align-items-center justify-content-center gap-2';
botonAgregar.style.backgroundColor = '';
botonAgregar.style.borderColor = '';
botonAgregar.innerHTML = 'Agregar al carrito';
botonAgregar.disabled = false;
inputCantidad.value = 1;
}, 2000);
});
}
});
}
// Ejecución continua cada 500ms para ganarle a la carga asrincrónica del Home
setInterval(forzarEstructuraMayorista, 500);
})();