wip pp filter

This commit is contained in:
salam committed 2026-10-15 16:29:48 +02:00
1 parent fc1e1b2832
commit 55f31acf2a
23 files changed
+1127 -329

No files matched your search

+19 -11
View File
@@ -90,18 +90,17 @@ class PlayerProps extends Page implements HasForms
$this->selectMatch(),
$this->selectTeam(),
$this->selectLineup(),
// $this->radioSeasonOrDate(),
// $this->datePickerStartDate(),
// $this->datePickerEndDate(),
$this->radioSeasonOrDate(),
$this->datePickerStartDate(),
$this->datePickerEndDate(),
])->statePath('filterData');
}
#[On('team-update')]
public function syncData(?int $team_id)
public function syncData()
{
if ($team_id) {
$this->team_id = $team_id;
$this->clientLineUps = SsLineupMemory::where('team_id', $team_id)->where('client_id', Auth::user()->client_id)->pluck('lineup')->toArray();
if ($this->team_id) {
$this->clientLineUps = SsLineupMemory::where('team_id', $this->team_id)->where('client_id', Auth::user()->client_id)->pluck('lineup')->toArray();
} else {
$this->players = [];
$this->dispatch('clear-all');
@@ -302,6 +301,7 @@ class PlayerProps extends Page implements HasForms
$set('mid', null);
$set('tid', null);
$this->dispatch('clear-all');
$this->dispatch('season_mode-update', $state);
});
}
@@ -317,9 +317,11 @@ class PlayerProps extends Page implements HasForms
->default('season')
->hiddenLabel()
->options([
'season' => 'Season',
'season' => 'Active Season',
'date' => 'Date',
]);
])->afterStateUpdated(function ($state) {
$this->dispatch('season_or_date-update', season_or_date: $state);
});
}
private function datePickerStartDate(): DatePicker
@@ -332,12 +334,15 @@ class PlayerProps extends Page implements HasForms
->prefixIconColor(fn (Get $get): string => $get('start_date') ? 'success' : 'primary')
->prefixIcon('phosphor-calendar')
->prefix('Start')
->closeOnDateSelection()
->suffixAction(
Action::make('clear_start')
->icon('phosphor-x')
->color('gray')
->action(fn (Set $set) => $set('start_date', null))
);
)->afterStateUpdated(function ($state) {
$this->dispatch('start_date-update', start_date: $state);
});
}
private function datePickerEndDate(): DatePicker
@@ -350,11 +355,14 @@ class PlayerProps extends Page implements HasForms
->prefixIconColor(fn (Get $get): string => $get('end_date') ? 'success' : 'primary')
->prefixIcon('phosphor-calendar')
->prefix('End')
->closeOnDateSelection()
->suffixAction(
Action::make('clear_end')
->icon('phosphor-x')
->color('gray')
->action(fn (Set $set) => $set('end_date', null))
);
)->afterStateUpdated(function ($state) {
$this->dispatch('end_date-update', end_date: $state);
});
}
}
@@ -6,14 +6,14 @@ use Illuminate\Support\Carbon;
class GetSeason
{
public static function load(?array $season, ?string $seasonmode)
public static function load(?array $season, ?string $season_mode)
{
if (! \is_array($season) || ! \count($season)) {
$date = Carbon::now();
$season = [];
if ($seasonmode == 'halfyear') {
if ($season_mode == 'halfyear') {
if ((int) date('m') > 7) {
$season[] = (string) $date->format('y').'/'.$date->format('y') + 1;
} else {
@@ -27,13 +27,13 @@ class GetSeason
return $season;
}
public static function active(?string $seasonmode)
public static function active(?string $season_mode)
{
$date = Carbon::now();
$active_season = '';
if ($seasonmode == 'halfyear') {
if ($season_mode == 'halfyear') {
if ((int) date('m') > 7) {
$active_season = (string) $date->format('y').'/'.$date->format('y') + 1;
} else {
@@ -3,14 +3,20 @@
namespace App\Filament\Pages\Selections;
use App\Filament\Pages\Selections\Helper\GetSeason;
use App\Filament\Widgets\Boxes\LoadPlayerAverages;
use App\Models\StatistikoDetail;
use App\Models\StatistikoEvent;
use App\Models\StatistikoPlayer;
class LoadPlayerSelection
{
public static function load(?int $team_id, ?string $team_position, ?array $season, ?string $seasonmode)
public static function load(?array $arr)
{
$season = GetSeason::load($season, $seasonmode);
$team_id = $arr['team_id'];
$team_position = $arr['team_position'];
$season = GetSeason::load($arr['season'], $arr['season_mode']);
$matches = StatistikoEvent::whereIn('season', $season)
->where(function ($query) use ($team_id, $team_position) {
switch ($team_position) {
@@ -22,30 +28,50 @@ class LoadPlayerSelection
return $query->where('home_id', '=', $team_id)
->orWhere('away_id', '=', $team_id);
}
})->pluck('match_id')->toArray();
})->get();
$matches_count = count($matches);
$matches_count = $matches->count();
$positions_map = LoadPositions::load();
$players = LoadPlayerAverages::load($team_id, $season);
$player_name_map = [];
$res = StatistikoDetail::where('ss_team_id', $team_id)->get();
foreach ($res as $val) {
$player_name_map[$val->ss_player_id]['name'] = $val->player_name;
$player_name_map[$val->ss_player_id]['pos'] = $val->position;
$player_name_map[$val->ss_player_id]['foot'] = $val->preferred_foot;
}
$arr = [];
foreach ($players as $ss_player_id => $val) {
if (! isset($arr[$ss_player_id])) {
$arr[$ss_player_id]['player_name'] = $val['player_name'];
$arr[$ss_player_id]['events_played_home'] = $val['events_played_home'];
$arr[$ss_player_id]['events_played_away'] = $val['events_played_away'];
$arr[$ss_player_id]['minutes_played_home'] = $val['minutes_played_home'];
$arr[$ss_player_id]['minutes_played_away'] = $val['minutes_played_away'];
$arr[$ss_player_id]['preferred_foot'] = $val['preferred_foot'] ?? '';
$arr[$ss_player_id]['player_position'] = $val['position'] ?? '';
$arr[$ss_player_id]['color_level'] = round($matches_count / 3);
} else {
$arr[$ss_player_id]['events_played_home'] += $val['events_played_home'];
$arr[$ss_player_id]['events_played_away'] += $val['events_played_away'];
$arr[$ss_player_id]['minutes_played_home'] += $val['minutes_played_home'];
$arr[$ss_player_id]['minutes_played_away'] += $val['minutes_played_away'];
foreach ($matches as $match) {
$players = StatistikoPlayer::where('match_id', $match->match_id)->get();
foreach ($players as $val) {
$ss_player_id = (int) $val->ss_player_id;
if (isset($player_name_map[$ss_player_id])) {
$activeteam_id = (int) $val->activeteam_id;
$minutes_played = (int) $val->minutes_played;
if (! isset($arr[$ss_player_id])) {
self::array_template($arr, $ss_player_id);
$arr[$ss_player_id]['player_name'] = $player_name_map[$ss_player_id]['name'] ?? '';
$arr[$ss_player_id]['preferred_foot'] = $player_name_map[$ss_player_id]['foot'] ?? '';
$arr[$ss_player_id]['player_position'] = $player_name_map[$ss_player_id]['pos'] ?? '';
$arr[$ss_player_id]['color_level'] = round($matches_count / 3);
}
if ($activeteam_id == $match->home_id) {
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
$arr[$ss_player_id]['events_played_home'] += 1;
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
} elseif ($activeteam_id == $match->away_id) {
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
$arr[$ss_player_id]['events_played_away'] += 1;
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
}
}
}
}
@@ -118,4 +144,16 @@ class LoadPlayerSelection
return sprintf($format, $hours, $minutes);
}
public static function array_template(array &$arr, int $ss_player_id)
{
$arr[$ss_player_id]['ss_player_id'] = 0;
$arr[$ss_player_id]['color_level'] = 0;
$arr[$ss_player_id]['preferred_foot'] = '';
$arr[$ss_player_id]['player_position'] = '';
$arr[$ss_player_id]['events_played_home'] = 0;
$arr[$ss_player_id]['events_played_away'] = 0;
$arr[$ss_player_id]['minutes_played_home'] = 0;
$arr[$ss_player_id]['minutes_played_away'] = 0;
}
}
@@ -7,16 +7,16 @@ use Illuminate\Support\Carbon;
class LoadSeasons
{
public static function load(string $seasonmode)
public static function load(string $season_mode)
{
if (! $seasonmode) {
if (! $season_mode) {
return [];
}
$season = [];
$period = CarbonPeriod::create(Carbon::now()->year(2024), '1 year', Carbon::now());
foreach ($period as $date) {
if ($seasonmode == 'halfyear') {
if ($season_mode == 'halfyear') {
if ((int) date('m') > 7) {
$tmp = $date->format('y').'/'.$date->format('y') + 1;
} else {
+15 -9
View File
@@ -136,7 +136,7 @@ class Statistic extends BaseDashboard
])
->columnSpanFull()
->schema([
Hidden::make('seasonmode'),
Hidden::make('season_mode'),
$this->selectSofascoreCategoryId(),
$this->selectLeagueId(),
$this->selectMatchId(),
@@ -348,7 +348,7 @@ class Statistic extends BaseDashboard
->options(fn () => LoadSofaScoreCategory::load())
->placeholder('Select Country')
->afterStateUpdated(function (callable $set, $state) {
$set('seasonmode', SofaScoreCategory::where('id', $state)->value('season_mode'));
$set('season_mode', SofaScoreCategory::where('id', $state)->value('season_mode'));
$set('league_id', null);
$set('match_id', null);
$set('team_id', null);
@@ -559,9 +559,9 @@ class Statistic extends BaseDashboard
->placeholder('Player')
->visible(fn (Get $get) => $get('team_id'))
->hidden(fn (Get $get) => $get('similar_past_matches') != 'none')
->disabled(fn (Get $get) => $get('season_or_date') == 'date' && ($get('start_date') == null || $get('end_date') == null))
->prefixIconColor(fn (Get $get): string => $get('similar_past_matches') == 'none' ? 'success' : '')
->prefixIcon('icon-player')
->preload()
->searchable()
->extraAttributes(fn () => [
'id' => 'player_selector',
@@ -574,12 +574,18 @@ class Statistic extends BaseDashboard
->tooltip(fn () => $this->tooltip_player_info())
)
->options(function (Get $get) {
$team_id = $get('team_id');
$team_position = $get('team_position');
$season = $get('season');
$seasonmode = $get('seasonmode');
$arr = [
'team_id' => $get('team_id'),
'team_position' => $get('team_position'),
'season' => $get('season'),
'season_mode' => $get('season_mode'),
'season_or_date' => $get('season_or_date'),
'start_date' => $get('start_date'),
'end_date' => $get('end_date'),
];
return LoadPlayerSelection::load($arr);
return LoadPlayerSelection::load($team_id, $team_position, $season, $seasonmode);
});
}
@@ -634,7 +640,7 @@ class Statistic extends BaseDashboard
->hidden(fn (Get $get) => $get('season_or_date') == 'date' || $get('similar_past_matches') != 'none')
->prefixIcon('phosphor-calendar-star')
->options(function (Get $get) {
if ($get('seasonmode') == 'halfyear') {
if ($get('season_mode') == 'halfyear') {
return ['26/27' => '26/27', '25/26' => '25/26', '24/25' => '24/25'];
} else {
return ['2026' => '2026', '2025' => '2025', '2024' => '2024'];