src/Controller/Articles/ArticleAssocieController.php line 244

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ArticleAssocie;
  5. use App\Form\Articles\ArticleAssocieQteType;
  6. use App\Form\Articles\ArticleAssocieType;
  7. use App\Form\Articles\SupprimerArticleAssocieType;
  8. use App\Library\Datatable\Util\Datatable;
  9. use App\Security\Voter\EntityVoter;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Validator\Validator\ValidatorInterface;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class ArticleAssocieController extends AbstractController
  19. {
  20.     private function verifierArticleComposeNeSeContientPasLuiMeme(ArticleAssocie $articleAssocie$article$retour '')
  21.     {
  22.         if ($articleAssocie->getEnfant()->getId() == $article) {
  23.             //return true;
  24.             $retour 'true';
  25.         } else {
  26.             //$retour .= 'art'.$articleAssocie->getEnfant()->getId().'/';
  27.             $articlesAssocies $articleAssocie->getEnfant()->getArticlesAssociesParent();
  28.             foreach ($articlesAssocies as $compo) {
  29.                 $retour $this->verifierArticleComposeNeSeContientPasLuiMeme($compo$article$retour);
  30.             }
  31.         }
  32.         //return false;
  33.         return $retour;
  34.     }
  35.     /**
  36.      * @Route("/article-associe/nouveau/article/{id}", name="dtc_article_associe_ajouter")
  37.      */
  38.     public function ajouterAction(Request $request$idEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  39.     {
  40.         $get            $request->query->all();
  41.         $titre_modal    $translator->trans("Nouvel article associé");
  42.         $articleAssocie = new ArticleAssocie;
  43.         $articleAssocie->setQuantite(1);
  44.         $user $this->getUser();
  45.         $articleAssocie->setUtilisateur($user);
  46.         $form   $this->createForm(ArticleAssocieType::class, $articleAssocie);
  47.         $errors "";
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted()) {
  50.             if ($form->isValid()) {
  51.                 //dump($articleAssocie);
  52.                 $error $this->verifierArticleComposeNeSeContientPasLuiMeme($articleAssocie$id);
  53.                 if ($error == 'true') {
  54.                     $this->addFlash(
  55.                         'warning',
  56.                         'Impossible d\'ajouter cet article, il est déjà associé.'
  57.                     );
  58.                 } else {
  59.                     $repo_objet $em->getRepository(Article::class);
  60.                     $objet      $repo_objet->find($id);
  61.                     if (is_object($objet)) {
  62.                         $repo_articleAssocie $em->getRepository(ArticleAssocie::class);
  63.                         $nbComposants        count($repo_articleAssocie->findByParent($objet));
  64.                         $nbComposants++;
  65.                         $articleAssocie->setOrdre($nbComposants);
  66.                         $articleAssocie->setParent($objet);
  67.                         $em->persist($objet);
  68.                     }
  69.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $objet->getId(), 'tab' => 'associes']);//,'test'=>$error
  70.                     $em $em;
  71.                     $em->persist($articleAssocie);
  72.                     $em->flush();
  73.                     /*
  74.                                                 $this->addFlash(
  75.                                                     'notice',
  76.                                                     $translator->trans('Composant ajouté avec succès !')
  77.                                                 );
  78.                      *
  79.                      */
  80.                     //$rendu = $this->renderView('Articles/ArticleAssocie/lister-by-article.html.twig', array('articlesAssocies'=>array($articleAssocie),'quantite'=>1,'article'=>$objet));
  81.                     $rendu '';
  82.                     if (!empty($get["table"])) {
  83.                         return new JsonResponse(
  84.                             ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]],
  85.                             200,
  86.                             ['Content-Type' => 'application/json']
  87.                         );
  88.                     } else {
  89.                         return new JsonResponse(
  90.                             ['rendu' => $rendu'valide' => '1''url' => $url'type' => 'ajoutArticleAssocieSurArticle'],
  91.                             200,
  92.                             ['Content-Type' => 'application/json']
  93.                         );
  94.                     }
  95.                 }
  96.             } else {
  97.                 $errors $validator->validate($articleAssocie);
  98.                 $rendu  $this->renderView('Articles/ArticleAssocie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id]);
  99.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  100.             }
  101.         }
  102.         $rendu $this->renderView('Articles/ArticleAssocie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id]);
  103.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  104.     }
  105.     /**
  106.      * @Route("/article-associe/modifier/{id}", name="dtc_article_associe_modifier")
  107.      */
  108.     public function modifierAction(Request $requestArticleAssocie $articleAssocieEntityManagerInterface $emValidatorInterface $validatorTranslatorInterface $translator)
  109.     {
  110.         $titre_modal $translator->trans("Modifier l'article associé");
  111.         $id          $request->query->get('article');
  112.         $get         $request->query->all();
  113.         $user $this->getUser();
  114.         $articleAssocie->setUtilisateur($user);
  115.         $form   $this->createForm(ArticleAssocieQteType::class, $articleAssocie);
  116.         $errors "";
  117.         $form->handleRequest($request);
  118.         if ($form->isSubmitted() && $form->isValid()) {
  119.             $droit $this->isGranted(EntityVoter::UPDATEArticleAssocie::class);
  120.             if (!$droit) {
  121.                 $rendu $this->renderView(
  122.                     'Articles/ArticleAssocie/modifier.html.twig',
  123.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]
  124.                 );
  125.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  126.             }
  127.             if ($form->isValid()) {
  128.                 $url $this->generateUrl('dtc_article_modifier', ['id' => $articleAssocie->getParent()->getId(), 'tab' => 'associes']);
  129.                 $em->persist($articleAssocie);
  130.                 $em->flush();
  131.                 if (!empty($get["table"])) {
  132.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]],
  133.                                             200,
  134.                                             ['Content-Type' => 'application/json']
  135.                     );
  136.                 } else {
  137.                     $this->addFlash(
  138.                         'notice',
  139.                         $translator->trans('Article associé modifié avec succès !')
  140.                     );
  141.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  142.                 }
  143.             } else {
  144.                 $errors $validator->validate($articleAssocie);
  145.                 $rendu  $this->renderView('Articles/ArticleAssocie/modifier.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id]);
  146.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  147.             }
  148.         }
  149.         $rendu $this->renderView('Articles/ArticleAssocie/modifier.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id]);
  150.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  151.     }
  152.     /**
  153.      * @Route("/article-associe/supprimer/{id}", name="dtc_article_associe_supprimer")
  154.      */
  155.     public function supprimerAction(Request $requestArticleAssocie $objetEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  156.     {
  157.         $id             $request->query->get('article');
  158.         $get            $request->query->all();
  159.         $titre_modal    $translator->trans("Demande de confirmation");
  160.         $articleAssocie $objet;
  161.         $form   $this->createForm(SupprimerArticleAssocieType::class, $articleAssocie);
  162.         $errors "";
  163.         $form->handleRequest($request);
  164.         if ($form->isSubmitted()) {
  165.             if ($form->isValid()) {
  166.                 $em->remove($objet);
  167.                 $em->flush();
  168.                 /*
  169.                            $this->addFlash(
  170.                                'notice',
  171.                                $translator->trans('Composant supprimé avec succès !')
  172.                            );*/
  173.                 $url $this->generateUrl('dtc_article_modifier', ['id' => $objet->getParent()->getId(), 'tab' => 'associes']);
  174.                 if (!empty($get["table"])) {
  175.                     return new Response(
  176.                         json_encode(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]),
  177.                         200,
  178.                         ['Content-Type' => 'application/json']
  179.                     );
  180.                 } else {
  181.                     return new Response(
  182.                         json_encode(['rendu' => '''valide' => '1''url' => $url'id' => $articleAssocie->getEnfant()->getId(), 'type' => 'supprimerComposantSurArticle']),
  183.                         200,
  184.                         ['Content-Type' => 'application/json']
  185.                     );
  186.                 }
  187.             } else {
  188.                 $errors $validator->validate($articleAssocie);
  189.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'objet' => $objet]);
  190.                 return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  191.             }
  192.         }
  193.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'objet' => $objet]);
  194.         return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  195.     }
  196.     /**
  197.      * @Route("/article-associe/liste", name="dtc_article_associe_liste")
  198.      */
  199.     public function listerAction($id$type$page 1TranslatorInterface $translatorDatatable $datatable)
  200.     {
  201.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCArticlesBundle:ArticleAutomatique","id"));
  202.         $tableau_class_cellule   = [];
  203.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => false"orderable" => false];
  204.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => false"orderable" => false];
  205.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [2], "visible" => true"orderable" => false];
  206.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [3], "visible" => true"orderable" => true];
  207.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [4], "visible" => true"orderable" => true];
  208.         $parametres              = [
  209.             'id'   => $id,
  210.             'type' => $type,
  211.         ];
  212.         $this->datatable([], $translator$datatable);
  213.         return $this->render('Articles/ArticleAssocie/lister.html.twig', ['name' => 'articleAssocie''tableauClassColonne' => $tableau_class_cellule'parametres' => $parametres]);
  214.     }
  215.     /**
  216.      * set datatable configs
  217.      *
  218.      * @return \App\Library\Datatable\Util\Datatable
  219.      */
  220.     private function datatable($parametres = [], TranslatorInterface $translatorDatatable $datatable)
  221.     {
  222.         //if(count($parametres)) dump($parametres);
  223.         $where      'x.dateSuppression IS NULL';
  224.         $parameters = [];
  225.         if (!empty($parametres['id'])) {
  226.             $parameters['id'] = $parametres['id'];
  227.             $where            .= ' and x.parent = :id';
  228.         }
  229.         $datatable->setDatatableId('dta-article-associe')
  230.                   ->setEntity(ArticleAssocie::class, "x")
  231.                   ->setFields(
  232.                       [
  233.                           $translator->trans("ID")              => 'x.id',
  234.                           $translator->trans("Réf article")     => 'a.reference',
  235.                           $translator->trans("Libellé article") => 'a.libelle',
  236.                           $translator->trans("Quantité")        => 'x.quantite',
  237.                           $translator->trans("Actions")         => 'x.id',
  238.                           "_identifier_"                        => 'x.id',
  239.                       ]
  240.                   )
  241.                   ->addJoin('x.enfant''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  242.             //->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  243.                   ->setRenderers(
  244.                 [
  245.                     => [
  246.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  247.                         'params' => [
  248.                             'edit_route'   => 'dtc_article_modifier',
  249.                             'typeDocument' => 'enfant',
  250.                         ],
  251.                     ],
  252.                     => [
  253.                         'view'   => 'FO/DataTable/actions_modal.html.twig',
  254.                         'params' => [
  255.                             'edit_route'      => 'dtc_article_associe_modifier',
  256.                             'supprimer_route' => 'dtc_article_associe_supprimer',
  257.                             'type'            => "",
  258.                             'entite'          => 'articleAssocie',
  259.                             'table'           => 'dta-article-associe',
  260.                             'tableau'         => 'dta-article-associe',
  261.                             'objet'           => ArticleAssocie::class
  262.                             ,
  263.                             'width_modal'     => 800,
  264.                         ],
  265.                     ],
  266.                 ]
  267.             )
  268.                   ->setMultiple(
  269.                       [
  270.                           'delete' => [
  271.                               'title' => 'Non disponible',
  272.                               'route' => 'dtc_article_associe_liste',
  273.                           ],
  274.                       ]
  275.                   )
  276.                   ->setWhere($where$parameters)
  277.                   ->setOrder("x.id""asc")
  278.                   ->setSearch(true)
  279.                   ->setSearchFields([1]);
  280.         //$datatable->setSearchFields(array(0,2));
  281.         return $datatable;
  282.     }
  283.     /**
  284.      * @Route("/article-associe/grid", name="dtc_article_associe_liste_grid")
  285.      */
  286.     public function gridAction(Request $requestTranslatorInterface $translatorDatatable $datatable)
  287.     {
  288.         $parametres $request->query->all();
  289.         return $this->datatable($parametres$translator$datatable)->execute();
  290.     }
  291.     /**
  292.      * @Route("/article-associe/charger-tableau", name="dtc_article_associe_charger_tableau")
  293.      */
  294.     public function chargerTableauAction(Request $request)
  295.     {               //,$id="0",$type="a"
  296.         $parametres $request->query->all();
  297.         $rendu      $this->renderView('Articles/ArticleAssocie/charger_tableau.html.twig', [
  298.             'parametres' => $parametres,
  299.         ]);
  300.         return new JsonResponse(['rendu' => $rendu]);
  301.     }
  302.     /*
  303.     public function listerByArticleAction(Request $request, Article $article){
  304.         $ajax = $request->query->get('ajax');
  305.         $articlesAssocies = $article->getArticlesAssocies();
  306.         $quantite = $request->query->get('quantite');
  307.         if($quantite = "") $quantite=1;
  308.         $retour = array();
  309.         $articlesAssociesAvecArborescence = $this->getArticlesAssocies($article, $retour, $quantite);
  310.         //\Doctrine\Common\Util\Debug::dump($articlesAssocies);
  311.         //\Doctrine\Common\Util\Debug::dump($articlesAssociesAvecArborescence);
  312.         if($ajax == true){
  313.             $rendu = $this->renderView('Articles/ArticleAssocie/lister-by-article-json.html.twig', array(
  314.                 'articlesAssocies' => $articlesAssocies,
  315.                 'article' => $article,
  316.                 'quantite' => $request->query->get('quantite'),
  317.             ));
  318.             $response = new JsonResponse();
  319.             $response->setData(array(
  320.                     'retour' => $rendu
  321.                 ));
  322.             return $response;
  323.         } else {
  324.             return $this->render('Articles/ArticleAssocie/lister-by-article.html.twig', array(
  325.                 'articlesAssocies' => $articlesAssocies,
  326.                 'article' => $article,
  327.             ));
  328.         }
  329.     }
  330.     
  331.     private function getArticlesAssocies(Article $article, $retour, $quantite=1){
  332.         $articlesComposants = $article->getArticlesAssocies();
  333.         $quantiteComposant = $article->getStockReserve();
  334.         foreach($articlesComposants as $articleAssocie)
  335.         {
  336.             $quantiteComposant = $articleAssocie->getQuantite() * $quantite;
  337.             $ssArticle = $articleAssocie->getEnfant();
  338.             if(count($ssArticle->getArticlesAssocies()) > 0)
  339.                 $retour = $this->getArticlesAssocies($ssArticle, $retour, $quantiteComposant);
  340.             else
  341.             {
  342.                 $articleAssocie->setQuantite($quantiteComposant);
  343.                 $retour[] = $articleAssocie;
  344.             }
  345.         }
  346.             
  347.         return $retour;
  348.     }
  349.     
  350.     public function listerAction(Request $request, Article $article, $quantite=1){
  351.         $articlesAssocies = $article->getArticlesAssocies();
  352.         //$quantite = $request->query->get('quantite');
  353.         $ajax = $request->query->get('ajax');
  354.         $fabricationMultiple = $request->query->get('fabricationMultiple');
  355.         
  356.         $donnees = array(
  357.             'articlesAssocies' => $articlesAssocies,
  358.             'article' => $article,
  359.             'class' => $request->query->get('class'),
  360.             'quantite' => $quantite,
  361.             'ajax' => $ajax,
  362.             'afficherArticle' => $request->query->get('afficherArticle'),
  363.             'dataId' => $request->query->get('dataId'),
  364.             'dataParent' => $request->query->get('dataParent'),
  365.             'dataMultiple' => $request->query->get('dataMultiple'),
  366.             'dataNiveau' => $request->query->get('dataNiveau'),
  367.                  
  368.         );
  369.         
  370.             $donnees['fabId'] = $request->query->get('fabrication');
  371.         
  372.             
  373.         if ($ajax === false || $ajax == 'false' || $ajax == ''){
  374.             $donnees['quantite'] = $quantite;
  375.             return $this->render('Articles/ArticleAssocie/lister-avec-arbo-2.html.twig', $donnees);
  376.         } else {
  377.             $donnees['quantite'] = $request->query->get('quantite');
  378.             $donnees['quantiteFabrication'] = $request->query->get('quantiteFabrication');
  379.             $rendu = $this->renderView('Articles/ArticleAssocie/lister-avec-arbo-2.html.twig', $donnees);
  380.                 
  381.             $response = new JsonResponse();
  382.             $response->setData(array(
  383.                     'retour' => $rendu
  384.                 ));
  385.             return $response;
  386.         }
  387.     }
  388.     
  389.     public function listerSousComposantAction(Request $request, Article $article){
  390.         $articlesAssocies = $article->getArticlesAssocies();
  391.         $rendu = $this->renderView('Articles/ArticleAssocie/lister-sous-articleAssocie.html.twig', array(
  392.             'articlesAssocies' => $articlesAssocies,
  393.             'article' => $article,
  394.             'niveau' => $request->query->get('niveau'),
  395.             'class' => $request->query->get('class'),
  396.             'quantite' => $request->query->get('quantite'),
  397.         ));
  398.         $response = new JsonResponse();
  399.         $response->setData(array(
  400.                 'trs' => $rendu
  401.             ));
  402.         return $response;
  403.     }
  404.     
  405.     public function listerSousComposantCarnetAction(Request $request, Article $article){
  406.         $articlesAssocies = $article->getArticlesAssocies();
  407.         $rendu = $this->renderView('Articles/ArticleAssocie/lister-sous-articleAssocie-carnet.html.twig', array(
  408.             'articlesAssocies' => $articlesAssocies,
  409.             'article' => $article,
  410.             'niveau' => $request->query->get('niveau'),
  411.             'class' => $request->query->get('class'),
  412.             'quantite' => $request->query->get('quantite'),
  413.         ));
  414.         $response = new JsonResponse();
  415.         $response->setData(array(
  416.                 'trs' => $rendu
  417.             ));
  418.         return $response;
  419.     }
  420.     
  421.     public function fabricationMultiplelisterAction(Request $request, Fabrication $fabrication){
  422.         $quantite = $fabrication->getQuantite();
  423.         $article = $fabrication->getArticle();
  424.         $articlesAssocies = $article->getArticlesAssocies();
  425.         //$quantite = $request->query->get('quantite');
  426.         $ajax = $request->query->get('ajax');
  427.         if ($ajax === false || $ajax == 'false' || $ajax == ''){
  428.             //\Doctrine\Common\Util\Debug::dump($article->getId());
  429.             return $this->render('Articles/ArticleAssocie/lister-avec-arbo-2.html.twig', array(
  430.             //return $this->render('GestionComerciale/ArticleCommande/lister-avec-arbo-2.html.twig', array(
  431.             'articlesAssocies' => $articlesAssocies,
  432.             'article' => $article,
  433.             'class' => $request->query->get('class'),
  434.             'quantite' => $quantite,
  435.             'ajax' => $ajax,
  436.             'afficherArticle' => $request->query->get('afficherArticle'),
  437.             'dataId' => $request->query->get('dataId'),
  438.             'dataParent' => $request->query->get('dataParent'),
  439.             'dataMultiple' => $request->query->get('dataMultiple'),
  440.             'dataNiveau' => $request->query->get('dataNiveau'),
  441.             'fabrication' => $fabrication
  442.         ));
  443.         } else {
  444.             $rendu = $this->renderView('Articles/ArticleAssocie/lister-avec-arbo-2.html.twig', array(
  445.             //return $this->render('GestionComerciale/ArticleCommande/lister-avec-arbo-2.html.twig', array(
  446.                 'articlesAssocies' => $articlesAssocies,
  447.                 'article' => $article,
  448.                 'class' => $request->query->get('class'),
  449.                 'quantite' => $request->query->get('quantite'),
  450.                 'ajax' => $ajax,
  451.                 'afficherArticle' => $request->query->get('afficherArticle'),
  452.                 'dataId' => $request->query->get('dataId'),
  453.                 'dataParent' => $request->query->get('dataParent'),
  454.                 'dataMultiple' => $request->query->get('dataMultiple'),
  455.                 'dataNiveau' => $request->query->get('dataNiveau'),
  456.                 'quantiteFabrication' => $request->query->get('quantiteFabrication'),
  457.                     'fabrication' => $fabrication
  458.             ));
  459.             $response = new JsonResponse();
  460.             $response->setData(array(
  461.                 'retour' => $rendu
  462.             ));
  463.         return $response;
  464.         }
  465.     }
  466.     public function modifierOrdreAction(ArticleAssocie $articleAssocie, $ordre){
  467.         $articleAssocie->setOrdre($ordre);
  468.         $em = $em;
  469.     $em->persist($articleAssocie);
  470.     $em->flush();
  471.         $response = new JsonResponse();
  472.         $response->setData(array(
  473.                 'retour' => 1
  474.             ));
  475.         return $response;
  476.         
  477.     }
  478.     */
  479. }