diff --git a/src/modules/ar1/pages/Ar1Wizard.js b/src/modules/ar1/pages/Ar1Wizard.js index 36b18fd..dc25d5d 100644 --- a/src/modules/ar1/pages/Ar1Wizard.js +++ b/src/modules/ar1/pages/Ar1Wizard.js @@ -187,10 +187,15 @@ const Ar1Wizard = () => { }; const handleFieldChange = (quadroId, fieldId, value) => { - setQuadriValues(prev => ({ - ...prev, - [quadroId]: { ...(prev[quadroId] || {}), [fieldId]: value } - })); + setQuadriValues(prev => { + const next = { ...prev, [quadroId]: { ...(prev[quadroId] || {}), [fieldId]: value } }; + // Autosave sospeso (post-401): il draft locale segue OGNI modifica, non solo + // lo snapshot iniziale (fix R6 — niente perdita dei dati inseriti dopo il banner) + if (authExpiredRef.current) { + try { localStorage.setItem(`ar1_draft_${formId}`, JSON.stringify({ ts: Date.now(), quadri: next })); } catch (e) { /* quota */ } + } + return next; + }); }; const handleRowFieldChange = (quadroId, rowIndex, fieldId, value) => { @@ -298,7 +303,7 @@ const Ar1Wizard = () => { return (
{commonLabel} - onChange(field.id, e.value ? e.value.toISOString().slice(0, 10) : null)} disabled={disabled} dateFormat="dd/mm/yy" showIcon style={{ width: '100%' }} /> + onChange(field.id, e.value ? `${e.value.getFullYear()}-${String(e.value.getMonth() + 1).padStart(2, '0')}-${String(e.value.getDate()).padStart(2, '0')}` : null)} disabled={disabled} dateFormat="dd/mm/yy" showIcon style={{ width: '100%' }} />
); case 'checkbox': @@ -373,6 +378,43 @@ const Ar1Wizard = () => { } }; + // Nominativi titolari effettivi dal Quadro B (per prefill coincidenza LR/esecutore) + const titolariB = useMemo(() => { + const b = quadriValues['B'] || {}; + const rows = b.rows || []; + return rows.map(r => (r && r.cognome_nome ? String(r.cognome_nome).trim() : '')).filter(Boolean); + }, [quadriValues]); + + // Campo nominativo di coincidenza (Quadro C: lr_te_reference, D: esecutore_lr_reference). + // Reso SOLO se la spunta di coincidenza e attiva; il valore e sempre persistito + // cosi da comparire nel PDF (fix regressione R7, modulo 231/2007 mai senza nominativo). + const renderCoincidenceRef = (quadro, field, q) => { + if (!isFieldVisible(field, q)) return null; // spunta OFF: se ne occupa il nested_full + const key = `q-${quadro.id}-${field.id}`; + const val = q[field.id] || ''; + const onSet = (v) => handleFieldChange(quadro.id, field.id, v); + return ( +
+ + {titolariB.length > 0 ? ( + ({ label: n, value: n }))} + onChange={(e) => onSet(e.value)} + disabled={isReadonly} + placeholder={__('Seleziona dal Quadro B', 'gepafin')} + editable + style={{ width: '100%' }} + /> + ) : ( + onSet(e.target.value)} disabled={isReadonly} maxLength={field.max_length} placeholder={__('Cognome e Nome', 'gepafin')} style={{ width: '100%' }} /> + )} + {__('Compilare con uno dei titolari effettivi indicati al Quadro B.', 'gepafin')} +
+ ); + }; + const renderQuadro = (quadro) => { const q = quadriValues[quadro.id] || {}; @@ -448,7 +490,8 @@ const Ar1Wizard = () => {

{quadro.title}

{quadro.description &&

{quadro.description}

} - {(quadro.fields || []).filter(field => isFieldVisible(field, q)).map(field => renderField(field, q[field.id], (fid, val) => handleFieldChange(quadro.id, fid, val), `q-${quadro.id}`))} + {(quadro.fields || []).filter(field => isFieldVisible(field, q) && !field.coincidence_ref).map(field => renderField(field, q[field.id], (fid, val) => handleFieldChange(quadro.id, fid, val), `q-${quadro.id}`))} + {(quadro.fields || []).filter(field => field.coincidence_ref).map(field => renderCoincidenceRef(quadro, field, q))} {quadro.nested_full && evalShowIf(quadro.nested_full.show_if, q) && (

{__('Dettaglio aggiuntivo', 'gepafin')}

@@ -498,6 +541,7 @@ const Ar1Wizard = () => { setStepErrors([]); } if (!isReadonly && activeQuadro) saveQuadro(activeQuadro.id); + setStepErrors([]); setActiveIndex(next); }} readOnly={false} @@ -558,6 +602,7 @@ const Ar1Wizard = () => { setStepErrors([]); saveQuadro(activeQuadro.id); } + setStepErrors([]); setActiveIndex(Math.min(quadri.length - 1, activeIndex + 1)); }} />