++ Richieste dal modulo pubblico, territori cartacei, S-13 mensile per email
- /richiesta: modulo pubblico (nuovo territorio o riconsegna) con campo trappola, tempo minimo e limite orario; nome e note cifrati, avviso per email a chi ha richieste.gestisci (amministratore, assistente) - Home: riquadro Richieste con i proclamatori dal nome simile; porta su Assegna/Rientra già esistenti, che chiudono la richiesta; Scarta - Cartaceo sull'assegnazione (Assegna e Il mio gruppo), etichetta nell'elenco degli assegnati, pagina Cartacei, passa per l'XML - registro:invia-s13 agli amministratori l'ultima domenica del mese; richieste:pulizia dopo 90 giorni dalla gestione - Privacy, README e HANDOFF aggiornati; test in RichiesteTest Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
67
README.md
67
README.md
@@ -3,7 +3,9 @@
|
||||
Applicazione web per la gestione dell'assegnazione e del rientro dei territori
|
||||
(cartoline) di congregazione, con statistiche di percorrenza, campagne speciali,
|
||||
gruppi di servizio (un sorvegliante distribuisce ai membri un pacchetto di
|
||||
territori) e registro storico completo.
|
||||
territori), un modulo pubblico con cui i proclamatori chiedono un territorio o
|
||||
ne annunciano la riconsegna, l'elenco delle cartoline cartacee fuori, il
|
||||
modulo S-13 per email ogni mese e registro storico completo.
|
||||
|
||||
I dati personali dei proclamatori sono **cifrati nel database**, e ogni
|
||||
operazione è tracciata in un **audit log** consultabile.
|
||||
@@ -50,7 +52,7 @@ eseguito né `composer install` né `npm build` all'avvio.
|
||||
|----------------|------------------------------------------------|---------|
|
||||
| `app` | nginx + php-fpm — l'applicazione | via Traefik |
|
||||
| `queue-worker` | Job in coda (import PDF massivi) | no |
|
||||
| `scheduler` | Task pianificati (pulizia audit log) | no |
|
||||
| `scheduler` | Task pianificati (pulizie, S-13 mensile) | no |
|
||||
| `mariadb` | Database | no |
|
||||
| `redis` | Cache, sessioni, code | no |
|
||||
|
||||
@@ -630,12 +632,21 @@ docker exec -it <app> php artisan audit:cleanup
|
||||
docker exec -it <app> php artisan backup:cleanup
|
||||
docker exec -it <app> php artisan backup:cleanup --ore=0 # tutti
|
||||
|
||||
# Pulizia manuale delle richieste dal modulo pubblico gestite da più di 90 giorni
|
||||
docker exec -it <app> php artisan richieste:pulizia
|
||||
|
||||
# Mandare subito il modulo S-13 agli amministratori (anno in corso, o un altro)
|
||||
docker exec -it <app> php artisan registro:invia-s13
|
||||
docker exec -it <app> php artisan registro:invia-s13 --anno=2025-2026
|
||||
|
||||
# Svuotare le cache
|
||||
docker exec -it <app> php artisan optimize:clear
|
||||
```
|
||||
|
||||
Entrambe le pulizie girano già da sole ogni notte (container `scheduler`); i
|
||||
comandi qui sopra servono solo per anticiparle.
|
||||
Le pulizie girano già da sole ogni notte e il modulo S-13 parte da solo
|
||||
l'ultima domenica del mese alle 8 (container `scheduler`); i comandi qui sopra
|
||||
servono solo per anticiparli. Senza un server di posta funzionante il modulo
|
||||
S-13 non parte (il comando lo dice).
|
||||
|
||||
---
|
||||
|
||||
@@ -696,6 +707,8 @@ docker compose --profile dev up -d --build
|
||||
l'elenco è troncato, **"Vedi tutti"** è un pulsante in testata che apre
|
||||
l'elenco territori già filtrato. "Assegna →" apre la pagina *Assegna* con
|
||||
il territorio scelto e senza l'elenco dei territori assegnati
|
||||
- **Richieste** dal modulo pubblico (amministratore e assistenti): vedi
|
||||
[Richieste dal modulo pubblico](#richieste-dal-modulo-pubblico)
|
||||
|
||||
### Territori
|
||||
- CRUD completo con upload PDF e miniatura generata automaticamente
|
||||
@@ -745,6 +758,33 @@ docker compose --profile dev up -d --build
|
||||
compare un avviso di tempo di percorrenza molto alto
|
||||
- **Dopo una conferma o un annulla si torna alla pagina di partenza**, con i
|
||||
suoi filtri, ricerca, ordinamento e pagina (aperta dal menu: come prima)
|
||||
- **Cartolina cartacea**: assegnando (anche il sorvegliante di gruppo) si può
|
||||
spuntare *Ha chiesto la cartolina cartacea*. Il segno sta sull'assegnazione:
|
||||
nell'elenco degli assegnati compare l'etichetta "cartaceo" e la pagina
|
||||
**Cartacei** (menu, sotto *Assegnazioni*) elenca i territori cartacei fuori
|
||||
e a chi, con i giorni e il pulsante Rientro. Al rientro escono dall'elenco
|
||||
|
||||
### Richieste dal modulo pubblico
|
||||
- **Modulo pubblico** all'indirizzo `/richiesta`, senza login (l'indirizzo
|
||||
completo è scritto nella Home, da passare ai proclamatori): nome e cognome,
|
||||
*nuovo territorio* o *riconsegna* (con il numero del territorio), una nota.
|
||||
Non mostra nessun dato già presente
|
||||
- **Contro lo spam**: un campo trappola nascosto, un tempo minimo fra apertura
|
||||
e invio (in questi due casi risponde "inviata" senza salvare) e al massimo 5
|
||||
richieste all'ora dallo stesso indirizzo
|
||||
- **Avviso per email** ad amministratori e assistenti (permesso
|
||||
`richieste.gestisci`) con l'email confermata, se il server di posta
|
||||
funziona; la richiesta resta comunque nella Home
|
||||
- **Nella Home**, riquadro *Richieste*: per un nuovo territorio i proclamatori
|
||||
attivi con un nome simile a quello scritto (uguale, iniziale, una lettera
|
||||
sbagliata, in qualsiasi ordine e senza accenti), ognuno porta al modulo
|
||||
*Assegna* già con quel proclamatore; *Nessuno di questi* apre il modulo
|
||||
vuoto. Per una riconsegna, a chi risulta assegnato il territorio e *Registra
|
||||
rientro →*. Fatta l'assegnazione o il rientro, la richiesta risulta evasa;
|
||||
altrimenti si può **scartare**
|
||||
- Nome e nota sono cifrati nel database e non vanno nel registro delle
|
||||
attività; le richieste gestite si cancellano da sole dopo 90 giorni
|
||||
(`richieste:pulizia`, ogni notte)
|
||||
|
||||
### Gruppi di servizio
|
||||
- Li gestisce solo l'amministratore (menu *Gruppi di servizio*): nome,
|
||||
@@ -815,6 +855,10 @@ docker compose --profile dev up -d --build
|
||||
### Registro assegnazioni
|
||||
- Filtri per anno teocratico, zona, tipologia, stato e ricerca testuale
|
||||
- Colonne: territorio, proclamatore, date, giorni, campagna
|
||||
- **Modulo S-13 per email**: l'ultima domenica di ogni mese alle 8 il modulo
|
||||
S-13 dell'anno di servizio in corso parte in PDF agli amministratori,
|
||||
all'email della loro utenza se confermata (`registro:invia-s13`, anche a
|
||||
mano). Non passa dalla coda: il PDF contiene i nomi dei proclamatori
|
||||
|
||||
### Audit log
|
||||
- Tracciamento automatico su tutti i modelli
|
||||
@@ -855,6 +899,7 @@ Quattro ruoli con permessi granulari (spatie/laravel-permission):
|
||||
| `territori.return` | ✅ | ✅ | ✅ | |
|
||||
| `audit.view` | ✅ | | | |
|
||||
| `audit.export` | ✅ | | | |
|
||||
| `richieste.gestisci` | ✅ | ✅ | | |
|
||||
| `gruppo.gestisci` | | | | ✅ |
|
||||
|
||||
L'amministratore ha un bypass completo (`Gate::before` in `AppServiceProvider`).
|
||||
@@ -881,7 +926,8 @@ una revoca ha effetto immediato senza bisogno di ricaricare la pagina.
|
||||
- **RBAC**: middleware `permission:` sulle rotte, riapplicato anche alle
|
||||
richieste Livewire
|
||||
- **CSRF**: token su tutti i form
|
||||
- **Rate limiting**: sul login
|
||||
- **Rate limiting**: sul login e sul modulo pubblico delle richieste (5
|
||||
all'ora per indirizzo, più campo trappola e tempo minimo contro lo spam)
|
||||
- **Host header**: accettate solo richieste il cui `Host` corrisponde a `APP_URL`
|
||||
- **Scheme forwarding**: lo schema è deciso dal server, non dall'header del
|
||||
client, per non falsare la validazione dei link firmati
|
||||
@@ -914,6 +960,14 @@ una revoca ha effetto immediato senza bisogno di ricaricare la pagina.
|
||||
- **No dati sensibili nei log**: l'audit registra gli identificativi, non i nomi
|
||||
in chiaro (anche per l'utenza di un sorvegliante di gruppo, che porta il nome
|
||||
di un proclamatore)
|
||||
- **Richieste dal modulo pubblico**: nome e nota cifrati come i dati dei
|
||||
proclamatori, fuori dal registro delle attività e dalla coda (l'email di
|
||||
avviso parte subito); cancellate 90 giorni dopo essere state gestite. Non
|
||||
sono nei backup (né XML né `.zip`, che contiene lo stesso XML): sono
|
||||
messaggi in arrivo, non dati gestionali, e un ripristino non le tocca.
|
||||
L'azzeramento (*Zona pericolosa*) le cancella
|
||||
- **Email**: il modulo S-13 (con i nomi) va solo agli amministratori con
|
||||
l'email confermata, l'avviso delle richieste solo a chi le gestisce
|
||||
- **Attenzione ai backup**: il pacchetto `.zip` e l'export XML contengono i dati
|
||||
dei proclamatori **in chiaro** (l'export li legge decifrati). Vanno custoditi
|
||||
in un luogo protetto e cancellati quando non servono
|
||||
@@ -933,7 +987,8 @@ una revoca ha effetto immediato senza bisogno di ricaricare la pagina.
|
||||
| `territori` | Cartoline con zona, tipologia, PDF, miniatura, soft delete; `gruppo_servizio_id` se sono nel pacchetto di un gruppo |
|
||||
| `anni_teocratici` | Periodi settembre → agosto |
|
||||
| `campagne` | Periodi speciali con date e descrizione |
|
||||
| `assegnazioni` | Territorio ↔ proclamatore, con date, anno e campagna; stato dell'invio del link (`link_sent`, `link_da_inviare`, `link_canale`); `gruppo_servizio_id` se data dal sorvegliante di un gruppo ancora attivo, `gruppo_nome` che resta anche dopo lo scioglimento |
|
||||
| `assegnazioni` | Territorio ↔ proclamatore, con date, anno e campagna; stato dell'invio del link (`link_sent`, `link_da_inviare`, `link_canale`); `gruppo_servizio_id` se data dal sorvegliante di un gruppo ancora attivo, `gruppo_nome` che resta anche dopo lo scioglimento; `cartaceo` se il proclamatore ha chiesto la cartolina cartacea |
|
||||
| `richieste` | Richieste dal modulo pubblico: tipo (`nuovo`/`riconsegna`), nome e nota cifrati, numero del territorio, stato (`aperta`/`evasa`/`scartata`), l'assegnazione che l'ha evasa, chi e quando l'ha gestita |
|
||||
| `activity_log` | Audit trail |
|
||||
|
||||
**Vincoli e indici principali**
|
||||
|
||||
Reference in New Issue
Block a user