Files
termanager2/app/Livewire/Home.php

92 lines
3.1 KiB
PHP

<?php
namespace App\Livewire;
use Livewire\Component;
use App\Models\Territorio;
use App\Models\Proclamatore;
use App\Models\Assegnazione;
use App\Models\AnnoTeocratico;
use App\Models\Campagna;
use App\Models\Setting;
class Home extends Component
{
public function render()
{
$settings = Setting::instance();
$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()
->sort(function (Territorio $left, Territorio $right) {
$priorityComparison = (int) $right->is_prioritario <=> (int) $left->is_prioritario;
if ($priorityComparison !== 0) {
return $priorityComparison;
}
$giacenzaComparison = $right->giorni_giacenza <=> $left->giorni_giacenza;
if ($giacenzaComparison !== 0) {
return $giacenzaComparison;
}
return strnatcasecmp((string) $left->numero, (string) $right->numero);
})
->take(10)
->values();
$daRientrare = Territorio::daRientrare()
->with(['zona', 'assegnazioneCorrente.proclamatore'])
->take(10)
->get();
return view('livewire.home', [
'congregazione' => $settings->congregazione_nome ?? 'TerManager2',
'annoCorrente' => $annoCorrente,
'totTerritoriAttivi' => $totTerritoriAttivi,
'totAssegnati' => $totAssegnati,
'totInReparto' => $totInReparto,
'territoriPercorsi' => $territoriPercorsi,
'mediaPercorrenzaMensile' => $mediaPercorrenzaMensile,
'campagnaStats' => $campagnaStats,
'territoriDaAssegnare' => $territoriDaAssegnare,
'daRientrare' => $daRientrare,
]);
}
}