++ 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:
@@ -169,6 +169,41 @@ class Territorio extends Model
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* La logica di priorità dei territori da distribuire, la stessa ovunque
|
||||
* (Home "Da assegnare", pacchetto di un gruppo, "Il mio gruppo"): prima i
|
||||
* prioritari — spunta manuale o fermi da più giorni della soglia
|
||||
* "giorni_giacenza_prioritari" — poi chi è fermo da più tempo, poi il
|
||||
* numero. Su ogni territorio imposta giacenza_giorni (dall'ultimo rientro,
|
||||
* o dalla creazione se mai assegnato; 0 se è fuori) e in_priorita, da
|
||||
* mostrare. Vuole 'ultimaAssegnazione' già caricata, per non fare una
|
||||
* query a territorio.
|
||||
*/
|
||||
public static function ordinaPerPriorita(iterable $territori): \Illuminate\Support\Collection
|
||||
{
|
||||
$soglia = (int) (Setting::instance()->giorni_giacenza_prioritari ?? 180);
|
||||
|
||||
return collect($territori)
|
||||
->each(function (self $territorio) use ($soglia) {
|
||||
$ultima = $territorio->ultimaAssegnazione;
|
||||
if ($ultima && $ultima->returned_at) {
|
||||
$giorni = (int) $ultima->returned_at->startOfDay()->diffInDays(today());
|
||||
} elseif (! $ultima) {
|
||||
$giorni = (int) $territorio->created_at->startOfDay()->diffInDays(today());
|
||||
} else {
|
||||
$giorni = 0;
|
||||
}
|
||||
|
||||
$territorio->setAttribute('giacenza_giorni', $giorni);
|
||||
$territorio->setAttribute('in_priorita', (bool) $territorio->prioritario || $giorni > $soglia);
|
||||
})
|
||||
->sort(function (self $a, self $b) {
|
||||
return [(int) $b->in_priorita, $b->giacenza_giorni] <=> [(int) $a->in_priorita, $a->giacenza_giorni]
|
||||
?: strnatcasecmp((string) $a->numero, (string) $b->numero);
|
||||
})
|
||||
->values();
|
||||
}
|
||||
|
||||
/**
|
||||
* L'opzione per il campo di scelta con ricerca (<x-scelta>): si cerca per
|
||||
* numero, zona e tipologia. Con $motivo compare cercando ma non si può
|
||||
|
||||
Reference in New Issue
Block a user