++ 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:
Francesco Picone
2026-10-19 17:51:37 +02:00
parent 5d0ae06eca
commit 96084499f5
41 changed files with 2298 additions and 224 deletions

View File

@@ -24,6 +24,9 @@ use App\Livewire\Proclamatori\ProclamatoreEdit;
use App\Livewire\Proclamatori\ProclamatoreCestino;
use App\Livewire\Assegnazioni\Assegna;
use App\Livewire\Assegnazioni\Rientra;
use App\Livewire\Gruppi\GruppiIndex;
use App\Livewire\Gruppi\GruppoShow;
use App\Livewire\Gruppi\MioGruppo;
use App\Livewire\Campagne\CampagnaIndex;
use App\Livewire\Campagne\CampagnaCreate;
use App\Livewire\Campagne\CampagnaShow;
@@ -163,10 +166,20 @@ Route::middleware(['auth', 'verified'])->group(function () {
Route::middleware('permission:territori.assign')->group(function () {
Route::get('assegnazioni/assegna/{territorioId?}', Assegna::class)->name('assegnazioni.assegna');
});
Route::middleware('permission:territori.return')->group(function () {
// Il rientro lo registra anche il sorvegliante di gruppo, ma solo per il
// suo gruppo: il controllo fine è in Rientra::autorizza().
Route::middleware('permission:territori.return|gruppo.gestisci')->group(function () {
Route::get('assegnazioni/{assegnazione}/rientra', Rientra::class)->name('assegnazioni.rientra');
});
// Il mio gruppo: la sola pagina del sorvegliante di gruppo (vedi anche
// il middleware LimitaSorvegliante).
Route::middleware('permission:gruppo.gestisci')->group(function () {
Route::get('mio-gruppo', MioGruppo::class)->name('mio-gruppo');
Route::get('mio-gruppo/territori/{territorio}/pdf', [TerritorioFileController::class, 'pdfGruppo'])
->name('mio-gruppo.pdf');
});
// Campagne — visualizzazione per chi ha campagne.manage; sola lettura per i
// non-admin.
Route::middleware('permission:campagne.manage')->group(function () {
@@ -200,6 +213,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
Route::middleware('permission:settings.manage')->group(function () {
Route::get('impostazioni', SettingsEdit::class)->name('settings.edit');
Route::get('utenti', UsersIndex::class)->name('users.index');
Route::get('gruppi', GruppiIndex::class)->name('gruppi.index');
Route::get('gruppi/{gruppo}', GruppoShow::class)->name('gruppi.show');
Route::get('zone', ZoneIndex::class)->name('zone.index');
Route::get('tipologie', TipologieIndex::class)->name('tipologie.index');
Route::get('xml-exchange', XmlExchange::class)->name('xml.exchange');