src/Controller/Api/PlayerController.php line 146

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Convocatoria;
  4. use App\Entity\ConvocatoriaPlayer;
  5. use App\Entity\Customer;
  6. use App\Entity\Player;
  7. use App\Entity\Season;
  8. use App\Entity\Game;
  9. use App\Entity\GameAlignment;
  10. use App\Entity\PlayerSportsInjuries;
  11. use App\Entity\SeasonPlayer;
  12. use App\Entity\GamePlayerStatistics;
  13. use App\Entity\TrainingAsist;
  14. use App\Entity\TrainingAsistPlayer;
  15. use App\Helper\UploadedBase64File;
  16. use App\Repository\ConvocatoriaRepository;
  17. use App\Repository\PlayerRepository;
  18. use App\Services\Api\PlayerManager;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Psr\Log\LoggerInterface;
  25. use App\Entity\PlayerWeight;
  26. use DateTime;
  27. class PlayerController extends ApiController
  28. {
  29.     /** @var PlayerManager $playerManager */
  30.     protected $playerManager;
  31.     /**
  32.      * @param PlayerManager $playerManager
  33.      */
  34.     public function __construct(EntityManagerInterface $emParameterBagInterface $parameterBagPlayerManager $playerManager)
  35.     {
  36.         parent::__construct($em$parameterBag);
  37.         $this->playerManager $playerManager;
  38.     }
  39.     /**
  40.      * @param Request $request
  41.      * @return JsonResponse
  42.      *
  43.      * @Route("/player/listbygame/{id}", name="api_player_list_by_game", methods={"POST"})
  44.      */
  45.     public function listPlayerByGame($idRequest $request)
  46.     {
  47.         $prefixFile $this->getParameter("app.path.player_images");
  48.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  49.         $request $this->transformJsonBody($request);
  50.         $players = [];
  51.         /** @var PlayerRepository $playerRepository */
  52.         $playerRepository $this->em->getRepository(Player::class);
  53.         /** @var Customer $customer */
  54.         $customer $this->getUser();
  55.         $season $customer->getSeasonActive();
  56.         if (!empty($season)) {
  57.             $filter = [
  58.                 "season" => $season->getId()
  59.             ];
  60.             $sort $request->get('sort');
  61.             if (empty($sort)) $sort 'dorsal';
  62.             $direction $request->get('direction');
  63.             if (empty($direction)) $direction 'ASC';
  64.             /** @var Game $game */
  65.             $game $this->em->getRepository(Game::class)->find($id);
  66.             $convocatoria $game->getConvocatoria();
  67.             $convocatoriaPlayerRepository $this->em->getRepository(ConvocatoriaPlayer::class);
  68.              /** @var GameAlignment $gameAlignment */
  69.              $captain $game->getAlignment() && $game->getAlignment()->getCaptain()? $game->getAlignment()->getCaptain()->getPlayer()->getId() : null;
  70.             /** @var SeasonPlayer $seasonPlayer */
  71.             /** @var Player $player */
  72.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter, [$sort => $direction]) as $seasonPlayer) {
  73.                 $player $seasonPlayer->getPlayer();
  74.                 $playerArr $player->__toArray($baseurl $prefixFile "/");
  75.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  76.                 $isActive $player->getIsActive();
  77.                 if ($isActive && $seasonPlayerActive) {
  78.                     $criteria = [
  79.                         "seasonPlayer" => $seasonPlayer,
  80.                         "game" => $game
  81.                     ];
  82.                     $miscellaneous $playerRepository->getStatsMiscellaneousByGame($player$game);
  83.                     $isTitular $miscellaneous['isTitular'] ? true false;
  84.                     $isCaptain $captain && ($captain == $player->getId());
  85.                     $out array_merge($miscellaneous,[
  86.                         "dorsal" => $seasonPlayer->getDorsal(),
  87.                         "isTitular" => $isTitular,
  88.                         "isCaptain" => $isCaptain,
  89.                         "countryId" => !empty($player->getCountry()) ? $player->getCountry()->getId() : null,
  90.                     ]);
  91.                     if ($convocatoria) {
  92.                         $convocatoriaPlayer $convocatoriaPlayerRepository->findOneBy([
  93.                             "player_id" => $player->getId(),
  94.                             "convocatoria_id" => $convocatoria->getId(),
  95.                         ]);
  96.                         if ($convocatoriaPlayer) {
  97.                             $out array_merge($out, [
  98.                                 "isOn" => $convocatoriaPlayer->getIsActive(),
  99.                             ], $convocatoriaPlayer->__toArray());
  100.                         } else {
  101.                             $out array_merge($out, [
  102.                                 "isOn" => false,
  103.                                 "justification_type" => null,
  104.                                 "is_active" => null,
  105.                             ]);
  106.                         }
  107.                     } else {
  108.                         $out array_merge($out, [
  109.                             "isOn" => false,
  110.                             "justification_type" => null,
  111.                             "is_active" => null,
  112.                         ]);
  113.                     }
  114.                     if ($out['isOn']) {
  115.                         $players[] = array_merge($playerArr$out);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.         return $this->response($players);
  121.     }
  122.     /**
  123.      * @param Request $request
  124.      * @return JsonResponse
  125.      *
  126.      * @Route("/player/list", name="api_player_list", methods={"POST"})
  127.      */
  128.     public function listPlayer(Request $request)
  129.     {
  130.         $request $this->transformJsonBody($request);
  131.         $players = [];
  132.         /** @var Customer $customer */
  133.         $customer $this->getUser();
  134.         $season $customer->getSeasonActive();
  135.         if (!empty($season)) {
  136.             $filter = [
  137.                 "season" => $season->getId()
  138.             ];
  139.             $sort $request->get('sort');
  140.             if (empty($sort)) $sort 'dorsal';
  141.             $direction $request->get('direction');
  142.             if (empty($direction)) $direction 'ASC';
  143.             
  144.             $delayedPlayersCount = [];
  145.             /** @var TrainingAsist $trainingAsist */
  146.             foreach ($this->em->getRepository(TrainingAsist::class)->findBy($filter) as $trainingAsist) {
  147.                 if (count($trainingAsist->getPlayers())) {
  148.                     /** @var TrainingAsistPlayer $trainingAsistPlayer */
  149.                     $allTrainingAsistPlayers $this->em->getRepository(TrainingAsistPlayer::class)->findBy([
  150.                         'trainingAsist' => $trainingAsist,
  151.                     ]);
  152.                     foreach ($allTrainingAsistPlayers as $trainingAsistPlayer) {
  153.                         if($trainingAsistPlayer->isDelay()) {
  154.                             $playerId $trainingAsistPlayer->getPlayer()->getId();
  155.                             if (!isset($delayedPlayersCount[$playerId])) {
  156.                                 $delayedPlayersCount[$playerId] = 0;
  157.                             }
  158.                             $delayedPlayersCount[$playerId]++;
  159.                         }
  160.                     }
  161.                 } 
  162.             }
  163.             /** @var Player $player */
  164.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter, [$sort => $direction]) as $seasonPlayer) {
  165.                 /** @var SeasonPlayer $seasonPlayer */
  166.                 $player $seasonPlayer->getPlayer();
  167.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  168.                 $isActive $player->getIsActive();
  169.                 if ($isActive && !$player->getDeletedAt() && $seasonPlayerActive) {
  170.                     
  171.                     $playersData $this->getDataPlayer($request$player$season);
  172.                     $playersData['seasonDelays'] = $delayedPlayersCount[$player->getId()] ?? 0;
  173.                     $players[] = $playersData;
  174.                 }
  175.             }
  176.         }
  177.         return $this->response($players);
  178.     }
  179.         /**
  180.      * @param Request $request
  181.      * @return JsonResponse
  182.      *
  183.      * @Route("/player/list/recycling", name="api_player_list_recycling", methods={"POST"})
  184.      */
  185.     public function listPlayerRecycling(Request $request)
  186.     {
  187.         $request $this->transformJsonBody($request);
  188.         $players = [];
  189.         /** @var Customer $customer */
  190.         $customer $this->getUser();
  191.         $season $customer->getSeasonActive();
  192.         if (!empty($season)) {
  193.             $filter = [
  194.                 "season" => $season->getId()
  195.             ];
  196.             $sort $request->get('sort');
  197.             if (empty($sort)) $sort 'dorsal';
  198.             $direction $request->get('direction');
  199.             if (empty($direction)) $direction 'ASC';
  200.             /** @var Player $player */
  201.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter, [$sort => $direction]) as $seasonPlayer) {
  202.                 /** @var SeasonPlayer $seasonPlayer */
  203.                 $player $seasonPlayer->getPlayer();
  204.                 $seasonPlayerActive $seasonPlayer->getIsActive();
  205.                 $seasonPlayerDeletedAt $seasonPlayer->getDeletedAt();
  206.                 if ($player->getDeletedAt() && $player->getIsActive() && $seasonPlayerActive && $seasonPlayerDeletedAt) {
  207.                     $players[] = $this->getDataPlayer($request$player$season);
  208.                 }
  209.             }
  210.         }
  211.         return $this->response($players);
  212.     }
  213.     public function getDataPlayer(Request $requestPlayer $playerSeason $season)
  214.     {
  215.         $seasonPlayer $this->em->getRepository(SeasonPlayer::class)->findOneBy(['player' => $player"season" => $season]);
  216.         $weights = [];
  217.         foreach ($this->em->getRepository(PlayerWeight::class)->findBy([
  218.             'seasonPlayer' => $seasonPlayer
  219.         ], ['date' => 'ASC']) as $key => $weight) {
  220.             $weights[] = $weight->__toArray();
  221.         }
  222.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  223.         $prefixFile $this->getParameter("app.path.player_images");
  224.         /** @var PlayerRepository $playerRepository */
  225.         $playerRepository $this->em->getRepository(Player::class);
  226.         $playerArr $player->__toArray($baseurl $prefixFile "/");
  227.         $playerArr['weights'] = $weights;
  228.         $playerArr['weight'] = count($weights)  ?   $weights[0]['weight'] : $playerArr['weight'];
  229.         // add weight if is empty table PlayerWeight player
  230.         if (!count($weights) && $playerArr['weight'] != 0.00) {
  231.             $playerWeight = new PlayerWeight();
  232.             $playerWeight->setSeasonPlayer($seasonPlayer);
  233.             $playerWeight->setWeight($playerArr['weight']);
  234.             $playerWeight->setDate(new DateTime());
  235.             $playerWeight->setTime(new DateTime());
  236.             $this->em->persist($playerWeight);
  237.             $this->em->flush();
  238.             $playerArr['weights'] = $playerWeight->__toArray();
  239.         }
  240.         $miscellaneous $playerRepository->getStatsMiscellaneousAllPlayers($player$season);
  241.         $trainingAsist $playerRepository->getStatsAsist($player$season);
  242.         $result $playerRepository->getStatsConvocatoria($player$season);
  243.         $newData array_merge($playerArr$miscellaneous);
  244.         $newData array_merge($trainingAsist$newData);
  245.         $newData array_merge($result$newData);
  246.         return array_merge($newData, [
  247.             "dorsal" => $seasonPlayer->getDorsal(),
  248.             "countryId" => !empty($player->getCountry()) ? $player->getCountry()->getId() : null,
  249.             "seasonsPlayer" => $player->getSeasonPlayers()->map(function (SeasonPlayer $seasonPlayer) use ($playerRepository$player$request) {
  250.                 $season $seasonPlayer->getSeason();
  251.                 $miscellaneous $playerRepository->getStatsMiscellaneousAllPlayers($player$season);
  252.                 $imageTeam $season->getTeam()->getImage();
  253.                 $prefixFile $this->getParameter("app.path.customer_images");
  254.                 $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  255.                 $imagePath = !empty($imageTeam) ? $baseurl $prefixFile "/" $imageTeam "";
  256.                 $miscellaneous['imageTeam'] = $imagePath;
  257.                 return array_merge($seasonPlayer->__toArray(), $miscellaneous);
  258.             })->toArray(),
  259.         ]);
  260.     }
  261.     /**
  262.      * @param Request $request
  263.      * @return JsonResponse
  264.      *
  265.      * @Route("/player/add", name="api_player_add", methods={"POST"})
  266.      */
  267.     public function addPlayer(Request $request)
  268.     {
  269.         $request $this->transformJsonBody($request);
  270.         $data $this->getDataFromRequest($request);
  271.         /** @var Customer $customer */
  272.         $customer $this->getUser();
  273.         $season $customer->getSeasonActive();
  274.         $response $this->playerManager->add($data$request);
  275.         $this->setStatusCode($response["code"]);
  276.         if ($response['code'] == 200) {
  277.             $response['player'] = $this->getDataPlayer($request$response['player'], $season);
  278.         };
  279.         return $this->response($response);
  280.     }
  281.     /**
  282.      * @param Request $request
  283.      * @return JsonResponse
  284.      *
  285.      * @Route("/players/all", name="api_players_all", methods={"POST"})
  286.      */
  287.     public function allPlayers(Request $request)
  288.     {
  289.         $customer $this->getUser();
  290.         $response $this->playerManager->allPlayersByUserId($customer);
  291.         return $this->response($response);
  292.     }
  293.     /**
  294.      * @param Request $request
  295.      * @return JsonResponse
  296.      *
  297.      * @Route("/players/migrate/{seasonId}", name="api_players_migrate", methods={"POST"})
  298.      */
  299.     public function migratePlayer($seasonIdRequest $request)
  300.     {
  301.         $customer $this->getUser();
  302.         $season $customer->getSeasonActive();
  303.         $players json_decode($request->get('players'"[]"), true);
  304.         $seasonRepository $this->em->getRepository(Season::class);
  305.         /** @var Season $seasonTarget */
  306.         $seasonTarget $seasonRepository->findOneBy(["id" => $seasonId"customer" => $customer->getId(), "isActive" => true]);
  307.         $response $this->playerManager->addPlayerToSeason($customer$season$players$seasonTarget);
  308.         $this->setStatusCode($response["code"]);
  309.         return $this->response($response);
  310.     }
  311.     /**
  312.      * @param Request $request
  313.      * @return JsonResponse
  314.      *
  315.      * @Route("/players/migrate/undo/{seasonId}", name="api_players_migrate_undo", methods={"POST"})
  316.      */
  317.     public function undoMigratePlayer($seasonIdRequest $request)
  318.     {
  319.         $customer $this->getUser();
  320.         $season $customer->getSeasonActive();
  321.         $players json_decode($request->get('players'"[]"), true);
  322.         $seasonRepository $this->em->getRepository(Season::class);
  323.         /** @var Season $seasonTarget */
  324.         $seasonTarget $seasonRepository->findOneBy(["id" => $seasonId"customer" => $customer->getId(), "isActive" => true]);
  325.         $response $this->playerManager->moveToBinPlayerFromSeason($customer$season$players$seasonTarget);
  326.         $this->setStatusCode($response["code"]);
  327.         return $this->response($response);
  328.     }
  329.     /**
  330.      * @param Request $request
  331.      * @return JsonResponse
  332.      *
  333.      * @Route("/players/migrate/remove/{seasonId}", name="api_players_migrate_remove", methods={"POST"})
  334.      */
  335.     public function removeMigratePlayer($seasonIdRequest $request)
  336.     {
  337.         $customer $this->getUser();
  338.         $season $customer->getSeasonActive();
  339.         $players json_decode($request->get('players'"[]"), true);
  340.         $seasonRepository $this->em->getRepository(Season::class);
  341.         /** @var Season $seasonTarget */
  342.         $seasonTarget $seasonRepository->findOneBy(["id" => $seasonId"customer" => $customer->getId(), "isActive" => true]);
  343.         $response $this->playerManager->removePlayerFromSeason($customer$season$players$seasonTarget);
  344.         $this->setStatusCode($response["code"]);
  345.         return $this->response($response);
  346.     }
  347.     /**
  348.      * @param Request $request
  349.      * @return JsonResponse
  350.      *
  351.      * @Route("/players/migrate/rollback/{seasonId}", name="api_players_migrate_rollback", methods={"POST"})
  352.      */
  353.     public function rollbackMigratePlayer($seasonIdRequest $request)
  354.     {
  355.         $customer $this->getUser();
  356.         $season $customer->getSeasonActive();
  357.         $players json_decode($request->get('players'"[]"), true);
  358.         $seasonRepository $this->em->getRepository(Season::class);
  359.         /** @var Season $seasonTarget */
  360.         $seasonTarget $seasonRepository->findOneBy(["id" => $seasonId"customer" => $customer->getId(), "isActive" => true]);
  361.         $response $this->playerManager->removePlayerFromSeason($customer$season$players$seasonTarget);
  362.         $this->setStatusCode($response["code"]);
  363.         return $this->response($response);
  364.     }
  365.     /**
  366.      * @param Request $request
  367.      * @return JsonResponse
  368.      *
  369.      * @Route("/player/edit/{player}", name="api_player_edit", methods={"POST"})
  370.      */
  371.     public function editPlayer(Player $playerRequest $requestLoggerInterface $logger)
  372.     {
  373.         $request $this->transformJsonBody($request);
  374.         $data $this->getDataFromRequest($request);
  375.         $response $this->playerManager->edit($player$data);
  376.         $logger->info("DATA " json_encode($data));
  377.         $this->setStatusCode($response["code"]);
  378.         return $this->response($response);
  379.     }
  380.     /**
  381.      * @param Request $request
  382.      * @return JsonResponse 
  383.      *
  384.      * @Route("/player/editstats/{player}", name="api_player_editstats", methods={"POST"})
  385.      */
  386.     public function editStats(Player $playerRequest $requestLoggerInterface $logger)
  387.     {
  388.         $data = [
  389.             "gameId" => $request->get('gameId'),
  390.             "minutes" => $request->get('minutes'),
  391.             "yellowCards" => $request->get('yellowCards'),
  392.             "redCards" => $request->get('redCards'),
  393.             "goals" => $request->get('goals'),
  394.             "goalAssistances" => $request->get('goalAssistances'),
  395.             "isTitular" => $request->get('isTitular'),
  396.             "kilometersTraveled" => $request->get('kilometersTraveled'),
  397.             "shotsOnGoal" => $request->get('shotsOnGoal'),
  398.             "stolenBalls" => $request->get('stolenBalls'),
  399.             "penaltiesCommitted" => $request->get('penaltiesCommitted'),
  400.             "forcedPenalties" => $request->get('forcedPenalties'),
  401.             "stopsMade" => $request->get('stopsMade'),
  402.             "goalsConceded" => $request->get('goalsConceded') ?? 0,
  403.             "lostBalls" => $request->get('lostBalls') ?? 0,
  404.             "note" => $request->get('note') ?? 0,
  405.         ];
  406.         /** @var Customer $customer */
  407.         $customer $this->getUser();
  408.         $season $customer->getSeasonActive();
  409.         $response $this->playerManager->updateStats($player$datafalse);
  410.         $this->setStatusCode($response["code"]);
  411.         if ($response['code'] == 200) {
  412.             $response['player'] = $this->getDataPlayer($request$response['player'], $season);
  413.         };
  414.         return $this->response($response);
  415.     }
  416.     protected function getDataFromRequest(Request $request)
  417.     {
  418.         $data = [
  419.             "name" => $request->get('name'),
  420.             "lastname" => $request->get('lastname'),
  421.             "position" => $request->get('position'),
  422.             "secondary_position" => $request->get('secondaryPosition'),
  423.             "age" => (int) $request->get('age'),
  424.             "weight" => (float) $request->get('weight'),
  425.             "height" => (float) $request->get('height'),
  426.             "shoes" => (int) $request->get('shoes'),
  427.             "games" => (int) $request->get('games'),
  428.             "goals" => (int) $request->get('goals'),
  429.             "yellowCard" => (int) $request->get('yellowCard'),
  430.             "redCard" => (int) $request->get('redCard'),
  431.             "dorsal" => (int) $request->get('dorsal'),
  432.             "skillfulLeg" => (int) $request->get('skillfulLeg'),
  433.             "countryId" => (int) $request->get('countryId'),
  434.             "phone" => $request->get('phone') ?? NULL,
  435.             "email" => $request->get('email') ?? NULL,
  436.             "numberDocument" => $request->get('numberDocument') ?? NULL,
  437.             "healthCard" => $request->get('healthCard') ?? NULL,
  438.             "dateOfBirth" => $request->get('dateOfBirth') ? new DateTime($request->get('dateOfBirth')) : NULL,
  439.             "medicalReviewDate" => $request->get('medicalReviewDate') ? new DateTime($request->get('medicalReviewDate')) : NULL,
  440.             "lastClub" => $request->get('lastClub') ?? NULL,
  441.         ];
  442.         $image $request->get('image');
  443.         if (!empty($image))
  444.             $data["image"] = new UploadedBase64File($image$request->get('imageFilename'));
  445.         return $data;
  446.     }
  447.     /**
  448.      * @param Request $request
  449.      * @return JsonResponse
  450.      *
  451.      * @Route("/player/trainingAsist", name="api_player_trainingAsist", methods={"POST"})
  452.      */
  453.     public function trainingAsistPlayer(Request $request)
  454.     {
  455.         $prefixFile $this->getParameter("app.path.player_images");
  456.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  457.         $order $request->get('order''trainingAsist');
  458.         $players = [];
  459.         /** @var PlayerRepository $playerRepository */
  460.         $playerRepository $this->em->getRepository(Player::class);
  461.         /** @var Customer $customer */
  462.         $customer $this->getUser();
  463.         $season $customer->getSeasonActive();
  464.         if (!empty($season)) {
  465.             $filter = [
  466.                 "season" => $season->getId()
  467.             ];
  468.             /** @var SeasonPlayer $seasonPlayer */
  469.             /** @var Player $player */
  470.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter) as $seasonPlayer) {
  471.                 $player $seasonPlayer->getPlayer();
  472.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  473.                 $isActive $player->getIsActive();
  474.                 if ($isActive && $seasonPlayerActive) {
  475.                     $result $playerRepository->getStatsAsist($player$season);
  476.                     // Retrieve min statistics and league statistics
  477.                     $playerMinutes $this->em->getRepository(GamePlayerStatistics::class)->getPlayerMinutes($seasonPlayer->getId());
  478.                     $totalMinutes = (int) $playerMinutes['totalMinutes'];
  479.                     $leagueMinutes = (int) $playerMinutes['leagueMinutes'];
  480.                     
  481.                     $players[] = [
  482.                         "id" => $player->getId(),
  483.                         "name" => $player->getName(),
  484.                         "lastname" => $player->getLastname(),
  485.                         "position" => !empty($player->getPosition()) ? $player->getPosition()->getSlug() : "",
  486.                         "image" => !empty($player->getImage()) ? $baseurl $prefixFile "/" $player->getImage() : "",
  487.                         "trainingAsist" => intval($result['trainingAsist'] ?? 0),
  488.                         "trainingAsistTotal" => intval($result['trainingAsistTotal'] ?? 0),
  489.                         "trainingAsistPercent" => intval($result['trainingAsistPercent'] ?? 0),
  490.                         "totalMinutes" => $totalMinutes,
  491.                         "leagueMinutes" => $leagueMinutes,
  492.                     ];
  493.                 }
  494.             }
  495.             usort($players, function ($a$b) use ($order) {
  496.                 if ($a[$order] > $b[$order])
  497.                     return 1;
  498.                 if ($a[$order] < $b[$order])
  499.                     return -1;
  500.                 return 0;
  501.             });
  502.             $players array_reverse($players);
  503.         }
  504.         return $this->response($players);
  505.     }
  506.     /**
  507.      * @param Request $request
  508.      * @return JsonResponse
  509.      *
  510.      * @Route("/player/convocatorias", name="api_player_convocatorias", methods={"POST"})
  511.      */
  512.     public function convocatoriasPlayer(Request $request)
  513.     {
  514.         $prefixFile $this->getParameter("app.path.player_images");
  515.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  516.         $request $this->transformJsonBody($request);
  517.         $players = [];
  518.         /** @var PlayerRepository $playerRepository */
  519.         $playerRepository $this->em->getRepository(Player::class);
  520.         /** @var Customer $customer */
  521.         $customer $this->getUser();
  522.         $season $customer->getSeasonActive();
  523.         if (!empty($season)) {
  524.             $filter = [
  525.                 "season" => $season->getId()
  526.             ];
  527.             /** @var ConvocatoriaRepository $convocatoriaRepository */
  528.             $convocatoriaRepository $this->em->getRepository(Convocatoria::class);
  529.             /** @var SeasonPlayer $seasonPlayer */
  530.             /** @var Player $player */
  531.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter) as $seasonPlayer) {
  532.                 $player $seasonPlayer->getPlayer();
  533.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  534.                 $isActive $player->getIsActive();
  535.                 if ($isActive && $seasonPlayerActive) {
  536.                     $result $playerRepository->getStatsConvocatoria($player$season);
  537.                     $players[] = array_merge([
  538.                         "id" => $player->getId(),
  539.                         "name" => $player->getName(),
  540.                         "lastname" => $player->getLastname(),
  541.                         "position" => !empty($player->getPosition()) ? $player->getPosition()->getSlug() : "",
  542.                         "image" => !empty($player->getImage()) ? $baseurl $prefixFile "/" $player->getImage() : "",
  543.                     ],$result);
  544.                 }
  545.             }
  546.             usort($players, function ($a$b) {
  547.                 if ($a["convocatory"] > $b["convocatory"])
  548.                     return 1;
  549.                 if ($a["convocatory"] < $b["convocatory"])
  550.                     return -1;
  551.                 return 0;
  552.             });
  553.             $players array_reverse($players);
  554.         }
  555.         return $this->response($players);
  556.     }
  557.     /**
  558.      * @param Request $request
  559.      * @return JsonResponse
  560.      *
  561.      * @Route("/player/assistances/{id}/{month}/{year}", name="api_player_assistances", methods={"POST"})
  562.      */
  563.     public function assistancesPlayer($id$month$year)
  564.     {
  565.         /** @var Player $player */
  566.         $player $this->em->getRepository(Player::class)->findOneBy(['id' => $id]);
  567.         $lowermonth = \DateTime::createFromFormat("d/m/Y H:i:s""1/" . ($month) . "/" . ($year) . " 00:00:00");
  568.         $uppermonth = \DateTime::createFromFormat("d/m/Y H:i:s""0/" . ($month 1) . "/" . ($year) . " 00:00:00");
  569.         $dates = [];
  570.         $dates['justifications'] = [];
  571.         $justifications $player->getJustification();
  572.         foreach ($justifications as $justification) {
  573.             if ($justification->getDate() >= $lowermonth && $justification->getDate() <= $uppermonth) {
  574.                 $dates['justifications'][] = [
  575.                     "date" => $justification->getDate()->format("Y-m-d"),
  576.                     "type" => $justification->getJustificationType()->getId()
  577.                 ];
  578.             }
  579.         };
  580.         $dates['assistances'] = [];
  581.         $trainingsAssits $player->getTrainingAsists();
  582.         foreach ($trainingsAssits as $trainingAssist) {
  583.             if ($trainingAssist->getDate() >= $lowermonth && $trainingAssist->getDate() <= $uppermonth)
  584.                 $dates['assistances'][] = [
  585.                     "date" => $trainingAssist->getDate()->format("Y-m-d")
  586.                 ];
  587.         };
  588.         $dates['lacks'] = [];
  589.         /** @var Customer $customer */
  590.         $customer $this->getUser();
  591.         $season $customer->getSeasonActive();
  592.         if (!empty($season)) {
  593.             $filter = [
  594.                 [
  595.                     "prop" => "season",
  596.                     "comp" => "=",
  597.                     "val" => $season->getId()
  598.                 ],
  599.                 [
  600.                     "prop" => "date",
  601.                     "comp" => ">=",
  602.                     "val" => $lowermonth
  603.                 ],
  604.                 [
  605.                     "prop" => "date",
  606.                     "comp" => "<=",
  607.                     "val" => $uppermonth
  608.                 ],
  609.             ];
  610.             /** @var TrainingAsist $trainingAsist */
  611.             foreach ($this->em->getRepository(TrainingAsist::class)->findByOwnCriteria($filter) as $trainingAsist) {
  612.                 $date $trainingAsist->getDate()->format("Y-m-d");
  613.                 if (!in_array($datearray_column($dates['justifications'], 'date')) && !in_array($datearray_column($dates['assistances'], 'date'))) {
  614.                     $dates['lacks'][] = [
  615.                         "date" => $date
  616.                     ];
  617.                 }
  618.             }
  619.         }
  620.         return $this->response($dates);
  621.     }
  622.     /**
  623.      * @param Request $request
  624.      * @return JsonResponse
  625.      *
  626.      * @Route("/player/assistance/{id}/{month}", name="api_player_assistance", methods={"POST"})
  627.      */
  628.     public function assistancePlayer($id$month)
  629.     {
  630.         /** @var Player $player */
  631.         $player $this->em->getRepository(Player::class)->findOneBy(['id' => $id]);
  632.         $lowermonth = \DateTime::createFromFormat("d/m/Y H:i:s""1/" . ($month) . "/" date('Y') . " 00:00:00");
  633.         $uppermonth = \DateTime::createFromFormat("d/m/Y H:i:s""0/" . ($month 1) . "/" date('Y') . " 00:00:00");
  634.         $dates = [];
  635.         $dates['justifications'] = [];
  636.         $justifications $player->getJustification();
  637.         foreach ($justifications as $justification) {
  638.             if ($justification->getDate() >= $lowermonth && $justification->getDate() <= $uppermonth) {
  639.                 $dates['justifications'][] = [
  640.                     "date" => $justification->getDate()->format("Y-m-d"),
  641.                     "type" => $justification->getJustificationType()->getId()
  642.                 ];
  643.             }
  644.         };
  645.         $dates['assistances'] = [];
  646.         $trainingsAssits $player->getTrainingAsists();
  647.         foreach ($trainingsAssits as $trainingAssist) {
  648.             if ($trainingAssist->getDate() >= $lowermonth && $trainingAssist->getDate() <= $uppermonth)
  649.                 $dates['assistances'][] = [
  650.                     "date" => $trainingAssist->getDate()->format("Y-m-d")
  651.                 ];
  652.         };
  653.         $dates['lacks'] = [];
  654.         /** @var Customer $customer */
  655.         $customer $this->getUser();
  656.         $season $customer->getSeasonActive();
  657.         if (!empty($season)) {
  658.             $filter = [
  659.                 [
  660.                     "prop" => "season",
  661.                     "comp" => "=",
  662.                     "val" => $season->getId()
  663.                 ],
  664.                 [
  665.                     "prop" => "date",
  666.                     "comp" => ">=",
  667.                     "val" => $lowermonth
  668.                 ],
  669.                 [
  670.                     "prop" => "date",
  671.                     "comp" => "<=",
  672.                     "val" => $uppermonth
  673.                 ],
  674.             ];
  675.             /** @var TrainingAsist $trainingAsist */
  676.             foreach ($this->em->getRepository(TrainingAsist::class)->findByOwnCriteria($filter) as $trainingAsist) {
  677.                 $date $trainingAsist->getDate()->format("Y-m-d");
  678.                 if (!in_array($datearray_column($dates['justifications'], 'date')) && !in_array($datearray_column($dates['assistances'], 'date'))) {
  679.                     $dates['lacks'][] = [
  680.                         "date" => $date
  681.                     ];
  682.                 }
  683.             }
  684.         }
  685.         return $this->response($dates);
  686.     }
  687.     /**
  688.      * @param Request $request
  689.      * @return JsonResponse
  690.      *
  691.      * @Route("/player/delete/{player}", name="api_player_delete", methods={"POST"})
  692.      */
  693.     public function deletePlayer(Player $player)
  694.     {
  695.         $response $this->playerManager->delete($player);
  696.         $this->setStatusCode($response["code"]);
  697.         return $this->response($response);
  698.     }
  699.         /**
  700.      * @param Request $request
  701.      * @return JsonResponse
  702.      *
  703.      * @Route("/player/delete/{player}/permanent", name="api_player_delete_permanent", methods={"POST"})
  704.      */
  705.     public function deletePlayerPermanent(Player $player)
  706.     {
  707.         $response $this->playerManager->deletePermanent($player);
  708.         $this->setStatusCode($response["code"]);
  709.         return $this->response($response);
  710.     }
  711.             /**
  712.      * @param Request $request
  713.      * @return JsonResponse
  714.      *
  715.      * @Route("/player/restore/{player}", name="api_player_restore", methods={"POST"})
  716.      */
  717.     public function restorePlayer(Player $player)
  718.     {
  719.         
  720.         /** @var Customer $customer */
  721.         $customer $this->getUser();
  722.         $season $customer->getSeasonActive();
  723.         $seasonPlayer $this->getSeasonPlayer($player$season);
  724.         $response $this->playerManager->restorePlayer($player$seasonPlayer);
  725.         $this->setStatusCode($response["code"]);
  726.         return $this->response($response);
  727.     }
  728.     /**
  729.      * @param Request $request
  730.      * @return JsonResponse
  731.      *
  732.      * @Route("/player/games/{id}", name="api_player_games", methods={"POST"})
  733.      */
  734.     public function gamesPlayer($idRequest $request)
  735.     {
  736.         $prefixFile $this->getParameter("app.path.game_images");
  737.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  738.         /** @var Customer $customer */
  739.         $customer $this->getUser();
  740.         $season $customer->getSeasonActive();
  741.         /** @var PlayerRepository $playerRepository */
  742.         $playerRepository $this->em->getRepository(Player::class);
  743.         $player $playerRepository->findOneBy([
  744.             'id' => $id
  745.         ]);
  746.         $results $playerRepository->findGamesBySeason($player$season);
  747.         /** @var PlayerRepository $playerRepository */
  748.         $gameRepository $this->em->getRepository(Game::class);
  749.         $output = [];
  750.         foreach ($results as $result) {
  751.             $game $gameRepository->findOneBy([
  752.                 'id' => $result['id']
  753.             ])->__toArray($baseurl $prefixFile "/");
  754.             $game['playerStats'] = $result;
  755.             $output[] = $game;
  756.         }
  757.         return $this->response($output);
  758.     }
  759.     /**
  760.      * @param Request $request
  761.      * @return JsonResponse
  762.      *
  763.      * @Route("/player/justifications", name="api_player_justifications", methods={"POST"})
  764.      */
  765.     public function justifications(Request $request)
  766.     {
  767.         $prefixFile $this->getParameter("app.path.player_images");
  768.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  769.         $order $request->get('order''justificationTotal');
  770.         $players = [];
  771.         /** @var PlayerRepository $playerRepository */
  772.         $playerRepository $this->em->getRepository(Player::class);
  773.         /** @var Customer $customer */
  774.         $customer $this->getUser();
  775.         $season $customer->getSeasonActive();
  776.         if (!empty($season)) {
  777.             $filter = [
  778.                 "season" => $season->getId()
  779.             ];
  780.             /** @var SeasonPlayer $seasonPlayer */
  781.             /** @var Player $player */
  782.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter) as $seasonPlayer) {
  783.                 $player $seasonPlayer->getPlayer();
  784.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  785.                 $isActive $player->getIsActive();
  786.                 $playerSportInjure = [
  787.                     'season' => $season,
  788.                     'seasonPlayer' => $seasonPlayer
  789.                 ];
  790.                 $playerInjury = [];
  791.                 foreach ($this->em->getRepository(PlayerSportsInjuries::class)->findBy($playerSportInjure) as $key => $injury) {
  792.                     $playerInjury[] = $injury->__toArray();
  793.                 }
  794.                 if ($isActive && $seasonPlayerActive) {
  795.                     $justifications $playerRepository->getStatsJustification($player$season);
  796.                     $justificationsConvocatoria $playerRepository->getStatsJustificationConvocatoria($player$season);
  797.                     $base = [
  798.                         "id" => $player->getId(),
  799.                         "name" => $player->getName(),
  800.                         "lastname" => $player->getLastname(),
  801.                         "position" => !empty($player->getPosition()) ? $player->getPosition()->getSlug() : "",
  802.                         "image" => !empty($player->getImage()) ? $baseurl $prefixFile "/" $player->getImage() : "",
  803.                         "playerInjuriesGames" => $playerInjury
  804.                     ];
  805.                     $players[] = array_merge($base$justifications$justificationsConvocatoria);
  806.                 }
  807.             }
  808.             usort($players, function ($a$b) use ($order) {
  809.                 if ($a[$order] > $b[$order])
  810.                     return 1;
  811.                 if ($a[$order] < $b[$order])
  812.                     return -1;
  813.                 return 0;
  814.             });
  815.             $players array_reverse($players);
  816.         }
  817.         return $this->response($players);
  818.     }
  819.     /**
  820.      * @param Request $request
  821.      * @return JsonResponse
  822.      *
  823.      * @Route("/player/{id}/seasons", name="api_player_seasons", methods={"POST"})
  824.      */
  825.     public function seasons(Request $request)
  826.     {
  827.         $prefixFile $this->getParameter("app.path.player_images");
  828.         $baseurl $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath();
  829.         $order $request->get('order''justificationTotal');
  830.         $players = [];
  831.         /** @var PlayerRepository $playerRepository */
  832.         $playerRepository $this->em->getRepository(Player::class);
  833.         /** @var Customer $customer */
  834.         $customer $this->getUser();
  835.         $season $customer->getSeasonActive();
  836.         if (!empty($season)) {
  837.             $filter = [
  838.                 "season" => $season->getId()
  839.             ];
  840.             /** @var SeasonPlayer $seasonPlayer */
  841.             /** @var Player $player */
  842.             foreach ($this->em->getRepository(SeasonPlayer::class)->findBy($filter) as $seasonPlayer) {
  843.                 $player $seasonPlayer->getPlayer();
  844.                 $seasonPlayerActive = !$seasonPlayer->getDeletedAt();
  845.                 $isActive $player->getIsActive();
  846.                 if ($isActive && $seasonPlayerActive) {
  847.                     $justifications $playerRepository->getStatsJustification($player$season);
  848.                     $justificationsConvocatoria $playerRepository->getStatsJustificationConvocatoria($player$season);
  849.                     $base = [
  850.                         "id" => $player->getId(),
  851.                         "name" => $player->getName(),
  852.                         "lastname" => $player->getLastname(),
  853.                         "position" => !empty($player->getPosition()) ? $player->getPosition()->getSlug() : "",
  854.                         "image" => !empty($player->getImage()) ? $baseurl $prefixFile "/" $player->getImage() : "",
  855.                     ];
  856.                     $players[] = array_merge($base$justifications$justificationsConvocatoria);
  857.                 }
  858.             }
  859.             usort($players, function ($a$b) use ($order) {
  860.                 if ($a[$order] > $b[$order])
  861.                     return 1;
  862.                 if ($a[$order] < $b[$order])
  863.                     return -1;
  864.                 return 0;
  865.             });
  866.             $players array_reverse($players);
  867.         }
  868.         return $this->response($players);
  869.     }
  870.     /**
  871.      * @param Request $request
  872.      * @return JsonResponse
  873.      *
  874.      * @Route("/player/search_customer_shared", name="api_search_customer_shared_", methods={"POST"})
  875.      */
  876.     public function searchCustomerSharedPlayer(Request $request)
  877.     {
  878.         if (!$request->get('email')) {
  879.             return $this->response(['code' => 422'message' => 'email is required']);
  880.         }
  881.         $customerRepository $this->em->getRepository(Customer::class);
  882.         $customer $customerRepository->findOneBy(["email" => $request->get("email")]);
  883.         if ($customer) {
  884.             return $this->response([
  885.                 'code' => 200,
  886.                 'data' => [
  887.                     'id' => $customer->getId(),
  888.                     'name' => $customer->getName(),
  889.                     'teamName' => $customer->getNameTeam(),
  890.                     'email' => $customer->getEmail(),
  891.                 ]
  892.             ]);
  893.         }
  894.         return $this->response([
  895.             'code' => 401,
  896.             'message' => 'user not fount!',
  897.         ]);
  898.     }
  899.     /**
  900.      * @param Request $request
  901.      * @return JsonResponse
  902.      *
  903.      * @Route("/players/season-squad/evaluate", name="api_season_players_evaluate", methods={"POST"})
  904.      */
  905.     public function evalutePlayerBySeason(Request $request)
  906.     {
  907.         $request $this->transformJsonBody($request);
  908.         $players = [];
  909.         /** @var Customer $customer */
  910.         $customer $this->getUser();
  911.         $season $customer->getSeasonActive();
  912.         
  913.         $response $this->playerManager->isOverTheCap($customer$season);
  914.       
  915.         return $this->response($response);
  916.     }
  917.     
  918.     /**
  919.      * @param Request $request
  920.      * @return JsonResponse
  921.      *
  922.      * @Route("/player-league/stats/{player}", name="api_season_player_league_stats", methods={"POST"})
  923.      */
  924.     public function playerLeagueStats(Player $playerRequest $request)
  925.     {
  926.         $request $this->transformJsonBody($request);
  927.         /** @var Customer $customer */
  928.         $customer $this->getUser();
  929.         $season $customer->getSeasonActive();
  930.         
  931.         $seasonPlayer $this->getSeasonPlayer($player$season);
  932.       
  933.         /** @var PlayerRepository $playerRepository */
  934.         $gameRepository $this->em->getRepository(Game::class);
  935.         
  936.         $playerLeagueStats $gameRepository->getSeasonPlayerStats($seasonPlayer->getId());
  937.         return $this->response($playerLeagueStats);
  938.     }
  939.     public function getSeasonPlayer(Player $playerSeason $season)
  940.     {
  941.         $seasonPlayer $this->em->getRepository(SeasonPlayer::class)->findOneBy(['player' => $player"season" => $season]);
  942.         return $seasonPlayer;
  943.     }
  944. }