add 2 parts for claculation pp wip
This commit is contained in:
1 parent
6d2f4c1052
commit
ad45880506
19 files changed
+1403
-1049
No files matched your search
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
trait BestLineUp
|
||||
{
|
||||
public function majorFormations(): array
|
||||
{
|
||||
// 343+
|
||||
// 352
|
||||
// 433+
|
||||
// 442+
|
||||
// 4231
|
||||
// 4321+
|
||||
// 4312+
|
||||
// 4411+
|
||||
return [
|
||||
'343+' => [9, 16, 23, 4, 11, 25, 32, 6, 34, 21],
|
||||
'352' => [9, 16, 23, 4, 11, 17, 25, 32, 20, 21],
|
||||
'433+' => [2, 9, 23, 30, 11, 18, 25, 6, 34, 21],
|
||||
'442+' => [2, 9, 23, 30, 4, 11, 25, 32, 20, 21],
|
||||
'4231' => [2, 9, 23, 30, 10, 24, 12, 19, 26, 21],
|
||||
'4321+' => [2, 9, 23, 30, 11, 18, 25, 12, 26, 21],
|
||||
'4312+' => [2, 9, 23, 30, 11, 18, 25, 19, 20, 21],
|
||||
'4411+' => [2, 9, 23, 30, 4, 11, 25, 32, 19, 21],
|
||||
];
|
||||
}
|
||||
|
||||
public function generateBestLineUp(): void
|
||||
{
|
||||
if (! $this->team_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
$all_lineups = [];
|
||||
|
||||
$players = $this->prepareLineUp();
|
||||
|
||||
$major_formations = self::majorFormations();
|
||||
|
||||
foreach ($major_formations as $formation_name => $formation_positions) {
|
||||
|
||||
$lineup = [];
|
||||
|
||||
$id_used = [];
|
||||
|
||||
foreach ($formation_positions as $place) {
|
||||
$this->getPlayerForPosition($lineup, $id_used, $place, $players);
|
||||
}
|
||||
|
||||
$all_lineups[$formation_name] = $lineup;
|
||||
}
|
||||
|
||||
$tmp = [];
|
||||
foreach ($all_lineups as $formation_name => $lineup) {
|
||||
$tmp[$formation_name] = array_sum(array_column($lineup, 'min'));
|
||||
}
|
||||
$formation_name = array_search(max($tmp), $tmp);
|
||||
|
||||
// dd($all_lineups, $tmp, $formation_name);
|
||||
|
||||
$this->dispatch('update-lineup', $formation_name);
|
||||
|
||||
$this->lineUpUpdate($formation_name);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
trait ClearBoxes
|
||||
{
|
||||
public function clearBox(int $boxNumber): void
|
||||
{
|
||||
if (isset($this->boxes[$boxNumber])) {
|
||||
$tmp = $this->boxes[$boxNumber];
|
||||
$player_id = 0;
|
||||
foreach ($tmp as $key => $value) {
|
||||
if ($key == 'id') {
|
||||
$player_id = $value;
|
||||
}
|
||||
}
|
||||
foreach ($this->players as $k => $record) {
|
||||
if ($record['id'] == (int) $player_id) {
|
||||
$this->boxes[$boxNumber] = [];
|
||||
$this->players[$k]['pos'] = '';
|
||||
$this->players[$k]['active'] = 0;
|
||||
|
||||
$this->player_on_field_counter--;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->players as $k => $record) {
|
||||
$this->players[$k]['gls'] = '';
|
||||
$this->players[$k]['fls'] = '';
|
||||
$this->players[$k]['ofs'] = '';
|
||||
$this->players[$k]['crd'] = '';
|
||||
$this->players[$k]['snt'] = '';
|
||||
$this->players[$k]['tsh'] = '';
|
||||
$this->players[$k]['wfl'] = '';
|
||||
}
|
||||
|
||||
$this->storePlacement();
|
||||
|
||||
$this->loadPlacement();
|
||||
}
|
||||
}
|
||||
|
||||
public function clearResultTable(): void
|
||||
{
|
||||
|
||||
for ($i = 1; $i <= 35; $i++) {
|
||||
$this->boxes[$i] = [];
|
||||
}
|
||||
|
||||
foreach ($this->players as $k => $record) {
|
||||
// $this->players[$k] = [];
|
||||
$this->players[$k]['active'] = 0;
|
||||
$this->players[$k]['gls'] = '';
|
||||
$this->players[$k]['fls'] = '';
|
||||
$this->players[$k]['ofs'] = '';
|
||||
$this->players[$k]['crd'] = '';
|
||||
$this->players[$k]['snt'] = '';
|
||||
$this->players[$k]['tsh'] = '';
|
||||
$this->players[$k]['wfl'] = '';
|
||||
}
|
||||
|
||||
$this->player_on_field_counter = 0;
|
||||
|
||||
$this->dispatch('update-players', players: $this->players);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use Filament\Notifications\Notification;
|
||||
|
||||
trait CopyData
|
||||
{
|
||||
public function copyDevelopment()
|
||||
{
|
||||
if ($this->player_on_field_counter < 10) {
|
||||
Notification::make()->title('Needs a calculation first ')
|
||||
->info()
|
||||
->send();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$copystring = "Part 1\n";
|
||||
|
||||
foreach ($this->calculationVariables as $k => $part) {
|
||||
foreach ($part as $row) {
|
||||
if ($copystring == '') {
|
||||
$keys = array_keys($row);
|
||||
$copystring .= implode(';', $keys)."\n";
|
||||
}
|
||||
$copystring .= implode(';', $row)."\n";
|
||||
}
|
||||
if ($k == 0) {
|
||||
$copystring .= "\nPart 2\n";
|
||||
}
|
||||
}
|
||||
$this->js("navigator.clipboard.writeText(`$copystring`)");
|
||||
|
||||
Notification::make()
|
||||
->title('Calculation variables copied')
|
||||
->success()
|
||||
->send();
|
||||
}
|
||||
|
||||
public function copyResult()
|
||||
{
|
||||
if ($this->player_on_field_counter < 10) {
|
||||
Notification::make()->title('Needs a calculation first ')
|
||||
->info()
|
||||
->send();
|
||||
|
||||
return;
|
||||
}
|
||||
$header = ['name', 'foot', 'events', 'average min', 'position', 'on field', 'gls', 'fls', 'ofs', 'crd', 'snt', 'tsh', 'wfl'];
|
||||
$copystring = implode(';', $header)."\n";
|
||||
foreach ($this->players as $row) {
|
||||
$tmp = [];
|
||||
$tmp[] = $row['name'];
|
||||
$tmp[] = $row['foot'];
|
||||
$tmp[] = $row['tot_evt'];
|
||||
$tmp[] = $row['ave_min'];
|
||||
if ($row['pos']) {
|
||||
$tmp[] = $row['pos'];
|
||||
} else {
|
||||
$tmp[] = $row['pos_ori'];
|
||||
}
|
||||
$tmp[] = $row['active'];
|
||||
$tmp[] = $row['gls'];
|
||||
$tmp[] = $row['fls'];
|
||||
$tmp[] = $row['ofs'];
|
||||
$tmp[] = $row['crd'];
|
||||
$tmp[] = $row['snt'];
|
||||
$tmp[] = $row['tsh'];
|
||||
$tmp[] = $row['wfl'];
|
||||
|
||||
$copystring .= implode(';', $tmp)."\n";
|
||||
}
|
||||
$this->js("navigator.clipboard.writeText(`$copystring`)");
|
||||
|
||||
Notification::make()
|
||||
->title('Results copied')
|
||||
->success()
|
||||
->send();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,273 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Models\StatistikoEvent;
|
||||
|
||||
trait Expectations
|
||||
{
|
||||
public function loadExpectations()
|
||||
{
|
||||
$data = StatistikoEvent::where(function ($query) {
|
||||
return $query->whereIn('home_id', [$this->home_id, $this->away_id])->orWhereIn('away_id', [$this->home_id, $this->away_id]);
|
||||
})->get();
|
||||
|
||||
$work = [];
|
||||
$bettypes = ['gls', 'fls', 'crn', 'ofs', 'crd', 'snt', 'tsh', 'wfl'];
|
||||
foreach ($data as $value) {
|
||||
foreach ($bettypes as $type) {
|
||||
if ($value['home_id'] == $this->home_id) {
|
||||
$work[$type]['home_made_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['home_made_home'][] = $value[$type.'_h'];
|
||||
$work[$type]['home_got_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['home_got_home'][] = $value[$type.'_a'];
|
||||
} elseif ($value['away_id'] == $this->home_id) {
|
||||
$work[$type]['home_made_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['home_got_total'][] = $value[$type.'_a'];
|
||||
} elseif ($value['home_id'] == $this->away_id) {
|
||||
$work[$type]['home_made_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['home_got_total'][] = $value[$type.'_a'];
|
||||
} elseif ($value['away_id'] == $this->away_id) {
|
||||
$work[$type]['home_made_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['home_made_home'][] = $value[$type.'_h'];
|
||||
$work[$type]['home_got_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['home_got_home'][] = $value[$type.'_h'];
|
||||
}
|
||||
|
||||
if ($value['away_id'] == $this->away_id) {
|
||||
$work[$type]['away_made_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['away_made_away'][] = $value[$type.'_a'];
|
||||
$work[$type]['away_got_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['away_got_away'][] = $value[$type.'_a'];
|
||||
} elseif ($value['away_id'] == $this->home_id) {
|
||||
$work[$type]['away_made_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['away_got_total'][] = $value[$type.'_h'];
|
||||
} elseif ($value['home_id'] == $this->away_id) {
|
||||
$work[$type]['away_made_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['away_got_total'][] = $value[$type.'_h'];
|
||||
} elseif ($value['away_id'] == $this->away_id) {
|
||||
$work[$type]['away_made_total'][] = $value[$type.'_a'];
|
||||
$work[$type]['away_made_away'][] = $value[$type.'_a'];
|
||||
$work[$type]['away_got_total'][] = $value[$type.'_h'];
|
||||
$work[$type]['away_got_away'][] = $value[$type.'_a'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$num_home_crd = 0;
|
||||
$num_away_crd = 0;
|
||||
$num_home_gls = 0;
|
||||
$num_away_gls = 0;
|
||||
$num_home_fls = 0;
|
||||
$num_away_fls = 0;
|
||||
$num_home_ofs = 0;
|
||||
$num_away_ofs = 0;
|
||||
$num_home_snt = 0;
|
||||
$num_away_snt = 0;
|
||||
$num_home_tsh = 0;
|
||||
$num_away_tsh = 0;
|
||||
$num_home_wfl = 0;
|
||||
$num_away_wfl = 0;
|
||||
|
||||
$bettypes = ['gls', 'crd', 'fls', 'ofs', 'snt', 'tsh', 'wfl'];
|
||||
|
||||
foreach ($work as $type => $value) {
|
||||
switch ($type) {
|
||||
case 'gls':
|
||||
$sum_home_gls = array_sum($value['home_made_total']);
|
||||
$num_home_gls = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_gls += array_sum($value['home_made_home']);
|
||||
$num_home_gls += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_gls += array_sum($value['home_got_total']);
|
||||
$num_home_gls += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_gls += array_sum($value['home_got_home']);
|
||||
$num_home_gls += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_gls = array_sum($value['away_made_total']);
|
||||
$num_away_gls = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_gls += array_sum($value['away_made_away']);
|
||||
$num_away_gls += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_gls += array_sum($value['away_got_total']);
|
||||
$num_away_gls += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_gls += array_sum($value['away_got_away']);
|
||||
$num_away_gls += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'crd':
|
||||
$sum_home_crd = array_sum($value['home_made_total']);
|
||||
$num_home_crd = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_crd += array_sum($value['home_made_home']);
|
||||
$num_home_crd += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_crd += array_sum($value['home_got_total']);
|
||||
$num_home_crd += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_crd += array_sum($value['home_got_home']);
|
||||
$num_home_crd += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_crd = array_sum($value['away_made_total']);
|
||||
$num_away_crd = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_crd += array_sum($value['away_made_away']);
|
||||
$num_away_crd += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_crd += array_sum($value['away_got_total']);
|
||||
$num_away_crd += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_crd += array_sum($value['away_got_away']);
|
||||
$num_away_crd += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'fls':
|
||||
$sum_home_fls = array_sum($value['home_made_total']);
|
||||
$num_home_fls = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_fls += array_sum($value['home_made_home']);
|
||||
$num_home_fls += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_fls += array_sum($value['home_got_total']);
|
||||
$num_home_fls += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_fls += array_sum($value['home_got_home']);
|
||||
$num_home_fls += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_fls = array_sum($value['away_made_total']);
|
||||
$num_away_fls = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_fls += array_sum($value['away_made_away']);
|
||||
$num_away_fls += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_fls += array_sum($value['away_got_total']);
|
||||
$num_away_fls += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_fls += array_sum($value['away_got_away']);
|
||||
$num_away_fls += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'ofs':
|
||||
$sum_home_ofs = array_sum($value['home_made_total']);
|
||||
$num_home_ofs = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_ofs += array_sum($value['home_made_home']);
|
||||
$num_home_ofs += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_ofs += array_sum($value['home_got_total']);
|
||||
$num_home_ofs += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_ofs += array_sum($value['home_got_home']);
|
||||
$num_home_ofs += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_ofs = array_sum($value['away_made_total']);
|
||||
$num_away_ofs = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_ofs += array_sum($value['away_made_away']);
|
||||
$num_away_ofs += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_ofs += array_sum($value['away_got_total']);
|
||||
$num_away_ofs += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_ofs += array_sum($value['away_got_away']);
|
||||
$num_away_ofs += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'snt':
|
||||
$sum_home_snt = array_sum($value['home_made_total']);
|
||||
$num_home_snt = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_snt += array_sum($value['home_made_home']);
|
||||
$num_home_snt += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_snt += array_sum($value['home_got_total']);
|
||||
$num_home_snt += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_snt += array_sum($value['home_got_home']);
|
||||
$num_home_snt += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_snt = array_sum($value['away_made_total']);
|
||||
$num_away_snt = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_snt += array_sum($value['away_made_away']);
|
||||
$num_away_snt += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_snt += array_sum($value['away_got_total']);
|
||||
$num_away_snt += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_snt += array_sum($value['away_got_away']);
|
||||
$num_away_snt += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'tsh':
|
||||
$sum_home_tsh = array_sum($value['home_made_total']);
|
||||
$num_home_tsh = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_tsh += array_sum($value['home_made_home']);
|
||||
$num_home_tsh += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_tsh += array_sum($value['home_got_total']);
|
||||
$num_home_tsh += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_tsh += array_sum($value['home_got_home']);
|
||||
$num_home_tsh += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_tsh = array_sum($value['away_made_total']);
|
||||
$num_away_tsh = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_tsh += array_sum($value['away_made_away']);
|
||||
$num_away_tsh += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_tsh += array_sum($value['away_got_total']);
|
||||
$num_away_tsh += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_tsh += array_sum($value['away_got_away']);
|
||||
$num_away_tsh += \count($value['away_got_away']);
|
||||
break;
|
||||
case 'wfl':
|
||||
$sum_home_wfl = array_sum($value['home_made_total']);
|
||||
$num_home_wfl = \count($value['home_made_total']);
|
||||
|
||||
$sum_home_wfl += array_sum($value['home_made_home']);
|
||||
$num_home_wfl += \count($value['home_made_home']);
|
||||
|
||||
$sum_home_wfl += array_sum($value['home_got_total']);
|
||||
$num_home_wfl += \count($value['home_got_total']);
|
||||
|
||||
$sum_home_wfl += array_sum($value['home_got_home']);
|
||||
$num_home_wfl += \count($value['home_got_home']);
|
||||
|
||||
$sum_away_wfl = array_sum($value['away_made_total']);
|
||||
$num_away_wfl = \count($value['away_made_total']);
|
||||
|
||||
$sum_away_wfl += array_sum($value['away_made_away']);
|
||||
$num_away_wfl += \count($value['away_made_away']);
|
||||
|
||||
$sum_away_wfl += array_sum($value['away_got_total']);
|
||||
$num_away_wfl += \count($value['away_got_total']);
|
||||
|
||||
$sum_away_wfl += array_sum($value['away_got_away']);
|
||||
$num_away_wfl += \count($value['away_got_away']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$aspettativa = [];
|
||||
$aspettativa['home']['gls'] = round($sum_home_gls / $num_home_gls, 1);
|
||||
$aspettativa['home']['crd'] = round($sum_home_crd / $num_home_crd, 1);
|
||||
$aspettativa['home']['fls'] = round($sum_home_fls / $num_home_fls, 1);
|
||||
$aspettativa['home']['ofs'] = round($sum_home_ofs / $num_home_ofs, 1);
|
||||
$aspettativa['home']['snt'] = round($sum_home_snt / $num_home_snt, 1);
|
||||
$aspettativa['home']['tsh'] = round($sum_home_tsh / $num_home_tsh, 1);
|
||||
$aspettativa['home']['wfl'] = round($sum_home_wfl / $num_home_wfl, 1);
|
||||
|
||||
$aspettativa['away']['gls'] = round($sum_away_gls / $sum_away_gls, 1);
|
||||
$aspettativa['away']['crd'] = round($sum_away_crd / $num_away_crd, 1);
|
||||
$aspettativa['away']['fls'] = round($sum_away_fls / $num_away_fls, 1);
|
||||
$aspettativa['away']['ofs'] = round($sum_away_ofs / $num_away_ofs, 1);
|
||||
$aspettativa['away']['snt'] = round($sum_away_snt / $num_away_snt, 1);
|
||||
$aspettativa['away']['tsh'] = round($sum_away_tsh / $num_away_tsh, 1);
|
||||
$aspettativa['away']['wfl'] = round($sum_away_wfl / $num_away_wfl, 1);
|
||||
|
||||
return $aspettativa;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
trait LineUpMap
|
||||
{
|
||||
public static function loadLineUpMaps()
|
||||
{
|
||||
return [
|
||||
'3313' => [9, 16, 23, 11, 18, 25, 19, 6, 34, 21],
|
||||
'3331' => [9, 16, 23, 17, 11, 25, 12, 19, 26, 21],
|
||||
'3331-' => [9, 16, 23, 10, 18, 24, 12, 19, 26, 21],
|
||||
'3331+' => [9, 16, 23, 11, 18, 25, 12, 19, 26, 21],
|
||||
'3412-' => [9, 16, 23, 4, 10, 24, 32, 19, 20, 21],
|
||||
'3412+' => [9, 16, 23, 4, 11, 25, 32, 19, 20, 21],
|
||||
'3421-' => [9, 16, 23, 4, 10, 24, 32, 12, 26, 21],
|
||||
'3421+' => [9, 16, 23, 4, 11, 25, 32, 12, 26, 21],
|
||||
'343-' => [9, 16, 23, 4, 10, 24, 32, 6, 34, 21],
|
||||
'343+' => [9, 16, 23, 4, 11, 25, 32, 6, 34, 21],
|
||||
'3511' => [9, 16, 23, 4, 11, 17, 25, 32, 19, 21],
|
||||
'3511-' => [9, 16, 23, 4, 10, 18, 24, 32, 19, 21],
|
||||
'3511+' => [9, 16, 23, 4, 11, 18, 25, 32, 19, 21],
|
||||
'352' => [9, 16, 23, 4, 11, 17, 25, 32, 20, 21],
|
||||
'352-' => [9, 16, 23, 4, 10, 18, 24, 32, 20, 21],
|
||||
'352+' => [9, 16, 23, 4, 11, 18, 25, 32, 20, 21],
|
||||
'4132' => [2, 9, 23, 30, 17, 12, 19, 26, 20, 21],
|
||||
'4213-' => [2, 9, 23, 30, 10, 24, 19, 6, 34, 21],
|
||||
'4213+' => [2, 9, 23, 30, 11, 25, 19, 6, 34, 21],
|
||||
'4222' => [2, 9, 23, 30, 10, 24, 12, 26, 20, 21],
|
||||
'4231' => [2, 9, 23, 30, 10, 24, 12, 19, 26, 21],
|
||||
'424' => [2, 9, 23, 30, 10, 24, 6, 34, 20, 21],
|
||||
'4312' => [2, 9, 23, 30, 17, 11, 25, 19, 20, 21],
|
||||
'4312-' => [2, 9, 23, 30, 10, 18, 24, 19, 20, 21],
|
||||
'4312+' => [2, 9, 23, 30, 11, 18, 25, 19, 20, 21],
|
||||
'4321' => [2, 9, 23, 30, 17, 11, 25, 12, 26, 21],
|
||||
'4321-' => [2, 9, 23, 30, 10, 18, 24, 12, 26, 21],
|
||||
'4321+' => [2, 9, 23, 30, 11, 18, 25, 12, 26, 21],
|
||||
'433' => [2, 9, 23, 30, 17, 11, 25, 6, 34, 21],
|
||||
'433-' => [2, 9, 23, 30, 10, 18, 24, 6, 34, 21],
|
||||
'433+' => [2, 9, 23, 30, 11, 18, 25, 6, 34, 21],
|
||||
'4411-' => [2, 9, 23, 30, 4, 10, 24, 32, 19, 21],
|
||||
'4411+' => [2, 9, 23, 30, 4, 11, 25, 32, 19, 21],
|
||||
'442' => [2, 9, 23, 30, 4, 17, 18, 32, 20, 21],
|
||||
'442-' => [2, 9, 23, 30, 4, 10, 24, 32, 20, 21],
|
||||
'442+' => [2, 9, 23, 30, 4, 11, 25, 32, 20, 21],
|
||||
'451' => [2, 9, 23, 30, 4, 17, 11, 25, 32, 21],
|
||||
'451-' => [2, 9, 23, 30, 4, 10, 18, 24, 32, 21],
|
||||
'451+' => [2, 9, 23, 30, 4, 11, 18, 25, 32, 21],
|
||||
'523-' => [2, 9, 16, 23, 30, 10, 24, 6, 34, 21],
|
||||
'523+' => [2, 9, 16, 23, 30, 11, 25, 6, 34, 21],
|
||||
'5311' => [2, 9, 16, 23, 30, 17, 11, 25, 19, 21],
|
||||
'5311-' => [2, 9, 16, 23, 30, 10, 18, 24, 19, 21],
|
||||
'5311+' => [2, 9, 16, 23, 30, 11, 18, 25, 19, 21],
|
||||
'532' => [2, 9, 16, 23, 30, 17, 11, 25, 20, 21],
|
||||
'532-' => [2, 9, 16, 23, 30, 10, 18, 24, 20, 21],
|
||||
'532+' => [2, 9, 16, 23, 30, 11, 18, 25, 20, 21],
|
||||
'541-' => [2, 9, 16, 23, 30, 4, 10, 24, 32, 21],
|
||||
'541+' => [2, 9, 16, 23, 30, 4, 11, 25, 32, 21],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getLineUpMap(string $key)
|
||||
{
|
||||
$lup = [
|
||||
'3313' => [9, 16, 23, 11, 18, 25, 19, 6, 34, 21],
|
||||
'3331' => [9, 16, 23, 17, 11, 25, 12, 19, 26, 21],
|
||||
'3331-' => [9, 16, 23, 10, 18, 24, 12, 19, 26, 21],
|
||||
'3331+' => [9, 16, 23, 11, 18, 25, 12, 19, 26, 21],
|
||||
'3412-' => [9, 16, 23, 4, 10, 24, 32, 19, 20, 21],
|
||||
'3412+' => [9, 16, 23, 4, 11, 25, 32, 19, 20, 21],
|
||||
'3421-' => [9, 16, 23, 4, 10, 24, 32, 12, 26, 21],
|
||||
'3421+' => [9, 16, 23, 4, 11, 25, 32, 12, 26, 21],
|
||||
'343-' => [9, 16, 23, 4, 10, 24, 32, 6, 34, 21],
|
||||
'343+' => [9, 16, 23, 4, 11, 25, 32, 6, 34, 21],
|
||||
'3511' => [9, 16, 23, 4, 11, 17, 25, 32, 19, 21],
|
||||
'3511-' => [9, 16, 23, 4, 10, 18, 24, 32, 19, 21],
|
||||
'3511+' => [9, 16, 23, 4, 11, 18, 25, 32, 19, 21],
|
||||
'352' => [9, 16, 23, 4, 11, 17, 25, 32, 20, 21],
|
||||
'352-' => [9, 16, 23, 4, 10, 18, 24, 32, 20, 21],
|
||||
'352+' => [9, 16, 23, 4, 11, 18, 25, 32, 20, 21],
|
||||
'4132' => [2, 9, 23, 30, 17, 12, 19, 26, 20, 21],
|
||||
'4213-' => [2, 9, 23, 30, 10, 24, 19, 6, 34, 21],
|
||||
'4213+' => [2, 9, 23, 30, 11, 25, 19, 6, 34, 21],
|
||||
'4222' => [2, 9, 23, 30, 10, 24, 12, 26, 20, 21],
|
||||
'4231' => [2, 9, 23, 30, 10, 24, 12, 19, 26, 21],
|
||||
'424' => [2, 9, 23, 30, 10, 24, 6, 34, 20, 21],
|
||||
'4312' => [2, 9, 23, 30, 17, 11, 25, 19, 20, 21],
|
||||
'4312-' => [2, 9, 23, 30, 10, 18, 24, 19, 20, 21],
|
||||
'4312+' => [2, 9, 23, 30, 11, 18, 25, 19, 20, 21],
|
||||
'4321' => [2, 9, 23, 30, 17, 11, 25, 12, 26, 21],
|
||||
'4321-' => [2, 9, 23, 30, 10, 18, 24, 12, 26, 21],
|
||||
'4321+' => [2, 9, 23, 30, 11, 18, 25, 12, 26, 21],
|
||||
'433' => [2, 9, 23, 30, 17, 11, 25, 6, 34, 21],
|
||||
'433-' => [2, 9, 23, 30, 10, 18, 24, 6, 34, 21],
|
||||
'433+' => [2, 9, 23, 30, 11, 18, 25, 6, 34, 21],
|
||||
'4411-' => [2, 9, 23, 30, 4, 10, 24, 32, 19, 21],
|
||||
'4411+' => [2, 9, 23, 30, 4, 11, 25, 32, 19, 21],
|
||||
'442' => [2, 9, 23, 30, 4, 17, 18, 32, 20, 21],
|
||||
'442-' => [2, 9, 23, 30, 4, 10, 24, 32, 20, 21],
|
||||
'442+' => [2, 9, 23, 30, 4, 11, 25, 32, 20, 21],
|
||||
'451' => [2, 9, 23, 30, 4, 17, 11, 25, 32, 21],
|
||||
'451-' => [2, 9, 23, 30, 4, 10, 18, 24, 32, 21],
|
||||
'451+' => [2, 9, 23, 30, 4, 11, 18, 25, 32, 21],
|
||||
'523-' => [2, 9, 16, 23, 30, 10, 24, 6, 34, 21],
|
||||
'523+' => [2, 9, 16, 23, 30, 11, 25, 6, 34, 21],
|
||||
'5311' => [2, 9, 16, 23, 30, 17, 11, 25, 19, 21],
|
||||
'5311-' => [2, 9, 16, 23, 30, 10, 18, 24, 19, 21],
|
||||
'5311+' => [2, 9, 16, 23, 30, 11, 18, 25, 19, 21],
|
||||
'532' => [2, 9, 16, 23, 30, 17, 11, 25, 20, 21],
|
||||
'532-' => [2, 9, 16, 23, 30, 10, 18, 24, 20, 21],
|
||||
'532+' => [2, 9, 16, 23, 30, 11, 18, 25, 20, 21],
|
||||
'541-' => [2, 9, 16, 23, 30, 4, 10, 24, 32, 21],
|
||||
'541+' => [2, 9, 16, 23, 30, 4, 11, 25, 32, 21],
|
||||
];
|
||||
|
||||
if (isset($lup[$key])) {
|
||||
return $lup[$key];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
trait LineUps
|
||||
{
|
||||
public function prepareLineUp()
|
||||
{
|
||||
$arr = [
|
||||
'team_id' => $this->team_id,
|
||||
'season_or_date' => $this->season_or_date,
|
||||
'season_mode' => $this->season_mode,
|
||||
];
|
||||
|
||||
$players = $this->loadPlayerAll();
|
||||
|
||||
$arr = collect();
|
||||
foreach ($players as $value) {
|
||||
if ($value['position'] != '') {
|
||||
$arr->push([
|
||||
'id' => $value['ss_player_id'],
|
||||
'min' => $value['average_min'],
|
||||
'pos' => $value['position'],
|
||||
'name' => $value['player_name'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public function generateLineUp(): void
|
||||
{
|
||||
if ($this->activeLineUp && $this->team_id) {
|
||||
|
||||
$players = $this->prepareLineUp();
|
||||
|
||||
$places = $this->getLineUpMap($this->activeLineUp);
|
||||
|
||||
$lineup = [];
|
||||
|
||||
$id_used = [];
|
||||
|
||||
foreach ($places as $place) {
|
||||
$this->getPlayerForPosition($lineup, $id_used, $place, $players);
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= 35; $i++) {
|
||||
$this->boxes[$i] = [];
|
||||
}
|
||||
|
||||
$this->clearResultTable();
|
||||
|
||||
$this->player_on_field_counter = 0;
|
||||
|
||||
foreach ($this->players as $k => $record) {
|
||||
$id = $record['id'];
|
||||
if (isset($lineup[$id])) {
|
||||
|
||||
$this->boxes[$lineup[$id]['place']] = $record;
|
||||
|
||||
$this->players[$k]['active'] = 1;
|
||||
$this->players[$k]['pos'] = $lineup[$id]['position'];
|
||||
|
||||
$this->player_on_field_counter++;
|
||||
} else {
|
||||
$this->players[$k]['active'] = 0;
|
||||
$this->players[$k]['pos'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$this->calculateAspg();
|
||||
|
||||
$this->storePlacement();
|
||||
}
|
||||
}
|
||||
|
||||
public function updateLineup(?string $state)
|
||||
{
|
||||
$this->clearResultTable();
|
||||
|
||||
if (isset($this->lineupsMap[$state])) {
|
||||
$this->lineup = $this->lineUpMap[$state];
|
||||
} else {
|
||||
$this->lineup = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Models\SsLineupMemory;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
trait Placements
|
||||
{
|
||||
public function loadPlacement()
|
||||
{
|
||||
$this->clearResultTable();
|
||||
|
||||
if ($this->team_id) {
|
||||
|
||||
$this->player_on_field_counter = 0;
|
||||
|
||||
$res = SsLineupMemory::where('client_id', Auth::user()->client_id)->where('team_id', $this->team_id)->where('lineup', $this->activeLineUp)->first();
|
||||
|
||||
if ($res) {
|
||||
|
||||
$placement = json_decode($res->placement, 1);
|
||||
|
||||
foreach ($this->players as $k => $record) {
|
||||
|
||||
$id = $record['id'];
|
||||
|
||||
if (isset($placement[$id]) && in_array($placement[$id], $this->lineup)) {
|
||||
$this->boxes[$placement[$id]] = $record;
|
||||
$this->players[$k]['active'] = 1;
|
||||
$this->players[$k]['pos'] = $record['pos_ori'];
|
||||
|
||||
$this->player_on_field_counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// $this->calculateAspg();
|
||||
}
|
||||
|
||||
public function storePlacement()
|
||||
{
|
||||
$store = [];
|
||||
foreach ($this->boxes as $pos => $value) {
|
||||
if ($value) {
|
||||
$store[$value['id']] = $pos;
|
||||
}
|
||||
}
|
||||
SsLineupMemory::updateOrCreate([
|
||||
'client_id' => Auth::user()->client_id,
|
||||
'team_id' => $this->team_id,
|
||||
'lineup' => $this->activeLineUp,
|
||||
], [
|
||||
'placement' => json_encode($store),
|
||||
'team_name' => $this->team_name,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Models\StatisticFixtures;
|
||||
use App\Models\StatistikoDetail;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
trait PlayerAspg
|
||||
{
|
||||
public function calculateAspg(): void
|
||||
{
|
||||
if ($this->player_on_field_counter < 10) {
|
||||
foreach ($this->players as $k => $record) {
|
||||
$this->players[$k]['gls'] = '';
|
||||
$this->players[$k]['fls'] = '';
|
||||
$this->players[$k]['ofs'] = '';
|
||||
$this->players[$k]['crd'] = '';
|
||||
$this->players[$k]['snt'] = '';
|
||||
$this->players[$k]['tsh'] = '';
|
||||
$this->players[$k]['wfl'] = '';
|
||||
}
|
||||
|
||||
$this->dispatch('update-players', players: $this->players);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (! $this->team_id && ! $this->match_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
Log::debug('calculateAspg', $this->players);
|
||||
|
||||
// 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
|
||||
$team_id = $this->team_id;
|
||||
$match = StatisticFixtures::where('id', $this->match_id)->first();
|
||||
$this->home_id = $match->home_id;
|
||||
$this->away_id = $match->away_id;
|
||||
$this->asp_team = 0;
|
||||
$this->team_home_away = 'home';
|
||||
if ((int) $match->home_id == (int) $team_id) {
|
||||
$this->asp_team = (float) $match->exp_home;
|
||||
$this->team_home_away = 'home';
|
||||
} elseif ((int) $match->away_id == (int) $team_id) {
|
||||
$this->asp_team = (float) $match->exp_away;
|
||||
$this->team_home_away = 'away';
|
||||
}
|
||||
|
||||
$players = StatistikoDetail::where('ss_team_id', $this->team_id)->where('is_active', 1)->get();
|
||||
$this->count_player = 0;
|
||||
foreach ($players as $value) {
|
||||
if ($value['position'] != 'GK') {
|
||||
$this->count_player++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->calculationVariables = [];
|
||||
|
||||
$collection_1 = $this->loadPartsPlayer(1, $players);
|
||||
$collection_2 = $this->loadPartsPlayer(2, $players);
|
||||
|
||||
$filtered_part_1 = $this->filterPlayer($collection_1);
|
||||
$filtered_part_2 = $this->filterPlayer($collection_2);
|
||||
|
||||
$this->mergeData($filtered_part_1, $filtered_part_2);
|
||||
|
||||
$this->dispatch('update-players', players: $this->players);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
trait PlayerDataMerge
|
||||
{
|
||||
public function mergeData(array $filtered_part_1, array $filtered_part_2): void
|
||||
{
|
||||
foreach ($this->players as $k => $record) {
|
||||
|
||||
$players_id = $record['id'];
|
||||
|
||||
$part1 = $filtered_part_1[$players_id] ?? [];
|
||||
|
||||
$part2 = $filtered_part_2[$players_id] ?? [];
|
||||
|
||||
$this->players[$k]['active'] = $part1['active'] ?? 0;
|
||||
|
||||
$bets = ['gls', 'crn', 'fls', 'ofs', 'crd', 'snt', 'tsh', 'wfl'];
|
||||
foreach ($bets as $bet) {
|
||||
$this->players[$k][$bet] = $this->calc($bet, $part1, $part2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function calc(string $bettype, array $part1, array $part2)
|
||||
{
|
||||
$val1 = $part1[$bettype] ?? 0;
|
||||
$val2 = $part2[$bettype] ?? 0;
|
||||
|
||||
return number_format(($val2 * (100 - $this->part_1_value) + $val1 * $this->part_1_value) / 100, 3);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Models\ExpectedMinimumPosition;
|
||||
use App\Models\SofaScorePlayerPosition;
|
||||
|
||||
trait PlayerFilter
|
||||
{
|
||||
public function filterPlayer(array $collection)
|
||||
{
|
||||
$results = [];
|
||||
foreach ($collection as $val) {
|
||||
if ($val['position'] != 'GK') {
|
||||
|
||||
/***
|
||||
"goals" => 0
|
||||
"fouls" => 13
|
||||
"cards" => 3
|
||||
"offsides" => 0
|
||||
"shots_on_target" => 3
|
||||
"shots_off_target" => 2
|
||||
"total_shots" => 4
|
||||
*/
|
||||
|
||||
$ss_player_id = $val['ss_player_id'];
|
||||
$position = $val['position'];
|
||||
|
||||
$tmp = [];
|
||||
$tmp['id'] = $ss_player_id;
|
||||
$tmp['name'] = $val['player_name'];
|
||||
|
||||
$tmp['id_team'] = $this->team_id;
|
||||
$tmp['asp_team'] = $this->asp_team;
|
||||
$tmp['player_count_without_gk'] = $this->count_player;
|
||||
|
||||
$position_field = $this->get_position($ss_player_id);
|
||||
if ($position_field) {
|
||||
$position = $position_field;
|
||||
$tmp['active'] = 1;
|
||||
} else {
|
||||
$tmp['active'] = 0;
|
||||
}
|
||||
$tmp['pos'] = $position;
|
||||
|
||||
// Aspettativa di Gioco (AdG) = Somma Goals fatti da Player nel DB / Somma Minuti Giocati da Player (SMG) nel DB * 90.
|
||||
// Se la SMG è < Y per quel Player prenderemo in considerazione solo l'Aspettativa Statistica (AS).
|
||||
// Il valore Y dovrebbe essere configurabile in una interfaccia. Il valore iniziale lo fissiamo a Y = 180
|
||||
|
||||
// Somma Minuti Giocati da Player (SMG) nel DB
|
||||
$tmp['somma_minuti'] = $val['total_min'];
|
||||
$tmp['shots_on_target'] = $val['shots_on_target'];
|
||||
$tmp['shots_off_target'] = $val['shots_off_target'];
|
||||
$tmp['shots_blocked'] = $val['shots_blocked'];
|
||||
|
||||
// il valore corrispondente al ruolo del Player (esempio un giocatore in Details ha ruolo = RW
|
||||
// quindi Aspettativa Statistica (AS) per RW = 0.219)
|
||||
// exp_goals
|
||||
// exp_assists
|
||||
// exp_cards
|
||||
// exp_fouls
|
||||
// exp_was_fouled
|
||||
// exp_offsides
|
||||
// exp_total_shots
|
||||
// exp_shots_on_target
|
||||
|
||||
$bettypes = ['goals', 'cards', 'fouls', 'offsides', 'total_shots', 'shots_on_target', 'was_fouled'];
|
||||
foreach ($bettypes as $bettype) {
|
||||
|
||||
$asp_statistica = (float) SofaScorePlayerPosition::where('ss_code', $position)->value('exp_'.$bettype);
|
||||
$tmp['asp_statistica_'.$bettype] = $asp_statistica;
|
||||
|
||||
// if ($val->ss_player_id == 243651)
|
||||
// dd($val, $asp_statistica);
|
||||
|
||||
// if ($val->total_min < $this->y_value) {
|
||||
// $asp_gioco = 0;
|
||||
// } else {
|
||||
// $asp_gioco = $val->shots_on_target / $val->total_min * 90;
|
||||
// }
|
||||
|
||||
switch ($bettype) {
|
||||
case 'goals':
|
||||
$asp_gioco = $val['goals'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'cards':
|
||||
$asp_gioco = $val['cards'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'fouls':
|
||||
$asp_gioco = $val['fouls'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'offsides':
|
||||
$asp_gioco = $val['offsides'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'total_shots':
|
||||
$asp_gioco = $val['total_shots'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'shots_on_target':
|
||||
$asp_gioco = $val['shots_on_target'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
case 'was_fouled':
|
||||
$asp_gioco = $val['was_fouled'] / $val['total_min'] * 90;
|
||||
if ($asp_gioco == 0 || $val['total_min'] < $this->y_value) {
|
||||
$tmp['asp_gioco_'.$bettype] = 0;
|
||||
$tmp['asp_teorica_'.$bettype] = $asp_statistica;
|
||||
} else {
|
||||
$tmp['asp_gioco_'.$bettype] = $asp_gioco;
|
||||
$tmp['asp_teorica_'.$bettype] = ($this->x_value * $asp_gioco + $asp_statistica) / (1 + $this->x_value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Calcolare la Somma di tutte le AT (colonna G della Tabella)
|
||||
// Considerare la ATR calcolata allo Step 1 (colonna I della Tabella)
|
||||
// Aspettativa per Player: AP = AT * ATR / TOT AT
|
||||
$results[] = $tmp;
|
||||
}
|
||||
}
|
||||
|
||||
$asp_team_all = $this->loadExpectations();
|
||||
|
||||
// Aspettativa Team di Riferimento
|
||||
// (ATR) = Aspettativa Team * Numero di Giocatori di Team in Rosters (esclusi i portieri) / 10.
|
||||
// Ad esempio per Remo (supponiamo 24 giocatori nel Roster esclusi i portieri): ATR = 1.2 * 24 / 10 = 2.88
|
||||
|
||||
$bettypes = ['goals', 'cards', 'fouls', 'offsides', 'total_shots', 'shots_on_target', 'was_fouled'];
|
||||
foreach ($bettypes as $bettype) {
|
||||
|
||||
$total_bettype = array_sum(array_column($results, 'asp_teorica_'.$bettype));
|
||||
|
||||
foreach ($results as $key => $value) {
|
||||
switch ($bettype) {
|
||||
case 'goals':
|
||||
// Aspettativa per Player: AP = AT * ATR / TOT AT
|
||||
// $results[$key]['asp_player_'.$bettype] = ((float) $value['asp_team'] * (float) $value['asp_teorica_'.$bettype]) / $total_bettype;
|
||||
// $results[$key]['asp_player_'.$bettype] = ($asp_team * $asp_team_riferimento) / $total_bettype;
|
||||
|
||||
$asp_team_riferimento = (float) $this->asp_team * $this->count_player / 10;
|
||||
$results[$key]['asp_riferimento_goals'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
break;
|
||||
case 'cards':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['crd'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_card'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
case 'fouls':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['fls'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_fouls'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
case 'offsides':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['ofs'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_offside'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
case 'total_shots':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['tsh'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_tsh'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
case 'shots_on_target':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['snt'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_snt'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
case 'was_fouled':
|
||||
$asp_team_riferimento = (float) $asp_team_all[$this->team_home_away]['wfl'] * $this->count_player / 10;
|
||||
$results[$key]['asp_team_riferimento_wfl'] = $asp_team_riferimento;
|
||||
$results[$key]['asp_total_'.$bettype] = $total_bettype;
|
||||
$results[$key]['asp_player_'.$bettype] = $value['asp_teorica_'.$bettype] * $asp_team_riferimento / $total_bettype;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$map = [];
|
||||
$res = ExpectedMinimumPosition::all();
|
||||
foreach ($res as $val) {
|
||||
$map[$val->position]['gls'] = $val->gls;
|
||||
$map[$val->position]['crd'] = $val->crd;
|
||||
$map[$val->position]['fls'] = $val->fls;
|
||||
$map[$val->position]['ofs'] = $val->ofs;
|
||||
$map[$val->position]['tsh'] = $val->tsh;
|
||||
$map[$val->position]['snt'] = $val->snt;
|
||||
$map[$val->position]['wfl'] = $val->wfl;
|
||||
}
|
||||
|
||||
// stesso ordine di prima: GLS, CRD, FLS, OFS, TSH, SNT, WFL
|
||||
|
||||
$return = [];
|
||||
foreach ($this->players as $k => $player) {
|
||||
foreach ($results as $key => $result) {
|
||||
if ((int) $player['id'] == (int) $result['id']) {
|
||||
|
||||
$id = $result['id'];
|
||||
$return[$id]['active'] = $result['active'];
|
||||
$pos = $this->players[$k]['pos'];
|
||||
if (! $pos) {
|
||||
$pos = $this->players[$k]['pos_ori'];
|
||||
}
|
||||
|
||||
if ($pos != 'GK') {
|
||||
$tamx = number_format($map[$pos]['gls'], 3);
|
||||
$final = number_format($result['asp_player_goals'], 3);
|
||||
$results[$key]['finale_tamx_gls'] = $tamx;
|
||||
$results[$key]['finale_calc_gls'] = $final;
|
||||
$return[$id]['gls'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['crd'], 3);
|
||||
$final = number_format($result['asp_player_cards'], 3);
|
||||
$results[$key]['finale_tamx_crd'] = $tamx;
|
||||
$results[$key]['finale_calc_crd'] = $final;
|
||||
$return[$id]['crd'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['fls'], 3);
|
||||
$final = number_format($result['asp_player_fouls'], 3);
|
||||
$results[$key]['finale_tamx_fls'] = $tamx;
|
||||
$results[$key]['finale_calc_fls'] = $final;
|
||||
$return[$id]['fls'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['ofs'], 3);
|
||||
$final = number_format($result['asp_player_offsides'], 3);
|
||||
$results[$key]['finale_tamx_ofs'] = $tamx;
|
||||
$results[$key]['finale_calc_ofs'] = $final;
|
||||
$return[$id]['ofs'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['tsh'], 3);
|
||||
$final = number_format($result['asp_player_total_shots'], 3);
|
||||
$results[$key]['finale_tamx_tsh'] = $tamx;
|
||||
$results[$key]['finale_calc_tsh'] = $final;
|
||||
$return[$id]['tsh'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['snt'], 3);
|
||||
$final = number_format($result['asp_player_shots_on_target'], 3);
|
||||
$results[$key]['finale_tamx_snt'] = $tamx;
|
||||
$results[$key]['finale_calc_snt'] = $final;
|
||||
$return[$id]['snt'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
|
||||
$tamx = number_format($map[$pos]['wfl'], 3);
|
||||
$final = number_format($result['asp_player_was_fouled'], 3);
|
||||
$results[$key]['finale_tamx_wfl'] = $tamx;
|
||||
$results[$key]['finale_calc_wfl'] = $final;
|
||||
$return[$id]['wfl'] = (float) $final > (float) $tamx ? $final : $tamx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->calculationVariables[] = $results;
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Filament\Widgets\PlayerProps\PositionHirarchie;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
trait PlayerForPosition
|
||||
{
|
||||
public function getPlayerForPosition(array &$lineup, array &$id_used, int $place, Collection $players)
|
||||
{
|
||||
$log = 0;
|
||||
|
||||
$position = $this->activeBoxes[$place];
|
||||
|
||||
$hirarchy = PositionHirarchie::load();
|
||||
|
||||
$fitered = $players->where('pos', $position)->whereNotIn('id', $id_used)->sortByDesc('min')->first();
|
||||
|
||||
if (isset($fitered['id'])) {
|
||||
|
||||
if ($log) {
|
||||
Log::debug("A $place - $position", $fitered);
|
||||
}
|
||||
|
||||
$lineup[$fitered['id']] = ['id' => $fitered['id'], 'min' => $fitered['min'], 'place' => $place, 'position' => $position];
|
||||
$id_used[] = $fitered['id'];
|
||||
} else {
|
||||
if (isset($hirarchy[$position])) {
|
||||
$position2 = $hirarchy[$position][0];
|
||||
$fitered = $players->where('pos', $position2)->whereNotIn('id', $id_used)->sortByDesc('min')->first();
|
||||
|
||||
if (isset($fitered['id'])) {
|
||||
$lineup[$fitered['id']] = ['id' => $fitered['id'], 'min' => $fitered['min'], 'place' => $place, 'position' => $position];
|
||||
$id_used[] = $fitered['id'];
|
||||
if ($log) {
|
||||
Log::debug("B $place - $position $position2", $fitered);
|
||||
}
|
||||
|
||||
} elseif (isset($hirarchy[$position][1])) {
|
||||
$position3 = $hirarchy[$position][1];
|
||||
$fitered = $players->where('pos', $position3)->whereNotIn('id', $id_used)->sortByDesc('min')->first();
|
||||
|
||||
if (isset($fitered['id'])) {
|
||||
if ($log) {
|
||||
Log::debug("C $place - $position $position2 $position3", $fitered);
|
||||
}
|
||||
|
||||
$lineup[$fitered['id']] = ['id' => $fitered['id'], 'min' => $fitered['min'], 'place' => $place, 'position' => $position];
|
||||
$id_used[] = $fitered['id'];
|
||||
} elseif (isset($hirarchy[$position][2])) {
|
||||
$position4 = $hirarchy[$position][2];
|
||||
$fitered = $players->where('pos', $position4)->whereNotIn('id', $id_used)->sortByDesc('min')->first();
|
||||
|
||||
if (isset($fitered['id'])) {
|
||||
if ($log) {
|
||||
Log::debug("D $place - $position $position2 $position3 $position4", $fitered);
|
||||
}
|
||||
|
||||
$lineup[$fitered['id']] = ['id' => $fitered['id'], 'min' => $fitered['min'], 'place' => $place, 'position' => $position];
|
||||
$id_used[] = $fitered['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Models\StatistikoDetail;
|
||||
use App\Models\StatistikoEvent;
|
||||
use App\Models\StatistikoPlayer;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
trait PlayerQuery
|
||||
{
|
||||
public function loadPartsPlayer(int $part, object $players): array
|
||||
{
|
||||
$player_ids = [];
|
||||
foreach ($players as $row) {
|
||||
$player_ids[] = $row->ss_player_id;
|
||||
}
|
||||
|
||||
$matches_ids = [];
|
||||
switch ($this->season_or_date) {
|
||||
case 'season':
|
||||
if (! $this->season_selected) {
|
||||
$this->season_selected = $this->getCurrentSeason();
|
||||
// dd($this->liga_id, $this->season_selected);
|
||||
}
|
||||
$matches_ids = match ($part) {
|
||||
1 => StatistikoEvent::where('league_id', $this->liga_id)
|
||||
->when($this->season_selected, function ($query) {
|
||||
return $query->whereIn('season', $this->season_selected);
|
||||
})->pluck('match_id')->toArray(),
|
||||
2 => StatistikoEvent::where('league_id', $this->liga_id)
|
||||
->when($this->season_selected, function ($query) {
|
||||
return $query->whereNotIn('season', $this->season_selected);
|
||||
})->pluck('match_id')->toArray()
|
||||
};
|
||||
break;
|
||||
default:
|
||||
$matches_ids = match ($part) {
|
||||
1 => StatistikoEvent::where('league_id', $this->liga_id)
|
||||
->when($this->date_spliter, function ($query) {
|
||||
return $query->whereDate('starttime', '>', $this->date_spliter);
|
||||
})->pluck('match_id')->toArray(),
|
||||
2 => StatistikoEvent::where('league_id', $this->liga_id)
|
||||
->when($this->season_selected, function ($query) {
|
||||
return $query->whereDate('starttime', '<=', $this->date_spliter);
|
||||
})->pluck('match_id')->toArray()
|
||||
};
|
||||
}
|
||||
|
||||
$res = StatistikoPlayer::with('details')->whereIn('ss_player_id', $player_ids)->whereIn('match_id', $matches_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;
|
||||
$arr[$ss_player_id]['was_fouled'] += $val->was_fouled;
|
||||
}
|
||||
|
||||
foreach ($players as $player) {
|
||||
if (isset($arr[$player->ss_player_id])) {
|
||||
$arr[$player->ss_player_id]['position'] = $player->position;
|
||||
$arr[$player->ss_player_id]['player_name'] = $player->player_name;
|
||||
$arr[$player->ss_player_id]['preferred_foot'] = $player->preferred_foot;
|
||||
}
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public function loadPlayerAll(): array
|
||||
{
|
||||
if (! $this->team_id) {
|
||||
return [];
|
||||
}
|
||||
if (! $this->liga_id) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
$matches_ids = StatistikoEvent::where('league_id', $this->liga_id)->pluck('match_id')->toArray();
|
||||
$res = StatistikoPlayer::with('details')->whereIn('ss_player_id', $player_ids)->whereIn('match_id', $matches_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;
|
||||
$arr[$ss_player_id]['was_fouled'] += $val->was_fouled;
|
||||
}
|
||||
|
||||
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]['was_fouled'] = 0;
|
||||
$arr[$ss_player_id]['cards'] = 0;
|
||||
}
|
||||
|
||||
public function getCurrentSeason()
|
||||
{
|
||||
|
||||
$tmp = [];
|
||||
$date = Carbon::now();
|
||||
if ($this->season_mode == 'halfyear') {
|
||||
if ((int) date('m') > 7) {
|
||||
$tmp[] = $date->format('y').'/'.$date->format('y') + 1;
|
||||
} else {
|
||||
$tmp[] = $date->format('y') - 1 .'/'.$date->format('y');
|
||||
}
|
||||
} else {
|
||||
$tmp[] = (string) $date->year;
|
||||
}
|
||||
|
||||
return $tmp;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits\PlayerProps;
|
||||
|
||||
use App\Filament\Pages\Selections\LoadPositions;
|
||||
use App\Models\SofaScoreRosa;
|
||||
|
||||
trait SyncData
|
||||
{
|
||||
public function syncData(int $team_id)
|
||||
{
|
||||
if ($team_id) {
|
||||
$this->players = [];
|
||||
|
||||
$positions_map = LoadPositions::load();
|
||||
|
||||
$players = $this->loadPlayerAll();
|
||||
|
||||
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'];
|
||||
$tmp['wfl'] = $val['was_fouled'];
|
||||
|
||||
$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->loadPlacement();
|
||||
} else {
|
||||
$this->team_name = '';
|
||||
$this->clearResultTable();
|
||||
$this->players = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user