/**
* AutoTorino - Blocco Veicolo (Prenotazione/Acquisto)
* @version 1.0.0
* @requires jQuery
* @requires Magento_Ui/js/modal/modal
*/
(function() {
'use strict';
/**
* Inizializza il modulo quando il DOM e le dipendenze sono pronte
*/
function initBloccoVeicolo() {
try {
// Verifica prerequisiti
if (!document.querySelector('.product-info-main')) {
console.info('Blocco Veicolo: non siamo in una pagina prodotto');
return;
}
// Esegui inizializzazione
setupBloccoVeicolo();
} catch (error) {
console.error('Errore inizializzazione Blocco Veicolo:', error);
}
}
/**
* Setup principale del blocco veicolo
*/
function setupBloccoVeicolo() {
const urlSearchParams = new URLSearchParams(window.location.search);
const productInfoMain = document.querySelector('.product-info-main');
const tabPredefined = document.querySelector('.actions.tabs-actions');
const tabPredefined2 = document.querySelector('.row--technical__actions');
const tabPredefined3 = document.querySelector('#contact-form .contact-product-info .info-wrapper');
const tabPredefined4 = document.querySelector('.product-info-main .left-page-container .product-info-stock-sku');
if (!productInfoMain) return;
// Analizza disponibilità servizi
const availability = checkServicesAvailability();
// Estrai dati prodotto
const productData = extractProductData();
if (!productData) {
console.warn('Blocco Veicolo: dati prodotto non completi');
return;
}
// Fix prezzo
fixPriceDisplay(productData.sku);
// Fix FAQ
fixFAQLinks();
// Genera labels e URLs
const labels = generateLabels(productData, availability);
const urls = generateShopUrls(productData);
// Genera HTML bottoni
const buttonHTML = generateButtonHTML(availability);
// Inserisci bottoni nel DOM
insertButtons(buttonHTML, tabPredefined, tabPredefined2, tabPredefined3, tabPredefined4);
// Inizializza modal
initModal(availability, labels, productData, urls, urlSearchParams);
// Push eventi Analytics
pushAnalyticsEvents(availability);
}
/**
* Verifica disponibilità servizi (Prenotazione/Acquisto)
*/
function checkServicesAvailability() {
const containers = document.querySelectorAll('.services-carousel');
let checkPrenotabile = 0;
let checkAcquistabile = 0;
containers.forEach(container => {
const elements = container.querySelectorAll('.text');
elements.forEach(element => {
if (element.textContent.includes('Prenotazione')) {
checkPrenotabile++;
}
if (element.textContent.includes('Acquisto')) {
checkAcquistabile++;
}
});
});
return { checkPrenotabile, checkAcquistabile };
}
/**
* Estrae dati prodotto dal DOM
*/
function extractProductData() {
try {
const getTextContent = (selector) => {
const el = document.querySelector(selector);
return el ? el.innerHTML.trim() : '';
};
const immagine = getTextContent('.product-info .image-placeholder');
const sku = getTextContent('.product-info-stock-sku .product.attribute.sku .value');
const marchio = getTextContent('.product-info-stock-sku .product.attribute.brand .value');
const modello = getTextContent('.product-info-stock-sku .product.attribute.modello .value');
const condizione = getTextContent('.product.attribute.tipo .value');
const versione = getTextContent('.page-title-wrapper.product h1.page-title span');
const prezzo = getTextContent('.catalog-product-view .tabs .tab-header .product-info .product-price-info');
const tipo_veicolo = getTextContent('.breadcrumbs .item:first-child a');
// Sede veicolo
let sede = false;
const elementSede = document.querySelector('.contactus-car-location-city');
if (elementSede) {
sede = elementSede.innerHTML.trim();
} else {
const sedeVeicolo = document.querySelector('.sede_veicolo');
if (sedeVeicolo) {
sedeVeicolo.classList.add('pagebuilder-hidden');
}
}
return {
immagine, sku, marchio, modello, condizione,
versione, prezzo, sede, tipo_veicolo
};
} catch (error) {
console.error('Errore estrazione dati prodotto:', error);
return null;
}
}
/**
* Fix visualizzazione prezzi
*/
function fixPriceDisplay(sku) {
const accordionTitleElement = document.querySelector('.product-info-main .left-page-container .accordion-title.main-title span');
const accordionOriginalPrice = document.querySelector('.product-info-main .left-page-container .special-price .original-price');
if (!accordionTitleElement || !accordionOriginalPrice) return;
const isPrezzoAutotorino = accordionTitleElement.textContent.includes('PREZZO AUTOTORINO:');
const isUsato = sku[0] === 'U';
if (isPrezzoAutotorino) {
if (!isUsato) {
// Rimuovi elementi per N/Z
const removeEl1 = document.querySelector('.product-info-main .left-page-container .special-price .original-price');
const removeEl2 = document.querySelector('.product-info-main .left-page-container .special-price .discount');
if (removeEl1) removeEl1.remove();
if (removeEl2) removeEl2.remove();
} else {
// Cambia label per U
if (accordionOriginalPrice.textContent.includes('Prezzo di vendita: ')) {
const specialPriceElement = document.querySelector('.product-info-main .left-page-container .special-price .original-price span');
if (specialPriceElement) {
accordionOriginalPrice.innerHTML = "Prezzo precedente: " + specialPriceElement.innerHTML + "";
}
}
}
} else {
if (!isUsato) {
// Cambia label per N/Z
if (accordionOriginalPrice.textContent.includes('Prezzo di vendita: ')) {
const specialPriceElement = document.querySelector('.product-info-main .left-page-container .special-price .original-price span');
if (specialPriceElement) {
accordionOriginalPrice.innerHTML = "Prezzo di listino: " + specialPriceElement.innerHTML + "";
}
}
}
}
}
/**
* Fix link FAQ
*/
function fixFAQLinks() {
if (typeof jQuery === 'undefined') return;
jQuery(document).ready(function($) {
$('.price-validity-condition .moretext').each(function() {
var text = $(this).html();
var newText = text.replace(
/https:\/\/www\.autotorino\.it\/faq\/categoria\/acquista-online/g,
'FAQ Acquista online.'
);
$(this).html(newText);
});
});
}
/**
* Genera labels dinamiche
*/
function generateLabels(productData, availability) {
const { marchio, modello, condizione, versione, sede, tipo_veicolo, sku } = productData;
const { checkPrenotabile, checkAcquistabile } = availability;
const condizioneMap = {
'Usato': 'Usati',
'Nuovo': 'Nuovi',
'KM 0': 'Km 0',
'Aziendale': 'Aziendali'
};
const tipoVeicoloIntro1Map = {
'Auto': "l'auto giusta",
'Moto': "la moto giusta",
'Veicoli commerciali': "il veicolo commerciale giusto"
};
const tipoVeicoloIntro2Map = {
'Auto': "l'auto",
'Moto': "la moto",
'Veicoli commerciali': "il veicolo commerciale"
};
const tipoVeicoloSedeMap = {
'Auto': "L'auto",
'Moto': "La moto",
'Veicoli commerciali': "Il veicolo"
};
return {
veicolo: marchio + " " + modello,
condizione: condizioneMap[condizione] || "",
tipo_veicolo_intro1: tipoVeicoloIntro1Map[tipo_veicolo] || "",
tipo_veicolo_intro2: tipoVeicoloIntro2Map[tipo_veicolo] || "",
tipo_veicolo_sede: tipoVeicoloSedeMap[tipo_veicolo] || "",
sede: sede ? "nella sede di " + sede + "" : "",
ritiro: (sku[0] === 'U') ? "ritiro in ogni sede" : "",
versione: versione ? versione.replace(new RegExp('^' + modello), '') : ''
};
}
/**
* Genera URLs shop
*/
function generateShopUrls(productData) {
const { sku, marchio, modello, condizione } = productData;
return {
prenota: "https://prenotazioni.autotorino.it/GestioneOrdini/Prenotazione/" + sku,
acquista: "https://prenotazioni.autotorino.it/GestioneOrdini/Acquisto/" + sku
};
}
/**
* Genera HTML bottoni basato su disponibilità
*/
function generateButtonHTML(availability) {
const { checkPrenotabile, checkAcquistabile } = availability;
let html = {
main: '',
scroll: '',
contact: '',
mobile: ''
};
const iconImg = '
';
// Solo Prenota
if (checkPrenotabile > 0 && checkAcquistabile === 0) {
html.main = `