++ gruppi: le azioni del sorvegliante non finiscono piu' in 403; priorita' e filtri nel pacchetto; nome del sorvegliante
- LimitaSorvegliante: la rotta delle azioni di Livewire 3.7 si chiama "default.livewire.update"; con 'livewire.*' ogni clic era un 403. - Territorio::ordinaPerPriorita(): la regola di "Da assegnare" della Home in un metodo solo, usato dalla Home, dall'aggiunta al pacchetto e da "Il mio gruppo". - Aggiunta al pacchetto: ricerca, zona, tipologia, solo prioritari, "Seleziona tutti quelli mostrati", badge e giorni di fermo. - Il mio gruppo: da dare in ordine di priorita' poi i gia' dati; filtri stato, zona, tipologia, solo prioritari; sotto il titolo nome e cognome del sorvegliante. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ use App\Services\GruppiServizio;
|
||||
use Carbon\Carbon;
|
||||
use InvalidArgumentException;
|
||||
use Livewire\Attributes\Locked;
|
||||
use Livewire\Attributes\Url;
|
||||
use Livewire\Component;
|
||||
|
||||
/**
|
||||
@@ -35,6 +36,20 @@ class MioGruppo extends Component
|
||||
|
||||
public string $dataAssegnazione = '';
|
||||
|
||||
// Filtri del pacchetto, nell'indirizzo: tornando dal rientro si ritrovano.
|
||||
#[Url(except: '')]
|
||||
public string $filtroZona = '';
|
||||
|
||||
#[Url(except: '')]
|
||||
public string $filtroTipologia = '';
|
||||
|
||||
/** '' tutti, 'da_dare', 'dati' */
|
||||
#[Url(except: '')]
|
||||
public string $filtroStato = '';
|
||||
|
||||
#[Url(except: false)]
|
||||
public bool $soloPrioritari = false;
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->dataAssegnazione = now()->format('Y-m-d');
|
||||
@@ -170,11 +185,25 @@ class MioGruppo extends Component
|
||||
|
||||
public function render()
|
||||
{
|
||||
$gruppo = $this->gruppo();
|
||||
$gruppo = $this->gruppo()?->load('sorvegliante');
|
||||
|
||||
$territori = $gruppo
|
||||
? $gruppo->territori()->with(['zona', 'assegnazioneCorrente.proclamatore'])->get()->sortBy('numero', SORT_NATURAL)->values()
|
||||
// Prima quelli da dare, in ordine di priorità come "Da assegnare"
|
||||
// nella Home (Territorio::ordinaPerPriorita); poi quelli già dati, dal
|
||||
// più vecchio.
|
||||
$pacchetto = $gruppo
|
||||
? $gruppo->territori()->with(['zona', 'tipologia', 'ultimaAssegnazione', 'assegnazioneCorrente.proclamatore'])->get()
|
||||
: collect();
|
||||
[$dati, $daDare] = $pacchetto->partition(fn (Territorio $t) => $t->assegnazioneCorrente !== null);
|
||||
$pacchetto = Territorio::ordinaPerPriorita($daDare)
|
||||
->concat($dati->sortBy(fn (Territorio $t) => $t->assegnazioneCorrente->assigned_at)->values());
|
||||
|
||||
$territori = $pacchetto
|
||||
->when($this->filtroZona !== '', fn ($c) => $c->where('zona_id', (int) $this->filtroZona))
|
||||
->when($this->filtroTipologia !== '', fn ($c) => $c->where('tipologia_id', (int) $this->filtroTipologia))
|
||||
->when($this->filtroStato === 'da_dare', fn ($c) => $c->whereNull('assegnazioneCorrente'))
|
||||
->when($this->filtroStato === 'dati', fn ($c) => $c->whereNotNull('assegnazioneCorrente'))
|
||||
->when($this->soloPrioritari, fn ($c) => $c->where('in_priorita', true))
|
||||
->values();
|
||||
|
||||
$membri = $gruppo
|
||||
? $gruppo->membri()->where('attivo', true)->get()->sortBy(fn ($p) => mb_strtolower($p->cognome . ' ' . $p->nome))->values()
|
||||
@@ -182,7 +211,10 @@ class MioGruppo extends Component
|
||||
|
||||
return view('livewire.gruppi.mio-gruppo', [
|
||||
'gruppo' => $gruppo,
|
||||
'pacchetto' => $pacchetto,
|
||||
'territori' => $territori,
|
||||
'zone' => $pacchetto->filter(fn ($t) => $t->zona)->mapWithKeys(fn ($t) => [$t->zona_id => $t->zona->nome])->sort(),
|
||||
'tipologie' => $pacchetto->filter(fn ($t) => $t->tipologia)->mapWithKeys(fn ($t) => [$t->tipologia_id => $t->tipologia->nome])->sort(),
|
||||
'membri' => $membri,
|
||||
'opzioniMembri' => Proclamatore::opzioniScelta($membri, conGruppo: false),
|
||||
'invio' => $this->invioCorrente(),
|
||||
|
||||
Reference in New Issue
Block a user