src/Controller/Rangements/RangementController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Rangements;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Rangements\Emplacement;
  5. use App\Form\Rangements\EmplacementType;
  6. use App\Form\Rangements\SupprimerEmplacementType;
  7. use App\Library\Datatable\Util\Datatable;
  8. use App\Security\Voter\EntityVoter;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Validator\Validator\ValidatorInterface;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. class RangementController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/rangement", name="dtc_rangement_liste")
  21.      */
  22.     public function listerAction(Request $request)
  23.     {
  24.         return $this->render('Rangements/Rangement/lister.html.twig', []);
  25.     }
  26.     /**
  27.      * @Route("/rangement/modifier/{objet}/{id}/", name="dtc_rangement_modifier")
  28.      */
  29.     public function modifierAction(Request             $requestEmplacement $objetArticle $article$type ""EntityManagerInterface $em
  30.                                    TranslatorInterface $translatorValidatorInterface $validator
  31.     ) {
  32.         $emplacement $objet;
  33.         $titre_modal $translator->trans("Modifier l'emplacement");
  34.         $get         $request->query->all();
  35.         $user        $this->getUser();
  36.         $emplacement->setUtilisateur($user);
  37.         $form   $this->createForm(EmplacementType::class, $emplacement);
  38.         $errors "";
  39.         $form->handleRequest($request);
  40.         if ($form->isSubmitted()) {
  41.             $droit $this->isGranted(EntityVoter::UPDATEArticle::class);
  42.             /*
  43.             if(!$droit) {
  44.                 $rendu = $this->renderView('Articles/Emplacement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  45.                 return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  46.             }
  47.             */
  48.             if ($form->isValid()) {
  49.                 $url $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
  50.                 $em->persist($emplacement);
  51.                 $em->flush();
  52.                 //$url = "";
  53.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  54.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]);
  55.                 } else {
  56.                     $this->addFlash('notice'$translator->trans('Emplacement modifié avec succès !'));
  57.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
  58.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  59.                 }
  60.             } else {
  61.                 $errors $validator->validate($emplacement);
  62.                 $rendu  $this->renderView(
  63.                     'Rangements/Rangement/ajouter.html.twig',
  64.                     ['form' => $form->createView(), 'errors' => $errors'article' => $article'type' => $type'objet' => $objet]
  65.                 );
  66.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  67.             }
  68.         }
  69.         $rendu $this->renderView(
  70.             'Rangements/Rangement/ajouter.html.twig',
  71.             ['form' => $form->createView(), 'errors' => $errors'article' => $article'type' => $type'objet' => $objet]
  72.         );
  73.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  74.     }
  75.     /**
  76.      * @Route("/rangement/nouveau/{id}", name="dtc_rangement_ajouter")
  77.      */
  78.     public function ajouterAction(Request $requestArticle $articleEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  79.     {
  80.         $titre_modal $translator->trans("Nouvel Emplacement");
  81.         $emplacement = new Emplacement();
  82.         $user        $this->getUser();
  83.         $emplacement->setUtilisateur($user);
  84.         $get    $request->query->all();
  85.         $form   $this->createForm(EmplacementType::class, $emplacement);
  86.         $errors "";
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted()) {
  89.             if ($form->isValid()) {
  90.                 if (count($article->getEmplacements()) == 0) {
  91.                     $emplacement->setStock($article->getStock());
  92.                     //echo $emplacement;
  93.                     //exit;
  94.                     //$emplacement->setStockReserve($article->getStockReserve());
  95.                 }
  96.                 $emplacement->setArticle($article);
  97.                 $em->persist($emplacement);
  98.                 //$em->persist($article);
  99.                 $em->flush();
  100.                 $url "";
  101.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  102.                     return new JsonResponse(
  103.                         ['emplacements' => $article->getEmplacements(), 'rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  104.                     );
  105.                 } else {
  106.                     $this->addFlash('notice'$translator->trans('Emplacement ajouté avec succès !'));
  107.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
  108.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  109.                 }
  110.             } else {
  111.                 $errors $validator->validate($emplacement);
  112.                 $rendu  $this->renderView('Rangements/Rangement/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'article' => $article]);
  113.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  114.             }
  115.         }
  116.         $rendu $this->renderView('Rangements/Rangement/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'article' => $article]);
  117.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  118.         //return $this->render('Rangements/Rangement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  119.     }
  120.     /**
  121.      * @Route("/rangement------", name="dtc_rangement_liste__")
  122.      */
  123.     public function listerArticleAction(Request $requestArticle $articleDatatable $datatableTranslatorInterface $translator)
  124.     {
  125.         $tableau_class_cellule   = [];
  126.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => false];
  127.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [1], "visible" => true"orderable" => false];
  128.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export text-center colonne_id""targets" => [2], "visible" => true"orderable" => false];
  129.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export text-center colonne_id""targets" => [3], "visible" => true"orderable" => false];
  130.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export text-center colonne_id""targets" => [4], "visible" => true"orderable" => false];
  131.         $tableau_class_cellule[] = ["searchable" => false"className" => " colonne_id""targets" => [5], "visible" => true"orderable" => false];
  132.         //$tableau_class_cellule[]=array("searchable"=> true,"className"=>"w100","targets"=>array(2),"visible"=>true,"orderable"=>true);
  133.         $this->datatableArticle$datatable,  $translator,$article);
  134.         //return $this->render('Rangements/MouvementStock/listerArticle2.html.twig', array('article' => $article,'tableauClassColonne'=>$tableau_class_cellule));
  135.         return $this->render('Rangements/Rangement/lister-article.html.twig', ['article' => $article'tableauClassColonne' => $tableau_class_cellule]);
  136.     }
  137.     /**
  138.      * set datatable configs
  139.      *
  140.      * @return \App\Library\Datatable\Util\Datatable
  141.      */
  142.     private function datatableArticle(Datatable $datatableTranslatorInterface $translatorArticle $article)
  143.     {
  144.         $datatable
  145.             ->setDatatableId('dta-emplacements')
  146.             ->setEntity(Emplacement::class, "x")
  147.             ->setFields(
  148.                 [
  149.                     $translator->trans("ID")          => 'x.id',
  150.                     /*
  151.                     $translator->trans("Niv 1") =>  'n1.libelle',
  152.                     $translator->trans("Niv 2") =>  'n2.libelle',
  153.                     $translator->trans("Niv 3") =>  'n3.libelle',
  154.                     $translator->trans("Niv 4") =>  'n4.libelle',
  155.                     */
  156.                     $translator->trans("Emplacement") => 'x.libelle',
  157.                     $translator->trans("Stock")       => 'x.stock',
  158.                     $translator->trans("Stock R")     => 'x.stockReserve',
  159.                     $translator->trans("Ordre")       => 'x.ordre',
  160.                     $translator->trans("Actions")     => 'x.id',
  161.                     "_identifier_"                    => 'x.id',
  162.                 ]
  163.             )
  164.             /*
  165.         ->addJoin('x.niveauUn', 'n1', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  166.         ->addJoin('x.niveauDeux', 'n2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  167.         ->addJoin('x.niveauTrois', 'n3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  168.         ->addJoin('x.niveauQuatre', 'n4', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  169. */
  170.             ->setRenderers(
  171.                 [
  172.                     => [
  173.                         'view'   => 'FO/DataTable/actions_modal.html.twig',
  174.                         'params' => [
  175.                             'edit_route'      => 'dtc_rangement_modifier',
  176.                             'supprimer_route' => 'dtc_rangement_supprime',
  177.                             'id'              => $article->getId(),
  178.                             'type'            => 'article',
  179.                             'entite'          => 'article',
  180.                             'table'           => 'dta-emplacements',
  181.                             'objet'           => Emplacement::class,
  182.                         ],
  183.                     ],
  184.                 ]
  185.             )
  186.             ->setOrder("x.id""desc")
  187.             ->setWhere(
  188.                 'x.article = :objet AND x.visibilite = 1 ',
  189.                 ['objet' => $article]
  190.             )
  191.             ->setSearch(false)
  192.             ->setGlobalSearch(0);
  193.         return $datatable;
  194.     }
  195.     /**
  196.      * Grid action
  197.      * @return Response
  198.      */
  199.     /**
  200.      * @Route("/rangement/grid/{article}", name="dtc_rangement_article_grid")
  201.      */
  202.     public function gridArticleAction(Request $requestArticle $articleDatatable $datatableTranslatorInterface $translator)
  203.     {
  204.         return $this->datatableArticle$datatable,  $translator,$article)->execute();
  205.     }
  206.     /**
  207.      * @Route("/rangement/statut/{id}", name="dtc_rangement_statut")
  208.      */
  209.     public function changeStatutAction(Request $requestEmplacement $emplacementEntityManagerInterface $em)
  210.     {
  211.         if ($emplacement->getDefaut() == 1) {
  212.             $emplacement->setDefaut(0);
  213.         } else {
  214.             //Changer le statut de toutes les conditions d'achat de l'article
  215.             $article      $emplacement->getArticle();
  216.             $emplacements $article->getEmplacements();
  217.             foreach ($emplacements as $empl) {
  218.                 $empl->setDefaut(0);
  219.                 $em->persist($empl);
  220.             }
  221.             //Changer le statut de cette condition d'achat
  222.             $emplacement->setDefaut(1);
  223.         }
  224.         $em->persist($emplacement);
  225.         $em->flush();
  226.         $headers = [
  227.             'Content-Type'                 => 'application/json',
  228.             'Access-Control-Allow-Origin'  => '*',
  229.             'Access-Control-Allow-Methods' => 'POST',
  230.         ];
  231.         return new JsonResponse(['data' => '1''multiple' => '1'], 200$headers);
  232.     }
  233.     /**
  234.      * @Route("/rangement/visible/{id}", name="dtc_visibilite_emplacement")
  235.      */
  236.     public function visibiliteEmplacementAction(Request $requestEmplacement $emplacementEntityManagerInterface $em)
  237.     {
  238.         $Article $emplacement->getArticle();
  239.         if ($emplacement->getStock() == and $emplacement->getStockReserve() == 0) {
  240.             $emplacement->setVisibilite(false);
  241.             $em->persist($emplacement);
  242.             $em->flush();
  243.         }
  244.         return $this->redirectToRoute('dtc_article_modifier', ['id' => $Article->getId()]);
  245.     }
  246.     /**
  247.      * @Route("/rangement/supprimer/{objet}/{id}/{type}", name="dtc_rangement_supprime")
  248.      */
  249.     public function supprimerAction(Request $requestEmplacement $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  250.     {
  251.         $emplacement $objet;
  252.         $titre_modal $translator->trans("Demande de confirmation");
  253.         $user        $this->getUser();
  254.         $get         $request->query->all();
  255.         if ($emplacement->getStock() != or $emplacement->getStockReserve() != 0) {
  256.             $erreur "Cet emplacement ne peut pas être supprimée car il contient du stock.";
  257.             $rendu $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ['errors' => $erreur]);
  258.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  259.         }
  260.         $form   $this->createFormSupprimerEmplacementType::class, $emplacement);
  261.         $errors "";
  262.         $form->handleRequest($request);
  263.         if ($form->isSubmitted()) {
  264.             if ($form->isValid()) {
  265.                 //$em->remove($emplacement);
  266.                 //$em->flush();
  267.                 $emplacement->setVisibilite(false);
  268.                 $em->persist($emplacement);
  269.                 $em->flush();
  270.                 if ($type == 'article') {
  271.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $id'tab' => 'stocks']);
  272.                 }
  273.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  274.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]);
  275.                 } else {
  276.                     $this->addFlash('notice'$translator->trans('Emplacement supprimé avec succès !'));
  277.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  278.                 }
  279.             } else {
  280.                 $errors $validator->validate($emplacement);
  281.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  282.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  283.             }
  284.         }
  285.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  286.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  287.     }
  288. }