home_limit_list ?? 10)); $priorityThreshold = (int) ($settings->giorni_giacenza_prioritari ?? 180); $annoCorrente = AnnoTeocratico::corrente(); $campagnaAttiva = Campagna::attiva(); // Territory counts $totTerritoriAttivi = Territorio::where('attivo', true)->count(); $totAssegnati = Territorio::assegnato()->count(); $totInReparto = Territorio::inReparto()->count(); // Coverage: returned territories per current theocratic year $territoriPercorsi = 0; if ($annoCorrente) { $territoriPercorsi = Assegnazione::where('anno_teocratico_id', $annoCorrente->id) ->whereNotNull('returned_at') ->distinct('territorio_id') ->count('territorio_id'); } // Monthly average $mediaPercorrenzaMensile = 0; if ($annoCorrente && $annoCorrente->mesi_trascorsi > 0) { $mediaPercorrenzaMensile = round($territoriPercorsi / $annoCorrente->mesi_trascorsi, 1); } // Campaign stats $campagnaStats = null; if ($campagnaAttiva) { $campagnaStats = [ 'descrizione' => $campagnaAttiva->descrizione, 'percentuale' => $campagnaAttiva->percentuale_percorrenza, 'fine' => $campagnaAttiva->end_date->format('d/m/Y'), ]; } // Quick lists $territoriDaAssegnare = Territorio::inReparto() ->with('zona', 'tipologia', 'ultimaAssegnazione') ->get() ->map(function (Territorio $territorio) use ($priorityThreshold) { $ultima = $territorio->ultimaAssegnazione; if ($ultima && $ultima->returned_at) { $giorniGiacenza = $ultima->returned_at->startOfDay()->diffInDays(today()); } elseif (! $ultima) { $giorniGiacenza = $territorio->created_at->startOfDay()->diffInDays(today()); } else { $giorniGiacenza = 0; } $territorio->setAttribute('home_giorni_giacenza', $giorniGiacenza); $territorio->setAttribute( 'home_is_prioritario', (bool) $territorio->prioritario || $giorniGiacenza > $priorityThreshold ); return $territorio; }) ->sort(function (Territorio $left, Territorio $right) { $priorityComparison = (int) $right->home_is_prioritario <=> (int) $left->home_is_prioritario; if ($priorityComparison !== 0) { return $priorityComparison; } $giacenzaComparison = $right->home_giorni_giacenza <=> $left->home_giorni_giacenza; if ($giacenzaComparison !== 0) { return $giacenzaComparison; } return strnatcasecmp((string) $left->numero, (string) $right->numero); }) ->take($homeLimit) ->values(); $daRientrare = Territorio::daRientrare() ->with(['zona', 'assegnazioneCorrente.proclamatore']) ->take($homeLimit) ->get(); return view('livewire.home', [ 'congregazione' => $settings->congregazione_nome ?? 'TerManager2', 'annoCorrente' => $annoCorrente, 'totTerritoriAttivi' => $totTerritoriAttivi, 'totAssegnati' => $totAssegnati, 'totInReparto' => $totInReparto, 'territoriPercorsi' => $territoriPercorsi, 'mediaPercorrenzaMensile' => $mediaPercorrenzaMensile, 'campagnaStats' => $campagnaStats, 'homeLimit' => $homeLimit, 'territoriDaAssegnare' => $territoriDaAssegnare, 'daRientrare' => $daRientrare, ]); } }