netgescon-day0/public/build/assets/gescon-import-mapping-CbitswoH.js

152 lines
46 KiB
JavaScript

(function(){const m=window.GESCON_MAPPING||{},g=t=>(m.routes||{})[t]||"",v=m.legacyCode||"",M=m.csrf||"";function r(t){return String(t).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function Z(t){if(t==null||t==="")return"";const e=Number(t);if(!Number.isFinite(e))return String(t);try{return new Intl.NumberFormat("it-IT",{style:"currency",currency:"EUR"}).format(e)}catch{return e.toFixed(2)}}function ze(t,e=!0){const n=t&&typeof t.closest=="function"?t.closest(".mapping-tab-row, .mapping-voce-row"):null;if(!n)return;const o=n.querySelector(".inline-create-ui");if(o)if(e){o.classList.remove("hidden");const i=o.querySelector(".new-col-name");i&&setTimeout(()=>i.focus(),0)}else o.classList.add("hidden")}let R="all",U="";function Be(t){const e=(t||"").toLowerCase();document.querySelectorAll("#legacy-list > li").forEach(n=>{const o=(n.getAttribute("data-key")||"").toLowerCase(),i=(n.innerText||"").toLowerCase();n.style.display=!e||o.includes(e)||i.includes(e)?"":"none"})}function D(){document.querySelectorAll("#mapping-rows .mapping-row").forEach(t=>{const e=t.querySelector("select.mapping-select"),n=!!(e&&e.value);let o=!0;if(R==="mapped"?o=n:R==="unmapped"&&(o=!n),o&&U){const i=U.toLowerCase(),a=(t.getAttribute("data-key")||"").toLowerCase(),c=t.querySelector("label small"),s=(c&&c.textContent||"").toLowerCase();let l="",u="";if(e&&e.selectedIndex>=0){const d=e.options[e.selectedIndex];l=(d.text||"").toLowerCase(),u=(d.value||"").toLowerCase()}a.includes(i)||s.includes(i)||l.includes(i)||u.includes(i)||(o=!1)}t.style.display=o?"":"none"})}function ee(t){R=t||"all",document.querySelectorAll("#mapping-visibility-buttons button").forEach(e=>{e.getAttribute("data-mode")===R?e.classList.add("active"):e.classList.remove("active")}),D()}function Ie(t){U=t||"";try{const e=document.getElementById("legacy-filter-input");e&&e.value!==t&&(e.value=t);const n=document.getElementById("target-filter-input");n&&n.value!==t&&(n.value=t)}catch{}Be(t),D()}function $e(t){let e='<select class="netgescon-input mapping-select" name="'+r(t)+'" style="padding:.35rem .5rem;">';return e+='<option value="">— Seleziona campo target —</option>',(window.__targetFields||[]).forEach(function(n){e+='<option value="'+r(n.value)+'">'+r(n.label)+"</option>"}),e+="</select>",e}function Me(){const t=prompt("Chiave campo legacy (es. telefono_amministratore):");if(!t)return;const e=prompt("Etichetta leggibile (opzionale):",t.replace(/[_-]/g," "));Te(t,e||t)}function Te(t,e){if(document.querySelector('#mapping-rows .mapping-row[data-key="'+t+'"]'))return;const n=document.createElement("li");n.className="flex justify-between items-center",n.style.borderBottom="1px solid #eee",n.style.padding=".5rem",n.setAttribute("data-key",t),n.innerHTML='<div><div class="font-semibold">'+r(e)+'</div><small class="text-gray-500">'+r(t)+'</small></div><span class="netgescon-badge netgescon-badge-secondary">Sorgente</span>';const o=document.getElementById("legacy-list");o&&o.appendChild(n);const i=document.createElement("div");i.className="grid md:grid-cols-12 gap-3 items-center mb-2 mapping-row",i.setAttribute("data-key",t),i.innerHTML='<div class="md:col-span-5 col-span-12"><label class="mb-0"><small>'+r(e)+'</small></label><div class="text-gray-500 text-sm">'+r(t)+'</div></div><div class="md:col-span-7 col-span-12">'+$e("mapping["+t+"]")+"</div>";const a=document.getElementById("mapping-rows");a&&a.appendChild(i)}function te(){document.querySelectorAll("#mapping-form .mapping-row").forEach(t=>{const e=t.getAttribute("data-key"),n=document.querySelector('.legacy-value[data-field-value="'+CSS.escape(e)+'"]'),o=t.querySelector(".import-preview");o&&(o.textContent=n&&n.textContent||"—")})}function J(){return document.getElementById("manual-values-container")}function P(){const t=J();if(!t)return;const e=t.querySelectorAll(".manual-value-row"),n=t.querySelector(".manual-value-empty");if(e.length===0)if(n)n.classList.remove("hidden");else{const o=document.createElement("div");o.className="manual-value-empty text-xs text-gray-500 border rounded p-2 bg-slate-50",o.textContent="Nessun valore manuale configurato.",t.appendChild(o)}else n&&n.classList.add("hidden")}function Y(t){if(!t)return;const e=t.closest(".manual-value-row");if(!e)return;const n=e.querySelector(".manual-value-input");if(!n)return;const o=(t.value||"").trim();o?(n.name="manual_target_values["+o+"]",e.dataset.target=o):(n.name="",e.dataset.target="")}function ne(t="",e=""){const n=J();if(!n)return;const o=document.getElementById("manual-value-row-template");if(!o)return;const i=(()=>{if(o.content&&o.content.firstElementChild)return o.content.firstElementChild.cloneNode(!0);const s=document.createElement("div");return s.innerHTML=(o.innerHTML||"").trim(),s.firstElementChild?s.firstElementChild.cloneNode(!0):null})();if(!i)return;n.appendChild(i);const a=i.querySelector(".manual-value-target"),c=i.querySelector(".manual-value-input");a&&(a.value=t||"",Y(a)),c&&(c.value=e||""),P(),a?setTimeout(()=>a.focus(),0):c&&setTimeout(()=>c.focus(),0)}function Ae(t){const e=t?t.closest(".manual-value-row"):null;e&&e.remove(),P()}function Le(){const t=J();if(!t)return;t.querySelectorAll(".manual-value-row .manual-value-target").forEach(n=>{Y(n)});const e=m.manualTargetValues&&typeof m.manualTargetValues=="object"?m.manualTargetValues:null;t.querySelectorAll(".manual-value-row").length===0&&e&&Object.keys(e).forEach(n=>{ne(n,e[n])}),P()}let N=0;async function V(t){const e=document.getElementById("legacy-sample");e&&(e.innerHTML='<div class="text-gray-500 text-sm">Caricamento…</div>');try{const n=new URLSearchParams({index:String(t)});v&&n.set("legacy_code",v);const i=await(await fetch(g("sample")+"?"+n.toString())).json();if(!i.ok){e&&(e.innerHTML='<div class="text-danger small">'+r(i.error||"Errore caricamento")+"</div>");return}N=i.index||0;const a=i.data||{};document.querySelectorAll(".legacy-value[data-field-value]").forEach(c=>{const s=c.getAttribute("data-field-value");c.textContent=s in a?String(a[s]??""):"—"});try{const c=document.getElementById("bank-count-legacy");if(c){const u=Object.keys(a||{}).filter(d=>/iban/.test(String(d).toLowerCase())).filter(d=>String(a[d]??"").trim().length>0).length;c.textContent="Banche presenti: "+u,c.style.display=""}}catch{}te();try{K(a)}catch{}e&&(e.innerHTML="")}catch{e&&(e.innerHTML='<div class="text-danger small">Errore</div>')}}function ie(t){return N=Math.max(0,N+(t||0)),V(N)}function qe(){return V(N||0)}function oe(){const t=document.getElementById("preset-select"),e=((t==null?void 0:t.value)||"").trim(),n=(m.mappingPresets||{})[e];if(document.getElementById("preset_key").value=e,!n){G();return}const o=n.mapping||{};document.querySelectorAll("#mapping-form .mapping-row").forEach(a=>{const c=a.getAttribute("data-key"),s=a.querySelector("select.mapping-select");if(!c||!s)return;const l=o[c];l&&(s.value=l)});const i=Object.assign({},n.meta||{});document.getElementById("preset_meta").value=JSON.stringify(i)}function G(){const t=document.getElementById("preset-select"),e=((t==null?void 0:t.value)||"").trim(),n=(m.mappingPresets||{})[e],o=(n==null?void 0:n.meta)||{},i=Object.assign({},o);document.getElementById("preset_meta").value=JSON.stringify(i),document.getElementById("preset_key").value=e}function ke(t){if(["stabili","gestioni","finanziari","unita","tabelle","voci"].forEach(n=>{const o=document.getElementById("segment-"+n);o&&(n===t?o.classList.remove("d-none"):o.classList.add("d-none")),document.querySelectorAll('.mapping-steps [data-segment="'+n+'"]').forEach(i=>{n===t?i.classList.add("active"):i.classList.remove("active")})}),v){if(t==="unita"&&O(),t==="gestioni"&&(!Array.isArray(x)||!x.length?(async()=>{try{const n=await fetch(g("years")+"?legacy_code="+encodeURIComponent(v));if(n.ok){const o=await n.json();x=Array.isArray(o.years)?o.years:[],L=Math.max(0,x.length-1),F()}}catch{}try{await q()}catch{}})():q()),t==="finanziari"&&X(),t==="tabelle"&&typeof window.reloadTabelleColumns=="function")try{window.reloadTabelleColumns()}catch{}if(t==="voci"&&typeof window.reloadVociColumns=="function")try{window.reloadVociColumns()}catch{}}}function ae(t){const e=document.getElementById(t);if(!e)return null;if(e.children.length<13)for(let n=e.children.length;n<13;n++){const o=document.createElement("td");o.className="text-center text-xs",o.dataset.mese=n,o.textContent="",e.appendChild(o)}return e}function K(t){if(!t)return;const e=ae("row-ord"),n=ae("row-ris");for(let b=1;b<=12;b++){const h="ord_rata_"+b,f="ris_rata_"+b;if(e){const w=e.children[b];w&&(w.textContent=h in t&&String(t[h]||"0")!=="0"?"✓":"")}if(n){const w=n.children[b];w&&(w.textContent=f in t&&String(t[f]||"0")!=="0"?"✓":"")}}const o=t.anno_o||t.anno_or||"",i=t.anno_r||"",a=document.getElementById("go-anno");a&&(a.textContent=o?"("+o+")":"");const c=document.getElementById("gr-anno");c&&(c.textContent=i?"("+i+")":"");const s=document.getElementById("gg-anno-o");s&&(s.textContent=o||"—");const l=document.getElementById("gg-anno-r");l&&(l.textContent=i||"—");const u=t.stato_o||(o?"aperta":"—"),d=t.stato_r||(i?"aperta":"—"),_=document.getElementById("gg-stato-o");_&&(_.textContent=u);const y=document.getElementById("gg-stato-r");y&&(y.textContent=d)}let x=Array.isArray(m.availableYears)?m.availableYears:[],L=0;function Ne(t){!x||x.length===0||(L=Math.min(Math.max(0,L+t),x.length-1),F(),q())}function F(){const t=document.getElementById("gestione-year-label");t&&(t.textContent=x&&x.length?x[L]:"—")}async function q(){const t=x[L];if(!(!t||!v))try{const e=g("gestioniYear")+"?legacy_code="+encodeURIComponent(v)+"&anno="+encodeURIComponent(t),n=await fetch(e);if(!n.ok)throw new Error("Errore caricamento gestioni");const o=await n.json();try{const s=document.getElementById("btn-unita-loader"),l=g("archiveUi")||"";if(s&&l){const u=o.meta&&o.meta.path_singolo_anno?String(o.meta.path_singolo_anno):"",d=new URLSearchParams;u&&d.set("mdb_path",u),s.href=l+(d.toString()?"?"+d.toString():"")}}catch{}const i={};o.ordinaria&&o.ordinaria.rate&&(Object.keys(o.ordinaria.rate).forEach(s=>{i["ord_rata_"+s]=1}),i.anno_o=o.ordinaria.anno,i.stato_o=o.ordinaria.stato),o.riscaldamento&&o.riscaldamento.rate&&(Object.keys(o.riscaldamento.rate).forEach(s=>{i["ris_rata_"+s]=1}),i.anno_r=o.riscaldamento.anno,i.stato_r=o.riscaldamento.stato),K(i,t);const a=document.querySelector("#straordinarie-table tbody");if(a){const s=o.straordinarie||[];s.length===0?a.innerHTML=`<tr><td colspan="6" class="text-xs text-gray-500">(Nessuna straordinaria per ${t})</td></tr>`:a.innerHTML=s.map(l=>`<tr><td class='text-xs'>${l.id||"—"}</td><td class='text-xs'>${r(l.descrizione||"—")}</td><td class='text-xs'>${l.data_inizio||"—"}</td><td class='text-xs'>${l.data_fine||"—"}</td><td class='text-xs'>${l.rate_emesse||0}/${l.rate_totali||0}</td><td class='text-xs'>${l.periodicita||""}</td></tr>`).join("")}const c=document.getElementById("gg-anno-s");c&&(c.textContent=t)}catch(e){console.warn(e)}}let z=[];async function X(){const t=document.querySelector("#legacy-casse-table tbody");if(t){t.innerHTML='<tr><td colspan="8" class="text-xs text-gray-500">Caricamento...</td></tr>';try{const e=g("casse")+"?legacy_code="+encodeURIComponent(v),n=await fetch(e);if(!n.ok)throw new Error("HTTP "+n.status);z=((await n.json()).casse||[]).map(i=>({codice:i.codice,descrizione:i.descrizione,abi:i.abi,cab:i.cab,cin:i.cin||i.CIN||null,cuc:i.cuc||i.CUC||i.codice_cuc||null,iban:i.iban,swift:i.swift||i.SWIFT||i.bic||i.BIC||null,conto:i.numero_conto||i.conto||null,intestatario:i.intestatario||i.intestazione||null,filiale:i.filiale||i.filiale_descr||null,indirizzo:i.indirizzo||i.indirizzo_filiale||null,cap:i.cap||i.cap_filiale||null,citta:i.citta||i.comune||null,provincia:i.provincia||i.prov||null,telefono:i.telefono||i.telefono_ufficio||null,email:i.email||null,pec:i.pec||i.email_pec||null,valuta:i.valuta||i.currency||null,saldo:i.saldo_iniziale_euro??i.saldo_iniziale??i.saldo??null,saldo_euro:i.saldo_iniziale_euro??null,data_saldo:i.data_saldo||i.data_saldo_iniziale||null,note:i.note||null})),z.find(i=>i.codice==="CON")||z.unshift({codice:"CON",descrizione:"CASSA CONTANTI",abi:null,cab:null,cin:null,cuc:null,iban:null,swift:null,conto:"CON",intestatario:null,valuta:"EUR",saldo:null,saldo_euro:null,data_saldo:null,note:null}),W(),je(),He()}catch{t.innerHTML='<tr><td colspan="8" class="text-xs text-danger">Errore caricamento</td></tr>'}}}function W(t){const e=document.querySelector("#legacy-casse-table tbody");if(!e)return;const n=(t||"").toLowerCase(),o=z.filter(i=>!n||i.codice.toLowerCase().includes(n)||(i.descrizione||"").toLowerCase().includes(n));if(o.length===0){e.innerHTML='<tr><td colspan="8" class="text-xs text-gray-500">Nessun conto</td></tr>';return}e.innerHTML=o.map(i=>{const a=Z(i.saldo_euro??i.saldo);return`<tr data-cod="${i.codice}">
<td>${r(i.codice||"")}</td>
<td>${r(i.descrizione||"")}</td>
<td>${r(i.abi||"")}</td>
<td>${r(i.cab||"")}</td>
<td>${r(i.cuc||"")}</td>
<td class="text-xs font-mono">${r(i.iban||"")}</td>
<td class="text-xs">${r(a||"")}</td>
<td><button type="button" class="netgescon-btn netgescon-btn-xs netgescon-btn-outline-primary" onclick="addBancaMapping('${i.codice}')">Mappa</button></td>
</tr>`}).join("");try{const i=document.getElementById("bank-count-legacy");if(i){const a=z.filter(s=>s.codice!=="CON").length,c=z.some(s=>s.codice==="CON");i.style.display="inline-block",i.textContent="Legacy conti: "+String(a)+(c?" (+CON)":"")}}catch{}}function Oe(t){W(t)}function je(){const t=document.getElementById("banche-mapping-rows");if(!t)return;const e=Array.isArray(m.savedBancheMapping)?m.savedBancheMapping:[];t.querySelector(".banca-mapping-row")||(e.length?(t.innerHTML="",e.forEach(n=>{!n||!n.codice_legacy||Q(String(n.codice_legacy),n)}),k()):ce(t))}function ce(t){t&&(t.innerHTML='<div class="placeholder-banche text-xs text-slate-500 border border-dashed border-slate-300 rounded px-4 py-4 text-center bg-slate-50">Seleziona una cassa legacy a sinistra per iniziare la configurazione.</div>')}function Q(t,e){var le,pe,ue,de,me,ge,fe,be,ye,he,ve,xe,_e,we,Se,Ce,Ee;if(!t)return null;const n=document.getElementById("banche-mapping-rows");if(!n)return null;const o=n.querySelector(`[data-mapping-cod='${CSS.escape(t)}']`);if(o)return e&&se(o,e),o;n.querySelector(".placeholder-banche")&&(n.innerHTML="");const i=z.find(nt=>nt.codice===t)||{},a=n.querySelectorAll(".banca-mapping-row").length,c=(e==null?void 0:e.descrizione_legacy)||((le=e==null?void 0:e.legacy)==null?void 0:le.descrizione)||i.descrizione||"",s=((pe=e==null?void 0:e.legacy)==null?void 0:pe.iban)||(e==null?void 0:e.iban)||i.iban||"",l=((ue=e==null?void 0:e.legacy)==null?void 0:ue.abi)||i.abi||"",u=((de=e==null?void 0:e.legacy)==null?void 0:de.cab)||i.cab||"",d=((me=e==null?void 0:e.legacy)==null?void 0:me.cuc)||(e==null?void 0:e.cuc)||i.cuc||"",_=((ge=e==null?void 0:e.legacy)==null?void 0:ge.cin)||i.cin||"",y=((fe=e==null?void 0:e.legacy)==null?void 0:fe.swift)||i.swift||"",b=((be=e==null?void 0:e.legacy)==null?void 0:be.conto)||i.conto||"",h=((ye=e==null?void 0:e.legacy)==null?void 0:ye.intestatario)||i.intestatario||"",f=((he=e==null?void 0:e.legacy)==null?void 0:he.filiale)||(e==null?void 0:e.filiale)||i.filiale||"",w=((ve=e==null?void 0:e.legacy)==null?void 0:ve.indirizzo)||(e==null?void 0:e.indirizzo)||i.indirizzo||"",S=((xe=e==null?void 0:e.legacy)==null?void 0:xe.cap)||(e==null?void 0:e.cap)||i.cap||"",B=((_e=e==null?void 0:e.legacy)==null?void 0:_e.citta)||(e==null?void 0:e.citta)||i.citta||"",I=((we=e==null?void 0:e.legacy)==null?void 0:we.provincia)||(e==null?void 0:e.provincia)||i.provincia||"",E=((Se=e==null?void 0:e.legacy)==null?void 0:Se.telefono)||(e==null?void 0:e.telefono)||i.telefono||"",A=((Ce=e==null?void 0:e.legacy)==null?void 0:Ce.email)||(e==null?void 0:e.email)||i.email||"",j=((Ee=e==null?void 0:e.legacy)==null?void 0:Ee.pec)||(e==null?void 0:e.pec)||i.pec||"",H=i.saldo_euro??i.saldo??"",et=H!==""&&H!==null&&H!==void 0,tt=[s?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5 font-mono uppercase">IBAN: ${r(s)}</span>`:"",l||u?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">ABI/CAB: ${r([l,u].filter(Boolean).join(" • "))}</span>`:"",d?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">CUC: ${r(d)}</span>`:"",y?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">SWIFT: ${r(y)}</span>`:"",b?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">Conto: ${r(b)}</span>`:"",et?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">Saldo: ${r(Z(H)||"")}</span>`:"",f?`<span class="inline-flex items-center gap-1 rounded border border-slate-200 bg-white px-2 py-0.5">Filiale: ${r(f)}</span>`:""].filter(Boolean).join('<span class="text-slate-300">•</span>'),$=document.createElement("div");return $.className="banca-mapping-row border border-slate-200 rounded-lg p-4 bg-white shadow-sm hover:shadow transition-shadow",$.setAttribute("data-mapping-cod",t),$.setAttribute("data-descrizione-legacy",c||""),$.innerHTML=`
<div class="flex flex-col md:flex-row md:items-start md:justify-between gap-3">
<div>
<div class="text-sm font-semibold text-slate-800">${r(t)}${r(c||"Conto senza descrizione")}</div>
<div class="legacy-tags flex flex-wrap gap-2 mt-2 text-[11px] text-slate-500">${tt||"<span>Dati legacy non disponibili</span>"}</div>
</div>
<div class="flex items-center gap-3 text-xs">
<label class="flex items-center gap-2 text-slate-600">
<input type="checkbox" class="h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-500" name="banche_mapping[${a}][target][is_nostro_conto]" value="1" onchange="syncBancheJson()">
Conto principale
</label>
<button type="button" class="netgescon-btn netgescon-btn-xs netgescon-btn-outline-danger" onclick="removeBancaMappingRow(this)">Rimuovi</button>
</div>
</div>
<div class="grid gap-3 mt-4 text-xs md:grid-cols-2 xl:grid-cols-3">
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Tipo conto</label>
<select name="banche_mapping[${a}][tipo_conto]" class="netgescon-input" onchange="syncBancheJson()" style="padding:.35rem .5rem;">
<option value="bancario">Bancario</option>
<option value="contanti">Cassa contanti</option>
<option value="postale">Postale</option>
<option value="risparmio">Risparmio</option>
<option value="altro">Altro</option>
</select>
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Denominazione banca</label>
<input type="text" name="banche_mapping[${a}][target][denominazione_banca]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Intestazione conto</label>
<input type="text" name="banche_mapping[${a}][target][intestazione_conto]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Numero conto</label>
<input type="text" name="banche_mapping[${a}][target][numero_conto]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">IBAN</label>
<input type="text" name="banche_mapping[${a}][target][iban]" value="${r(s)}" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">BIC / SWIFT</label>
<input type="text" name="banche_mapping[${a}][target][bic_swift]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">ABI</label>
<input type="text" name="banche_mapping[${a}][target][abi]" value="${r(l)}" class="netgescon-input" maxlength="5" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">CAB</label>
<input type="text" name="banche_mapping[${a}][target][cab]" value="${r(u)}" class="netgescon-input" maxlength="5" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">CUC</label>
<input type="text" name="banche_mapping[${a}][target][cuc]" value="${r(d)}" class="netgescon-input" maxlength="10" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">CIN</label>
<input type="text" name="banche_mapping[${a}][target][cin]" value="${r(_)}" class="netgescon-input" maxlength="1" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Valuta</label>
<input type="text" name="banche_mapping[${a}][target][valuta]" value="EUR" class="netgescon-input" maxlength="3" oninput="syncBancheJson()" style="padding:.35rem .5rem; text-transform:uppercase;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Saldo iniziale</label>
<input type="number" step="0.01" name="banche_mapping[${a}][target][saldo_iniziale]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Data saldo</label>
<input type="date" name="banche_mapping[${a}][target][data_saldo_iniziale]" class="netgescon-input" onchange="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Stato</label>
<select name="banche_mapping[${a}][target][stato_conto]" class="netgescon-input" onchange="syncBancheJson()" style="padding:.35rem .5rem;">
<option value="attivo">Attivo</option>
<option value="sospeso">Sospeso</option>
<option value="chiuso">Chiuso</option>
</select>
</div>
<div class="flex flex-col gap-1 md:col-span-2 xl:col-span-3">
<label class="text-slate-600 font-medium">Note</label>
<textarea name="banche_mapping[${a}][target][note]" rows="2" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;"></textarea>
</div>
<div class="md:col-span-2 xl:col-span-3 border-t border-dashed border-slate-200 pt-3 mt-2">
<div class="text-[11px] uppercase tracking-wide text-slate-500 font-semibold">Anagrafica contatto / Filiale</div>
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Filiale</label>
<input type="text" name="banche_mapping[${a}][target][filiale]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Indirizzo</label>
<input type="text" name="banche_mapping[${a}][target][indirizzo]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">CAP</label>
<input type="text" name="banche_mapping[${a}][target][cap]" maxlength="5" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Città</label>
<input type="text" name="banche_mapping[${a}][target][citta]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Provincia</label>
<input type="text" name="banche_mapping[${a}][target][provincia]" maxlength="2" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem; text-transform:uppercase;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Telefono ufficio</label>
<input type="text" name="banche_mapping[${a}][target][telefono_ufficio]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">Email</label>
<input type="email" name="banche_mapping[${a}][target][email]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
<div class="flex flex-col gap-1">
<label class="text-slate-600 font-medium">PEC</label>
<input type="email" name="banche_mapping[${a}][target][pec]" class="netgescon-input" oninput="syncBancheJson()" style="padding:.35rem .5rem;">
</div>
</div>
<input type="hidden" name="banche_mapping[${a}][codice_legacy]" value="${r(t)}">
<input type="hidden" name="banche_mapping[${a}][descrizione_legacy]" value="${r(c)}">
<input type="hidden" name="banche_mapping[${a}][legacy][descrizione]" value="${r(c)}">
<input type="hidden" name="banche_mapping[${a}][legacy][iban]" value="${r(s)}">
<input type="hidden" name="banche_mapping[${a}][legacy][abi]" value="${r(l)}">
<input type="hidden" name="banche_mapping[${a}][legacy][cab]" value="${r(u)}">
<input type="hidden" name="banche_mapping[${a}][legacy][cin]" value="${r(_)}">
<input type="hidden" name="banche_mapping[${a}][legacy][conto]" value="${r(b)}">
<input type="hidden" name="banche_mapping[${a}][legacy][intestatario]" value="${r(h)}">
<input type="hidden" name="banche_mapping[${a}][legacy][swift]" value="${r(y)}">
<input type="hidden" name="banche_mapping[${a}][legacy][cuc]" value="${r(d)}">
<input type="hidden" name="banche_mapping[${a}][legacy][filiale]" value="${r(f)}">
<input type="hidden" name="banche_mapping[${a}][legacy][indirizzo]" value="${r(w)}">
<input type="hidden" name="banche_mapping[${a}][legacy][cap]" value="${r(S)}">
<input type="hidden" name="banche_mapping[${a}][legacy][citta]" value="${r(B)}">
<input type="hidden" name="banche_mapping[${a}][legacy][provincia]" value="${r(I)}">
<input type="hidden" name="banche_mapping[${a}][legacy][telefono]" value="${r(E)}">
<input type="hidden" name="banche_mapping[${a}][legacy][email]" value="${r(A)}">
<input type="hidden" name="banche_mapping[${a}][legacy][pec]" value="${r(j)}">
`,n.appendChild($),e&&se($,e,i),Re($,i,t),k(),$}function Re(t,e,n){if(!t)return;const o=t.querySelector('select[name*="[tipo_conto]"]');o&&!o.value&&(o.value=n==="CON"?"contanti":"bancario");const i=t.querySelector('input[name*="[denominazione_banca]"]');i&&!i.value&&(i.value=(e==null?void 0:e.descrizione)||(n==="CON"?"Cassa contanti":""));const a=t.querySelector('input[name*="[intestazione_conto]"]');a&&!a.value&&(a.value=(e==null?void 0:e.intestatario)||"");const c=t.querySelector('input[name*="[numero_conto]"]');c&&!c.value&&(c.value=(e==null?void 0:e.conto)||n);const s=t.querySelector('input[name*="[target][cuc]"]');s&&!s.value&&(e!=null&&e.cuc)&&(s.value=e.cuc);const l=t.querySelector('select[name*="[stato_conto]"]');l&&(l.value="attivo");const u=t.querySelector('input[name*="[valuta]"]');u&&!u.value&&(u.value="EUR");const d=t.querySelector('input[name*="[saldo_iniziale]"]'),_=(e==null?void 0:e.saldo_euro)??(e==null?void 0:e.saldo);d&&!d.value&&_!==void 0&&_!==null&&_!==""&&(d.value=_);const y=t.querySelector('input[name*="[data_saldo_iniziale]"]');if(y&&!y.value&&(e!=null&&e.data_saldo))try{const j=new Date(e.data_saldo);Number.isNaN(j.getTime())||(y.value=j.toISOString().substring(0,10))}catch{y.value=e.data_saldo}const b=t.querySelector('input[name*="[is_nostro_conto]"]');b&&n==="CON"&&(b.checked=!0);const h=t.querySelector('input[name*="[target][filiale]"]');h&&!h.value&&(e!=null&&e.filiale)&&(h.value=e.filiale);const f=t.querySelector('input[name*="[target][indirizzo]"]');f&&!f.value&&(e!=null&&e.indirizzo)&&(f.value=e.indirizzo);const w=t.querySelector('input[name*="[target][cap]"]');w&&!w.value&&(e!=null&&e.cap)&&(w.value=e.cap);const S=t.querySelector('input[name*="[target][citta]"]');S&&!S.value&&(e!=null&&e.citta)&&(S.value=e.citta);const B=t.querySelector('input[name*="[target][provincia]"]');B&&!B.value&&(e!=null&&e.provincia)&&(B.value=e.provincia);const I=t.querySelector('input[name*="[target][telefono_ufficio]"]');I&&!I.value&&(e!=null&&e.telefono)&&(I.value=e.telefono);const E=t.querySelector('input[name*="[target][email]"]');E&&!E.value&&(e!=null&&e.email)&&(E.value=e.email);const A=t.querySelector('input[name*="[target][pec]"]');A&&!A.value&&(e!=null&&e.pec)&&(A.value=e.pec)}function se(t,e,n){var u,d,_,y,b;if(!t||!e)return;const o=e.target||{},i=t.querySelector('select[name*="[tipo_conto]"]'),a=o.tipo_conto||e.tipo_conto||(t.getAttribute("data-mapping-cod")==="CON"?"contanti":"bancario");i&&a&&(i.value=a);const c={"[denominazione_banca]":o.denominazione_banca||e.denominazione_banca||e.descrizione_legacy||(n==null?void 0:n.descrizione)||"","[intestazione_conto]":o.intestazione_conto||e.intestazione_conto||(n==null?void 0:n.intestatario)||"","[numero_conto]":o.numero_conto||e.numero_conto||e.target_cod_cassa||(n==null?void 0:n.conto)||e.codice_legacy||t.getAttribute("data-mapping-cod"),"[iban]":o.iban||e.iban||((u=e.legacy)==null?void 0:u.iban)||(n==null?void 0:n.iban)||"","[bic_swift]":o.bic_swift||e.swift||e.bic_swift||(n==null?void 0:n.swift)||"","[abi]":o.abi||e.abi||((d=e.legacy)==null?void 0:d.abi)||(n==null?void 0:n.abi)||"","[cab]":o.cab||e.cab||((_=e.legacy)==null?void 0:_.cab)||(n==null?void 0:n.cab)||"","[target][cuc]":o.cuc||e.cuc||((y=e.legacy)==null?void 0:y.cuc)||(n==null?void 0:n.cuc)||"","[cin]":o.cin||e.cin||((b=e.legacy)==null?void 0:b.cin)||(n==null?void 0:n.cin)||"","[valuta]":o.valuta||e.valuta||"EUR","[saldo_iniziale]":o.saldo_iniziale??e.saldo_iniziale??"","[data_saldo_iniziale]":o.data_saldo_iniziale||e.data_saldo_iniziale||"","[note]":o.note||e.note||"","[target][filiale]":o.filiale||e.filiale||e.target_filiale||(n==null?void 0:n.filiale)||"","[target][indirizzo]":o.indirizzo||e.indirizzo||e.target_indirizzo||(n==null?void 0:n.indirizzo)||"","[target][cap]":o.cap||e.cap||e.target_cap||(n==null?void 0:n.cap)||"","[target][citta]":o.citta||e.citta||e.target_citta||(n==null?void 0:n.citta)||"","[target][provincia]":o.provincia||e.provincia||e.target_provincia||(n==null?void 0:n.provincia)||"","[target][telefono_ufficio]":o.telefono_ufficio||e.telefono_ufficio||e.telefono||(n==null?void 0:n.telefono)||"","[target][email]":o.email||e.email||e.target_email||(n==null?void 0:n.email)||"","[target][pec]":o.pec||e.pec||e.target_pec||(n==null?void 0:n.pec)||""};Object.entries(c).forEach(([h,f])=>{const w=h==="[note]"?`textarea[name*="${h}"]`:`input[name*="${h}"]`,S=t.querySelector(w);if(S!==null&&f!==void 0&&f!==null)if(S.type==="date"&&typeof f=="string"&&f.includes("/")){const[B,I,E]=f.split(/[\/\-]/);if(B&&I&&E){const A=`${E.length===2?"20"+E:E}-${String(I).padStart(2,"0")}-${String(B).padStart(2,"0")}`;S.value=A}else S.value=f}else S.value=String(f)});const s=t.querySelector('select[name*="[stato_conto]"]');s&&(s.value=o.stato_conto||e.stato_conto||"attivo");const l=t.querySelector('input[name*="[is_nostro_conto]"]');if(l){const h=o.is_nostro_conto??e.is_nostro_conto??e.target_is_nostro_conto??t.getAttribute("data-mapping-cod")==="CON";l.checked=!!h}}function Fe(t){const e=t==null?void 0:t.closest(".banca-mapping-row"),n=e==null?void 0:e.parentElement;e&&e.remove(),n&&!n.querySelector(".banca-mapping-row")&&ce(n),k()}function He(){if(z.find(t=>t.codice==="CON")){const t=document.getElementById("banche-mapping-rows");t&&!t.querySelector('[data-mapping-cod="CON"]')&&Q("CON");const e=t==null?void 0:t.querySelector('[data-mapping-cod="CON"]');if(e){const n=e.querySelector('select[name*="[tipo_conto]"]');n&&(n.value="contanti");const o=e.querySelector('input[name*="[is_nostro_conto]"]');o&&(o.checked=!0)}k()}}function p(t,e){const n=t.querySelector(e);if(!n)return null;const o=n.value;if(typeof o=="string"){const i=o.trim();return i===""?null:i}return o??null}function k(){const t=document.getElementById("banche-mapping-rows"),n=[...(t==null?void 0:t.querySelectorAll(".banca-mapping-row"))||[]].map(i=>{var l;const a={descrizione:p(i,'input[name*="[legacy][descrizione]"]'),iban:p(i,'input[name*="[legacy][iban]"]'),abi:p(i,'input[name*="[legacy][abi]"]'),cab:p(i,'input[name*="[legacy][cab]"]'),cin:p(i,'input[name*="[legacy][cin]"]'),cuc:p(i,'input[name*="[legacy][cuc]"]'),conto:p(i,'input[name*="[legacy][conto]"]'),intestatario:p(i,'input[name*="[legacy][intestatario]"]'),swift:p(i,'input[name*="[legacy][swift]"]')};Object.keys(a).forEach(u=>{a[u]===null&&delete a[u]});const c={tipo_conto:p(i,'select[name*="[tipo_conto]"]'),denominazione_banca:p(i,'input[name*="[denominazione_banca]"]'),intestazione_conto:p(i,'input[name*="[intestazione_conto]"]'),numero_conto:p(i,'input[name*="[numero_conto]"]'),iban:p(i,'input[name*="[target][iban]"]'),bic_swift:p(i,'input[name*="[bic_swift]"]'),abi:p(i,'input[name*="[abi]"]'),cab:p(i,'input[name*="[cab]"]'),cuc:p(i,'input[name*="[target][cuc]"]'),cin:p(i,'input[name*="[cin]"]'),valuta:p(i,'input[name*="[valuta]"]'),saldo_iniziale:p(i,'input[name*="[saldo_iniziale]"]'),data_saldo_iniziale:p(i,'input[name*="[data_saldo_iniziale]"]'),note:p(i,'textarea[name*="[note]"]'),stato_conto:p(i,'select[name*="[stato_conto]"]'),filiale:p(i,'input[name*="[target][filiale]"]'),indirizzo:p(i,'input[name*="[target][indirizzo]"]'),cap:p(i,'input[name*="[target][cap]"]'),citta:p(i,'input[name*="[target][citta]"]'),provincia:p(i,'input[name*="[target][provincia]"]'),telefono_ufficio:p(i,'input[name*="[target][telefono_ufficio]"]'),email:p(i,'input[name*="[target][email]"]'),pec:p(i,'input[name*="[target][pec]"]'),is_nostro_conto:((l=i.querySelector('input[name*="[is_nostro_conto]"]'))==null?void 0:l.checked)||!1};Object.keys(c).forEach(u=>{const d=c[u];if(u==="is_nostro_conto"){d||delete c[u];return}(d==null||d==="")&&delete c[u]});const s={codice_legacy:i.getAttribute("data-mapping-cod")||null,descrizione_legacy:i.getAttribute("data-descrizione-legacy")||null,tipo_conto:c.tipo_conto||"bancario",legacy:Object.keys(a).length?a:null,target:c};return s.iban=c.iban||a.iban||null,s.swift=c.bic_swift||a.swift||null,s.cuc=c.cuc||a.cuc||null,s.numero_conto=c.numero_conto||null,s.is_nostro_conto=!!c.is_nostro_conto,s}),o=document.getElementById("banche_mapping_json");o&&(o.value=JSON.stringify(n))}async function Ue(t){t.preventDefault(),k();const e=t.target,n=new FormData(e);try{const o=await fetch(g("mappingSave"),{method:"POST",headers:{"X-CSRF-TOKEN":M},body:n});if(o.redirected)return window.location.href=o.url,!1;alert(o.ok?"Mapping banche salvato":"Errore salvataggio banche")}catch{alert("Errore rete")}return!1}let C=[],T=0;async function re(){const t=document.getElementById("unita-year-nav"),e=document.getElementById("unita-year-label"),n=document.getElementById("years-badges");if(!(!t||!e))try{const o=g("years")+"?legacy_code="+encodeURIComponent(v),i=await fetch(o);if(!i.ok)throw new Error("HTTP "+i.status);const a=await i.json();if(C=Array.isArray(a.years)?a.years.map(c=>String(c)):[],C.length){t.style.display="flex",T=C.length-1,e.textContent=C[T];const c=document.getElementById("unita-anno-label-2");c&&(c.textContent=e.textContent),n&&(n.innerHTML="<span>Anni:</span>"+C.map(s=>'<span class="netgescon-badge netgescon-badge-light">'+r(s)+"</span>").join(""));try{const s=document.getElementById("btn-unita-loader");s&&g("archiveUi")&&(s.href=g("archiveUi"))}catch{}try{await O()}catch{}}else{t.style.display="flex",e.textContent="—";const c=document.getElementById("unita-anno-label-2");c&&(c.textContent="—"),n&&(n.innerHTML="");try{const s=document.getElementById("btn-unita-loader");s&&g("archiveUi")&&(s.href=g("archiveUi"))}catch{}try{await O()}catch{}}}catch{t.style.display="flex",e.textContent="—";const i=document.getElementById("unita-anno-label-2");i&&(i.textContent="—"),n&&(n.innerHTML="");try{const a=document.getElementById("btn-unita-loader");a&&g("archiveUi")&&(a.href=g("archiveUi"))}catch{}try{await O()}catch{}}}function Je(t){if(!C.length)return;T=Math.min(C.length-1,Math.max(0,T+(t||0)));const e=document.getElementById("unita-year-label");e&&(e.textContent=C[T]||"—");const n=document.getElementById("unita-anno-label-2");n&&(n.textContent=(e==null?void 0:e.textContent)||"—")}async function Pe(){const t=C[T];if(!t){alert("Nessun anno disponibile.");return}if(confirm("Sincronizzare le unità per l'anno "+t+"? L'operazione è idempotente."))try{const e={legacy_code:v,steps:["unita","soggetti","diritti"],anno:Number(t),dry_run:!1},n=await fetch(g("importUnita"),{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify(e)}),o=await n.json().catch(()=>({}));if(!n.ok||o.ok===!1){const i=(o.results||[]).filter(a=>a&&a.ok===!1).map(a=>a.step).join(", ");alert("Sync Unità fallita: "+(o.error||i||n.status));return}alert("Sync Unità eseguita su "+t+": "+(o.results||[]).map(i=>i.step+":"+(i.ok?"OK":"FAIL")).join(" | "))}catch{alert("Errore rete sync unità")}}async function O(){const n=(C||[])[T||0],o=document.getElementById("unita-anno-label-2");o&&(o.textContent=n||"—");const i=document.getElementById("unita-legacy-head"),a=document.getElementById("unita-legacy-body");if(!v||!i||!a){a&&(a.innerHTML='<tr><td class="text-xs text-gray-500">Dati non disponibili.</td></tr>');return}a.innerHTML='<tr><td class="text-xs text-gray-500">Caricamento…</td></tr>';try{let c=g("unitaYear")+"?legacy_code="+encodeURIComponent(v)+"&limit=50";n&&(c+="&anno="+encodeURIComponent(n));const s=await fetch(c),l=await s.json().catch(()=>({}));if(!s.ok||l.ok===!1){i.innerHTML="<th>—</th>",a.innerHTML='<tr><td class="text-xs text-danger">Errore o nessun dato</td></tr>';return}Ye(l.headers||[],l.rows||[])}catch{i.innerHTML="<th>—</th>",a.innerHTML='<tr><td class="text-xs text-danger">Errore rete</td></tr>'}}function Ye(t,e){const n=document.getElementById("unita-legacy-head"),o=document.getElementById("unita-legacy-body");if(!n||!o)return;const i=(t||[]).filter(a=>!/^memo$/i.test(a)).slice(0,12);if(!i.length){n.innerHTML="<th>—</th>",o.innerHTML='<tr><td class="text-xs text-gray-500">Nessun dato.</td></tr>';return}if(n.innerHTML=i.map(a=>"<th>"+r(a)+"</th>").join(""),!e||!e.length){o.innerHTML='<tr><td colspan="'+i.length+'" class="text-xs text-gray-500">Nessuna riga.</td></tr>';return}o.innerHTML=e.map(a=>"<tr>"+i.map(c=>'<td class="text-xs legacy-value" data-field-value="'+r(c)+'">'+r(String(a[c]??""))+"</td>").join("")+"</tr>").join("")}function Ve(t,e,n){return e?!1:confirm(n?"Importare lo STABILE (solo anagrafica) per il legacy "+n+"?":"Importare lo STABILE (solo anagrafica)?")}function Ge(){return!0}function Ke(){document.querySelectorAll("#mapping-form select").forEach(t=>t.value="")}async function Xe(){try{const t=parseInt(document.getElementById("giAnno").value||new Date().getFullYear()),e=document.getElementById("giTipo").value,n=document.getElementById("giLegacy").value||"",o={};document.querySelectorAll(".giMese").forEach(c=>{c.checked&&(o[c.dataset.mese]="on")});const i=m.routes.stabiliGestioneStore||"#";if(!i||i==="#")throw new Error("Nessuno stabile selezionato");if(!(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify({anno_gestione:t,tipo_gestione:e,codice_archivio_legacy:n,mesi:o})})).ok)throw new Error("Errore durante la creazione");window.location.href=(m.routes.stabileShow||"")+"#tab-gestioni"}catch(t){alert(t.message||"Errore")}}async function We(t,e){if(!(!t||!e)&&confirm("Applicare il mapping (conti + gestioni) allo stabile selezionato?"))try{const n={legacy_code:t,stabile_id:e},o=await fetch(g("applyMapping"),{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify(n)}),i=await o.json().catch(()=>({}));if(!o.ok||!i.ok){alert("Errore applicazione mapping: "+(i.error||o.status));return}alert("Mapping applicato. Conti creati: "+i.conti.created+" (upd "+i.conti.updated+"). Gestioni create: "+i.gestioni.created+" (upd "+i.gestioni.updated+")."),setTimeout(()=>{m.routes.stabileShow&&(window.location.href=m.routes.stabileShow+"#tab-gestioni")},600)}catch{alert("Errore rete / runtime")}}async function Qe(){var t;try{const e=m.routes.stabileAdminQuick||"";if(!e){alert("Stabile non selezionato");return}const n=(((t=document.getElementById("quickAdminCf"))==null?void 0:t.value)||"").trim(),o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify({cod_fisc_amministratore:n})}),i=await o.json().catch(()=>({}));if(!o.ok||i.ok===!1){alert("Errore salvataggio CF amministratore");return}alert("CF amministratore aggiornato")}catch{alert("Errore rete")}}async function Ze(t){if(t&&confirm("Eseguire import rapido per lo stabile "+t+"?"))try{const e=await fetch(g("quickStabile"),{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify({legacy_code:t})}),n=await e.json().catch(()=>({}));if(!e.ok||!n.ok){alert("Errore import rapido: "+(n.error||e.status));return}alert("Import rapido OK: "+(n.created?"Creato":"Aggiornato")+" ID "+n.stabile_id),setTimeout(()=>window.location.reload(),600)}catch{alert("Errore rete import rapido")}}async function De(t){if(t&&confirm("Eseguire MICRO import per lo stabile "+t+"?"))try{const e=await fetch(g("microImportStabile"),{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-TOKEN":M},body:JSON.stringify({legacy_code:t})}),n=await e.json().catch(()=>({}));if(!e.ok||!n.ok){alert("Errore micro import: "+(n.error||e.status));return}alert("Micro import OK: "+(n.created?"Creato":"Aggiornato")+" ID "+n.stabile_id+`
Fonte: `+(n.source||"-")),setTimeout(()=>window.location.reload(),600)}catch{alert("Errore rete micro import")}}window.switchSegment=ke,window.syncMappingSearch=Ie,window.setMappingFilter=ee,window.applyPreset=oe,window.updatePresetMeta=G,window.updateMappingPreviews=te,window.promptAddField=Me,window.browseSample=function(t){return ie(t)},window.loadSample=function(t){return V(t)},window.syncLegacyPreview=qe,window.__toggleInlineCreate=function(t,e){ze(t,e!==!1)},window.handleImportConfirm=Ve,window.saveMapping=Ge,window.resetMapping=Ke,window.populateGestioneRatesFromData=K,window.browseGestioneYear=Ne,window.loadGestioneYearData=q,window.loadLegacyCasse=X,window.renderLegacyCasse=W,window.filterLegacyCasse=Oe,window.addBancaMapping=Q,window.removeBancaMappingRow=Fe,window.syncBancheJson=k,window.saveBancheMapping=Ue,window.loadLegacyYears=re,window.browseUnitaYear=Je,window.syncUnitaCurrentYear=Pe,window.refreshUnitaPreview=O,window.giCreaGestione=Xe,window.applyMappingImport=We,window.quickSaveAdminCf=Qe,window.quickImportStabile=Ze,window.microImportStabile=De,window.addManualValueRow=ne,window.syncManualValueRow=Y,window.removeManualValueRow=Ae,window.escapeHtml=r,document.addEventListener("DOMContentLoaded",function(){window.__targetFields=Array.isArray(m.targetFields)?m.targetFields:[],Le();try{const t=document.getElementById("preset-select");t&&(t.value=m.savedPresetKey||m.defaultPreset||"stabili_full",document.getElementById("preset_key").value=t.value||"",G(),m.savedPresetKey||oe())}catch{}ie(0),ee("all"),v&&(re(),X(),(async()=>{try{if(Array.isArray(m.availableYears)&&m.availableYears.length)try{await q()}catch{}else{const e=await fetch(g("years")+"?legacy_code="+encodeURIComponent(v));if(e.ok){const n=await e.json(),o=Array.isArray(n.years)?n.years:[];if(o.length){x=o,L=Math.max(0,x.length-1),F();try{await q()}catch{}}}}}catch{}})()),document.querySelectorAll(".js-import-form").forEach(t=>{t.addEventListener("submit",()=>{const e=document.getElementById("import-progress");e&&e.classList.remove("d-none");let n=15;const o=document.getElementById("import-progress-bar");setInterval(()=>{n=Math.min(90,n+Math.random()*7),o&&(o.style.width=n+"%")},400),t.querySelectorAll('button[type="submit"]').forEach(i=>i.setAttribute("disabled","disabled"))},{once:!0})}),function(){document.getElementById("gestione-year-label")&&F()}()}),window.addEventListener("error",function(t){try{const e="gescon-mapping-diagnostics";let n=document.getElementById(e);n||(n=document.createElement("div"),n.id=e,n.style.cssText="position:fixed;bottom:6px;right:6px;z-index:9999;background:#fee;border:1px solid #f99;padding:6px 10px;font:12px monospace;max-width:420px;max-height:180px;overflow:auto;",n.innerHTML="<strong>JS Error</strong><br>",document.body.appendChild(n)),n.innerHTML+=t.message+" @"+(t.filename||"")+":"+t.lineno+"<br>"}catch{}})})();