wip statistic events quasi

This commit is contained in:
salam committed 2026-04-30 13:57:38 +02:00
1 parent 897a327709
commit 58b9abbd32
6 files changed
+106 -25

No files matched your search

+36 -5
View File
@@ -35,11 +35,11 @@ class LoadEvents
*/
switch ($filter['team_position']) {
case 'home':
$res = StatisticFixtures::where('league_id', $league_id)->where('home_id', '=', $team_id)->first();
$res = StatisticFixtures::where('league_id', $league_id)->where('home_id', $team_id)->first();
break;
case 'away':
$res = StatisticFixtures::where('league_id', $league_id)->where('away_id', '=', $team_id)->first();
$res = StatisticFixtures::where('league_id', $league_id)->where('away_id', $team_id)->first();
break;
default:
@@ -59,16 +59,40 @@ class LoadEvents
$exp_away_from = $exp_away - $accuracy;
$exp_away_to = $exp_away + $accuracy;
// dd($team_id, $exp_home, $exp_away);
// "endDate"
// "startDate"
$start = $filter['startDate'] ?? 0;
$end = $filter['endDate'] ?? 0;
/**
* STATTISTIC DATA
*/
switch ($filter['team_position']) {
case 'home':
$res = StatistikoEvent::where('league_id', $league_id)->where('home_id', '=', $team_id)->whereBetween('expgoalhome_value', [$exp_home_from, $exp_home_to])->get();
$res = StatistikoEvent::where('league_id', $league_id)
->where('home_id', '=', $team_id)
->whereBetween('exp_home', [$exp_home_from, $exp_home_to])
->when($start, function ($query) use ($start) {
return $query->where('starttime', '>=', $start);
})->when($end, function ($query) use ($end) {
return $query->where('starttime', '<=', $end);
})
->get();
break;
case 'away':
$res = StatistikoEvent::where('league_id', $league_id)->where('away_id', '=', $team_id)->whereBetween('expgoalsaway_value', [$exp_away_from, $exp_away_to])->get();
$res = StatistikoEvent::where('league_id', $league_id)
->where('away_id', '=', $team_id)
->whereBetween('exp_away', [$exp_away_from, $exp_away_to])
->when($start, function ($query) use ($start) {
return $query->where('starttime', '>=', $start);
})->when($end, function ($query) use ($end) {
return $query->where('starttime', '<=', $end);
})
->get();
break;
default:
@@ -77,7 +101,12 @@ class LoadEvents
$query->where('home_id', '=', $team_id)->orWhere('away_id', '=', $team_id);
})
->where(function ($query) use ($exp_home_from, $exp_home_to, $exp_away_from, $exp_away_to) {
$query->whereBetween('expgoalhome_value', [$exp_home_from, $exp_home_to])->orWhereBetween('expgoalsaway_value', [$exp_away_from, $exp_away_to]);
$query->whereBetween('exp_home', [$exp_home_from, $exp_home_to])->orWhereBetween('exp_away', [$exp_away_from, $exp_away_to]);
})
->when($start, function ($query) use ($start) {
return $query->where('starttime', '>=', $start);
})->when($end, function ($query) use ($end) {
return $query->where('starttime', '<=', $end);
})->get();
break;
}
@@ -213,6 +242,8 @@ class LoadEvents
[
'label' => ucfirst($team_position),
'data' => $datasets,
'fill' => true,
'tension' => 0.5,
'borderColor' => '#36A2EB',
],
],
-13
View File
@@ -7,24 +7,15 @@ class MoveingAverage
public static function get(&$data)
{
// dd($data);
$arr = $data['datasets'][0]['data'];
$new = [];
$last = count($arr);
$second_last = $last--;
foreach ($arr as $key => $value) {
switch ($key) {
case 0:
$new[] = $value;
break;
case 1:
$new[] = ($arr[0] + $value) / 2;
break;
case $second_last:
$new[] = ($arr[$second_last] + $arr[$last]) / 2;
break;
case $last:
$new[] = $arr[$last];
break;
@@ -35,11 +26,7 @@ class MoveingAverage
break;
}
}
// $data['datasets'][0]['backgroundColor'] = '#00a63e';
$data['datasets'][0]['borderColor'] = '#00a63e';
// $data['datasets'][0]['fill'] = true;
$data['datasets'][0]['tension'] = 0.5;
// $data['datasets'][0]['borderRadius'] = 30;
$data['datasets'][0]['data'] = $new;
}
}
+8 -2
View File
@@ -3,6 +3,7 @@
namespace App\Filament\Pages;
use App\Actions\LoadStatisticFixturesLeaguesOptions;
use App\Filament\Widgets\MedianAverageWidget;
use App\Filament\Widgets\MovingAverageChart;
use App\Filament\Widgets\PunctualChart;
use App\Models\Element;
@@ -61,8 +62,12 @@ class Statistic extends BaseDashboard
->preload()
->searchable()
->label('Team'),
DatePicker::make('startDate'),
DatePicker::make('endDate'),
DatePicker::make('startDate')
->native(false)
->prefixIcon('phosphor-calendar'),
DatePicker::make('endDate')
->native(false)
->prefixIcon('phosphor-calendar'),
])->columns(4)
->columnSpanFull(),
Section::make()
@@ -145,6 +150,7 @@ class Statistic extends BaseDashboard
protected function getFooterWidgets(): array
{
return [
MedianAverageWidget::make(),
PunctualChart::make(),
MovingAverageChart::make(),
];
@@ -0,0 +1,46 @@
<?php
namespace App\Filament\Widgets;
use App\Actions\Statistics\LoadEvents;
use Filament\Widgets\Concerns\InteractsWithPageFilters;
use Filament\Widgets\StatsOverviewWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class MedianAverageWidget extends StatsOverviewWidget
{
use InteractsWithPageFilters;
protected function getStats(): array
{
$data = LoadEvents::load($this->filters);
if (! isset($data['datasets'][0])) {
return [];
}
$arr = $data['datasets'][0]['data'];
$total = count($arr);
$summe = array_sum($arr);
if (! $total) {
return [];
}
if ($total % 2) {
$m = $total / 2 + 1;
$median = $arr[$m];
} else {
$m = $total / 2;
$m1 = floor($m);
$m2 = ceil($m);
$median = round(($arr[$m1] + $arr[$m2]) / 2, 2);
}
return [
Stat::make('Number of events', $total),
Stat::make('Average', round($summe / $total, 2)),
Stat::make('Median', $median),
];
}
}
@@ -16,6 +16,14 @@ class MovingAverageChart extends ChartWidget
public ?string $header;
protected ?array $options = [
'plugins' => [
'legend' => [
'display' => false,
],
],
];
public function getDescription(): ?string
{
return 'Moving Average';
+8 -5
View File
@@ -12,15 +12,18 @@ class PunctualChart extends ChartWidget
{
use InteractsWithPageFilters;
/**
* 1. Ein Diagramm, das die Werte des ausgewählten Feldes GRUPPE 2 (HEIM/AUSWÄRTS/VERANSTALTUNG) darstellt,
* mit dem Punktwert auf der Ordinate und dem aufsteigenden Datum auf der Abszisse,
* und das den Mittelwert und den Medianwert für die ausgewählte Statistik an den ausgewählten Daten enthält.
*/
protected ?string $pollingInterval = null;
public ?string $header;
protected ?array $options = [
'plugins' => [
'legend' => [
'display' => false,
],
],
];
public function getDescription(): ?string
{
return 'Punctual';