- /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>
76 lines
2.7 KiB
PHP
76 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Mail\ModuloS13Mail;
|
|
use App\Models\AnnoTeocratico;
|
|
use App\Models\User;
|
|
use App\Services\ConfigurazionePosta;
|
|
use App\Services\Registro\ModuloS13;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
/**
|
|
* Il modulo S-13 dell'anno di servizio in corso, per email agli
|
|
* amministratori (l'indirizzo della loro utenza, se confermato). Lo lancia lo
|
|
* scheduler l'ultima domenica di ogni mese (routes/console.php); a mano si
|
|
* può scegliere l'anno con --anno=2025-2026.
|
|
*
|
|
* Parte subito, non in coda: il PDF contiene i nomi dei proclamatori, che in
|
|
* coda starebbero in chiaro. Senza un server di posta funzionante non manda
|
|
* niente e lo dice.
|
|
*/
|
|
class InviaModuloS13 extends Command
|
|
{
|
|
protected $signature = 'registro:invia-s13 {--anno= : etichetta dell\'anno di servizio, es. 2025-2026 (predefinito: quello in corso)}';
|
|
|
|
protected $description = 'Manda per email agli amministratori il modulo S-13 dell\'anno di servizio';
|
|
|
|
public function handle(ModuloS13 $modulo, ConfigurazionePosta $posta): int
|
|
{
|
|
if (! $posta->funzionante()) {
|
|
$this->warn('Nessun server di posta funzionante: modulo S-13 non inviato.');
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
|
|
$anno = $this->option('anno')
|
|
? AnnoTeocratico::where('label', $this->option('anno'))->first()
|
|
: AnnoTeocratico::corrente();
|
|
if (! $anno) {
|
|
$this->error("Anno di servizio {$this->option('anno')} non trovato.");
|
|
|
|
return self::FAILURE;
|
|
}
|
|
|
|
$destinatari = User::role('amministratore')->get()
|
|
->filter(fn (User $u) => $u->email && $u->email_verified_at !== null)
|
|
->values();
|
|
if ($destinatari->isEmpty()) {
|
|
$this->warn('Nessun amministratore con un\'email confermata: modulo S-13 non inviato.');
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
|
|
$pdf = $modulo->genera($anno);
|
|
|
|
// Uno per uno: un indirizzo rifiutato non ferma gli altri.
|
|
$inviati = 0;
|
|
foreach ($destinatari as $utente) {
|
|
try {
|
|
Mail::to($utente->email)->send(new ModuloS13Mail($utente, $anno, $pdf));
|
|
$inviati++;
|
|
} catch (\Throwable $e) {
|
|
report($e);
|
|
$this->error("Invio a {$utente->email} non riuscito: {$e->getMessage()}");
|
|
}
|
|
}
|
|
|
|
// Nel registro quanti, non chi: gli indirizzi stanno nelle utenze.
|
|
activity()->withProperties(['anno' => $anno->label, 'destinatari' => $inviati])->log('s13_inviato');
|
|
$this->info("Modulo S-13 {$anno->label} inviato a {$inviati} amministratori su {$destinatari->count()}.");
|
|
|
|
return $inviati === $destinatari->count() ? self::SUCCESS : self::FAILURE;
|
|
}
|
|
}
|