++ 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:
@@ -32,6 +32,16 @@ class GruppoShow extends Component
|
||||
/** @var int[] territori da aggiungere al pacchetto */
|
||||
public array $nuoviTerritori = [];
|
||||
|
||||
// Filtri dei territori in reparto da aggiungere al pacchetto. L'ordine è
|
||||
// quello di priorità (Territorio::ordinaPerPriorita), come nella Home.
|
||||
public string $cercaTerritorio = '';
|
||||
|
||||
public string $filtroZona = '';
|
||||
|
||||
public string $filtroTipologia = '';
|
||||
|
||||
public bool $soloPrioritari = false;
|
||||
|
||||
#[Locked]
|
||||
public ?string $passwordTemporanea = null;
|
||||
|
||||
@@ -91,6 +101,45 @@ class GruppoShow extends Component
|
||||
$this->nuoviTerritori = [];
|
||||
}
|
||||
|
||||
/** Tutti i territori che i filtri mostrano finiscono tra quelli da aggiungere. */
|
||||
public function selezionaMostrati(): void
|
||||
{
|
||||
$this->nuoviTerritori = collect($this->nuoviTerritori)
|
||||
->map(fn ($id) => (string) $id)
|
||||
->merge($this->candidatiFiltrati()->pluck('id')->map(fn ($id) => (string) $id))
|
||||
->unique()
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
|
||||
public function deselezionaTutti(): void
|
||||
{
|
||||
$this->nuoviTerritori = [];
|
||||
}
|
||||
|
||||
/** I territori in reparto, in ordine di priorità. */
|
||||
private function candidati(): \Illuminate\Support\Collection
|
||||
{
|
||||
return Territorio::ordinaPerPriorita(
|
||||
Territorio::inReparto()->with(['zona', 'tipologia', 'ultimaAssegnazione'])->get()
|
||||
);
|
||||
}
|
||||
|
||||
private function candidatiFiltrati(?\Illuminate\Support\Collection $candidati = null): \Illuminate\Support\Collection
|
||||
{
|
||||
$cerca = Str::lower(Str::ascii(trim($this->cercaTerritorio)));
|
||||
|
||||
return ($candidati ?? $this->candidati())
|
||||
->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->soloPrioritari, fn ($c) => $c->where('in_priorita', true))
|
||||
->when($cerca !== '', fn ($c) => $c->filter(fn (Territorio $t) => str_contains(
|
||||
Str::lower(Str::ascii("{$t->numero} {$t->zona?->nome} {$t->tipologia?->nome}")),
|
||||
$cerca
|
||||
)))
|
||||
->values();
|
||||
}
|
||||
|
||||
public function rimanda(int $territorioId): void
|
||||
{
|
||||
$territorio = Territorio::findOrFail($territorioId);
|
||||
@@ -135,13 +184,21 @@ class GruppoShow extends Component
|
||||
$membri = $this->gruppo->membri()->get()->sortBy(fn ($p) => mb_strtolower($p->cognome . ' ' . $p->nome))->values();
|
||||
$territori = $this->gruppo->territori()->with(['zona', 'assegnazioneCorrente.proclamatore'])->get()->sortBy('numero', SORT_NATURAL)->values();
|
||||
|
||||
// I territori in reparto (attivi, non assegnati, fuori da ogni
|
||||
// pacchetto), in ordine di priorità; zone e tipologie dei filtri sono
|
||||
// quelle che ci sono tra loro.
|
||||
$candidati = $this->candidati();
|
||||
|
||||
return view('livewire.gruppi.gruppo-show', [
|
||||
'membri' => $membri,
|
||||
'territori' => $territori,
|
||||
// Si possono aggiungere i proclamatori attivi senza gruppo...
|
||||
'candidatiMembri' => Proclamatore::attivi()->whereNull('gruppo_servizio_id')->get()->sortBy(fn ($p) => mb_strtolower($p->cognome . ' ' . $p->nome))->values(),
|
||||
// ...e i territori in reparto (attivi, non assegnati, fuori da ogni pacchetto).
|
||||
'candidatiTerritori' => Territorio::inReparto()->with('zona')->get()->sortBy('numero', SORT_NATURAL)->values(),
|
||||
// ...e i territori in reparto.
|
||||
'totaleCandidati' => $candidati->count(),
|
||||
'candidatiTerritori' => $this->candidatiFiltrati($candidati),
|
||||
'zoneCandidati' => $candidati->filter(fn ($t) => $t->zona)->mapWithKeys(fn ($t) => [$t->zona_id => $t->zona->nome])->sort(),
|
||||
'tipologieCandidati' => $candidati->filter(fn ($t) => $t->tipologia)->mapWithKeys(fn ($t) => [$t->tipologia_id => $t->tipologia->nome])->sort(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user