- /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>
67 lines
2.6 KiB
PHP
67 lines
2.6 KiB
PHP
<?php
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
use Illuminate\Database\Schema\Blueprint;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Schema;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
use Spatie\Permission\PermissionRegistrar;
|
|
|
|
/**
|
|
* Dal documento delle attività per la versione 2, decise dall'utente il
|
|
* 21/10/2026:
|
|
*
|
|
* - richieste dal modulo pubblico (nuovo territorio o riconsegna), che
|
|
* responsabile e assistenti confermano dalla Home: tabella `richieste` e
|
|
* permesso `richieste.gestisci` (amministratore e assistente);
|
|
* - territorio chiesto in cartaceo: segno sull'assegnazione
|
|
* (`assegnazioni.cartaceo`).
|
|
*/
|
|
return new class extends Migration
|
|
{
|
|
public function up(): void
|
|
{
|
|
Schema::create('richieste', function (Blueprint $table) {
|
|
$table->id();
|
|
// 'nuovo' (richiesta di un territorio) | 'riconsegna'
|
|
$table->string('tipo', 20);
|
|
// Nome e cognome come li ha scritti chi compila: cifrati, come i
|
|
// proclamatori (cast `encrypted` nel modello).
|
|
$table->text('nome');
|
|
$table->string('numero_territorio', 20)->nullable();
|
|
$table->text('note')->nullable();
|
|
// 'aperta' | 'evasa' | 'scartata'
|
|
$table->string('stato', 20)->default('aperta')->index();
|
|
$table->foreignId('assegnazione_id')->nullable()->constrained('assegnazioni')->nullOnDelete();
|
|
$table->foreignId('gestita_da')->nullable()->constrained('users')->nullOnDelete();
|
|
$table->timestamp('gestita_at')->nullable();
|
|
$table->timestamps();
|
|
});
|
|
|
|
Schema::table('assegnazioni', function (Blueprint $table) {
|
|
$table->boolean('cartaceo')->default(false)->after('link_canale');
|
|
});
|
|
|
|
app(PermissionRegistrar::class)->forgetCachedPermissions();
|
|
$permesso = Permission::firstOrCreate(['name' => 'richieste.gestisci', 'guard_name' => 'web']);
|
|
foreach (['amministratore', 'assistente'] as $ruolo) {
|
|
Role::where('name', $ruolo)->where('guard_name', 'web')->first()?->givePermissionTo($permesso);
|
|
}
|
|
app(PermissionRegistrar::class)->forgetCachedPermissions();
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
app(PermissionRegistrar::class)->forgetCachedPermissions();
|
|
Permission::where('name', 'richieste.gestisci')->delete();
|
|
app(PermissionRegistrar::class)->forgetCachedPermissions();
|
|
|
|
Schema::table('assegnazioni', function (Blueprint $table) {
|
|
$table->dropColumn('cartaceo');
|
|
});
|
|
|
|
Schema::dropIfExists('richieste');
|
|
}
|
|
};
|