{"id":3074,"date":"2025-03-30T16:17:14","date_gmt":"2025-03-30T16:17:14","guid":{"rendered":"https:\/\/metalplus.com\/?page_id=3074"},"modified":"2025-07-23T09:24:21","modified_gmt":"2025-07-23T09:24:21","slug":"configuratore","status":"publish","type":"page","link":"https:\/\/metalplus.com\/fr\/configurateur\/","title":{"rendered":"configurateur"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"3074\" class=\"elementor elementor-3074\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e121201 e-flex e-con-boxed e-con e-parent\" data-id=\"e121201\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-965895b elementor-widget elementor-widget-html\" data-id=\"965895b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n\/* Punto di domanda fluttuante *\/\r\n.guida-float {\r\n  position: fixed;\r\n  bottom: 20px;\r\n  right: 20px;\r\n  background: #ffffff;\r\n  color: #0073e6;\r\n  border: 2px solid #0073e6;\r\n  font-size: 28px;\r\n  width: 60px;\r\n  height: 60px;\r\n  border-radius: 50%;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  box-shadow: 0 4px 8px rgba(0,0,0,0.2);\r\n  cursor: pointer;\r\n  animation: vibra 1.5s infinite;\r\n  z-index: 9999;\r\n}\r\n\r\n\/* Effetto vibrazione *\/\r\n@keyframes vibra {\r\n  0% { transform: translate(0, 0); }\r\n  20% { transform: translate(-1px, 1px); }\r\n  40% { transform: translate(1px, -1px); }\r\n  60% { transform: translate(-1px, 1px); }\r\n  80% { transform: translate(1px, -1px); }\r\n  100% { transform: translate(0, 0); }\r\n}\r\n\r\n\/* Box della guida *\/\r\n.guida-testo {\r\n  display: none;\r\n  position: fixed;\r\n  bottom: 90px;\r\n  right: 20px;\r\n  background: white;\r\n  color: black;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  width: 300px;\r\n  box-shadow: 0 4px 8px rgba(0,0,0,0.4);\r\n  z-index: 9998;\r\n  font-size: 16px;\r\n  transition: opacity 0.5s;\r\n}\r\n\r\n\/* Fade-in quando si mostra *\/\r\n.guida-testo.mostra {\r\n  display: block;\r\n  opacity: 1;\r\n}\r\n<\/style>\r\n\r\n<!-- Punto di domanda fluttuante -->\r\n<div class=\"guida-float\" onmouseover=\"apriGuida()\" onmouseout=\"chiudiGuida()\">\u2753<\/div>\r\n\r\n<!-- Testo guida -->\r\n<div id=\"guidaTesto\" class=\"guida-testo\">\r\n  Caricamento guida...\r\n<\/div>\r\n\r\n<script>\r\n\/* Testi guida per ogni step *\/\r\nconst testiGuida = {\r\n  1: \"\ud83d\udee0\ufe0f Step 1: Inserisci il numero di cassette che ti servono, scegli il tipo di installazione e la disposizione (colonne x righe).\",\r\n  2: \"\ud83d\udd04 Step 2: Scegli se vuoi il ritiro frontale o posteriore (modello bifacciale a doppia apertura).\",\r\n  3: \"\ud83d\uded2 Step 3: Seleziona gli accessori disponibili per personalizzare il prodotto.\",\r\n  4: \"\ud83d\udce6 Step 4: Controlla il riepilogo della configurazione e invia direttamente il preventivo o cerca un rivenditore.\"\r\n};\r\n\r\n\/* Funzioni apertura\/chiusura guida *\/\r\nfunction apriGuida() {\r\n  const guida = document.getElementById('guidaTesto');\r\n  const stepCorrente = getStepCorrente();\r\n  guida.innerHTML = testiGuida[stepCorrente] || \"\u2139\ufe0f Benvenuto nel configuratore!\";\r\n  guida.classList.add('mostra');\r\n}\r\n\r\nfunction chiudiGuida() {\r\n  const guida = document.getElementById('guidaTesto');\r\n  guida.classList.remove('mostra');\r\n}\r\n\r\n\/* Funzione che capisce su che Step siamo *\/\r\nfunction getStepCorrente() {\r\n  \/\/ Cerca il bottone attivo dello step (modifica se necessario)\r\n  const attivo = document.querySelector('.active-step, .step-active, .current-step, .active'); \/\/ adatta ai tuoi classi reali\r\n  if (!attivo) return 1; \/\/ Default Step 1\r\n  if (attivo.innerText.includes('Step 1')) return 1;\r\n  if (attivo.innerText.includes('Step 2')) return 2;\r\n  if (attivo.innerText.includes('Step 3')) return 3;\r\n  if (attivo.innerText.includes('Step 4')) return 4;\r\n  return 1; \/\/ Default\r\n}\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96f9f2e elementor-widget elementor-widget-html\" data-id=\"96f9f2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CONFIGURATORE HTML COMPLETO - CON LOGICA ACCESSORI AUTO -->\n<div id=\"configuratore-wrapper\">\n  <form id=\"configuratore-form\" method=\"POST\" action=\"https:\/\/formsubmit.co\/info@metalplus.com\">\n    <div class=\"step-indicator\">\n      <div class=\"step active\">\u00c9tape 1<\/div>\n      <div class=\"step\">\u00c9tape 2<\/div>\n      <div class=\"step\">\u00c9tape 3<\/div>\n      <div class=\"step\">\u00c9tape 4<\/div>\n    <\/div>\n\n    <!-- STEP 1 -->\n    <div class=\"configuratore-step\" id=\"step1\">\n      <div class=\"configuratore-sinistra\">\n        <label>De combien de cassettes avez-vous besoin ?<\/label>\n        <input type=\"number\" id=\"cassette\" name=\"cassette\" min=\"1\" max=\"50\" required \/>\n\n        <label>Comment voulez-vous les installer ?<\/label>\n        <label><input type=\"radio\" name=\"installazione\" value=\"incasso_amuro\"> Encastr\u00e9 dans le mur<\/label>\n        <label><input type=\"radio\" name=\"installazione\" value=\"appeso_amuro\"> Accrochage au mur<\/label>\n        <label><input type=\"radio\" name=\"installazione\" value=\"recinzione\"> Cl\u00f4ture<\/label>\n        <label><input type=\"radio\" name=\"installazione\" value=\"autoportante_\"> Autosuffisance<\/label>\n\n        <label>Disposition de la cassette (colonnes x lignes) :<\/label>\n       <input type=\"text\" id=\"disposizione\" name=\"disposizione\" required \/>\n        \n        <div id=\"suggerimenti-disposizione\" style=\"display: none; margin-top: 10px; gap: 10px; flex-wrap: wrap;\"><\/div>\n\n        <div class=\"nav-buttons\">\n          <button type=\"button\" onclick=\"vaiAStep2()\">Suivant \u2192<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"configuratore-destra\">\n        <img decoding=\"async\" id=\"immagine-step1\" src=\"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg\" alt=\"Avant-premi\u00e8re\" \/>\n      <\/div>\n    <\/div>\n\n    <!-- STEP 2 -->\n    <div class=\"configuratore-step\" id=\"step2\" style=\"display:none;\">\n      <div class=\"configuratore-sinistra\">\n        <label>Type de retrait :<\/label>\n        <label><input type=\"radio\" name=\"ritiro\" value=\"anteriore\"> Front<\/label>\n        <label>\n          <input type=\"radio\" name=\"ritiro\" value=\"posteriore\" title=\"Disponible uniquement pour les installations non suspendues\">\n          Arri\u00e8re\n        <\/label>\n        <div id=\"ritiro-warning\" style=\"display:none; color: #b6121b; font-size: 13px; margin-top: 10px;\">\n          \u26a0\ufe0f L'option <strong>Arri\u00e8re<\/strong> n'est pas disponible avec l'installation <strong>Accrochage au mur<\/strong>.\n        <\/div>\n        <div class=\"nav-buttons\">\n          <button type=\"button\" onclick=\"tornaAStep(1)\">\u2190 Retour<\/button>\n          <button type=\"button\" onclick=\"vaiAStep3()\">Suivant \u2192<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"configuratore-destra\">\n        <img decoding=\"async\" id=\"immagine-step2\" src=\"\" alt=\"Retrait\" \/>\n      <\/div>\n    <\/div>\n\n   <!-- STEP 3 -->\n<div class=\"configuratore-step\" id=\"step3\" style=\"display:none;\">\n  <div class=\"configuratore-sinistra\">\n    <label>Accessoires :<\/label>\n\n    <label>\n      <input type=\"checkbox\" name=\"accessori\" value=\"palo\" id=\"accessorio-palo\"> Poteau de soutien\n      <div class=\"accessori-info\" id=\"note-palo\" style=\"display: none;\"><\/div>\n    <\/label>\n\n<label>\n  <input type=\"checkbox\" name=\"accessori\" value=\"cornice_\" id=\"accessorio-cornice\"> Couvercle du cadre\n  <div class=\"accessori-info\" id=\"note-cornice\" style=\"display: none;\"><\/div>\n\n  <!-- \ud83d\udd3d Nuovo blocco per cornice posteriore -->\n  <div class=\"accessori-info\" id=\"opzione-cornice-retro\" style=\"display: none;\">\n    <label style=\"margin-top: 6px;\">\n      <input type=\"checkbox\" id=\"cornice-retro-check\">\n      Cornice anche sul retro (raddoppia i metri)\n    <\/label>\n  <\/div>\n<\/label>\n\n    <label>\n      <input type=\"checkbox\" name=\"accessori\" value=\"rivestimento\" id=\"accessorio-rivestimento\"> Rev\u00eatement p\u00e9riph\u00e9rique\n      <div class=\"accessori-info\" id=\"note-rivestimento\" style=\"display: none;\"><\/div>\n    <\/label>\n\n    <div class=\"nav-buttons\">\n      <button type=\"button\" onclick=\"tornaAStep(2)\">\u2190 Retour<\/button>\n      <button type=\"button\" onclick=\"vaiAStep4()\">Suivant \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"configuratore-destra\" id=\"box-immagini-accessori\">\n    <!-- Le immagini multiple appariranno qui -->\n  <\/div>\n<\/div>\n\n    <!-- STEP 4 -->\n <div class=\"configuratore-step\" id=\"step4\" style=\"display:none;\">\n      <div class=\"configuratore-sinistra\">\n        <h3>R\u00e9sum\u00e9 de la configuration<\/h3>\n        <pre id=\"riepilogo\"><\/pre>\n        <label>Nom :<\/label>\n        <input type=\"text\" name=\"nome\" required>\n        <label>Courriel :<\/label>\n        <input type=\"email\" name=\"email\" required>\n        <label>Notes suppl\u00e9mentaires :<\/label>\n        <textarea name=\"note\"><\/textarea>\n\n        <input type=\"hidden\" name=\"_subject\" value=\"Nuova configurazione casellari\">\n        <input type=\"hidden\" name=\"_template\" value=\"table\">\n        <input type=\"hidden\" name=\"riepilogo_configurazione\" id=\"riepilogo_configurazione\">\n\n        <div class=\"nav-buttons\">\n          <button type=\"button\" onclick=\"tornaAStep(3)\">\u2190 Retour<\/button>\n          <button type=\"button\" onclick=\"visualizzaPDF()\">\ud83d\udcc4 Voir la citation<\/button>\n  <button type=\"button\" onclick=\"inviaPreventivo()\">\ud83d\udce4 Envoyer un devis<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"configuratore-destra\">\n        <img decoding=\"async\" id=\"immagine-riepilogo\" src=\"\" alt=\"R\u00e9sum\u00e9\" \/>\n      <\/div>\n      \n    <\/div>\n  <\/form>\n<\/div>\n\n\n<style>\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;600;700&display=swap');\n\n  #configuratore-wrapper {\n    font-family: 'Inter', sans-serif;\n    max-width: 1100px;\n    margin: auto;\n    padding: 40px;\n    background: #ffffff;\n    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.05);\n    border-radius: 16px;\n    animation: fadeIn 0.6s ease-in-out;\n  }\n\n  .step-indicator {\n    display: flex;\n    justify-content: space-between;\n    margin-bottom: 30px;\n  }\n\n  .step {\n    flex: 1;\n    text-align: center;\n    background: #eaeaea;\n    padding: 12px;\n    margin: 0 6px;\n    border-radius: 10px;\n    font-weight: 600;\n    font-size: 14px;\n    color: #555;\n    transition: 0.3s;\n  }\n\n  .step.active {\n    background: #b6121b;\n    color: #ffffff;\n  }\n\n  .configuratore-step {\n    display: flex;\n    flex-wrap: nowrap;\n    gap: 40px;\n    margin-top: 20px;\n    animation: slideIn 0.5s ease-in-out;\n  }\n\n  .configuratore-sinistra {\n    flex: 1 1 400px;\n    background: #f7f7f7;\n    padding: 30px;\n    border-radius: 14px;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.04);\n  }\n\n  .configuratore-sinistra label {\n    display: block;\n    margin-top: 20px;\n    font-weight: 600;\n    color: #222;\n    font-size: 15px;\n  }\n\n  .configuratore-sinistra input[type=\"text\"],\n  .configuratore-sinistra input[type=\"email\"],\n  .configuratore-sinistra input[type=\"number\"],\n  .configuratore-sinistra textarea {\n    width: 100%;\n    padding: 12px;\n    margin-top: 6px;\n    border: 1px solid #ccc;\n    border-radius: 8px;\n    font-size: 15px;\n    background: #fff;\n    transition: border 0.3s;\n  }\n\n  .configuratore-sinistra input[type=\"radio\"],\n  .configuratore-sinistra input[type=\"checkbox\"] {\n    margin-right: 10px;\n  }\n\n  .configuratore-sinistra input:focus,\n  .configuratore-sinistra textarea:focus {\n    border-color: #b6121b;\n    outline: none;\n  }\n\n .configuratore-destra {\n  flex: 1 1 600px;\n  background: #ffffff;\n  padding: 30px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 14px;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.05);\n  min-height: 500px;\n  height: auto;\n  overflow: visible;\n}\n\n.configuratore-destra img {\n  width: auto;\n  max-height: 100%;\n  max-width: 100%;\n  height: auto;\n  object-fit: contain;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  transition: transform 0.3s ease;\n}\n\n  .configuratore-destra img:hover {\n    transform: scale(1.02);\n  }\n\n  .nav-buttons {\n    margin-top: 30px;\n    display: flex;\n    gap: 15px;\n    flex-wrap: wrap;\n  }\n\n  .nav-buttons button,\n  .configuratore-sinistra button[type=\"submit\"] {\n    padding: 14px 24px;\n    background-color: #b6121b;\n    color: #ffffff;\n    border: none;\n    border-radius: 8px;\n    cursor: pointer;\n    font-weight: 600;\n    font-size: 15px;\n    transition: background 0.3s, transform 0.2s;\n  }\n\n  .nav-buttons button:hover {\n    background-color: #8f0e16;\n    transform: translateY(-1px);\n  }\n\n  pre#riepilogo {\n    background: #f0f0f0;\n    padding: 15px;\n    border-radius: 10px;\n    margin-top: 20px;\n    font-size: 14px;\n    white-space: pre-line;\n  }\n\n  @media (max-width: 768px) {\n    .configuratore-step {\n      flex-direction: column;\n    }\n    .step-indicator {\n      flex-direction: column;\n      gap: 8px;\n    }\n  }\n\n  @keyframes fadeIn {\n    from { opacity: 0; }\n    to { opacity: 1; }\n  }\n\n  @keyframes slideIn {\n    from { transform: translateY(20px); opacity: 0; }\n    to { transform: translateY(0); opacity: 1; }\n  }\n  .accessori-info {\n  margin-top: 6px;\n  padding: 10px 14px;\n  background: #f0f4ff;\n  color: #1e3a8a;\n  border-left: 4px solid #3b82f6;\n  border-radius: 6px;\n  font-size: 13.5px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  animation: fadeIn 0.3s ease-in-out;\n}\n  #box-immagini-accessori {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 16px;\n    justify-content: center;\n    align-items: center;\n    background: #fff;\n    padding: 20px;\n    border-radius: 14px;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\n    min-height: 500px;\n  }\n\n  #box-immagini-accessori img {\n    max-width: 100%;\n    max-height: 240px;\n    border-radius: 12px;\n    border: 1px solid #ccc;\n    object-fit: contain;\n  }\n\u2705 Funzion\n\n#suggerimenti-disposizione button.btn-suggerimento {\n  background: #eaeaea;\n  border: none;\n  padding: 8px 14px;\n  border-radius: 6px;\n  font-weight: 600;\n  cursor: pointer;\n}\n#suggerimenti-disposizione button.btn-suggerimento:hover {\n  background: #b6121b;\n  color: white;\n}\n.accessorio-nascosto {\n  display: none !important;\n}\n<\/style>\n\n<script>\nlet utenteLoggato = null;\n  const config = {\n    installazione: '',\n    ritiro: '',\n    cassette: 4,\n    disposizione: '',\n    accessori: [],\n    metriMantello: 0\n  };\n  \/\/ \ud83d\udce6 Lista delle configurazioni esistenti realmente\nconst configurazioniIdeali = [\n  \"1x2\", \"2x1\", \"1x3\", \"3x1\", \"4x1\", \"1x4\", \"2x2\",\n  \"1x5\", \"5x1\", \"1x6\", \"2x3\", \"3x2\", \"1x7\",\n  \"7x1\", \"1x8\", \"2x4\", \"4x2\", \"3x3\", \"2x5\", \"5x2\", \"3x4\", \"4x3\", \"6x2\", \"2x6\", \"7x2\",\n  \"2x7\", \"5x3\", \"3x5\", \"2x3\", \"4x4\", \"2x8\", \"6x3\", \"3x6\", \"5x4\", \"4x5\",\n  \"7x3\", \"3x7\", \"6x4\", \"4x6\", \"3x8\", \"5x5\",\n  \"7x4\", \"4x7\", \"5x6\", \"6x5\", \"7x5\", \"5x7\", \"6x6\", \"5x8\"\n];\n\n  function mostraStep(n) {\n    document.querySelectorAll(\".configuratore-step\").forEach((el, i) => {\n      el.style.display = (i === n - 1) ? \"flex\" : \"none\";\n    });\n    document.querySelectorAll(\".step\").forEach((el, i) => {\n      el.classList.toggle(\"active\", i === n - 1);\n    });\n  }\n\n  function aggiornaImmagineStep1() {\n    const inst = document.querySelector('input[name=\"installazione\"]:checked')?.value;\n    if (!inst) return;\n    const src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/step1_${inst}.png`;\n    document.getElementById(\"immagine-step1\").src = src;\n    config.installazione = inst;\n  }\n\n  function aggiornaImmagineStep2() {\n    const src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/step2_ritiro_${config.ritiro}.png`;\n    document.getElementById(\"immagine-step2\").src = src;\n  }\n\nfunction aggiornaImmagineStep3() {\n  const selected = Array.from(document.querySelectorAll('input[name=\"accessori\"]:checked')).map(el => el.value);\n  config.accessori = selected;\n  const container = document.getElementById(\"box-immagini-accessori\");\n  \n  function aggiornaImmagineStep4Personalizzata() {\n  const dispo = document.getElementById(\"disposizione\").value;\n  if (!dispo) return;\n  const [col, righe] = dispo.toLowerCase().split(\"x\");\n  if (!col || !righe) return;\n  const src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/finale_${col}x${righe}.png`;\n  document.getElementById(\"immagine-riepilogo\").src = src;\n}\n\n  \/\/ Pulisce il contenitore prima di aggiornare\n  container.innerHTML = \"\";\n\n  const ritiro = config.ritiro || \"anteriore\";\n\n  if (selected.length === 0) {\n    const img = document.createElement(\"img\");\n    img.src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/step3_${ritiro}_nessuno.png`;\n    img.alt = \"Anteprima accessori\";\n    container.appendChild(img);\n    document.getElementById(\"immagine-riepilogo\").src = img.src;\n    return;\n  }\n\n  \/\/ Carica un'immagine per ogni accessorio\nselected.forEach(accessorio => {\n  const img = document.createElement(\"img\");\n\n  if (accessorio === \"palo\") {\n    img.src = \"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/05\/step3_anteriore_palo.png\";\n  } else {\n    img.src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/step3_${ritiro}_${accessorio}.png`;\n  }\n\n  img.alt = `Accessorio ${accessorio}`;\n  container.appendChild(img);\n});\n\n  \/\/ Per il riepilogo, mostra solo il primo accessorio\n  document.getElementById(\"immagine-riepilogo\").src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/step3_${ritiro}_${selected[0]}.png`;\n}\n\n  function aggiornaRitiroDisponibile() {\n    const inst = document.querySelector('input[name=\"installazione\"]:checked')?.value;\n    const posterioreRadio = document.querySelector('input[name=\"ritiro\"][value=\"posteriore\"]');\n    const anterioreRadio = document.querySelector('input[name=\"ritiro\"][value=\"anteriore\"]');\n    const warning = document.getElementById(\"ritiro-warning\");\n\n    if (!inst || !posterioreRadio || !anterioreRadio) return;\n\n    if (inst === \"appeso_amuro\") {\n      posterioreRadio.disabled = true;\n      posterioreRadio.checked = false;\n      anterioreRadio.checked = true;\n      if (warning) warning.style.display = \"block\";\n    } else {\n      posterioreRadio.disabled = false;\n      if (warning) warning.style.display = \"none\";\n    }\n    aggiornaImmagineStep2();\n  }\nfunction aggiornaAccessoriObbligatori() {\n  const inst = config.installazione;\n\n  const accessori = {\n    palo: document.getElementById(\"accessorio-palo\"),\n    cornice: document.getElementById(\"accessorio-cornice\"),\n    rivestimento: document.getElementById(\"accessorio-rivestimento\")\n  };\n\n  const note = {\n    palo: document.getElementById(\"note-palo\"),\n    cornice: document.getElementById(\"note-cornice\"),\n    rivestimento: document.getElementById(\"note-rivestimento\")\n  };\n\n  \/\/ RESET: mostra e abilita tutto di base\n  Object.keys(accessori).forEach(key => {\n    const el = accessori[key];\n    const nota = note[key];\n    if (el) {\n      el.disabled = false;\n      el.parentElement.classList.remove(\"accessorio-nascosto\");\n    }\n    if (nota) {\n      nota.style.display = \"none\";\n      nota.innerHTML = \"\";\n    }\n  });\n\n  \/\/ AUTO PORTANTE\n  if (inst === \"autoportante_\") {\n    accessori.palo.checked = true;\n    accessori.rivestimento.checked = true;\n\n    note.palo.style.display = \"flex\";\n    note.palo.innerHTML = \"\ud83d\udca1 Consigliato per <strong>autoportante<\/strong>\";\n\n    note.rivestimento.style.display = \"flex\";\n    note.rivestimento.innerHTML = \"\ud83d\udca1 Consigliato per <strong>autoportante<\/strong>\";\n\n    accessori.cornice.checked = false;\n    accessori.cornice.disabled = true;\n    accessori.cornice.parentElement.classList.add(\"accessorio-nascosto\");\n  }\n\n  \/\/ RECINZIONE\n  if (inst === \"recinzione\") {\n    accessori.rivestimento.checked = true;\n\n    note.rivestimento.style.display = \"flex\";\n    note.rivestimento.innerHTML = \"\ud83d\udca1 Consigliato per <strong>recinzione<\/strong>\";\n\n    accessori.cornice.checked = false;\n    accessori.cornice.disabled = true;\n    accessori.cornice.parentElement.classList.add(\"accessorio-nascosto\");\n\n    \/\/ \ud83d\udd12 Nascondi anche il palo (non visibile se non autoportante)\n    accessori.palo.checked = false;\n    accessori.palo.disabled = true;\n    accessori.palo.parentElement.classList.add(\"accessorio-nascosto\");\n  }\n\n  \/\/ INCASSO A MURO\n  if (inst === \"incasso_amuro\") {\n    accessori.cornice.checked = true;\n\n    note.cornice.style.display = \"flex\";\n    note.cornice.innerHTML = \"\ud83d\udca1 Consigliato per <strong>incasso a muro<\/strong>\";\n\n    [\"palo\", \"rivestimento\"].forEach(key => {\n      accessori[key].checked = false;\n      accessori[key].disabled = true;\n      accessori[key].parentElement.classList.add(\"accessorio-nascosto\");\n    });\n  }\n\n  \/\/ APPESO A MURO\n  if (inst === \"appeso_amuro\") {\n    accessori.rivestimento.checked = true;\n\n    note.rivestimento.style.display = \"flex\";\n    note.rivestimento.innerHTML = \"\ud83d\udca1 Consigliato per <strong>appeso a muro<\/strong>\";\n\n    accessori.cornice.checked = false;\n    accessori.cornice.disabled = true;\n    accessori.cornice.parentElement.classList.add(\"accessorio-nascosto\");\n\n    \/\/ \ud83d\udd12 Nascondi anche il palo\n    accessori.palo.checked = false;\n    accessori.palo.disabled = true;\n    accessori.palo.parentElement.classList.add(\"accessorio-nascosto\");\n  }\n  \n  const showCorniceRetro =\n  config.installazione === \"incasso_amuro\" && config.ritiro === \"posteriore\";\n\nconst corniceRetroBox = document.getElementById(\"opzione-cornice-retro\");\nif (corniceRetroBox) {\n  corniceRetroBox.style.display = showCorniceRetro ? \"block\" : \"none\";\n  if (!showCorniceRetro) {\n    document.getElementById(\"cornice-retro-check\").checked = false;\n  }\n}\n\n}\n\n\n  function calcolaMetriMantello() {\n    const dispo = config.disposizione;\n    if (!dispo.includes(\"x\")) return 0;\n    const [col, righe] = dispo.split(\"x\").map(n => parseInt(n));\n    if (isNaN(col) || isNaN(righe)) return 0;\n\n    const base = 370;\n    const altezza = 133;\n    const larghezzaTotale = col * base;\n    const altezzaTotale = righe * altezza;\n    const perimetro = 2 * (larghezzaTotale + altezzaTotale);\n    const metri = (perimetro \/ 1000).toFixed(2);\n    config.metriMantello = metri;\n    return metri;\n  }\n\n  function gestisciAccessori() {\n    const inst = config.installazione;\n    const ritiro = config.ritiro;\n\n    const palo = document.querySelector('input[name=\"accessori\"][value=\"palo\"]');\n    const cornice = document.querySelector('input[name=\"accessori\"][value=\"tetto\"]');\n    const rivestimento = document.querySelector('input[name=\"accessori\"][value=\"protezione\"]');\n\n    const paloMsg = document.getElementById(\"msg-palo\");\n    const corniceMsg = document.getElementById(\"msg-tetto\");\n    const rivestimentoMsg = document.getElementById(\"msg-protezione\");\n\n    if (inst === \"autoportante_\") {\n      palo.checked = true;\n      paloMsg.style.display = \"block\";\n    } else {\n      paloMsg.style.display = \"none\";\n    }\n\n    if (ritiro === \"posteriore\" && inst === \"recinzione\") {\n      rivestimento.checked = true;\n      rivestimentoMsg.style.display = \"block\";\n    } else {\n      rivestimentoMsg.style.display = \"none\";\n    }\n\n    if (ritiro === \"posteriore\" && inst === \"incasso_amuro\") {\n      cornice.checked = true;\n      corniceMsg.style.display = \"block\";\n    } else {\n      corniceMsg.style.display = \"none\";\n    }\n  }\n\n  function vaiAStep2() {\n    const dispo = document.getElementById(\"disposizione\").value.trim();\n    const cassette = parseInt(document.getElementById(\"cassette\").value);\n\n    if (!dispo.match(\/^\\d+[xX\\*]\\d+$\/)) {\n      alert(\"\u26a0\ufe0f Inserisci una disposizione valida (es: 2x2)\");\n      return;\n    }\n\n    const dispoClean = dispo.replace(\/[X\\*]\/gi, 'x');\n    const [col, righe] = dispoClean.split('x').map(n => parseInt(n));\n    if (isNaN(col) || isNaN(righe)) {\n      alert(\"\u26a0\ufe0f Formato disposizione non valido.\");\n      return;\n    }\n    if (col * righe !== cassette) {\n      alert(`\u26a0\ufe0f La disposizione (${col}x${righe} = ${col * righe}) non corrisponde al numero di cassette (${cassette}).`);\n      return;\n    }\n\n    config.disposizione = dispoClean;\n    config.cassette = cassette;\n\n    aggiornaImmagineStep1();\n    aggiornaRitiroDisponibile();\n      aggiornaAccessoriObbligatori(); \/\/ \u2705 qui\n    mostraStep(2);\n  }\n\n function vaiAStep3() {\n  config.ritiro = document.querySelector('input[name=\"ritiro\"]:checked')?.value;\n  aggiornaImmagineStep2();\n  mostraStep(3);\n  aggiornaAccessoriObbligatori(); \/\/ \ud83d\udc48 Importante!\n  aggiornaImmagineStep3();\n}\n\nfunction vaiAStep4() {\n  aggiornaImmagineStep3();\n  const metri = calcolaMetriMantello();\n  const dispo = config.disposizione;\n  const [col, righe] = dispo.split(\"x\");\n\n  const coloreCassette = document.getElementById(\"colore-cassetta\")?.value || \"grigio\";\n  config.coloreCassette = coloreCassette;\n\n  const imgFinale = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/finale_${col}x${righe}.png`;\n  document.getElementById(\"immagine-riepilogo\").src = imgFinale;\n\n  let riepilogo = `Cassette: ${config.cassette}\nInstallazione: ${config.installazione}\nDisposizione: ${dispo}\nRitiro: ${config.ritiro}\nAccessori: ${config.accessori.join(\", \")}\nColore cassette: ${coloreCassette}\nMantello da preventivare: ${metri} metri`;\n\n  if (document.getElementById(\"cornice-retro-check\")?.checked) {\n    riepilogo += `\\n\u2705 Cornice anche sul retro (x2 metri)`;\n  }\n\n  document.getElementById(\"riepilogo\").textContent = riepilogo;\n  mostraStep(4);\n\n  firebase.auth().onAuthStateChanged((user) => {\n    if (user) {\n      mostraPrezzoPersonalizzato(user);\n    } else {\n      console.log(\"Nessun utente loggato\");\n    }\n  });\n}\n\n  function tornaAStep(n) {\n    mostraStep(n);\n  }\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  \/\/ STEP 1 \u2014 aggiorna immagine e disponibilit\u00e0 ritiro appena selezioni installazione\n  document.querySelectorAll('input[name=\"installazione\"]').forEach(el => {\n    el.addEventListener(\"change\", () => {\n      aggiornaImmagineStep1();\n      aggiornaRitiroDisponibile();\n    });\n  });\n\n  \/\/ STEP 2 \u2014 aggiorna immagine appena selezioni anteriore\/posteriore\n  document.querySelectorAll('input[name=\"ritiro\"]').forEach(el => {\n    el.addEventListener(\"change\", () => {\n      config.ritiro = el.value;\n      aggiornaImmagineStep2();\n    });\n  });\n\n  \/\/ STEP 3 \u2014 aggiorna immagine accessori in tempo reale quando cambi checkbox\n  document.querySelectorAll('input[name=\"accessori\"]').forEach(el => {\n    el.addEventListener(\"change\", () => {\n      aggiornaImmagineStep3();\n    });\n  });\n\n  \/\/ Al primo caricamento o se torni indietro\n aggiornaImmagineStep1();\n  aggiornaRitiroDisponibile();\n  aggiornaAccessoriObbligatori(); \/\/ per mostrare suggerimenti visivi\n  aggiornaImmagineStep2();        \/\/ mostra l'immagine del ritiro\n  aggiornaImmagineStep3();  \n  \/\/ mostra le immagini accessori\n  \n  document.getElementById(\"cassette\").addEventListener(\"input\", suggerisciDisposizioni);\n});\n\n\nfunction suggerisciDisposizioni() {\n  const cassette = parseInt(document.getElementById(\"cassette\").value);\n  if (isNaN(cassette)) return;\n\n  const suggerimenti = configurazioniIdeali\n    .map(cfg => {\n      const [col, righe] = cfg.split(\"x\").map(n => parseInt(n));\n      const valore = col * righe;\n      return {\n        cfg,\n        valore,\n        differenza: Math.abs(cassette - valore),\n        esatto: valore === cassette\n      };\n    });\n\n  const esatti = suggerimenti.filter(s => s.esatto);\n  const alternativi = suggerimenti\n    .filter(s => !s.esatto)\n    .sort((a, b) => a.differenza - b.differenza || a.valore - b.valore);\n\n  const migliori = esatti.length > 0\n    ? esatti\n    : alternativi.slice(0, 4); \/\/ se non ci sono esatti, prendi 4 pi\u00f9 vicini\n\n  const box = document.getElementById(\"suggerimenti-disposizione\");\n  box.innerHTML = \"\";\n\n  migliori.forEach(({ cfg, valore }) => {\n    const btn = document.createElement(\"button\");\n    btn.textContent = cfg;\n    btn.className = \"btn-suggerimento\";\n  btn.onclick = () => {\n  document.getElementById(\"disposizione\").value = cfg;\n  document.getElementById(\"cassette\").value = valore;\n  suggerisciDisposizioni(); \/\/ ricalcola suggerimenti\n};\n\n\/\/ \ud83d\udc47 Aggiungi tooltip al passaggio del mouse\nbtn.onmouseenter = () => {\n  mostraAnteprimaTooltip(cfg, btn);\n};\nbtn.onmouseleave = () => {\n  nascondiAnteprimaTooltip();\n};\n    box.appendChild(btn);\n  });\n\n  box.style.display = migliori.length > 0 ? \"flex\" : \"none\";\n}\nfunction mostraAnteprimaTooltip(cfg, anchorEl) {\n  nascondiAnteprimaTooltip(); \/\/ Se esiste gi\u00e0, rimuovila\n\n  const tooltip = document.createElement(\"div\");\n  tooltip.id = \"tooltip-anteprima\";\n  tooltip.style.position = \"absolute\";\n  tooltip.style.zIndex = 9999;\n  tooltip.style.padding = \"8px\";\n  tooltip.style.background = \"#fff\";\n  tooltip.style.border = \"1px solid #ccc\";\n  tooltip.style.borderRadius = \"8px\";\n  tooltip.style.boxShadow = \"0 4px 12px rgba(0,0,0,0.15)\";\n  tooltip.style.pointerEvents = \"none\";\n\n  const img = document.createElement(\"img\");\n  img.src = `https:\/\/metalplus.com\/wp-content\/uploads\/2025\/04\/finale_${cfg}.png`;\n  img.alt = `Anteprima ${cfg}`;\n  img.style.maxWidth = \"180px\";\n  img.style.maxHeight = \"130px\";\n  img.style.display = \"block\";\n\n  tooltip.appendChild(img);\n  document.body.appendChild(tooltip);\n\n  const rect = anchorEl.getBoundingClientRect();\n  tooltip.style.left = `${rect.left + window.scrollX}px`;\n  tooltip.style.top = `${rect.bottom + 8 + window.scrollY}px`;\n}\n\nfunction nascondiAnteprimaTooltip() {\n  const tooltip = document.getElementById(\"tooltip-anteprima\");\n  if (tooltip) tooltip.remove();\n}\n\n\n\n<\/script>\n\n\n\n\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n<script>\nconst { jsPDF } = window.jspdf;\n\n\/\/ \ud83d\udcc4 GENERA E SCARICA IL PDF (solo per visualizzazione)\nasync function visualizzaPDF() {\n  const doc = await generaPDF();\n  doc.save(\"riepilogo_configurazione.pdf\");\n}\n\n\/\/ \ud83d\udce4 INVIA IL FORM (solo testo riepilogo, niente PDF)\nfunction inviaPreventivo() {\n  const riepilogo = document.getElementById(\"riepilogo\").textContent;\n  document.getElementById(\"riepilogo_configurazione\").value = riepilogo;\n  document.getElementById(\"configuratore-form\").submit();\n}\n\n\/\/ \ud83d\udcc4 CREA IL PDF (solo per visualizzazione)\nasync function generaPDF() {\n  const doc = new jsPDF(\"landscape\");\n  const nome = document.querySelector('input[name=\"nome\"]').value || \"\u2014\";\n  const email = document.querySelector('input[name=\"email\"]').value || \"\u2014\";\n  const note = document.querySelector('textarea[name=\"note\"]').value || \"\u2014\";\n  const riepilogo = document.getElementById(\"riepilogo\").textContent || \"\u2014\";\n  const imgSrc = document.getElementById(\"immagine-riepilogo\").src;\n\n  doc.setFontSize(14);\n  doc.text(\"Riepilogo Configurazione Casellari\", 10, 20);\n  doc.setFontSize(11);\n  doc.text(riepilogo, 10, 35);\n  doc.text(`Nome: ${nome}`, 10, 100);\n  doc.text(`Email: ${email}`, 10, 110);\n  doc.text(`Note: ${note}`, 10, 120);\n\n  try {\n    const img = await fetch(imgSrc).then(r => r.blob());\n    const reader = new FileReader();\n    return await new Promise(resolve => {\n      reader.onload = () => {\n        doc.addImage(reader.result, \"PNG\", 180, 20, 100, 75);\n        resolve(doc);\n      };\n      reader.readAsDataURL(img);\n    });\n  } catch (err) {\n    console.error(\"Errore caricamento immagine:\", err);\n    return doc;\n  }\n  if (prezzoFinale) {\n  doc.text(`Prezzo totale: ${prezzoFinale.toFixed(2)} \u20ac`, 10, 90);\n}\n}\n<\/script>\n<script>\nlet prezzoFinale = 0;\n\nasync function mostraPrezzoPersonalizzato(user) {\n  if (!user) return;\n\n  const cassette = config.cassette;\n  const metriMantello = parseFloat(config.metriMantello);\n  const accessori = config.accessori;\n\n  try {\n    let doc = await db\n      .collection(\"LISTINI\")\n      .doc(user.email)\n      .collection(\"ARTICOLI\")\n      .doc(\"ARTICOLI\")\n      .get();\n\n    if (!doc.exists) {\n      doc = await db\n        .collection(\"LISTINI\")\n        .doc(\"base\")\n        .collection(\"ARTICOLI\")\n        .doc(\"ARTICOLI\")\n        .get();\n    }\n\n    if (!doc.exists) {\n      document.getElementById(\"riepilogo\").textContent += `\\n\u274c Nessun listino disponibile.`;\n      return;\n    }\n\n    const prezzi = doc.data();\n    let totale = 0;\n\n  const ritiroKey = config.ritiro === \"posteriore\" ? \"CASELLARIO_POST\" : \"CASELLARIO_ANT\";\nif (prezzi[ritiroKey]) {\n  totale += prezzi[ritiroKey] * cassette;\n} else {\n  document.getElementById(\"riepilogo\").textContent += `\\n\u274c Prezzo casellario (${ritiroKey}) mancante nel listino.`;\n}\n         const mappaAccessori = {\n        \"cornice_\": \"CORNICE\",\n        \"rivestimento\": \"RIVESTIMENTO\",\n        \"palo\": \"PALO\"\n      };\n\n      accessori.forEach(acc => {\n        const chiavePrezzo = mappaAccessori[acc];\n        if (chiavePrezzo && prezzi[chiavePrezzo]) {\n          const valore = parseFloat(prezzi[chiavePrezzo]);\n         if (chiavePrezzo === \"PALO\") {\n  totale += valore;\n} else {\n  let moltiplicatore = 1;\n\n  if (chiavePrezzo === \"CORNICE\") {\n    const doppiaCornice = document.getElementById(\"cornice-retro-check\")?.checked;\n    moltiplicatore = doppiaCornice ? 2 : 1;\n  }\n\n  totale += valore * metriMantello * moltiplicatore;\n}\n        }\n      });\n\n    prezzoFinale = totale;\n    document.getElementById(\"riepilogo\").textContent += `\\n\ud83d\udcb6 Prezzo totale: ${totale.toFixed(2)} \u20ac`;\n\n  } catch (error) {\n    console.error(\"Errore nel calcolo\/prezzo:\", error);\n    document.getElementById(\"riepilogo\").textContent += `\\n\u274c Errore nel calcolo del prezzo.`;\n  }\n}\n<\/script>\n\n\n<script>\n  \/\/ Evita reinizializzazione: usa istanza globale da <head>\n  const auth = firebase.auth();\n  const db = firebase.firestore();\n<\/script>\n\n<script>\n  firebase.auth().onAuthStateChanged((user) => {\n    if (user) {\n      utenteLoggato = user;\n      console.log(\"\u2705 Utente loggato:\", user.email);\n    } else {\n      utenteLoggato = null;\n      console.warn(\"\u274c Nessun utente loggato\");\n    }\n  });\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\u2753 Caricamento guida&#8230; Step 1 Step 2 Step 3 Step 4 Quante cassette ti servono? Come le vuoi installare? Incasso a muro Appeso a muro Recinzione Autoportante Disposizione cassette (colonne x righe): Avanti \u2192 Tipo di ritiro: Anteriore Posteriore \u26a0\ufe0f L&#8217;opzione Posteriore non \u00e8 disponibile con installazione Appeso a muro. \u2190 Indietro Avanti \u2192 Accessori: [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3074","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>configuratore - METALPLUS SRL<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/metalplus.com\/fr\/configurateur\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"configuratore - METALPLUS SRL\" \/>\n<meta property=\"og:description\" content=\"\u2753 Caricamento guida&#8230; Step 1 Step 2 Step 3 Step 4 Quante cassette ti servono? Come le vuoi installare? Incasso a muro Appeso a muro Recinzione Autoportante Disposizione cassette (colonne x righe): Avanti \u2192 Tipo di ritiro: Anteriore Posteriore \u26a0\ufe0f L&#8217;opzione Posteriore non \u00e8 disponibile con installazione Appeso a muro. \u2190 Indietro Avanti \u2192 Accessori: [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/metalplus.com\/fr\/configurateur\/\" \/>\n<meta property=\"og:site_name\" content=\"METALPLUS SRL\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-23T09:24:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/metalplus.com\/configuratore\/\",\"url\":\"https:\/\/metalplus.com\/configuratore\/\",\"name\":\"configuratore - METALPLUS SRL\",\"isPartOf\":{\"@id\":\"https:\/\/metalplus.com\/e\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/metalplus.com\/configuratore\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/metalplus.com\/configuratore\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg\",\"datePublished\":\"2025-03-30T16:17:14+00:00\",\"dateModified\":\"2025-07-23T09:24:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/metalplus.com\/configuratore\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/metalplus.com\/configuratore\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/metalplus.com\/configuratore\/#primaryimage\",\"url\":\"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg\",\"contentUrl\":\"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/metalplus.com\/configuratore\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/metalplus.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"configuratore\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/metalplus.com\/e\/#website\",\"url\":\"https:\/\/metalplus.com\/e\/\",\"name\":\"METALPLUS SRL\",\"description\":\"Produttori italiani di soluzioni in metallo: cassette postali, casseforti, portavalori, portachiavi, casellari, portautensili, smart box, bacheche e accessori.\",\"publisher\":{\"@id\":\"https:\/\/metalplus.com\/e\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/metalplus.com\/e\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/metalplus.com\/e\/#organization\",\"name\":\"METALPLUS SRL\",\"url\":\"https:\/\/metalplus.com\/e\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/metalplus.com\/e\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/metalplus.com\/wp-content\/uploads\/2023\/09\/Nuovo-logo-MP.png\",\"contentUrl\":\"https:\/\/metalplus.com\/wp-content\/uploads\/2023\/09\/Nuovo-logo-MP.png\",\"width\":786,\"height\":746,\"caption\":\"METALPLUS SRL\"},\"image\":{\"@id\":\"https:\/\/metalplus.com\/e\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"configuratore - METALPLUS SRL","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/metalplus.com\/fr\/configurateur\/","og_locale":"fr_FR","og_type":"article","og_title":"configuratore - METALPLUS SRL","og_description":"\u2753 Caricamento guida&#8230; Step 1 Step 2 Step 3 Step 4 Quante cassette ti servono? Come le vuoi installare? Incasso a muro Appeso a muro Recinzione Autoportante Disposizione cassette (colonne x righe): Avanti \u2192 Tipo di ritiro: Anteriore Posteriore \u26a0\ufe0f L&#8217;opzione Posteriore non \u00e8 disponibile con installazione Appeso a muro. \u2190 Indietro Avanti \u2192 Accessori: [&hellip;]","og_url":"https:\/\/metalplus.com\/fr\/configurateur\/","og_site_name":"METALPLUS SRL","article_modified_time":"2025-07-23T09:24:21+00:00","og_image":[{"url":"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/metalplus.com\/configuratore\/","url":"https:\/\/metalplus.com\/configuratore\/","name":"configuratore - METALPLUS SRL","isPartOf":{"@id":"https:\/\/metalplus.com\/e\/#website"},"primaryImageOfPage":{"@id":"https:\/\/metalplus.com\/configuratore\/#primaryimage"},"image":{"@id":"https:\/\/metalplus.com\/configuratore\/#primaryimage"},"thumbnailUrl":"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg","datePublished":"2025-03-30T16:17:14+00:00","dateModified":"2025-07-23T09:24:21+00:00","breadcrumb":{"@id":"https:\/\/metalplus.com\/configuratore\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/metalplus.com\/configuratore\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/metalplus.com\/configuratore\/#primaryimage","url":"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg","contentUrl":"https:\/\/metalplus.com\/wp-content\/uploads\/2025\/07\/CONFIGURA-IL-TUO-NUOVO-CASELLARIO.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/metalplus.com\/configuratore\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/metalplus.com\/"},{"@type":"ListItem","position":2,"name":"configuratore"}]},{"@type":"WebSite","@id":"https:\/\/metalplus.com\/e\/#website","url":"https:\/\/metalplus.com\/e\/","name":"METALPLUS SRL","description":"Produttori italiani di soluzioni in metallo: cassette postali, casseforti, portavalori, portachiavi, casellari, portautensili, smart box, bacheche e accessori.","publisher":{"@id":"https:\/\/metalplus.com\/e\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/metalplus.com\/e\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/metalplus.com\/e\/#organization","name":"METALPLUS SRL","url":"https:\/\/metalplus.com\/e\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/metalplus.com\/e\/#\/schema\/logo\/image\/","url":"https:\/\/metalplus.com\/wp-content\/uploads\/2023\/09\/Nuovo-logo-MP.png","contentUrl":"https:\/\/metalplus.com\/wp-content\/uploads\/2023\/09\/Nuovo-logo-MP.png","width":786,"height":746,"caption":"METALPLUS SRL"},"image":{"@id":"https:\/\/metalplus.com\/e\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/pages\/3074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/comments?post=3074"}],"version-history":[{"count":122,"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/pages\/3074\/revisions"}],"predecessor-version":[{"id":7407,"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/pages\/3074\/revisions\/7407"}],"wp:attachment":[{"href":"https:\/\/metalplus.com\/fr\/wp-json\/wp\/v2\/media?parent=3074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}