- L'utenza del sorvegliante ha un'email fittizia creata dall'app:
iniziale del nome e cognome @termanager.it (ffontana@termanager.it),
come gli altri utenti. Via il nome utente: login di nuovo per email.
- Sciolto il gruppo l'utenza si elimina, il sorvegliante torna un
proclamatore come gli altri: assegnazioni a chi scioglie, registro a nome
"Sorvegliante del gruppo ...". Via le utenze disattivate.
- User::eliminaConservandoStorico(): l'eliminazione della pagina Utenti in
un metodo solo, usato anche dallo scioglimento.
- Migrazione 000030: elimina le utenze gia' disattivate, toglie
users.username e users.disattivato_at, email di nuovo obbligatoria.
- XML, informativa privacy, README, HANDOFF e test aggiornati.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sciolto, il gruppo non resta nello storico: si elimina (via sciolto_at;
la migrazione elimina anche quelli gia' sciolti). I territori solo nel
pacchetto tornano in reparto; quelli gia' dati restano ai membri, e
l'assegnazione conserva il nome del gruppo (assegnazioni.gruppo_nome).
- Creando il gruppo non si chiede l'email: users.username dal nome del
gruppo ("Gruppo Zisa" -> gruppo.zisa), users.email facoltativa. Login con
"Email o nome utente". Nome del gruppo unico.
- Sciolto il gruppo il nome utente si libera (l'utenza disattivata prende
ex.sorvegliante.<id>). XML: nome utente e gruppo_nome.
- Profilo, testata, cambio password e Utenti mostrano il nome utente dove
manca l'email. Informativa privacy, README, HANDOFF e test aggiornati.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Badge "Gruppo ..." / "Sorvegliante del gruppo ..." nell'elenco dei
proclamatori (con il filtro "In un gruppo di servizio") e in testa alla
scheda; nella scelta del proclamatore (Assegna, Registro) la nota
"gruppo ..." accanto al nome, che resta sceglibile.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Proclamatore::booted: reso non attivo, spostato nel cestino o
anonimizzato, il sorvegliante scioglie il gruppo (territori non dati in
reparto, membri liberi, utenza disattivata); il motivo va nel registro.
L'elenco chiede conferma, la modifica avvisa sotto "Attivo". Un membro
nel cestino esce dal gruppo.
- Scheda del proclamatore: gruppo guidato con membri, pacchetto, da dare,
assegnazioni dal gruppo, utenza e ultimo accesso; oppure gruppo di cui
e' membro; gruppi sciolti guidati in passato.
- Profilo del sorvegliante: il suo gruppo con gli stessi numeri.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Un ex sorvegliante puo' guidare un gruppo nuovo: si riattiva la sua
utenza. Il sorvegliante di un gruppo attivo non si cestina ne' si
anonimizza; anonimizzando un ex sorvegliante si anonimizza anche
l'utenza. Nel registro delle attivita' nome ed email dell'utenza del
sorvegliante diventano "proclamatore #id". La voce "Il mio gruppo"
dipende dal ruolo: l'amministratore passa ogni @can.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Il gruppo ha un sorvegliante (proclamatore con utenza: email e password
temporanea, senza conferma dell'email) e dei membri; l'amministratore
mette in blocco dei territori nel pacchetto del gruppo. Il pacchetto non
e' un'assegnazione e non tocca le statistiche; quando il sorvegliante da'
un territorio a un membro nasce un'assegnazione normale con
gruppo_servizio_id. Al rientro il territorio torna in reparto. Sciogliere
il gruppo libera pacchetto e membri e disattiva l'utenza.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Migrazione: tolte le colonne email e telefono dei proclamatori (vuote
in produzione). Tolti da form, scheda, elenco, XML (un file vecchio si
importa ignorandoli).
- Invio del link: solo "Copia link" e "Condividi…" (menu di condivisione
del telefono, navigator.share): il destinatario lo sceglie chi usa
l'app. Via WhatsApp diretto, canale email, notifica LinkTerritorio,
componente x-whatsapp.
- Elenco assegnati: "Condividi" al posto di WhatsApp; a condivisione
fatta il link risulta inviato.
- Informativa privacy, README, HANDOFF e test aggiornati.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Al posto delle tendine (Assegna, Registro, editor delle piantine) un
campo in cui si scrive e compaiono le proposte più vicine: uguale, inizia
con, contiene, errore di battitura ("forse cercavi"); parole in qualsiasi
ordine, senza badare a maiuscole e accenti. Campo vuoto: la tendina
completa. Fatto anche per il telefono (16px, voci da 44px, scelta al tocco).
- Logica pura in resources/js/scelta.js con test node (tests/js).
- Opzioni dal server: Territorio/Proclamatore::opzioneScelta(); i
territori già assegnati si trovano ("già assegnato a …") ma non si
scelgono. Nomi cifrati ordinati e cercati decifrati, mai in SQL.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Server di posta in Impostazioni (password cifrata, email di prova): se
compilato prende il posto del .env; non si esporta e l'import XML non lo
cancella. MAIL_SCHEME=tls nel .env.example non era valido per Laravel 11.
- Proclamatori con email e telefono facoltativi, cifrati, nell'XML e
cancellati dall'anonimizzazione; il numero apre WhatsApp.
- Dopo l'assegnazione un riquadro in evidenza con il link del PDF,
"Invia su WhatsApp" con il messaggio pronto e la scelta "inviato /
non ancora", che resta finché non si sceglie.
- Conferma dell'email obbligatoria per tutti gli utenti, anche esistenti:
email in italiano, link valido senza login, nuova conferma a ogni cambio
di indirizzo, "Reinvia conferma" in Utenti. Senza conferma restano
raggiungibili profilo, cambio password e, per l'admin, il server di
posta; comando utenti:conferma-email per l'emergenza.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>