- Dopo l'assegnazione si apre una finestra con i canali (copia link
sempre; WhatsApp ed email solo se il proclamatore ha numero /
indirizzo, l'email solo con la posta configurata) e la domanda "Hai
inviato il link?". Si va avanti solo dopo la risposta.
- L'email la manda l'app con notifyNow, mai in coda: l'indirizzo è
cifrato nel database e non deve finire in chiaro nei job.
- Procedura interrotta o "non ancora": assegnazioni.link_da_inviare
resta vero e "Link ancora da inviare" compare nell'elenco Assegna e
nella scheda territorio, con "Invia link" per riprendere.
- Colonne link_da_inviare e link_canale (anche nell'XML); log con
canale e proclamatore_id, senza dati personali.
- "Nuovo territorio" apre il designer delle piantine già in disegno, con
la prima piantina pronta a creare il territorio.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Se il territorio è rimasto fuori oltre la soglia "giorni_per_smarrito",
il banner della campagna mostra un avviso (non bloccante). Giorni e
avviso vengono salvati anche nell'evento "campagna_percorso".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Registrato al rientro quando viene proposta una campagna (Sì/No) e nel
Registro quando l'amministratore imposta o modifica il conteggio.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Dettaglio campagna: mostra tutti i territori conteggiati (stessa base
della percentuale), non solo quelli assegnati dopo l'inizio.
- Rientro: se più campagne corrispondono propone la più recente invece
della prima creata; testo del banner chiarito.
- Dettaglio campagna: nuova sezione "In corso" con i territori fuori
durante la campagna e non ancora rientrati.
- README: regola di conteggio documentata.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Modulo S-13
- Il PDF scrive sopra il modulo ufficiale (FPDI, matrice convertita in PDF 1.4)
invece di ricostruirlo in HTML: 20 righe per foglio come l'originale.
- Una riga per ogni territorio attivo; riporto dell'ultimo rientro prima
dell'anno; assegnazioni a cavallo d'anno su entrambi i fogli; scelta per
data e non per anno registrato; nomi come "Cognome I.".
- Logica spostata in App\Services\Registro\ModuloS13.
Integrità dei dati
- Export/import XML (e quindi backup/ripristino): le date non slittano più di
un giorno; i file vecchi in UTC tornano al giorno giusto.
- Import XML: rifiuta file estranei o incompleti senza toccare i dati, errore
con riga e motivo, territori senza zona importati con il loro storico,
caratteri di controllo rimossi in export, chi importa conserva password e
ruolo di amministratore.
- Assegnazioni: assegnazioneCorrente corretta (filtro dentro ofMany), periodi
sovrapposti rifiutati in Assegna e Registro sotto lock, anno di servizio
ricavato dalla data, niente date future nel Registro.
- Utenti: non si declassa sé stessi né l'ultimo amministratore.
- Entrypoint: non sovrascrive più la copia persistente di APP_KEY con un
valore diverso; serve APP_KEY_ROTATE=1 per un cambio voluto.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>