src/Controller/AppController.php line 160

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ConnectionLog;
  4. use App\Entity\Invoice;
  5. use App\Entity\User;
  6. use App\Kimia;
  7. use App\Model\Pdf\Wrapper;
  8. use App\Repository\ArticleRepository;
  9. use App\Repository\ConnectionLogRepository;
  10. use App\Repository\DepartmentRepository;
  11. use App\Repository\EmployeeRepository;
  12. use App\Repository\EstablishmentRepository;
  13. use App\Repository\JournalRepository;
  14. use App\Repository\LotRepository;
  15. use App\Repository\MenuRepository;
  16. use App\Repository\OrderRepository;
  17. use App\Repository\PromotionRepository;
  18. use App\Repository\TicketRepository;
  19. use App\Service\Establishment\EstablishmentManager;
  20. use App\Service\HostResolver;
  21. use DateTime;
  22. use Doctrine\Common\Collections\ArrayCollection;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Dompdf\Dompdf;
  25. use Dompdf\Options;
  26. use GroupIN\ConfigBundle\Service\Config;
  27. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  28. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  29. use Symfony\Component\HttpFoundation\JsonResponse;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\HttpFoundation\StreamedResponse;
  33. use Symfony\Component\Routing\Annotation\Route;
  34. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  35. class AppController extends AbstractController
  36. {
  37.     public function __construct(
  38.         private HostResolver            $hostResolver,
  39.         private EstablishmentManager    $establishmentManager,
  40.         private EstablishmentRepository $establishmentRepository,
  41.         private DepartmentRepository    $departmentRepository,
  42.         private EmployeeRepository      $employeeRepository,
  43.         private ConnectionLogRepository $connectionLogRepository,
  44.         private JournalRepository       $journalRepository,
  45.         private LotRepository           $lotRepository,
  46.         private TicketRepository        $ticketRepository,
  47.         private ArticleRepository       $articleRepository,
  48.     )
  49.     {
  50.     }
  51.     #[IsGranted('IS_AUTHENTICATED_FULLY')]
  52.     #[Route('/app'name'app')]
  53.     public function app(
  54.         OrderRepository          $orderRepository,
  55.         PromotionRepository      $promotionRepository,
  56.         JWTTokenManagerInterface $jwtManager
  57.     ): Response
  58.     {
  59.         /** @var User $user */
  60.         $user $this->getUser();
  61.         $establishment $this->hostResolver->getEstablishmentManager()->getConnected();
  62.         if (is_null($establishment))
  63.             return $this->redirectToRoute('app_self');
  64.         $employee $this->employeeRepository->findOneByEstablishment($establishment$user);
  65.         $token $jwtManager->create($user);
  66.         $journal $this->journalRepository->findOneBy(['establishment' => $establishment], ['id' => 'DESC']);
  67.         $timestamp $journal?->getCreatedAt()->getTimestamp();
  68.         if ($employee && $employee->getIsGranted(Kimia::ROLE_WAITER)) {
  69.             $orders $orderRepository->findByWaiter($establishment$employee);
  70.         } else {
  71.             $orders $orderRepository->findNotCancelledByEstablishment($establishment5true$timestamp);
  72.         }
  73.         $lots = [];
  74.         $articles 0;
  75.         $tickets 0;
  76.         $ticketsSales 0;
  77.         if ((int)$establishment->getType() === Kimia::TYPE_TICKET) {
  78.             $lots $this->lotRepository->findBy(['establishment' => $establishment], ['id' => 'DESC']);
  79.             $tickets count($this->ticketRepository->findByEstablishment($establishment));
  80.             $ticketsSales count($this->ticketRepository->findSalesByEstablishment($establishment));
  81.             $articles count($this->articleRepository->findByEstablishment($establishment));
  82.         }
  83.         return $this->render('app/index.html.twig', [
  84.             'establishment' => $establishment,
  85.             'orders' => $orders,
  86.             'lots' => $lots,
  87.             'tickets' => $tickets,
  88.             'ticketsSales' => $ticketsSales,
  89.             'articles' => $articles,
  90.             'promotions' => $promotionRepository->findBy(['establishment' => $establishment'isPromote' => true]),
  91.             'employee' => $employee,
  92.             'token' => $token,
  93.             'isOwner' => $establishment->getUser() === $user
  94.         ]);
  95.     }
  96.     #[Route('v3/app'name'app_v3')]
  97.     public function appV3(
  98.         OrderRepository          $orderRepository,
  99.         PromotionRepository      $promotionRepository,
  100.         JWTTokenManagerInterface $jwtManager
  101.     ): Response
  102.     {
  103.         /** @var User $user */
  104.         $user $this->getUser();
  105.         $establishment $this->hostResolver->getEstablishmentManager()->getConnected();
  106.         if (is_null($establishment))
  107.             return $this->redirectToRoute('app_self');
  108.         $employee $this->employeeRepository->findOneByEstablishment($establishment$user);
  109.         $token $jwtManager->create($user);
  110.         $journal $this->journalRepository->findOneBy(['establishment' => $establishment], ['id' => 'DESC']);
  111.         $timestamp $journal?->getCreatedAt()->getTimestamp();
  112.         if ($employee && $employee->getIsGranted(Kimia::ROLE_WAITER)) {
  113.             $orders $orderRepository->findByWaiter($establishment$employee);
  114.         } else {
  115.             $orders $orderRepository->findNotCancelledByEstablishment($establishment5true$timestamp);
  116.         }
  117.         $lots = [];
  118.         $articles 0;
  119.         $tickets 0;
  120.         $ticketsSales 0;
  121.         if ((int)$establishment->getType() === Kimia::TYPE_TICKET) {
  122.             $lots $this->lotRepository->findBy(['establishment' => $establishment], ['id' => 'DESC']);
  123.             $tickets count($this->ticketRepository->findByEstablishment($establishment));
  124.             $ticketsSales count($this->ticketRepository->findSalesByEstablishment($establishment));
  125.             $articles count($this->articleRepository->findByEstablishment($establishment));
  126.         }
  127.         return $this->render('app/app.html.twig', [
  128.             'establishment' => $establishment,
  129.             'orders' => $orders,
  130.             'lots' => $lots,
  131.             'tickets' => $tickets,
  132.             'ticketsSales' => $ticketsSales,
  133.             'articles' => $articles,
  134.             'promotions' => $promotionRepository->findBy(['establishment' => $establishment'isPromote' => true]),
  135.             'employee' => $employee,
  136.             'token' => $token,
  137.             'isOwner' => $establishment->getUser() === $user
  138.         ]);
  139.     }
  140.     #[Route(('help/'), name'help')]
  141.     public function help(): Response
  142.     {
  143.         return $this->render('site/help.html.twig');
  144.     }
  145.     /* #[Route('/select', name: 'app_establishment_select', methods: ['GET', 'POST'])]
  146.      public function select(
  147.          Request              $request,
  148.          EstablishmentManager $establishmentManager
  149.      ): Response
  150.      {
  151.          $user = $this->getUser();
  152.          $establishments = new ArrayCollection();
  153.          if (!empty($user->getEstablishments())) {
  154.              foreach ($user->getEstablishments() as $establishment) {
  155.                  $establishments->add($establishment);
  156.              }
  157.          }
  158.          if ($employees = $this->employeeRepository->findBy(['user' => $user])) {
  159.              foreach ($employees as $employee) {
  160.                  $establishments->add($employee->getDepartment()->getEstablishment());
  161.              }
  162.          }
  163.          if (empty($establishments->toArray())) {
  164.              return $this->redirectToRoute('app_establishment_new');
  165.          }
  166.          if ($request->isMethod('POST')) {
  167.              $id = $request->request->get('establishment');
  168.              $establishment = $this->establishmentRepository->find($id);
  169.              if ($establishment) {
  170.                  $session = $request->getSession();
  171.                  $session->set(Kimia::ESTABLISHMENT_KEY, $establishment->getId());
  172.                  $connectionLog = new ConnectionLog();
  173.                  $connectionLog->setUser($user);
  174.                  $connectionLog->setEstablishment($establishment);
  175.                  $connectionLog->setCreatedAt(new DateTime());
  176.                  $this->connectionLogRepository->save($connectionLog, true);
  177.              }
  178.              $this->addFlash('success', 'Bienvenu dans Kimia Manager, votre ERP qui vous aidera à mieux gérer votre établissement.');
  179.              return $this->redirectToRoute('app');
  180.          }
  181.          return $this->render('establishment/select.html.twig', [
  182.              'establishments' => $establishments,
  183.              'establishment' => $establishmentManager->getConnected()
  184.          ]);
  185.      }*/
  186.     #[IsGranted('ROLE_SUPER_ADMIN')]
  187.     #[Route('/doctrine-cache-clear'name'app_cash_clear')]
  188.     public function cacheClearDoctrineAction(EntityManagerInterface $em): JsonResponse
  189.     {
  190.         $caches = [
  191.             'metadata' => $em->getConfiguration()->getMetadataCache(),
  192.             'query' => $em->getConfiguration()->getQueryCache(),
  193.             'results' => $em->getConfiguration()->getResultCache(),
  194.         ];
  195.         $messages = [];
  196.         foreach ($caches as $key => $cache) {
  197.             $messages[$key] = [];
  198.             $messages[$key]['delete'] = false;
  199.             $messages[$key]['flush'] = false;
  200.             if (!$cache) {
  201.                 continue;
  202.             }
  203.             if ($cache->deleteAll()) {
  204.                 $messages[$key]['delete'] = true;
  205.             }
  206.             if ($cache->flushAll()) {
  207.                 $messages[$key]['flush'] = true;
  208.             }
  209.         }
  210.         return $this->json($messages);
  211.     }
  212.     public function header(JWTTokenManagerInterface $jwtManager): Response
  213.     {
  214.         /** @var User $user */
  215.         $user $this->getUser();
  216.         $establishments = [];
  217.         //if ($user)
  218.         if (!empty($user->getEstablishments())) {
  219.             foreach ($user->getEstablishments() as $establishment) {
  220.                 $establishments[] = $establishment;
  221.             }
  222.         }
  223.         if (!empty($user->getMutualities())) {
  224.             foreach ($user->getMutualities() as $mutuality) {
  225.                 if($mutuality->getEstablishment())
  226.                     $establishments[] = $mutuality->getEstablishment();
  227.             }
  228.         }
  229.         if ($employees $this->employeeRepository->findBy(['user' => $user])) {
  230.             foreach ($employees as $employee) {
  231.                 $establishments[] = $employee->getDepartment()->getEstablishment();
  232.             }
  233.         }
  234.         $token $jwtManager->create($user);
  235.         return $this->render('modules/header.html.twig', [
  236.             'establishments' => array_unique($establishments),
  237.             'token' => $token
  238.         ]);
  239.     }
  240.     public function sidebar(MenuRepository $menuRepository): Response
  241.     {
  242.         /** @var User $user */
  243.         $user $this->getUser();
  244.         $establishment $this->establishmentManager->getConnected();
  245.         $isOwner $establishment $establishment->getUser() === $user null;
  246.         $employee null;
  247.         $menus = [];
  248.         $departments = [];
  249.         if ($establishment) {
  250.             $employee $this->employeeRepository->findOneByEstablishment($establishment$user);
  251.             $menus $menuRepository->findBy(['parent' => null'establishment' => $establishment'isActive' => true]);
  252.             $departments $this->departmentRepository->findBy(['establishment' => $establishment'isOnMenu' => true]);
  253.         }
  254.         return $this->render('modules/sidebar.html.twig', [
  255.             'employee' => $employee,
  256.             'isOwner' => $isOwner,
  257.             'menus' => $menus,
  258.             'departments' => $departments,
  259.         ]);
  260.     }
  261. }