92 lines
3.1 KiB
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,
|
|
]);
|
|
}
|
|
}
|