src/Controller/App/AppController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller\App;
  3. use App\Core\CoreBundle\Controller\AppControllerInterface;
  4. use App\Core\CoreBundle\Service\Security;
  5. use App\Data\Config;
  6. use App\Entity\Commande;
  7. use App\Entity\CommandeArticle;
  8. use App\Entity\Univers;
  9. use App\Entity\User;
  10. use App\Manager\ArticleManager;
  11. use App\Manager\CommandeArticleManager;
  12. use App\Manager\CommandeManager;
  13. use App\Manager\ConfigManager;
  14. use App\Manager\FraisCommandeArticleManager;
  15. use App\Manager\UniversManager;
  16. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  17. use Knp\Snappy\Pdf;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  23. /**
  24.  * @Route("/app", name="app_")
  25.  */
  26. class AppController extends AbstractController implements AppControllerInterface
  27. {
  28.     private CommandeManager $commandeManager;
  29.     private CommandeArticleManager $commandeArticleManager;
  30.     private Security $security;
  31.     private UniversManager $universManager;
  32.     public function __construct(
  33.         CommandeManager        $commandeManager,
  34.         CommandeArticleManager $commandeArticleManager,
  35.         Security               $security,
  36.         UniversManager         $universManager
  37.     )
  38.     {
  39.         $this->commandeManager $commandeManager;
  40.         $this->security $security;
  41.         $this->commandeArticleManager $commandeArticleManager;
  42.         $this->universManager $universManager;
  43.     }
  44.     /**
  45.      * @Route("/", name="homepage", options={"expose"=true}, methods={"GET"})
  46.      */
  47.     public function index(Request $request)
  48.     {
  49.         /** @var Commande $commande */
  50.         $commande null;
  51.         $showModal false;
  52.         if ($request->get('eanscan')) {
  53.             $this->get('session')->set('eanscan'$request->get('eanscan'));
  54.         }
  55.         // si une commande est passé en parametre
  56.         if ($request->get('commande')) {
  57.             /** @var Commande $commande */
  58.             $commande $this->commandeManager->find($request->get('commande'));
  59.             // on verifie que l'utilisateur courant puisse editer la commande
  60.             if (!$commande->isCommandeModifiable() or !in_array($commande->getMagasin()->getId(), $this->security->getUser()->getMagasinsId())) {
  61.                 // on remove la commande courante en session
  62.                 $this->get('session')->remove('commandeCourante');
  63.                 $this->get('session')->remove('commandeModification');
  64.                 throw new AccessDeniedException('Accès interdit');
  65.             }
  66.             // on set l'univers et la commande courante en session
  67.             $this->get('session')->set('univers'$commande->getUniver()->getId());
  68.             $this->get('session')->set('commandeCourante'$commande->getId());
  69.             $this->get('session')->set('commandeModification'$commande->getId());
  70.         } else {
  71.             // on remove la commande courante en session
  72.             $this->get('session')->remove('commandeCourante');
  73.             $this->get('session')->remove('commandeModification');
  74.             // si on a deja l'univers et le magasin
  75.             if (
  76.                 $this->get('session')->get('univers') and
  77.                 $this->get('session')->get('magasin')
  78.             ) {
  79.                 // on regarde si la commande courante existe déja
  80.                 /** @var Commande $commande */
  81.                 $commande $this->commandeManager->findOneBy(
  82.                     [
  83.                         'univer' => $this->get('session')->get('univers'),
  84.                         'magasin' => $this->get('session')->get('magasin'),
  85.                         'statut' => Config::COMMANDE_BROUILLON,
  86.                     ]
  87.                 );
  88.                 // si elle existe, qu'elle n'est pas vide et que la modal de l'univers et du magasin n'a pas été affiché
  89.                 if (
  90.                     $commande and
  91.                     sizeof($commande->getCommandeArticles()->toArray()) != and
  92.                     !$this->get('session')->get('modalCommande_' $this->get('session')->get('univers') . '_' $this->get('session')->get('magasin'))
  93.                 ) {
  94.                     $showModal true;
  95.                     $this->get('session')->set('modalCommande_' $this->get('session')->get('univers') . '_' $this->get('session')->get('magasin'), true);
  96.                 }
  97.             }
  98.         }
  99.         /** @var Univers $univers */
  100.         $univers $this->universManager->find($this->get('session')->get('univers'));
  101.         $universSemaine = ($univers and $univers->getPrecommande()) ? $univers->getPrecommandeNombreSemaine() : null;
  102.         return $this->render(
  103.             'app/home.html.twig',
  104.             [
  105.                 'showModal' => $showModal,
  106.                 'commande' => $commande,
  107.                 'univers' => $univers,
  108.                 'universSemaine' => $universSemaine,
  109.                 'universFrais' => ($univers) ? (int)$univers->getFrais() : null,
  110.                 'titreColonneHistorique' => ($univers) ? $univers->getTitreColonneHistorique() : null,
  111.             ]
  112.         );
  113.     }
  114.     /**
  115.      * @Route("/{commande}/panier", name="panier", options={"expose"=true}, methods={"GET"})
  116.      */
  117.     public function panier($commande)
  118.     {
  119.         /** @var User $user */
  120.         $user $this->security->getUser();
  121.         /** @var Commande $commande */
  122.         $commande $this->commandeManager->findOneBy(['id' => $commande]);
  123.         // verification que la commande est bien associé à un magasin que gere l'utilisateur
  124.         if (
  125.             !$commande or
  126.             !in_array($commande->getMagasin()->getId(), $user->getMagasinsId())
  127.         ) {
  128.             throw new AccessDeniedException('Accès interdit');
  129.         }
  130.         $this->get('session')->set('commandeCourante'$commande->getId());
  131.         $this->get('session')->set('commandeModifiable'$commande->isCommandeModifiable());
  132.         $this->get('session')->set('modalCommande_' $commande->getUniver()->getId() . '_' $commande->getMagasin()->getId(), true);
  133.         return $this->render(
  134.             'app/panier.html.twig',
  135.             [
  136.                 'hideSelecteurUnivers' => true,
  137.                 'hideSelecteurClient' => true,
  138.                 'statut' => json_encode($commande->getStatutData()),
  139.                 'commande' => $commande->getId(),
  140.                 'commandeName' => $commande->getName(),
  141.                 'magasin' => $commande->getMagasin()->getName(),
  142.                 'univer' => $commande->getUniver()->__toString(),
  143.                 'universSemaine' => $commande->getUniver()->getPrecommandeNombreSemaine(),
  144.                 'universFrais' => (int)$commande->getUniver()->getFrais(),
  145.                 'commandeDateLivraison' => ($commande->getDateLivraison()) ? $commande->getDateLivraison()->format('Y-m-d') : '',
  146.                 'dateLivraisonEstimation' => $commande->getDateLivraisonEstimation(),
  147.                 'titreColonneHistorique' => $commande->getUniver()->getTitreColonneHistorique()
  148.             ]
  149.         );
  150.     }
  151.     /**
  152.      * @Route("/historique", name="historique", options={"expose"=true}, methods={"GET"})
  153.      */
  154.     public function historique()
  155.     {
  156.         return $this->render(
  157.             'app/historique.html.twig',
  158.             [
  159.                 'hideSelecteurUnivers' => true,
  160.             ]
  161.         );
  162.     }
  163.     /**
  164.      * @Route("/express", name="express", options={"expose"=true}, methods={"GET"})
  165.      */
  166.     public function express()
  167.     {
  168.         return $this->render(
  169.             'app/express.html.twig',
  170.             [
  171.             ]
  172.         );
  173.     }
  174.     /**
  175.      * @Route("/{commande}/renouveler", name="renouveler", options={"expose"=true}, methods={"GET"})
  176.      */
  177.     public function renouveler(Commande $commande)
  178.     {
  179.         $newCommande $this->commandeManager->dupliquer($commandeConfig::COMMANDE_RENOUVELEMENT);
  180.         $this->commandeManager->calculMontantCommande($newCommande);
  181.         return $this->redirectToRoute('app_panier', ['commande' => $newCommande->getId(),]);
  182.     }
  183.     /**
  184.      * @Route("/{commande}/reset", name="reset", options={"expose"=true}, methods={"GET"})
  185.      */
  186.     public function reset($commande)
  187.     {
  188.         /** @var User $user */
  189.         $user $this->security->getUser();
  190.         /** @var Commande $commande */
  191.         $commande $this->commandeManager->findOneBy(['id' => $commande]);
  192.         // verification que la commande est bien associé à un magasin que gere l'utilisateur et que la commande n'est pas modifiable
  193.         if (!$commande or
  194.             !in_array($commande->getMagasin()->getId(), $user->getMagasinsId()) or
  195.             !$commande->isCommandeModifiable()
  196.         ) {
  197.             throw new AccessDeniedException('Accès interdit');
  198.         }
  199.         /** @var CommandeArticle $commandeArticle */
  200.         foreach ($commande->getCommandeArticles() as $commandeArticle) {
  201.             $this->commandeArticleManager->removeAndFlush($commandeArticle);
  202.         }
  203.         $this->commandeManager->calculMontantCommande($commande);
  204.         return $this->redirectToRoute('app_homepage');
  205.     }
  206.     /**
  207.      * @Route("/{commande}/imprimer", name="imprimer", options={"expose"=true}, methods={"GET"})
  208.      */
  209.     public function imprimer($commandePdf $pdfArticleManager $articleManagerFraisCommandeArticleManager $fraisCommandeArticleManager)
  210.     {
  211.         ini_set('max_execution_time'0); // for infinite time of execution
  212.         ini_set('memory_limit', -1);
  213.         set_time_limit(0);
  214.         /** @var User $user */
  215.         $user $this->security->getUser();
  216.         /** @var Commande $commande */
  217.         $commande $this->commandeManager->findOneBy(['id' => $commande]);
  218.         $repartition = [];
  219.         if ($commande->getUniver()->getFrais()) {
  220.             $fraisCommandeArticle $fraisCommandeArticleManager->findForCatalogue($commande->getUniver()->getId());
  221.             foreach ($commande->getCommandeArticles() as $commandeArticle) {
  222.                 $repartition[$commandeArticle->getArticle()->getId()] = [
  223.                     'commande' => $commandeArticle->getQuantiteCommande(),
  224.                     'stock' => $commandeArticle->getQuantite(),
  225.                     'arrivage' => $commandeArticle->getQuantiteTC(),
  226.                     'reste' => ($commandeArticle->getQuantite() + $commandeArticle->getQuantiteTC()) - $commandeArticle->getQuantiteCommande(),
  227.                 ];
  228.             }
  229.         }
  230.         // verification que la commande est bien associé à un magasin que gere l'utilisateur
  231.         if (!$this->security->hasRoles(['ROLE_SUPER_ADMIN'])) {
  232.             if (!$commande or
  233.                 !in_array($commande->getMagasin()->getId(), $user->getMagasinsId())
  234.             ) {
  235.                 throw new AccessDeniedException('Accès interdit');
  236.             }
  237.         }
  238.         $html $this->renderView(
  239.             'app/commande_print.pdf.twig',
  240.             [
  241.                 'commande' => $commande,
  242.                 'repartition' => $repartition,
  243.             ]
  244.         );
  245. //        return new Response($html);
  246.         return new PdfResponse(
  247.             $pdf->getOutputFromHtml($html),
  248.             $commande->getNumero() . '.pdf'
  249.         );
  250.     }
  251.     /**
  252.      * @Route("/documentation", name="documentation", options={"expose"=true}, methods={"GET"})
  253.      */
  254.     public function documentation(ConfigManager $configManager)
  255.     {
  256.         return $this->render('app/documentation.html.twig', [
  257.             'config' => $configManager->find(1),
  258.         ]);
  259.     }
  260.     /**
  261.      * @Route("/mobile", name="mobile", options={"expose"=true}, methods={"GET"})
  262.      */
  263.     public function mobile(ConfigManager $configManager)
  264.     {
  265.         return $this->render('app/mobile.html.twig', [
  266.             'config' => $configManager->find(1),
  267.         ]);
  268.     }
  269.     /**
  270.      * @Route("/scan", name="scan", options={"expose"=true}, methods={"GET"})
  271.      */
  272.     public function scan()
  273.     {
  274.         return $this->render('app/scan.html.twig', [
  275.         ]);
  276.     }
  277.     /**
  278.      * @Route("/calendrier", name="calendrier", options={"expose"=true}, methods={"GET"})
  279.      */
  280.     public function calendrier(UniversManager $universManager)
  281.     {
  282.         return $this->render('app/calendrier.html.twig', [
  283.             'univers' => json_encode($universManager->getUniversforStatsFullCalendar())
  284.         ]);
  285.     }
  286. }