wip player performance

This commit is contained in:
salam committed 2026-06-02 15:39:50 +02:00
1 parent fcbf718492
commit 37d28eec21
12 files changed
+214 -207

No files matched your search

+1 -1
View File
@@ -17,7 +17,7 @@ class ChartEvent extends ChartWidget
protected ?string $pollingInterval = null;
protected bool $isCollapsible = false;
protected bool $isCollapsible = true;
protected $f;
-2
View File
@@ -40,8 +40,6 @@ class ChartPlayer extends ChartWidget
return 'line';
}
// , ' '+context.dataset.playing_date[context.dataIndex], ' '+context.dataset.events[context.dataIndex]
protected function getOptions(): RawJs
{
return RawJs::make(<<<'JS'
+30 -3
View File
@@ -2,6 +2,8 @@
namespace App\Filament\Widgets;
use App\Filament\Widgets\Data\LoadPlayerPerformance;
use Filament\Support\RawJs;
use Filament\Widgets\ChartWidget;
use Livewire\Attributes\Reactive;
@@ -20,13 +22,38 @@ class ChartPlayerPerf extends ChartWidget
protected function getData(): array
{
return [
//
];
return LoadPlayerPerformance::load($this->filters);
}
protected function getType(): string
{
return 'line';
}
protected function getOptions(): RawJs
{
return RawJs::make(<<<'JS'
{
interaction: {
intersect: false,
},
scales: {
x: {
title: {
display: true,
text: 'Days since today'
}
},
y: {
beginAtZero:true,
ticks: {
callback: function(value, index, ticks) {
return value % 1 === 0 ? value : '';
}
}
},
},
}
JS);
}
}
+30 -3
View File
@@ -2,6 +2,8 @@
namespace App\Filament\Widgets;
use App\Filament\Widgets\Data\LoadPlayerPerformance;
use Filament\Support\RawJs;
use Filament\Widgets\ChartWidget;
use Livewire\Attributes\Reactive;
@@ -20,13 +22,38 @@ class ChartPlayerPerfMoAv extends ChartWidget
protected function getData(): array
{
return [
//
];
return LoadPlayerPerformance::load($this->filters);
}
protected function getType(): string
{
return 'line';
}
protected function getOptions(): RawJs
{
return RawJs::make(<<<'JS'
{
interaction: {
intersect: false,
},
scales: {
x: {
title: {
display: true,
text: 'Days since today'
}
},
y: {
beginAtZero:true,
ticks: {
callback: function(value, index, ticks) {
return value % 1 === 0 ? value : '';
}
}
},
},
}
JS);
}
}
+4 -3
View File
@@ -48,9 +48,9 @@ class LoadEvents
if (! $match_id) {
return [];
}
if (! $team_id && $similar_past_matches == 'none') {
return [];
}
// if (! $team_id && $similar_past_matches == 'none') {
// return [];
// }
if ($statistic_type == 'none') {
$statistic_type = 'gls';
@@ -395,6 +395,7 @@ class LoadEvents
'results' => $results,
'home_team' => $home_team,
'away_team' => $away_team,
'similar_past_matches' => $similar_past_matches,
];
self::$last_query = $data;
@@ -1,148 +0,0 @@
<?php
namespace App\Filament\Widgets\Data;
use App\Models\StatistikoDetail;
use App\Models\StatistikoPlayer;
use Illuminate\Support\Carbon;
class LoadPlayerMulti
{
public static $last_query = [];
public static function load($filter)
{
// dd($filter);
if (self::$last_query) {
return self::$last_query;
}
$league_id = (int) $filter['league_id'] ?? 0;
$team_id = (int) $filter['team_id'] ?? 0;
$tm_player_id = (int) $filter['tm_player_id'] ?? 0;
$start = $filter['start_date'] ?? 0;
$end = $filter['end_date'] ?? 0;
$team_position = $filter['team_position'];
if (! $league_id) {
return [];
}
if (! $team_id) {
return [];
}
if (! $tm_player_id) {
return [];
}
$player_name = StatistikoDetail::where('tm_player_id', (int) $tm_player_id)->value('name');
$res = StatistikoPlayer::with('event.home')->with('event.away')->where('tm_player_id', (int) $tm_player_id)->get();
$labels = [];
$playing_date = [];
$events = [];
$datasets_goals = [];
$datasets_fouls = [];
$datasets_offside = [];
$datasets_card = [];
$datasets_shots_on = [];
$datasets_shots_off = [];
foreach ($res as $value) {
if (isset($value->event->starttime)) {
$labels[] = round($value->event->starttime->diffInDays(Carbon::now()));
$events[] = $value->event->home->name.' vs '.$value->event->away->name;
$playing_date[] = $value->event->starttime->format('d. F Y H:i');
$datasets_goals[] = (int) $value->goals;
$datasets_fouls[] = (int) $value->fouls;
$datasets_offside[] = (int) $value->offsides;
$datasets_card[] = (int) $value->card_yellow + $value->card_red + $value->card_yellowred;
$datasets_shots_on[] = (int) $value->shots_on_target;
$datasets_shots_off[] = (int) $value->shots_off_target;
}
}
$data = [
'datasets' => [
[
'label' => 'Goals',
'data' => $datasets_goals,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#fb2c36',
'backgroundColor' => '#fb2c36',
],
[
'label' => 'Fouls Commited',
'data' => $datasets_fouls,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#f0b100',
'backgroundColor' => '#f0b100',
'dates' => $playing_date,
'events' => $events,
],
[
'label' => 'Offside',
'data' => $datasets_offside,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#7ccf00',
'backgroundColor' => '#7ccf00',
],
[
'label' => 'Cards',
'data' => $datasets_card,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#00b8db',
'backgroundColor' => '#00b8db',
],
[
'label' => 'Shots On Target',
'data' => $datasets_shots_on,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#615fff',
'backgroundColor' => '#615fff',
],
[
'label' => 'Shots Off Target',
'data' => $datasets_shots_off,
'dates' => $playing_date,
'events' => $events,
'tension' => 0.5,
'borderColor' => '#e12afb',
'backgroundColor' => '#e12afb',
],
],
'labels' => $labels,
'player_name' => $player_name,
];
self::$last_query = $data;
return $data;
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Filament\Widgets\Data;
use App\Models\StatistikoPlayer;
use Illuminate\Support\Carbon;
class LoadPlayerPerformance
{
public static $last_query = [];
public static function load($filter)
{
if (self::$last_query) {
return self::$last_query;
}
$league_id = (int) $filter['league_id'] ?? 0;
$team_id = (int) $filter['team_id'] ?? 0;
$tm_player_id = (int) $filter['tm_player_id'] ?? 0;
$statistic_type = $filter['statistic_type'];
$player_on_field = $filter['player_on_field'];
if (! $league_id) {
return [];
}
if (! $team_id) {
return [];
}
if (! $tm_player_id) {
return [];
}
if ($statistic_type == 'none') {
$statistic_type = 'gls';
}
$matches_played = StatistikoPlayer::with('event')
->where('tm_player_id', (int) $tm_player_id)
->when($player_on_field, function ($query) use ($player_on_field) {
switch ($player_on_field) {
case 'lineup':
return $query->where('lineup', 'T');
case 'substituted':
return $query->where('lineup', 'P');
}
})->get();
$tmp = [];
foreach ($matches_played as $value) {
$key = round($value->event->starttime->diffInDays(Carbon::now()));
$val = $value->playerrating_value;
$tmp[$key] = $val;
}
ksort($tmp);
$dataset = [];
$labels = [];
foreach ($tmp as $key => $value) {
$labels[] = $key;
$dataset[] = $value;
}
$labels = array_keys($dataset);
$data = [
'datasets' => [
[
'label' => 'Player Rating',
'data' => $dataset,
'tension' => 0.5,
'borderColor' => '#36A2EB',
],
],
'labels' => $labels,
];
self::$last_query = $data;
return $data;
}
}
+15 -9
View File
@@ -13,6 +13,8 @@ class StatsMedianAverage extends StatsOverviewWidget
{
protected ?string $pollingInterval = null;
protected int|array|null $columns = null;
#[Reactive]
public ?array $filters = [];
@@ -21,19 +23,18 @@ class StatsMedianAverage extends StatsOverviewWidget
$this->filters = $filters;
}
public function getColumns(): int|array
{
return [
'default' => 2,
'sm' => 3,
'xl' => 6,
];
}
protected function getStats(): array
{
$data = LoadEvents::load($this->filters);
// dd($data);
$this->columns = [
'default' => 2,
'sm' => 3,
'xl' => ! isset($data['similar_past_matches']) || $data['similar_past_matches'] == 'none' ? 6 : 3,
];
$statistic_type = ucfirst(HelperStatisticType::get($this->filters));
if (! isset($data['datasets'][0])) {
@@ -86,6 +87,7 @@ class StatsMedianAverage extends StatsOverviewWidget
Stat::make('stat1', 'stat1')->view('filament.resources.events.widgets.statistic-regular', [
'titel' => 'Number of events',
'value' => $total_home,
'hidden' => false,
]),
Stat::make('stat2', 'stat2')->view('filament.resources.events.widgets.statistic-average', [
'titel' => 'Average '.$statistic_type,
@@ -101,17 +103,21 @@ class StatsMedianAverage extends StatsOverviewWidget
'home' => $home_team,
'away' => $away_team,
]),
Stat::make('stat4', 'stat4')->view('filament.resources.events.widgets.statistic-regular', [
'titel' => 'Win: '.$data['results']['w'],
'value' => $win,
'hidden' => $data['similar_past_matches'] == 'none' ? false : true,
]),
Stat::make('stat5', 'stat5')->view('filament.resources.events.widgets.statistic-regular', [
'titel' => 'Draw: '.$data['results']['d'],
'value' => $draw,
'hidden' => $data['similar_past_matches'] == 'none' ? false : true,
]),
Stat::make('stat6', 'stat6')->view('filament.resources.events.widgets.statistic-regular', [
'titel' => 'Lost: '.$data['results']['l'],
'value' => $lost,
'hidden' => $data['similar_past_matches'] == 'none' ? false : true,
]),
];
}