src/Controller/Api/PlayerController.php line 549

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