- Proclamatore::booted: reso non attivo, spostato nel cestino o anonimizzato, il sorvegliante scioglie il gruppo (territori non dati in reparto, membri liberi, utenza disattivata); il motivo va nel registro. L'elenco chiede conferma, la modifica avvisa sotto "Attivo". Un membro nel cestino esce dal gruppo. - Scheda del proclamatore: gruppo guidato con membri, pacchetto, da dare, assegnazioni dal gruppo, utenza e ultimo accesso; oppure gruppo di cui e' membro; gruppi sciolti guidati in passato. - Profilo del sorvegliante: il suo gruppo con gli stessi numeri. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
2.4 KiB
PHP
64 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Proclamatori;
|
|
|
|
use App\Livewire\Concerns\RicordaRitorno;
|
|
use Livewire\Component;
|
|
use App\Models\Proclamatore;
|
|
use App\Models\Assegnazione;
|
|
use App\Models\GruppoServizio;
|
|
use Spatie\Activitylog\Models\Activity;
|
|
|
|
class ProclamatoreShow extends Component
|
|
{
|
|
use RicordaRitorno;
|
|
|
|
public Proclamatore $proclamatore;
|
|
|
|
public function mount(Proclamatore $proclamatore)
|
|
{
|
|
$this->proclamatore = $proclamatore;
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
$assegnazioni = Assegnazione::where('proclamatore_id', $this->proclamatore->id)
|
|
->with(['territorio', 'annoTeocratico', 'campagna'])
|
|
->orderByDesc('assigned_at')
|
|
->get()
|
|
->groupBy(fn($a) => $a->annoTeocratico->label);
|
|
|
|
$stats = [
|
|
'totale_assegnazioni' => Assegnazione::where('proclamatore_id', $this->proclamatore->id)->count(),
|
|
'attualmente_assegnati' => Assegnazione::where('proclamatore_id', $this->proclamatore->id)->aperte()->count(),
|
|
'media_giorni' => round(
|
|
Assegnazione::where('proclamatore_id', $this->proclamatore->id)
|
|
->chiuse()
|
|
->get()
|
|
->avg(fn($a) => $a->giorni) ?? 0
|
|
),
|
|
];
|
|
|
|
// Gruppo di servizio: sorvegliante (con i dettagli del gruppo e della
|
|
// sua utenza), membro, o sorvegliante di gruppi ormai sciolti.
|
|
$gruppoSorvegliato = $this->proclamatore->gruppoSorvegliato();
|
|
$utenza = $gruppoSorvegliato ? $this->proclamatore->utente : null;
|
|
|
|
return view('livewire.proclamatori.proclamatore-show', [
|
|
'assegnazioniPerAnno' => $assegnazioni,
|
|
'stats' => $stats,
|
|
'gruppoSorvegliato' => $gruppoSorvegliato,
|
|
'riepilogoGruppo' => $gruppoSorvegliato?->riepilogo(),
|
|
'gruppoMembro' => $gruppoSorvegliato ? null : $this->proclamatore->gruppo()->with('sorvegliante')->first(),
|
|
'gruppiPassati' => GruppoServizio::whereNotNull('sciolto_at')
|
|
->where('sorvegliante_id', $this->proclamatore->id)
|
|
->orderByDesc('sciolto_at')
|
|
->get(),
|
|
'utenza' => $utenza,
|
|
'ultimoAccesso' => $utenza
|
|
? Activity::whereMorphedTo('causer', $utenza)->where('description', 'login')->max('created_at')
|
|
: null,
|
|
]);
|
|
}
|
|
}
|