++ gruppi di servizio: sorvegliante con utenza limitata, pacchetto di territori, assegnazione ai membri
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>
This commit is contained in:
60
HANDOFF.md
60
HANDOFF.md
@@ -4,7 +4,7 @@ Stato del progetto per chi ci mette mano dopo. Per installazione, deploy e uso
|
||||
quotidiano vedi [README.md](README.md); qui c'è il contesto che il README non
|
||||
può dare: perché le cose sono come sono, e cosa resta aperto.
|
||||
|
||||
Ultimo aggiornamento: **12 ottobre 2026** — vedi [Lavori in corso](#lavori-in-corso--12-ottobre-2026-riprendere-da-qui).
|
||||
Ultimo aggiornamento: **19 ottobre 2026** (gruppi di servizio, solo su dev) — vedi [Lavori in corso](#lavori-in-corso--12-ottobre-2026-riprendere-da-qui).
|
||||
|
||||
---
|
||||
|
||||
@@ -127,6 +127,64 @@ email di prova e di conferma arrivate, link aperto senza login, account
|
||||
sbloccato; riquadro dopo l'assegnazione con WhatsApp e scelta. Configurazione
|
||||
e dati di prova rimossi dopo.
|
||||
|
||||
### Gruppi di servizio (19 ottobre 2026, solo su dev)
|
||||
|
||||
Richiesta dell'utente: un **gruppo di servizio** con un sorvegliante che,
|
||||
entrato con una sua utenza, distribuisce ai membri un pacchetto di territori
|
||||
e non vede nient'altro. Scelte dell'utente:
|
||||
|
||||
- Il gruppo ha **membri** (proclamatori); un proclamatore sta in **un solo**
|
||||
gruppo; il sorvegliante è anche membro e assegna solo ai membri, a sé
|
||||
compreso.
|
||||
- Il **pacchetto non è un'assegnazione**: "la media non deve essere alterata".
|
||||
I territori del pacchetto sono "In gruppo …" (stato `in_gruppo`), fuori da
|
||||
"Da assegnare" e dalla pagina *Assegna* (`Territorio::scopeInReparto`
|
||||
esclude `gruppo_servizio_id`).
|
||||
- Quando il sorvegliante dà un territorio nasce un'**assegnazione normale**,
|
||||
tracciata con `assegnazioni.gruppo_servizio_id` ("via gruppo …" nel
|
||||
registro e nella scheda del territorio).
|
||||
- Al **rientro** il territorio esce dal pacchetto e torna in reparto
|
||||
(hook `updated` in `Assegnazione`, vale da qualunque pagina).
|
||||
- Il sorvegliante: assegna, manda il link (copia/condividi), registra i
|
||||
rientri, apre la piantina, rimanda in reparto i non dati. Gruppi, membri e
|
||||
pacchetti li gestisce **solo l'amministratore**.
|
||||
- Utenza: email e password temporanea da cambiare al primo accesso, **senza
|
||||
conferma dell'email** (`User::hasVerifiedEmail()` è vero per il
|
||||
sorvegliante; anche cambiandola dal profilo).
|
||||
- **Togliere il ruolo = sciogliere il gruppo** (`GruppiServizio::sciogli`):
|
||||
non dati in reparto, membri liberi, utenza senza ruolo e disattivata
|
||||
(`users.disattivato_at`: login rifiutato, sessione aperta chiusa da
|
||||
`LimitaSorvegliante`), gruppo archiviato (`sciolto_at`) per lo storico. I
|
||||
territori già dati restano ai membri. Si riparte con un gruppo nuovo.
|
||||
|
||||
Dove sta:
|
||||
- Migrazione `2026_10_20_000010_gruppi_di_servizio`: tabella
|
||||
`gruppi_servizio`, colonne `gruppo_servizio_id` su proclamatori, territori e
|
||||
assegnazioni, `users.proclamatore_id` (unico) e `users.disattivato_at`,
|
||||
permesso `gruppo.gestisci` e ruolo `sorvegliante`. Il seeder dà
|
||||
all'amministratore tutti i permessi **tranne** `gruppo.gestisci`.
|
||||
- Regole in `App\Services\GruppiServizio` (crea, aggiungiMembri, togliMembro,
|
||||
aggiungiAlPacchetto, rimandaInReparto, assegna, sciogli); i componenti
|
||||
`Gruppi\GruppiIndex`, `Gruppi\GruppoShow` (amministratore) e
|
||||
`Gruppi\MioGruppo` (sorvegliante) le chiamano soltanto.
|
||||
- `LimitaSorvegliante` (gruppo `web`): chi ha **solo** il ruolo sorvegliante
|
||||
raggiunge `mio-gruppo*`, `assegnazioni.rientra` (solo per il suo gruppo,
|
||||
controllo in `Rientra::autorizza`), profilo e cambio password; la Home lo
|
||||
rimanda al gruppo; il resto è 403.
|
||||
- L'invio del link è diventato il trait `Concerns\InviaLink` + il partial
|
||||
`assegnazioni/_invio-link`, usati da *Assegna* e da *Il mio gruppo*.
|
||||
- Il ruolo sorvegliante non compare nella pagina *Utenti* e le utenze legate a
|
||||
un proclamatore lì non si modificano né si eliminano: passano dal gruppo.
|
||||
- La voce di menu "Il mio gruppo" guarda il **ruolo**, non `@can`:
|
||||
l'amministratore passa ogni `@can` (`Gate::before`).
|
||||
- XML: si esportano e reimportano gruppi, membri, pacchetto, provenienza delle
|
||||
assegnazioni e il legame utenza ↔ proclamatore.
|
||||
- Informativa privacy aggiornata (utenza del sorvegliante, gruppo tra i dati
|
||||
del proclamatore).
|
||||
- Test: `tests/Feature/GruppiServizioTest.php`.
|
||||
|
||||
Non provato nel browser. **In produzione non c'è**: serve l'ok dell'utente.
|
||||
|
||||
### Proclamatori senza contatti; il link si copia o si condivide (19 ottobre 2026)
|
||||
|
||||
Decisione dell'utente, dopo il rilascio: i proclamatori **non hanno più email
|
||||
|
||||
Reference in New Issue
Block a user