wip pp filter
This commit is contained in:
1 parent
fc1e1b2832
commit
55f31acf2a
23 files changed
+1127
-329
No files matched your search
@@ -30,6 +30,7 @@ class ImportDetails
|
||||
$row['birthdate'] = isset($row['birthday']) ? Carbon::parse($row['birthday'])->format('Y-m-d') : '';
|
||||
unset($row['birthday']);
|
||||
$row['last_update'] = Carbon::parse($row['last_update'])->format('Y-m-d H:i:s');
|
||||
|
||||
$collection[] = $row;
|
||||
}
|
||||
}
|
||||
@@ -56,6 +57,6 @@ class ImportDetails
|
||||
|
||||
self::$teams = array_unique(self::$teams);
|
||||
|
||||
StatistikoDetail::where('last_import', 'no')->whereIn('ss_team_id', self::$teams)->update(['is_active' => 0, 'ss_team_id' => 0]);
|
||||
// StatistikoDetail::where('last_import', 'no')->whereIn('ss_team_id', self::$teams)->update(['is_active' => 0, 'ss_team_id' => 0]);
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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'];
|
||||
|
||||
@@ -16,8 +16,8 @@ class AverageLeagueSeason
|
||||
public static function load(array &$expectations, array $filter)
|
||||
{
|
||||
$tournament_id = (int) $filter['league_id'] ?? 0;
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$active_season = GetSeason::active($seasonmode);
|
||||
$season_mode = $filter['season_mode'];
|
||||
$active_season = GetSeason::active($season_mode);
|
||||
|
||||
$res = StatistikoEvent::where('league_id', $tournament_id)
|
||||
->when($active_season, function ($query) use ($active_season) {
|
||||
|
||||
@@ -22,14 +22,14 @@ class AverageTeam
|
||||
$season_or_date = $filter['season_or_date'] ?? 'season';
|
||||
$start = $filter['start_date'] ?? 0;
|
||||
$end = $filter['end_date'] ?? 0;
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season_mode = $filter['season_mode'];
|
||||
|
||||
if ($season_or_date != 'season') {
|
||||
$season = 0;
|
||||
} else {
|
||||
$end = 0;
|
||||
$start = 0;
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
}
|
||||
|
||||
$res = StatistikoEvent::where('league_id', $tournament_id)
|
||||
|
||||
@@ -16,8 +16,8 @@ class AverageTeamSeason
|
||||
$tournament_id = (int) $filter['league_id'] ?? 0;
|
||||
$team_position = $filter['team_position'];
|
||||
$team_id = (int) $filter['team_id'] ?? 0;
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season = GetSeason::active($seasonmode);
|
||||
$season_mode = $filter['season_mode'];
|
||||
$season = GetSeason::active($season_mode);
|
||||
|
||||
$res = StatistikoEvent::where('league_id', $tournament_id)
|
||||
->when($season, function ($query) use ($season) {
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Widgets\Boxes;
|
||||
|
||||
use App\Models\StatistikoDetail;
|
||||
use App\Models\StatistikoEvent;
|
||||
use App\Models\StatistikoPlayer;
|
||||
|
||||
class LoadPlayerAverages
|
||||
{
|
||||
public static function load(int &$team_id, string|array $season)
|
||||
{
|
||||
// dd($team_id);
|
||||
|
||||
$players = StatistikoDetail::where('ss_team_id', $team_id)->where('is_active', 1)->get();
|
||||
|
||||
$player_ids = [];
|
||||
foreach ($players as $player) {
|
||||
$player_ids[] = $player->ss_player_id;
|
||||
}
|
||||
|
||||
$arr = [];
|
||||
|
||||
if (is_array($season)) {
|
||||
$matches_for_season = StatistikoEvent::whereIn('season', $season)->pluck('match_id')->toArray();
|
||||
$res = StatistikoPlayer::with('details')->whereIn('match_id', $matches_for_season)->whereIn('ss_player_id', $player_ids)->get();
|
||||
} else {
|
||||
$res = StatistikoPlayer::with('details')->whereIn('ss_player_id', $player_ids)->get();
|
||||
}
|
||||
|
||||
foreach ($res as $val) {
|
||||
|
||||
$ss_player_id = (int) $val->ss_player_id;
|
||||
$activeteam_id = (int) $val->activeteam_id;
|
||||
$minutes_played = (int) $val->minutes_played;
|
||||
$home_id = (int) $val->event->home_id;
|
||||
$away_id = (int) $val->event->away_id;
|
||||
$startime = $val->event->starttime;
|
||||
|
||||
if ($startime->greaterThan(now()->subDays(180))) {
|
||||
$last_180_days = true;
|
||||
} else {
|
||||
$last_180_days = false;
|
||||
}
|
||||
|
||||
if (! isset($arr[$ss_player_id])) {
|
||||
self::array_template($arr, $ss_player_id);
|
||||
}
|
||||
|
||||
if ($activeteam_id == $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;
|
||||
if ($last_180_days) {
|
||||
$arr[$ss_player_id]['events_played_home'] += 1;
|
||||
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
|
||||
}
|
||||
} elseif ($activeteam_id == $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;
|
||||
if ($last_180_days) {
|
||||
$arr[$ss_player_id]['events_played_away'] += 1;
|
||||
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
|
||||
}
|
||||
|
||||
}
|
||||
$cards = $val->card_yellow + $val->card_yellowred;
|
||||
|
||||
if ($season == 'last180days' && $last_180_days) {
|
||||
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
|
||||
$arr[$ss_player_id]['total_events']++;
|
||||
$arr[$ss_player_id]['total_min'] += $minutes_played;
|
||||
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
|
||||
$arr[$ss_player_id]['goals'] += $val->goals;
|
||||
$arr[$ss_player_id]['fouls'] += $val->fouls;
|
||||
$arr[$ss_player_id]['cards'] += $cards;
|
||||
$arr[$ss_player_id]['offsides'] += $val->offsides;
|
||||
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
|
||||
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
|
||||
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
|
||||
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
|
||||
}
|
||||
if ($season != 'last180days') {
|
||||
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
|
||||
$arr[$ss_player_id]['total_events']++;
|
||||
$arr[$ss_player_id]['total_min'] += $minutes_played;
|
||||
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
|
||||
$arr[$ss_player_id]['goals'] += $val->goals;
|
||||
$arr[$ss_player_id]['fouls'] += $val->fouls;
|
||||
$arr[$ss_player_id]['cards'] += $cards;
|
||||
$arr[$ss_player_id]['offsides'] += $val->offsides;
|
||||
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
|
||||
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
|
||||
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
|
||||
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($players as $value) {
|
||||
if (isset($arr[$value->ss_player_id])) {
|
||||
$arr[$value->ss_player_id]['position'] = $value->position;
|
||||
$arr[$value->ss_player_id]['player_name'] = $value->player_name;
|
||||
$arr[$value->ss_player_id]['preferred_foot'] = $value->preferred_foot;
|
||||
}
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public static function array_template(array &$arr, int $ss_player_id)
|
||||
{
|
||||
$arr[$ss_player_id]['ss_player_id'] = 0;
|
||||
$arr[$ss_player_id]['total_events'] = 0;
|
||||
$arr[$ss_player_id]['total_min'] = 0;
|
||||
$arr[$ss_player_id]['average_min'] = 0;
|
||||
$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;
|
||||
$arr[$ss_player_id]['goals'] = 0;
|
||||
$arr[$ss_player_id]['fouls'] = 0;
|
||||
$arr[$ss_player_id]['offsides'] = 0;
|
||||
$arr[$ss_player_id]['shots_on_target'] = 0;
|
||||
$arr[$ss_player_id]['shots_off_target'] = 0;
|
||||
$arr[$ss_player_id]['shots_blocked'] = 0;
|
||||
$arr[$ss_player_id]['total_shots'] = 0;
|
||||
$arr[$ss_player_id]['cards'] = 0;
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ class LoadEventsQuery
|
||||
$league_id = (int) $filter['league_id'] ?? 0;
|
||||
$team_id = (int) $filter['team_id'] ?? 0;
|
||||
$season = $filter['season'];
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season_mode = $filter['season_mode'];
|
||||
$season_or_date = $filter['season_or_date'];
|
||||
$start = $filter['start_date'] ?? 0;
|
||||
$end = $filter['end_date'] ?? 0;
|
||||
@@ -42,7 +42,7 @@ class LoadEventsQuery
|
||||
}
|
||||
|
||||
// dd($season);
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
|
||||
/**
|
||||
* IF WITH PLAYER
|
||||
|
||||
@@ -12,7 +12,7 @@ class LoadEventsQueryAll
|
||||
{
|
||||
$league_id = (int) $filter['league_id'] ?? 0;
|
||||
$season = $filter['season'];
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season_mode = $filter['season_mode'];
|
||||
$season_or_date = $filter['season_or_date'];
|
||||
$accuracy = (float) $filter['accuracy'] ?? 0.5;
|
||||
$start = $filter['start_date'] ?? 0;
|
||||
@@ -36,7 +36,7 @@ class LoadEventsQueryAll
|
||||
}
|
||||
|
||||
// dd($season);
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
|
||||
/**
|
||||
* IF WITH PLAYER
|
||||
|
||||
@@ -13,7 +13,7 @@ class LoadEventsQueryTP
|
||||
$league_id = (int) $filter['league_id'] ?? 0;
|
||||
$team_id = (int) $filter['team_id'] ?? 0;
|
||||
$season = $filter['season'];
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season_mode = $filter['season_mode'];
|
||||
$season_or_date = $filter['season_or_date'];
|
||||
$accuracy = (float) $filter['accuracy'] ?? 0.5;
|
||||
$start = $filter['start_date'] ?? 0;
|
||||
@@ -40,7 +40,7 @@ class LoadEventsQueryTP
|
||||
}
|
||||
|
||||
// dd($season);
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
|
||||
/**
|
||||
* IF WITH PLAYER
|
||||
|
||||
@@ -44,12 +44,12 @@ class LoadPerformance
|
||||
$end = $filter['end_date'] ?? 0;
|
||||
$season_or_date = $filter['season_or_date'];
|
||||
$season = $filter['season'];
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season_mode = $filter['season_mode'];
|
||||
if ($season_or_date == 'season') {
|
||||
$start = 0;
|
||||
$end = 0;
|
||||
}
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
|
||||
$team_map = SofaScoreRosa::pluck('ss_team_name', 'ss_team_id')->toArray();
|
||||
|
||||
|
||||
@@ -30,8 +30,8 @@ class LoadPlayerWidgets
|
||||
$player_on_field = $filter['player_on_field'] ?? 'all';
|
||||
|
||||
$season = $filter['season'];
|
||||
$seasonmode = $filter['seasonmode'];
|
||||
$season = GetSeason::load($season, $seasonmode);
|
||||
$season_mode = $filter['season_mode'];
|
||||
$season = GetSeason::load($season, $season_mode);
|
||||
|
||||
// dd($player_on_field);
|
||||
|
||||
|
||||
@@ -2,19 +2,24 @@
|
||||
|
||||
namespace App\Filament\Widgets;
|
||||
|
||||
use App\Filament\Widgets\Boxes\LoadPlayerAverages;
|
||||
use App\Filament\Pages\Selections\LoadPositions;
|
||||
use App\Filament\Pages\Selections\LoadSeasons;
|
||||
use App\Filament\Widgets\PlayerProps\BoxNames;
|
||||
use App\Filament\Widgets\PlayerProps\Expectations;
|
||||
use App\Filament\Widgets\PlayerProps\LineUpMap;
|
||||
use App\Filament\Widgets\PlayerProps\PositionHirarchie;
|
||||
use App\Livewire\PlayerCalculator;
|
||||
use App\Models\ExpectedMinimumPosition;
|
||||
use App\Models\SofaScoreCategory;
|
||||
use App\Models\SofaScorePlayerPosition;
|
||||
use App\Models\SofaScoreRosa;
|
||||
use App\Models\SsLineupMemory;
|
||||
use App\Models\StatisticFixtures;
|
||||
use App\Models\StatistikoDetail;
|
||||
use App\Models\StatistikoEvent;
|
||||
use App\Models\StatistikoPlayer;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Widgets\Widget;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@@ -45,6 +50,16 @@ class PlayerPropsDrop extends Widget
|
||||
|
||||
public string $team_name = '';
|
||||
|
||||
public string $season_or_date = 'season';
|
||||
|
||||
public string $season_mode = '';
|
||||
|
||||
public array $season;
|
||||
|
||||
public string $start_date = '';
|
||||
|
||||
public string $end_date = '';
|
||||
|
||||
public int $team_id = 0;
|
||||
|
||||
public int $match_id = 0;
|
||||
@@ -59,6 +74,8 @@ class PlayerPropsDrop extends Widget
|
||||
{
|
||||
$this->activeBoxes = BoxNames::load();
|
||||
|
||||
$this->season_or_date = 'season';
|
||||
|
||||
$this->lineUpMap = LineUpMap::load();
|
||||
|
||||
$this->player_on_field_counter = 0;
|
||||
@@ -103,15 +120,79 @@ class PlayerPropsDrop extends Widget
|
||||
}
|
||||
|
||||
#[On('team-update')]
|
||||
public function syncData(?int $team_id)
|
||||
public function teamUpdate(int $team_id)
|
||||
{
|
||||
if ($team_id) {
|
||||
$this->team_id = $team_id;
|
||||
|
||||
$this->players = PlayerCalculator::load($team_id);
|
||||
$this->syncData();
|
||||
}
|
||||
|
||||
$this->team_name = SofaScoreRosa::where('ss_team_id', $team_id)->value('ss_team_name');
|
||||
public function syncData()
|
||||
{
|
||||
if ($this->team_id) {
|
||||
$this->players = [];
|
||||
|
||||
$positions_map = LoadPositions::load();
|
||||
|
||||
$players = $this->loadAverages();
|
||||
|
||||
foreach ($players as $val) {
|
||||
|
||||
$tmp = [];
|
||||
$tmp['id'] = $val['ss_player_id'];
|
||||
$tmp['name'] = $val['player_name'];
|
||||
$tmp['pos_ori'] = $val['position'];
|
||||
$tmp['foot'] = $val['preferred_foot'];
|
||||
$tmp['pos'] = '';
|
||||
$tmp['active'] = 0;
|
||||
$tmp['tot_evt'] = $val['total_events'];
|
||||
$tmp['tot_min'] = $val['total_min'];
|
||||
$tmp['ave_min'] = $val['average_min'];
|
||||
$tmp['gls'] = $val['goals'];
|
||||
$tmp['fls'] = $val['fouls'];
|
||||
$tmp['ofs'] = $val['offsides'];
|
||||
$tmp['crd'] = $val['cards'];
|
||||
$tmp['snt'] = $val['shots_on_target'];
|
||||
$tmp['tsh'] = $val['shots_off_target'];
|
||||
|
||||
$level = round($val['total_events'] / 3);
|
||||
if ($val['total_events']) {
|
||||
if ($level > 1 && $val['total_events'] < $level) {
|
||||
$tmp['color_evt'] = 'danger';
|
||||
} elseif ($val['total_events'] < $level * 2) {
|
||||
$tmp['color_evt'] = 'info';
|
||||
} else {
|
||||
$tmp['color_evt'] = 'success';
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array($val['position'], $positions_map['MIDFIELD'])) {
|
||||
$tmp['area'] = 'midfield';
|
||||
$tmp['color_pos'] = 'info';
|
||||
$tmp['order'] = 2;
|
||||
} elseif (in_array($val['position'], $positions_map['DEFENCE'])) {
|
||||
$tmp['area'] = 'defence';
|
||||
$tmp['color_pos'] = 'success';
|
||||
$tmp['order'] = 1;
|
||||
} elseif (in_array($val['position'], $positions_map['ATTACK'])) {
|
||||
$tmp['area'] = 'attack';
|
||||
$tmp['color_pos'] = 'warning';
|
||||
$tmp['order'] = 3;
|
||||
} elseif (in_array($val['position'], $positions_map['GOALKEEPER'])) {
|
||||
$tmp['area'] = 'goalkeeper';
|
||||
$tmp['color_pos'] = 'gray';
|
||||
$tmp['order'] = 4;
|
||||
} else {
|
||||
$tmp['area'] = 'defence';
|
||||
$tmp['color_pos'] = 'success';
|
||||
$tmp['order'] = 5;
|
||||
}
|
||||
|
||||
$this->players[] = $tmp;
|
||||
}
|
||||
|
||||
$this->team_name = SofaScoreRosa::where('ss_team_id', $this->team_id)->value('ss_team_name');
|
||||
|
||||
$this->team_id = $team_id;
|
||||
$this->loadPlacement();
|
||||
} else {
|
||||
$this->team_name = '';
|
||||
@@ -124,8 +205,14 @@ class PlayerPropsDrop extends Widget
|
||||
public function lineUpUpdate(int|string $activeLineUp)
|
||||
{
|
||||
$this->activeLineUp = $activeLineUp;
|
||||
|
||||
$this->lineup = $this->lineUpMap[$activeLineUp];
|
||||
|
||||
$this->loadPlacement();
|
||||
|
||||
$this->generateLineUp();
|
||||
|
||||
$this->calculateAspg();
|
||||
}
|
||||
|
||||
#[On('element-dropped-in-box')]
|
||||
@@ -168,6 +255,44 @@ class PlayerPropsDrop extends Widget
|
||||
}
|
||||
}
|
||||
|
||||
#[On('season_or_date-update')]
|
||||
public function setSeasonOrData(string $season_or_date)
|
||||
{
|
||||
$this->season_or_date = $season_or_date;
|
||||
|
||||
if ($this->player_on_field_counter >= 10) {
|
||||
$this->calculateAspg();
|
||||
}
|
||||
}
|
||||
|
||||
#[On('start_date-update')]
|
||||
public function setStartDate(string $start_date)
|
||||
{
|
||||
$this->start_date = $start_date;
|
||||
|
||||
if ($this->player_on_field_counter >= 10) {
|
||||
$this->calculateAspg();
|
||||
}
|
||||
}
|
||||
|
||||
#[On('end_date-update')]
|
||||
public function setEndDate(string $end_date)
|
||||
{
|
||||
$this->end_date = $end_date;
|
||||
|
||||
if ($this->player_on_field_counter >= 10) {
|
||||
$this->calculateAspg();
|
||||
}
|
||||
}
|
||||
|
||||
#[On('season_mode-update')]
|
||||
public function setSeason(string $country_id)
|
||||
{
|
||||
$season_mode = SofaScoreCategory::where('id', $country_id)->value('season_mode');
|
||||
$this->season_mode = $season_mode;
|
||||
$this->season = LoadSeasons::load($season_mode);
|
||||
}
|
||||
|
||||
public function loadPlacement()
|
||||
{
|
||||
$this->clearResultTable();
|
||||
@@ -377,6 +502,8 @@ class PlayerPropsDrop extends Widget
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Log::info($this->team_id, ['calculateAspg']);
|
||||
// Calcolare Aspettativa Team per GOALS
|
||||
// (il valore che appare quando viene selezionato un Evento): nell' esempio,
|
||||
// se scegliamo come Team il Remo (Home) il valore di riferimento sarà 1.2
|
||||
@@ -391,8 +518,16 @@ class PlayerPropsDrop extends Widget
|
||||
$asp_team = (float) $match->exp_away;
|
||||
$team_home_away = 'away';
|
||||
}
|
||||
$arr = [
|
||||
'team_id' => $this->team_id,
|
||||
'season_or_date' => $this->season_or_date,
|
||||
'season' => $this->season,
|
||||
'season_mode' => $this->season_mode,
|
||||
'start_date' => $this->end_date,
|
||||
'end_date' => $this->end_date,
|
||||
];
|
||||
|
||||
$players = LoadPlayerAverages::load($team_id, 'total');
|
||||
$players = $this->loadAverages();
|
||||
|
||||
$count_player = 0;
|
||||
foreach ($players as $ss_player_id => $value) {
|
||||
@@ -684,7 +819,16 @@ class PlayerPropsDrop extends Widget
|
||||
|
||||
public function prepareLineUp()
|
||||
{
|
||||
$players = LoadPlayerAverages::load($this->team_id, 'last180days');
|
||||
$arr = [
|
||||
'team_id' => $this->team_id,
|
||||
'season_or_date' => $this->season_or_date,
|
||||
'season' => $this->season,
|
||||
'season_mode' => $this->season_mode,
|
||||
'start_date' => $this->start_date,
|
||||
'end_date' => $this->end_date,
|
||||
];
|
||||
|
||||
$players = $this->loadAverages();
|
||||
|
||||
$arr = collect();
|
||||
foreach ($players as $value) {
|
||||
@@ -867,4 +1011,129 @@ class PlayerPropsDrop extends Widget
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function loadAverages(): array
|
||||
{
|
||||
if (! $this->team_id) {
|
||||
return [];
|
||||
}
|
||||
// Log::debug('loadAverages', ['team_id' => $this->team_id]);
|
||||
|
||||
$players = StatistikoDetail::where('ss_team_id', $this->team_id)->where('is_active', 1)->get();
|
||||
|
||||
$player_ids = [];
|
||||
|
||||
foreach ($players as $player) {
|
||||
$player_ids[] = $player->ss_player_id;
|
||||
}
|
||||
|
||||
// Log::debug('loadAverages', ['player_ids' => $player_ids]);
|
||||
|
||||
$start_date = null;
|
||||
$end_date = null;
|
||||
if ($this->season_or_date == 'season') {
|
||||
$now = Carbon::now();
|
||||
if ($this->season_mode == 'halfyear') {
|
||||
if ((int) $now->month > 6) {
|
||||
$season_start = $now->startOfYear()->addMonths(7);
|
||||
} else {
|
||||
$season_start = $now->startOfYear()->subMonths(7);
|
||||
}
|
||||
} else {
|
||||
$season_start = $now->startOfYear();
|
||||
}
|
||||
} else {
|
||||
$season_start = '';
|
||||
$start_date = Carbon::parse($this->start_date);
|
||||
$end_date = Carbon::parse($this->end_date);
|
||||
// Log::debug('start end', [$start_date->format('Y-m-d').' - '.$end_date->format('Y-m-d')]);
|
||||
}
|
||||
|
||||
$match_ids = StatistikoEvent::when($start_date, function ($query) use ($start_date) {
|
||||
return $query->whereDate('starttime', '>', $start_date);
|
||||
})->when($end_date, function ($query) use ($end_date) {
|
||||
return $query->whereDate('starttime', '<', $end_date);
|
||||
})->when($season_start, function ($query) use ($season_start) {
|
||||
return $query->whereDate('starttime', '>', $season_start);
|
||||
})->pluck('match_id')->toArray();
|
||||
|
||||
// Log::debug('loadAverages', ['match_ids' => $match_ids]);
|
||||
|
||||
$res = StatistikoPlayer::with('details')
|
||||
->whereIn('ss_player_id', $player_ids)
|
||||
->whereIn('match_id', $match_ids)
|
||||
->get();
|
||||
|
||||
$arr = [];
|
||||
foreach ($res as $val) {
|
||||
|
||||
$ss_player_id = (int) $val->ss_player_id;
|
||||
$activeteam_id = (int) $val->activeteam_id;
|
||||
$minutes_played = (int) $val->minutes_played;
|
||||
$home_id = (int) $val->event->home_id;
|
||||
$away_id = (int) $val->event->away_id;
|
||||
|
||||
if (! isset($arr[$ss_player_id])) {
|
||||
self::array_template($arr, $ss_player_id);
|
||||
}
|
||||
|
||||
if ($activeteam_id == $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 == $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;
|
||||
}
|
||||
$cards = $val->card_yellow + $val->card_yellowred;
|
||||
|
||||
$arr[$ss_player_id]['ss_player_id'] = $ss_player_id;
|
||||
$arr[$ss_player_id]['total_events']++;
|
||||
$arr[$ss_player_id]['total_min'] += $minutes_played;
|
||||
$arr[$ss_player_id]['average_min'] = round($arr[$ss_player_id]['total_min'] / $arr[$ss_player_id]['total_events']);
|
||||
$arr[$ss_player_id]['goals'] += $val->goals;
|
||||
$arr[$ss_player_id]['fouls'] += $val->fouls;
|
||||
$arr[$ss_player_id]['cards'] += $cards;
|
||||
$arr[$ss_player_id]['offsides'] += $val->offsides;
|
||||
$arr[$ss_player_id]['shots_on_target'] += $val->shots_on_target;
|
||||
$arr[$ss_player_id]['shots_off_target'] += $val->shots_off_target;
|
||||
$arr[$ss_player_id]['shots_blocked'] += $val->shots_blocked;
|
||||
$arr[$ss_player_id]['total_shots'] += $val->shots_on_target + $val->shots_off_target + $val->shots_blocked;
|
||||
}
|
||||
|
||||
foreach ($players as $value) {
|
||||
if (isset($arr[$value->ss_player_id])) {
|
||||
$arr[$value->ss_player_id]['position'] = $value->position;
|
||||
$arr[$value->ss_player_id]['player_name'] = $value->player_name;
|
||||
$arr[$value->ss_player_id]['preferred_foot'] = $value->preferred_foot;
|
||||
}
|
||||
}
|
||||
|
||||
// Log::debug('loadAverages final', $arr);
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public static function array_template(array &$arr, int $ss_player_id)
|
||||
{
|
||||
$arr[$ss_player_id]['ss_player_id'] = 0;
|
||||
$arr[$ss_player_id]['total_events'] = 0;
|
||||
$arr[$ss_player_id]['total_min'] = 0;
|
||||
$arr[$ss_player_id]['average_min'] = 0;
|
||||
$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;
|
||||
$arr[$ss_player_id]['goals'] = 0;
|
||||
$arr[$ss_player_id]['fouls'] = 0;
|
||||
$arr[$ss_player_id]['offsides'] = 0;
|
||||
$arr[$ss_player_id]['shots_on_target'] = 0;
|
||||
$arr[$ss_player_id]['shots_off_target'] = 0;
|
||||
$arr[$ss_player_id]['shots_blocked'] = 0;
|
||||
$arr[$ss_player_id]['total_shots'] = 0;
|
||||
$arr[$ss_player_id]['cards'] = 0;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user