Files
nuhodds_fi4/app/Filament/Widgets/StatsMedianAverage.php
T
2026-05-25 16:04:17 +02:00

76 lines
2.3 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Filament\Widgets\Data\LoadEvents;
use App\Utilities\Round;
use Filament\Widgets\Concerns\InteractsWithPageFilters;
use Filament\Widgets\StatsOverviewWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class StatsMedianAverage extends StatsOverviewWidget
{
use InteractsWithPageFilters;
protected ?string $pollingInterval = null;
public function getColumns(): int|array
{
return [
'md' => 3,
'xl' => 6,
];
}
protected function getStats(): array
{
$filters = $this->filters;
$data = LoadEvents::load($filters);
if (! isset($data['datasets'][0])) {
return [];
}
$arr = $data['datasets'][0]['data'];
$arr2 = $data['datasets'][1]['data'];
$total = count($arr);
$summe = array_sum($arr);
$summe2 = array_sum($arr2);
if (! $total) {
return [];
}
sort($arr);
if ($total % 2 == 0) {
// even
$m = $total / 2;
$m1 = floor($m);
$m2 = ceil($m);
$median = round(($arr[$m1] + $arr[$m2]) / 2, 2);
$median2 = round(($arr2[$m1] + $arr2[$m2]) / 2, 2);
} else {
// odd
$m = floor($total / 2);
$median = $arr[$m];
$median2 = $arr2[$m];
}
$win = $data['results']['w'] ? number_format(Round::odd($total / $data['results']['w']), 2) : 0;
$draw = $data['results']['d'] ? number_format(Round::odd($total / $data['results']['d']), 2) : 0;
$lost = $data['results']['l'] ? number_format(Round::odd($total / $data['results']['l']), 2) : 0;
return [
Stat::make('Number of events', $total),
Stat::make('Average', 'Average')->view('filament.resources.events.widgets.statistic-average', ['titel' => 'Average', 'infavour' => number_format($summe, 1), 'against' => number_format($summe2, 1)]),
Stat::make('Median', 'Median')->view('filament.resources.events.widgets.statistic-average', ['titel' => 'Median', 'infavour' => $median, 'against' => $median2]),
Stat::make('Win: '.$data['results']['w'], $win),
Stat::make('Draw: '.$data['results']['d'], $draw),
Stat::make('Lost: '.$data['results']['l'], $lost),
];
}
}