wip statistic events quasi
This commit is contained in:
1 parent
897a327709
commit
58b9abbd32
6 files changed
+106
-25
No files matched your search
@@ -35,11 +35,11 @@ class LoadEvents
|
|||||||
*/
|
*/
|
||||||
switch ($filter['team_position']) {
|
switch ($filter['team_position']) {
|
||||||
case 'home':
|
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;
|
break;
|
||||||
|
|
||||||
case 'away':
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -59,16 +59,40 @@ class LoadEvents
|
|||||||
$exp_away_from = $exp_away - $accuracy;
|
$exp_away_from = $exp_away - $accuracy;
|
||||||
$exp_away_to = $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
|
* STATTISTIC DATA
|
||||||
*/
|
*/
|
||||||
switch ($filter['team_position']) {
|
switch ($filter['team_position']) {
|
||||||
case 'home':
|
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;
|
break;
|
||||||
|
|
||||||
case 'away':
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -77,7 +101,12 @@ class LoadEvents
|
|||||||
$query->where('home_id', '=', $team_id)->orWhere('away_id', '=', $team_id);
|
$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) {
|
->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();
|
})->get();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -213,6 +242,8 @@ class LoadEvents
|
|||||||
[
|
[
|
||||||
'label' => ucfirst($team_position),
|
'label' => ucfirst($team_position),
|
||||||
'data' => $datasets,
|
'data' => $datasets,
|
||||||
|
'fill' => true,
|
||||||
|
'tension' => 0.5,
|
||||||
'borderColor' => '#36A2EB',
|
'borderColor' => '#36A2EB',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -7,24 +7,15 @@ class MoveingAverage
|
|||||||
public static function get(&$data)
|
public static function get(&$data)
|
||||||
{
|
{
|
||||||
|
|
||||||
// dd($data);
|
|
||||||
|
|
||||||
$arr = $data['datasets'][0]['data'];
|
$arr = $data['datasets'][0]['data'];
|
||||||
|
|
||||||
$new = [];
|
$new = [];
|
||||||
$last = count($arr);
|
$last = count($arr);
|
||||||
$second_last = $last--;
|
|
||||||
foreach ($arr as $key => $value) {
|
foreach ($arr as $key => $value) {
|
||||||
switch ($key) {
|
switch ($key) {
|
||||||
case 0:
|
case 0:
|
||||||
$new[] = $value;
|
$new[] = $value;
|
||||||
break;
|
break;
|
||||||
case 1:
|
|
||||||
$new[] = ($arr[0] + $value) / 2;
|
|
||||||
break;
|
|
||||||
case $second_last:
|
|
||||||
$new[] = ($arr[$second_last] + $arr[$last]) / 2;
|
|
||||||
break;
|
|
||||||
case $last:
|
case $last:
|
||||||
$new[] = $arr[$last];
|
$new[] = $arr[$last];
|
||||||
break;
|
break;
|
||||||
@@ -35,11 +26,7 @@ class MoveingAverage
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// $data['datasets'][0]['backgroundColor'] = '#00a63e';
|
|
||||||
$data['datasets'][0]['borderColor'] = '#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;
|
$data['datasets'][0]['data'] = $new;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Filament\Pages;
|
namespace App\Filament\Pages;
|
||||||
|
|
||||||
use App\Actions\LoadStatisticFixturesLeaguesOptions;
|
use App\Actions\LoadStatisticFixturesLeaguesOptions;
|
||||||
|
use App\Filament\Widgets\MedianAverageWidget;
|
||||||
use App\Filament\Widgets\MovingAverageChart;
|
use App\Filament\Widgets\MovingAverageChart;
|
||||||
use App\Filament\Widgets\PunctualChart;
|
use App\Filament\Widgets\PunctualChart;
|
||||||
use App\Models\Element;
|
use App\Models\Element;
|
||||||
@@ -61,8 +62,12 @@ class Statistic extends BaseDashboard
|
|||||||
->preload()
|
->preload()
|
||||||
->searchable()
|
->searchable()
|
||||||
->label('Team'),
|
->label('Team'),
|
||||||
DatePicker::make('startDate'),
|
DatePicker::make('startDate')
|
||||||
DatePicker::make('endDate'),
|
->native(false)
|
||||||
|
->prefixIcon('phosphor-calendar'),
|
||||||
|
DatePicker::make('endDate')
|
||||||
|
->native(false)
|
||||||
|
->prefixIcon('phosphor-calendar'),
|
||||||
])->columns(4)
|
])->columns(4)
|
||||||
->columnSpanFull(),
|
->columnSpanFull(),
|
||||||
Section::make()
|
Section::make()
|
||||||
@@ -145,6 +150,7 @@ class Statistic extends BaseDashboard
|
|||||||
protected function getFooterWidgets(): array
|
protected function getFooterWidgets(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
MedianAverageWidget::make(),
|
||||||
PunctualChart::make(),
|
PunctualChart::make(),
|
||||||
MovingAverageChart::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;
|
public ?string $header;
|
||||||
|
|
||||||
|
protected ?array $options = [
|
||||||
|
'plugins' => [
|
||||||
|
'legend' => [
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
public function getDescription(): ?string
|
public function getDescription(): ?string
|
||||||
{
|
{
|
||||||
return 'Moving Average';
|
return 'Moving Average';
|
||||||
|
|||||||
@@ -12,15 +12,18 @@ class PunctualChart extends ChartWidget
|
|||||||
{
|
{
|
||||||
use InteractsWithPageFilters;
|
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;
|
protected ?string $pollingInterval = null;
|
||||||
|
|
||||||
public ?string $header;
|
public ?string $header;
|
||||||
|
|
||||||
|
protected ?array $options = [
|
||||||
|
'plugins' => [
|
||||||
|
'legend' => [
|
||||||
|
'display' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
public function getDescription(): ?string
|
public function getDescription(): ?string
|
||||||
{
|
{
|
||||||
return 'Punctual';
|
return 'Punctual';
|
||||||
|
|||||||
Reference in new issue
Block a user