src/Controller/Api/Production/ProductionsByDayController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api\Production;
  3. use DateTime;
  4. use App\Entity\User;
  5. use App\Service\HierarchyService;
  6. use App\Repository\UserRepository;
  7. use App\Repository\ClusterRepository;
  8. use App\Repository\ProductionRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Repository\PointOfSaleRepository;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  16. class ProductionsByDayController extends AbstractController
  17. {
  18.     private $clusterRepository;
  19.     private $productionRepository;
  20.     private $pointOfSaleRepository;
  21.     private $userRepository;
  22.     public function __construct(
  23.         ClusterRepository $clusterRepository,
  24.         ProductionRepository $productionRepository,
  25.         PointOfSaleRepository $pointOfSaleRepository,
  26.         UserRepository $userRepository
  27.     ) {
  28.         $this->clusterRepository $clusterRepository;
  29.         $this->productionRepository $productionRepository;
  30.         $this->pointOfSaleRepository $pointOfSaleRepository;
  31.         $this->userRepository $userRepository;
  32.     }
  33.     public function __invoke(
  34.         $pointOfSaleId,
  35.         Request $request,
  36.         EntityManagerInterface $entityManager,
  37.         HierarchyService $hierarchyService
  38.     ) {
  39.         $pointOfSale $this->pointOfSaleRepository->findOneBy(["id" => $pointOfSaleId]);
  40.         if ($pointOfSale == null) {
  41.             return new JsonResponse('Le point de vente avec cet ID n\'existe pas.'404);
  42.         }
  43.         $codeCluster $request->query->get('codeCluster'null);
  44.         $mois $request->query->get('mois'null);
  45.         $annee $request->query->get('annee'null);
  46.         $category $request->query->get('categoryId'null);
  47.         $user null;
  48.         $cluster null;
  49.         if ($codeCluster) {
  50.             $cluster $this->clusterRepository->findOneBy(['codeCluster' => $codeCluster]);
  51.             if ($cluster == null) {
  52.                 return new JsonResponse(['error' => 'Aucun cluster avec ce code'], 404);
  53.             }
  54.         }
  55.         $optionSelect $request->query->get('optionSelect''B');
  56.         $codeInsee $request->query->get('codeInsee'null);
  57.         $roleUser $request->query->get('roleUser'"ROLE_COMPANY");
  58.         $childs = [];
  59.         $user null;
  60.         if ($request->query->get('idUser') != null) {
  61.             $user $entityManager->getRepository(User::class)->find((int)$request->query->get('idUser'));
  62.             if (!$user) {
  63.                 throw new BadRequestHttpException('L\'utilisateur avec cet ID n\'existe pas.');
  64.             }
  65.             // Récupérer l'hierarchie descendante
  66.             if (in_array('ROLE_MANAGER'$user->getRoles()) || in_array('ROLE_DIRECTOR'$user->getRoles())) {
  67.                 $childs array_map(fn($p) => (int) $p['id'], $hierarchyService->getHierarchyDescendante($user->getId()));
  68.             }
  69.         }
  70.         // Récupérer les ventes par jour 
  71.         $moisPrecedent null;
  72.         if ($mois) {
  73.             $moisPrecedent $mois 1;
  74.         }
  75.         $salesByDayMonth $this->productionRepository->getSalesByDay($pointOfSale$cluster$mois$annee$codeInsee$optionSelect$roleUser$category$childs);
  76.         if ((int)$mois == 1) {
  77.             $yearPrecedent $annee 1;
  78.             $moisPrecedent 12;
  79.             $salesByDayForPreviousMonth $this->productionRepository->getSalesByDay($pointOfSale$cluster$moisPrecedent$yearPrecedent$codeInsee,  $optionSelect$roleUser$category$childs);
  80.         } else {
  81.             $salesByDayForPreviousMonth $this->productionRepository->getSalesByDay($pointOfSale$cluster$moisPrecedent$annee$codeInsee,  $optionSelect$roleUser$category$childs);
  82.         }
  83.         return new JsonResponse([
  84.             'ventes_par_jour' => $salesByDayMonth,
  85.             'ventes_par_jour_mois-1' => $salesByDayForPreviousMonth,
  86.         ]);
  87.     }
  88.     /**
  89.      * @Route("api/productions-for-one-day/{pointOfSaleId}", name="api_get_productions_by_hour_for_one_day", methods={"GET"})
  90.      */
  91.     public function productionsTotalByHourForOneDay($pointOfSaleIdRequest $request)
  92.     {
  93.         $pointOfSale $this->pointOfSaleRepository->findOneBy(["id" => $pointOfSaleId]);
  94.         $date $request->query->get('date'date('Y-m-d'));
  95.         $date str_replace('/''-'$date);
  96.         $roleUser $request->query->get('roleUser'"ROLE_COMPANY");
  97.         if ($pointOfSale == null) {
  98.             return new JsonResponse('Le point de vente avec cet ID n\'existe pas.'404);
  99.         }
  100.         try {
  101.             $date = new DateTime($date);
  102.         } catch (\Throwable $th) {
  103.             return new  JsonResponse('la date ne respecte pas le format attendu');
  104.         }
  105.         $codeCluster $request->query->get('codeCluster'null);
  106.         $user null;
  107.         $cluster null;
  108.         if ($codeCluster) {
  109.             $cluster $this->clusterRepository->findOneBy(['codeCluster' => $codeCluster]);
  110.             if ($cluster == null) {
  111.                 return new JsonResponse(['error' => 'Aucun cluster avec ce code'], 404);
  112.             }
  113.         }
  114.         $optionSelect $request->query->get('optionSelect''B');
  115.         $codeInsee $request->query->get('codeInsee'null);
  116.         $organisationId $request->query->get('organisationId'null);
  117.         $userId $request->query->get('userId'null);
  118.         if ($userId) {
  119.             $user $this->userRepository->findOneBy(['id' => $userId]);
  120.             if (!$user) {
  121.                 return new JsonResponse(['error' => 'Aucun utilisateur avec cet ID'], 404);
  122.             }
  123.         }
  124.         // Récupérer les ventes par jour 
  125.         $details $this->productionRepository->getProductionsDetailsForOneDay($pointOfSale$date$cluster,  $codeInsee$user$optionSelectnullnull$roleUser$organisationId);
  126.         $salesByHour $this->productionRepository->getSalesForOneDayByHour($pointOfSale$date$cluster,  $codeInsee$user$optionSelect$roleUser);
  127.         return new JsonResponse([
  128.             'ventes_de_jour' => (int)count($details),
  129.             'ventes_par_heure' => $salesByHour,
  130.             'details' => $details
  131.         ]);
  132.     }
  133.     /**
  134.      * @Route("api/productions-details-for-one-day/{pointOfSaleId}", name="api_get_productions_details_fro_one_day", methods={"GET"})
  135.      */
  136.     public function productionsDetailsForOneDay(
  137.         $pointOfSaleId,
  138.         Request $request,
  139.         EntityManagerInterface $entityManager,
  140.         HierarchyService $hierarchyService
  141.     ) {
  142.         $pointOfSale $this->pointOfSaleRepository->findOneBy(["id" => $pointOfSaleId]);
  143.         $date $request->query->get('date'date('Y-m-d'));
  144.         $roleUser $request->query->get('roleUser'"ROLE_COMPANY");
  145.         $anneeMois $request->query->get('yearMonth'null);
  146.         $etatId $request->query->get('etatId'null);
  147.         $date str_replace('/''-'$date);
  148.         if ($pointOfSale == null) {
  149.             return new JsonResponse('Le point de vente avec cet ID n\'existe pas.'404);
  150.         }
  151.         try {
  152.             $date = new DateTime($date);
  153.         } catch (\Throwable $th) {
  154.             return new  JsonResponse('la date ne respecte pas le format attendu');
  155.         }
  156.         $codeCluster $request->query->get('codeCluster'null);
  157.         $cluster null;
  158.         if ($codeCluster) {
  159.             $cluster $this->clusterRepository->findOneBy(['codeCluster' => $codeCluster]);
  160.             if ($cluster == null) {
  161.                 return new JsonResponse(['error' => 'Aucun cluster avec ce code'], 404);
  162.             }
  163.         }
  164.         $optionSelect $request->query->get('optionSelect''B');
  165.         $codeInsee $request->query->get('codeInsee'null);
  166.         $organisationId $request->query->get('organisationId'null);
  167.         $childs = [];
  168.         $user null;
  169.         if ($request->query->get('idUser') != null) {
  170.             $user $entityManager->getRepository(User::class)->find((int)$request->query->get('idUser'));
  171.             if (!$user) {
  172.                 throw new BadRequestHttpException('L\'utilisateur avec cet ID n\'existe pas.');
  173.             }
  174.             if (! in_array('ROLE_COMPANY'$user->getRoles())) {
  175.                 $childs = [$user->getId()];
  176.                 // Récupérer l'hierarchie descendante
  177.                 if (in_array('ROLE_MANAGER'$user->getRoles()) || in_array('ROLE_DIRECTOR'$user->getRoles())) {
  178.                     $childs array_map(fn($p) => (int) $p['id'], $hierarchyService->getHierarchyDescendante($user->getId()));
  179.                 }
  180.             }
  181.         }
  182.         $details $this->productionRepository->getProductionsDetailsForOneDay($pointOfSale$date$cluster,  $codeInsee,  $optionSelect$anneeMois$etatId$roleUser$childs$organisationId);
  183.         return new JsonResponse($details200);
  184.     }
  185. }