src/Controller/GestionComerciale/FabricationController.php line 1544

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ArticleAfabriquer;
  5. use App\Entity\Articles\ArticleComposant;
  6. use App\Entity\Articles\Categorie;
  7. use App\Entity\Articles\Marque;
  8. use App\Entity\Articles\MouvementStock;
  9. use App\Entity\Articles\Type;
  10. use App\Entity\Etiquettes\Etiquette;
  11. use App\Entity\FO\Atelier;
  12. use App\Entity\FO\Societe;
  13. use App\Entity\GestionComerciale\ArticleCommande;
  14. use App\Entity\GestionComerciale\Commande;
  15. use App\Entity\GestionComerciale\Fabrication;
  16. use App\Entity\GestionComerciale\FabricationMultiple;
  17. use App\Entity\GestionComerciale\StatutFabrication;
  18. use App\Entity\Utilisateur\Utilisateur;
  19. use App\Form\Articles\DefabriquerArticleType;
  20. use App\Form\GestionComerciale\FabricationMultipleType;
  21. use App\Form\GestionComerciale\FabricationType;
  22. use App\Form\GestionComerciale\SupprimerFabricationMultipleType;
  23. use App\Form\GestionComerciale\SupprimerFabricationType;
  24. use App\Library\Datatable\Util\Datatable;
  25. use App\Security\Voter\EntityVoter;
  26. use App\Service\Articles\ArticleService;
  27. use App\Service\GestionComerciale\FabricationService;
  28. use App\Service\GestionComerciale\NumerotationDocumentService;
  29. use App\Service\Utilisateur\ColonneTableauService;
  30. use Doctrine\ORM\EntityManagerInterface;
  31. use DTS\eBaySDK\FileTransfer\Types\Data;
  32. use Knp\Snappy\Pdf;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Symfony\Component\HttpFoundation\Request;
  35. use Symfony\Component\HttpFoundation\JsonResponse;
  36. use Symfony\Component\HttpFoundation\Response;
  37. use Symfony\Component\Form\Extension\Validator\ViolationMapper\ViolationMapper;
  38. use Symfony\Component\Process\Process;
  39. use Symfony\Component\Routing\Annotation\Route;
  40. use Symfony\Component\Validator\Validator\ValidatorInterface;
  41. use Symfony\Contracts\Translation\TranslatorInterface;
  42. class FabricationController extends AbstractController
  43. {
  44.     /**
  45.      * @Route("/carnet-fabrication", name="dtc_carnet_fabrication_liste")
  46.      */
  47.     public function carnetFabricationAction(Request   $requestEntityManagerInterface $emColonneTableauService $serviceColonneTableauTranslatorInterface $translator,
  48.                                             Datatable $datatable
  49.     ) {
  50.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  51.         $tableau_class_cellule[] = [
  52.             "className" => "visible_export colonne_id",
  53.             "targets"   => [1],
  54.             // TODO Change this
  55.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
  56.         ];
  57.         $tableau_class_cellule[] = [
  58.             "className" => "visible_export colonne_id",
  59.             "targets"   => [2],
  60.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "logo"),
  61.         ];
  62.         $tableau_class_cellule[] = [
  63.             "className" => "visible_export colonne_id",
  64.             "targets"   => [3],
  65.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
  66.         ];
  67.         $tableau_class_cellule[] = [
  68.             "className" => "visible_export colonne_id",
  69.             "targets"   => [4],
  70.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
  71.         ];
  72.         $tableau_class_cellule[] = [
  73.             "className" => "visible_export colonne_id text-center",
  74.             "targets"   => [5],
  75.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "qteAfabriquer"),
  76.         ];
  77.         $tableau_class_cellule[] = [
  78.             "className" => "visible_export colonne_id",
  79.             "targets"   => [6],
  80.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
  81.         ];
  82.         $tableau_class_cellule[] = [
  83.             "className" => "visible_export colonne_id text-center",
  84.             "targets"   => [7],
  85.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "stock"),
  86.         ];
  87.         $tableau_class_cellule[] = [
  88.             "className" => "visible_export colonne_id text-center",
  89.             "targets"   => [8],
  90.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "miniFab"),
  91.         ];
  92.         $tableau_class_cellule[] = [
  93.             "title"     => "<span data-toggle='tooltip' title='Mini fab'>Mini fab</span>",
  94.             "className" => "visible_export colonne_id text-center",
  95.             "targets"   => [9],
  96.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "miniFab"),
  97.         ];
  98.         $tableau_class_cellule[] = [
  99.             "title"     => "<span data-toggle='tooltip' title='Quantité mini'>Q&nbsp;mini</span>",
  100.             "className" => "visible_export colonne_id text-center",
  101.             "targets"   => [10],
  102.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMiniCommandeFournisseur"),
  103.         ];
  104.         $tableau_class_cellule[] = [
  105.             "title"     => "<span data-toggle='tooltip' title='Quantité maxi'>Q&nbsp;maxi</span>",
  106.             "className" => "visible_export colonne_id text-center",
  107.             "targets"   => [11],
  108.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMaxiCommandeFournisseur"),
  109.         ];
  110.         $tableau_class_cellule[] = [
  111.             "title"     => "<span data-toggle='tooltip' title='Reste à livrer client'>Ràl&nbsp;C</span>",
  112.             "className" => "visible_export colonne_id text-center",
  113.             "targets"   => [12],
  114.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralC"),
  115.         ];
  116.         $tableau_class_cellule[] = [
  117.             "title"     => "<span data-toggle='tooltip' title='Reste à livrer fournisseur'>Ràl&nbsp;F</span>",
  118.             "className" => "visible_export colonne_id text-center",
  119.             "targets"   => [13],
  120.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralF"),
  121.         ];
  122.         $tableau_class_cellule[] = [
  123.             "title"     => "<span data-toggle='tooltip' title='Reste à fabriquer'>RàF</span>",
  124.             "className" => "visible_export colonne_id text-center",
  125.             "targets"   => [14],
  126.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "raf"),
  127.         ];
  128.         $tableau_class_cellule[] = [
  129.             "className" => "visible_export colonne_id",
  130.             "targets"   => [15],
  131.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "marque"),
  132.         ];
  133.         $tableau_class_cellule[] = [
  134.             "className" => "visible_export colonne_id",
  135.             "targets"   => [16],
  136.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "pump"),
  137.         ];
  138.         $tableau_class_cellule[] = [
  139.             "className" => "visible_export colonne_id",
  140.             "targets"   => [17],
  141.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "cump"),
  142.         ];
  143.         $tableau_class_cellule[] = [
  144.             "className" => "visible_export colonne_id",
  145.             "targets"   => [18],
  146.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "descCourte"),
  147.         ];
  148. //$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(13),"visible"=>true);
  149.         $categorie_enfants         = [];
  150.         $categorie_enfants_enfants = [];
  151.         $repo_categorie_article    $em->getRepository(Categorie::class);
  152.         $categorie_article_racine  $repo_categorie_article->findBy(["categorieParent" => 1]);
  153.         $repo_marque_article $em->getRepository(Marque::class);
  154.         $marque_article      $repo_marque_article->findBy([], ['libelle' => 'ASC']);
  155.         $repo_type_article $em->getRepository(Type::class);
  156.         $type_article      $repo_type_article->findBy([], ['libelle' => 'ASC']);
  157.         $param $request->query->all();
  158.         if (array_key_exists('categorie_article'$param) and $param["categorie_article"] > 0) {
  159.             $parent $repo_categorie_article->find($param["categorie_article"]);
  160.             if (is_object($parent)) {
  161.                 $categorie_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  162.             }
  163.         }
  164.         if (array_key_exists('sous_categorie_article'$param) and $param["sous_categorie_article"] > 0) {
  165.             $parent2 $repo_categorie_article->find($param["sous_categorie_article"]);
  166.             if (is_object($parent2)) {
  167.                 $categorie_enfants_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  168.             }
  169.         }
  170.         $this->datatableCarnetFabrication($request$datatable$translator);
  171.         return $this->render('GestionComerciale/Fabrication/carnet-fabrication.html.twig', [
  172.             'tableauClassColonne'         => $tableau_class_cellule,
  173.             'parametres'                  => $param,
  174.             "categorie_article"           => $categorie_article_racine,
  175.             "sous_categorie_article"      => $categorie_enfants,
  176.             "sous_sous_categorie_article" => $categorie_enfants_enfants,
  177.             "marque"                      => $marque_article,
  178.             "type"                        => $type_article,
  179.         ]);
  180.     }
  181.     /**
  182.      * @Route("", name="")
  183.      */
  184.     public function carnetFabrication2Action(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  185.     {
  186.         $repoArticle $em->getRepository(Article::class);
  187.         $articles    $repoArticle->getArticlesInternesAFabriquer();
  188.         $fabrication = new Fabrication();
  189.         $user        $this->getUser();
  190.         $fabrication->setUtilisateur($user);
  191.         $statut $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
  192.         $fabrication->setStatutFabrication($statut);
  193.         $quantite 1;
  194.         $fabrication->setQuantite($quantite);
  195.         $form   $this->createForm(FabricationType::class, $fabrication);
  196.         $errors "";
  197.         $form->handleRequest($request);
  198.         if ($form->isSubmitted()) {
  199.             if ($form->isValid()) {
  200.                 $articles = [
  201.                     'articles' => $request->request->get('articles'),
  202.                     'ids'      => $request->request->get('ids'),
  203.                     'qtes'     => $request->request->get('qtes'),
  204.                     'pumps'    => $request->request->get('pumps'),
  205.                     'cumps'    => $request->request->get('cumps'),
  206.                     'parents'  => $request->request->get('parents'),
  207.                 ];
  208.                 for ($i 0$i count($articles['ids']); $i++) {
  209.                     if ($articles['parents'][$i] == 'niveau1') {
  210.                         $article $repoArticle->find($articles['articles'][$i]);
  211.                         if (is_object($article)) {
  212.                             $articleCommande = new ArticleCommande();
  213.                             $articleCommande->setArticle($article);
  214.                             $articleCommande->setLibelle($article->getLibelle());
  215.                             $articleCommande->setQuantite($articles['qtes'][$i]);
  216.                             $articleCommande->setRal($articles['qtes'][$i]);
  217.                             $articleCommande->setFabrication($fabrication);
  218.                             $em->persist($articleCommande);
  219.                             //$em->flush();
  220.                             $this->enregistrerArticlesCommandeSousNiveau($articles$articles['ids'][$i], $articleCommande$em);
  221.                         }
  222.                     }
  223.                 }
  224.                 $em->persist($fabrication);
  225.                 $em->flush();
  226.                 $this->addFlash(
  227.                     'notice',
  228.                     $translator->trans('Fabrication ajoutée avec succès !')
  229.                 );
  230.                 //\Doctrine\Common\Util\Debug::dump($idsArticle);
  231.                 //return $this->redirectToRoute('dtc_carnet_fabrication_liste');
  232.                 return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  233.             }
  234.         }
  235.         return $this->render('GestionComerciale/Fabrication/carnet-fabrication2.html.twig', [
  236.             'articles' => $articles,
  237.             'form'     => $form->createView(),
  238.             'quantite' => $quantite,
  239.         ]);
  240.     }
  241.     /**
  242.      * @Route("/fabrication/nouvelle/", name="dtc_fabrication_ajouter")
  243.      */
  244.     public function ajouterAction(Request $requestEntityManagerInterface $emFabricationService $fabricationServiceTranslatorInterface $translatorValidatorInterface $validator)
  245.     {
  246.         $repoArticle $em->getRepository(Article::class);
  247.         //$articles = $repoArticle->getArticlesInternesAFabriquer();
  248.         $fabrication = new Fabrication();
  249.         $user        $this->getUser();
  250.         $fabrication->setUtilisateur($user);
  251.         $quantite 1;
  252.         $id       $request->query->get('id');
  253.         if ($id != '') {
  254.             $article $repoArticle->find($id);
  255.             if (is_object($article)) {
  256.                 $fabrication->setArticle($article);
  257.                 $quantite $repoArticle->getQuantiteAFabriquer($article);
  258.             }
  259.         }
  260.         $fabrication->setQuantite($quantite);
  261.         $statut $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
  262.         $fabrication->setStatutFabrication($statut);
  263.         $form   $this->createForm(FabricationType::class, $fabrication);
  264.         $errors "";
  265.         $form->handleRequest($request);
  266.         if ($form->isSubmitted()) {
  267.             if ($form->isValid()) {
  268.                 $articles = [
  269.                     'articles'          => $request->request->get('articles'),
  270.                     'ids'               => $request->request->get('ids'),
  271.                     'qtes'              => $request->request->get('qtes'),
  272.                     'pumps'             => $request->request->get('pumps'),
  273.                     'cumps'             => $request->request->get('cumps'),
  274.                     'parents'           => $request->request->get('parents'),
  275.                     'test'              => $request->query->get('ids'),
  276.                     'modifies'          => $request->request->get('modifies'),
  277.                     'articlesComposant' => $request->request->get('articlesComposant'),
  278.                 ];
  279.                 /*foreach ($articles['ids'] as $key => $id){
  280.                         if ($request->request->get('g_'.$id) != '')
  281.                             $articles['fabrications'][$key] = $request->request->get('g_'.$id);
  282.                     }*/
  283.                 $valeurs = ['articles' => $articles'valider' => $request->request->get('valider')];
  284.                 //\Doctrine\Common\Util\Debug::dump($valeurs);
  285.                 $fabricationService->sauvegarder($fabrication$valeurs);
  286.                 $em->persist($fabrication);
  287.                 $em->flush();
  288.                 $this->addFlash(
  289.                     'notice',
  290.                     $translator->trans('Fabrication ajoutée avec succès !')
  291.                 );
  292.                 //\Doctrine\Common\Util\Debug::dump($idsArticle);
  293.                 //return $this->redirectToRoute('dtc_carnet_fabrication_liste');
  294.                 return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  295.             }
  296.         }
  297.         return $this->render('GestionComerciale/Fabrication/modifier.html.twig', [
  298.             'form'        => $form->createView(),
  299.             'fabrication' => $fabrication,
  300.             'errors'      => $errors,
  301.             'id'          => $id,
  302.         ]);
  303.     }
  304.     private function enregistrerArticlesCommandeSousNiveau($articles$parentId$articleCommandeParentEntityManagerInterface $em)
  305.     {
  306.         $repoArticle $em->getRepository(Article::class);
  307.         for ($i 0$i count($articles['ids']); $i++) {
  308.             //\Doctrine\Common\Util\Debug::dump($articles);
  309.             if ($articles['parents'][$i] == $parentId) {
  310.                 $article $repoArticle->find($articles['articles'][$i]);
  311.                 if (is_object($article)) {
  312.                     $articleCommande = new ArticleCommande();
  313.                     $articleCommande->setArticle($article);
  314.                     $articleCommande->setLibelle($article->getLibelle());
  315.                     $articleCommande->setQuantite($articles['qtes'][$i]);
  316.                     $articleCommande->setRal($articles['qtes'][$i]);
  317.                     $articleCommande->setArticleCommande($articleCommandeParent);
  318.                     //$articleCommande->setFabrication($fabrication);
  319.                     $em->persist($articleCommande);
  320.                     //$em->flush();
  321.                     $this->enregistrerArticlesCommandeSousNiveau($articles$articles['ids'][$i], $articleCommande$em);
  322.                 }
  323.             }
  324.         }
  325.     }
  326.     /**
  327.      * @Route("/fabrication/modifier/{id}", name="dtc_fabrication_modifier")
  328.      */
  329.     public function modifierAction(Request             $requestFabrication $fabricationEntityManagerInterface $emFabricationService $fabricationService,
  330.                                    TranslatorInterface $translatorValidatorInterface $validator
  331.     ) {
  332.         $user $this->getUser();
  333.         $fabrication->setUtilisateur($user);
  334.         $quantiteFabricable $fabricationService->quantiteFabricable($fabrication);
  335.         $composants         $fabricationService->getArticlesCommande($fabrication);
  336.         $form $this->createForm(FabricationType::class, $fabrication);
  337.         $errors "";
  338.         $form->handleRequest($request);
  339.         if ($form->isSubmitted()) {
  340.             $droit $this->isGranted(EntityVoter::UPDATEFabrication::class);
  341.             if ( ! $droit) {
  342.                 return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  343.             }
  344.             if ($form->isValid()) {
  345.                 if ($request->request->get('annuler') != '') {
  346.                     $fabricationService->annulerFabrication($fabrication);
  347.                     $this->addFlash(
  348.                         'notice',
  349.                         $translator->trans('Fabrication annulée avec succès !')
  350.                     );
  351.                     return $this->redirectToRoute('dtc_fabrication_liste', []);
  352.                 }
  353.                 $articles = [
  354.                     'articles'          => $request->request->get('articles'),
  355.                     'ids'               => $request->request->get('ids'),
  356.                     'idsTmp'            => $request->request->get('idsTmp'),
  357.                     'qtes'              => $request->request->get('qtes'),
  358.                     'pumps'             => $request->request->get('pumps'),
  359.                     'cumps'             => $request->request->get('cumps'),
  360.                     'parents'           => $request->request->get('parents'),
  361.                     'test'              => $request->query->get('ids'),
  362.                     'modifies'          => $request->request->get('modifies'),
  363.                     'articlesComposant' => $request->request->get('articlesComposant'),
  364.                 ];
  365.                 /*
  366.                         foreach ($articles['ids'] as $key => $id){
  367.                             if ($request->request->get('g_'.$id) != '')
  368.                                 $articles['fabrications'][$key] = $request->request->get('g_'.$id);
  369.                         }
  370.                          *
  371.                          */
  372.                 // mail('hugo@noogaa.com','test',var_dump($articles));
  373.                 $valider $request->request->get('valider');
  374.                 $valeurs = ['articles' => $articles'valider' => $valider];
  375.                 //\Doctrine\Common\Util\Debug::dump($valeurs);
  376.                 $fabricationService->sauvegarder($fabrication$valeurs);
  377.                 $this->addFlash(
  378.                     'notice',
  379.                     $translator->trans('Fabrication sauvegardée avec succès !')
  380.                 );
  381.                 return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  382.             } else {
  383.                 $errors $validator->validate($fabrication);
  384.             }
  385.         }
  386.         //\Doctrine\Common\Util\Debug::dump($composants);
  387.         return $this->render('GestionComerciale/Fabrication/modifier.html.twig', [
  388.             'form'               => $form->createView(),
  389.             'errors'             => $errors,
  390.             'fabrication'        => $fabrication,
  391.             //'articles'=>$articles
  392.             'composants'         => $composants,
  393.             'quantiteFabricable' => $quantiteFabricable,
  394.             //'articles' => $articles,
  395.         ]);
  396.     }
  397.     private function enregisterSousArticleCommande($articleCommandessFab$articleCommandeEntityManagerInterface $em)
  398.     {
  399.         if (count($articleCommande->getArticlesCommande) > 0) {
  400.             foreach ($articleCommande->getArticlesCommande as $ssarticleCommande) {
  401.                 $ssarticleCommandessFab = new ArticleCommande;
  402.                 $ssarticleCommandessFab->setArticle($ssarticleCommande->getArticle());
  403.                 $quantitessAC $quantiteAC $ssarticleCommande->getQuantite();
  404.                 $ssarticleCommandessFab->setQuantite($quantiteAC);
  405.                 $ssarticleCommandessFab->setArticleCommande($articleCommandessFab);
  406.                 $em->persist($ssarticleCommandessFab);
  407.             }
  408.         }
  409.     }
  410.     private function creerSousFabrication($articleCommande$quantiteEntityManagerInterface $emNumerotationDocumentService $numerotationService)
  411.     {
  412.         $article     $articleCommande->getArticle();
  413.         $fabrication = new Fabrication;
  414.         $fabrication->setArticle($article);
  415.         $fabrication->setQuantite($articleCommande->getQuantite());
  416.         $em->persist($fabrication);
  417.         foreach ($articleCommande->getArticlesCommande() as $ssArticleCommande) {
  418.             //si compose creer une fabrication
  419.             $ssQuantite $ssArticleCommande->getQuantite();
  420.             //$composantArticle = $composant->getArticle();
  421.             if (count($ssArticleCommande->getArticle()->getArticlesComposants()) > 0) {
  422.                 $this->creerSousFabrication($ssArticleCommande$ssQuantite$em);
  423.             }
  424.             $articleCommandessFab = new ArticleCommande();
  425.             $articleCommandessFab->setLibelle($ssArticleCommande->getArticle()->getLibelle());
  426.             $articleCommandessFab->setArticle($ssArticleCommande->getArticle());
  427.             //$quantiteAC = $quantite * $composant->getQuantite();
  428.             $articleCommandessFab->setQuantite($ssQuantite);
  429.             $articleCommandessFab->setFabrication($fabrication);
  430.             $em->persist($articleCommandessFab);
  431.             //ajouter les sous composants de la fabrication dans la sous fabrication
  432.             //$this->enregisterSousArticleCommande($articleCommandessFab, $articleCommande);
  433.         }
  434.         //$fabrication->setReference('[BROUILLON]'.$numerotationService->generer($fabrication));
  435.         $fabrication->setReference($numerotationService->generer($fabrication));
  436.         if ($articleCommande->getGenererFabriquer() == 1) {
  437.             $repoStatutFabrication $em->getRepository(StatutFabrication::class);
  438.             $statutFabrication     $repoStatutFabrication->findOneBy(["ordre" => "2"]);
  439.             $fabrication->setStatutFabrication($statutFabrication);
  440.             $fabrication->setReference($numerotationService->generer($fabrication));
  441.             $reserve floatval($articleCommande->getQuantite()) + floatval($article->getStockReserve());
  442.             if (floatval($articleCommande->getQuantite()) > 0) {
  443.                 $article->setStockReserve($reserve);
  444.             }
  445.             $em->persist($article);
  446.         }
  447.         $em->persist($fabrication);
  448.         $em->flush();
  449.     }
  450.     /**
  451.      * @Route("/fabrication-multiple/supprimer/{id}", name="dtc_fabrication_multiple_supprimer")
  452.      */
  453.     public function supprimerMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  454.     {
  455.         $data $request->get('dataTables');
  456.         $ids  $data['actions'];
  457.         $repo $em->getRepository(Fabrication::class);
  458.         for ($i 0$i count($ids); $i++) {
  459.             $v $repo->find($ids[$i]);
  460.             if (is_object($v)) {
  461.                 $em->remove($v);
  462.             }
  463.         }
  464.         $em->flush();
  465.         $this->addFlash(
  466.             'notice',
  467.             $translator->trans('Fabrications supprimées avec succès !')
  468.         );
  469.         $url $this->generateUrl('dtc_fabrication_liste', []);
  470.         return new JsonResponse(['url' => $url'valide' => '1']);
  471.     }
  472.     /**
  473.      * @Route("/fabrication/supprimer/{id}", name="dtc_fabrication_supprimer")
  474.      */
  475.     public function supprimerAction(Request             $requestFabrication $fabricationEntityManagerInterface $emFabricationService $fabricationService,
  476.                                     TranslatorInterface $translatorValidatorInterface $validator
  477.     ) {
  478.         $titre_modal $translator->trans("Demande de confirmation");
  479.         $user        $this->getUser();
  480.         $form   $this->createForm(SupprimerFabricationType::class, $fabrication);
  481.         $errors "";
  482.         $form->handleRequest($request);
  483.         if ($form->isSubmitted()) {
  484.             if ($form->isValid()) {
  485.                 $fabricationService->annulerFabrication($fabrication);
  486.                 $em->remove($fabrication);
  487.                 $em->flush();
  488.                 $this->addFlash(
  489.                     'notice',
  490.                     $translator->trans('Fabrication supprimée avec succès !')
  491.                 );
  492.                 $url $this->generateUrl('dtc_fabrication_liste', []);//dtc_commande_fournisseur_liste
  493.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  494.             } else {
  495.                 $errors $validator->validate($fabrication);
  496.                 $rendu  $this->renderView(
  497.                     'FO/Supprimer/supprimer.html.twig',
  498.                     ['form' => $form->createView(), 'errors' => $errors'id' => $fabrication->getId(), 'type' => '']
  499.                 );
  500.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  501.             }
  502.         }
  503.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $fabrication->getId(), 'type' => '''errors' => $errors]);
  504.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  505.     }
  506.     /**
  507.      * @Route("/fabrication/liste", name="dtc_fabrication_liste")
  508.      */
  509.     public function listerAction(Request                $request$fabricationParente ''$fabricationMultiple ''$prestation ''$commandeFournisseur '',
  510.                                  EntityManagerInterface $emColonneTableauService $serviceColonneTableauTranslatorInterface $translatorDatatable $datatable
  511.     ) {
  512.         $this->datatable(''''''''''''''''$datatable$translator);
  513.         $tableauClassColonne = [];
  514.         $tableauClassColonne[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  515.         $tableauClassColonne[] = [
  516.             "className" => "visible_export colonne_id",
  517.             "targets"   => [1],
  518.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
  519.         ];
  520.         $tableauClassColonne[] = [
  521.             "className" => "visible_export colonne_id text-center",
  522.             "targets"   => [2],
  523.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "date"),
  524.         ];
  525.         $tableauClassColonne[] = [
  526.             "className" => "visible_export colonne_id text-center",
  527.             "targets"   => [3],
  528.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "dateFabrication"),
  529.         ];
  530.         $tableauClassColonne[] = [
  531.             "className" => "visible_export colonne_id",
  532.             "targets"   => [4],
  533.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
  534.         ];
  535.         $tableauClassColonne[] = [
  536.             "className" => "visible_export colonne_id",
  537.             "targets"   => [5],
  538.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referenceMultiple"),
  539.         ];
  540.         $tableauClassColonne[] = [
  541.             "className" => "visible_export colonne_id",
  542.             "targets"   => [6],
  543.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referenceArticle"),
  544.         ];
  545.         $tableauClassColonne[] = [
  546.             "className" => "visible_export colonne_id",
  547.             "targets"   => [7],
  548.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "referencesBloquantes"),
  549.         ];
  550.         $tableauClassColonne[] = [
  551.             "className" => "visible_export colonne_id",
  552.             "targets"   => [8],
  553.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
  554.         ];
  555.         $tableauClassColonne[] = [
  556.             "className" => "visible_export colonne_id",
  557.             "targets"   => [9],
  558.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "quantite"),
  559.         ];
  560.         $tableauClassColonne[] = [
  561.             "className" => "visible_export colonne_id",
  562.             "targets"   => [10],
  563.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "quantiteFabricable"),
  564.         ];
  565.         $tableauClassColonne[] = [
  566.             "className" => "visible_export colonne_id",
  567.             "targets"   => [11],
  568.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "statut"),
  569.         ];
  570.         //$tableauClassColonne[]=array("className"=>"visible_export colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"prestation"));
  571.         $tableauClassColonne[] = [
  572.             "className" => "visible_export colonne_id",
  573.             "targets"   => [12],
  574.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
  575.         ];
  576.         $tableauClassColonne[] = [
  577.             "className" => "visible_export colonne_id",
  578.             "targets"   => [13],
  579.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "atelier"),
  580.         ];
  581.         $tableauClassColonne[] = ["orderable" => false"className" => "colonne_id""targets" => [14], "visible" => true];
  582.         $prestationId        $request->query->get('prestationId');
  583.         $ref_bloquante       $request->query->get('ref_bloquante');
  584.         $ref_bloquante_label $request->query->get('ref_bloquante_label');
  585.         $fabricable          $request->query->get('fabricable');
  586.         $type                $request->query->get('type');
  587.         //if($fabricable == 1) $fabricable = 0; else $fabricable = 1;
  588.         $repo_article      $em->getRepository(Article::class);
  589.         $repo_type_article $em->getRepository(Type::class);
  590.         if ($fabricationParente != '' || $fabricationMultiple != '' || $prestation != '' || $commandeFournisseur != '') {
  591.             $template 'GestionComerciale/Fabrication/lister-datatable.html.twig';
  592.         } else {
  593.             $template 'GestionComerciale/Fabrication/lister.html.twig';
  594.         }
  595.         return $this->render($template, [
  596.             'tableauClassColonne' => $tableauClassColonne,
  597.             'fabricationParente'  => $fabricationParente,
  598.             'fabricationMultiple' => $fabricationMultiple,
  599.             'typePrestations'     => $repo_article->findBy(['prestation' => 1], ['libelle' => 'ASC']),
  600.             'prestationId'        => $prestationId,
  601.             'prestation'          => $prestation,
  602.             'commandeFournisseur' => $commandeFournisseur,
  603.             'ref_bloquante'       => $ref_bloquante,
  604.             'ref_bloquante_label' => $ref_bloquante_label,
  605.             'fabricable'          => $fabricable,
  606.             'type'                => $type,
  607.             'typesArticle'        => $repo_type_article->findAll(),
  608.         ]);
  609.     }
  610.     /**
  611.      * @Route("/fabrication/grid", name="dtc_fabrication_liste_grid")
  612.      */
  613.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  614.     {
  615.         $fabricationParente  $request->query->get('fabricationParente');
  616.         $fabricationMultiple $request->query->get('fabricationMultiple');
  617.         $prestationId        $request->query->get('prestationId');
  618.         $prestation          $request->query->get('prestation');
  619.         $commandeFournisseur $request->query->get('commandeFournisseur');
  620.         $ref_bloquante       $request->query->get('ref_bloquante');
  621.         $fabricable          $request->query->get('fabricable');
  622.         $type                $request->query->get('type');
  623.         return $this->datatable(
  624.             $fabricationParente,
  625.             $fabricationMultiple,
  626.             $prestationId,
  627.             $prestation,
  628.             $commandeFournisseur,
  629.             $ref_bloquante,
  630.             $fabricable,
  631.             $type,
  632.             $datatable,
  633.             $translator
  634.         )->execute();
  635.     }
  636.     /**
  637.      * @Route("/carnet-fabrication/grid", name="dtc_carnet_fabrication_liste_grid")
  638.      */
  639.     public function carnetFabricationGridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  640.     {
  641.         return $this->datatableCarnetFabrication($request$datatable$translator)->execute();
  642.     }
  643.     /**
  644.      * set datatable configs
  645.      *
  646.      * @return \App\Library\Datatable\Util\Datatable
  647.      */
  648.     private function datatable($fabricationParente ''$fabricationMultiple ''$prestationId ''$prestation ''$commandeFournisseur ''$ref_bloquante ''$fabricable '',
  649.                                $type ''Datatable $datatableTranslatorInterface $translator
  650.     ) {
  651.         $parameters = [];
  652.         $datatable->setEntity(Fabrication::class, "f")
  653.                   ->setFields(
  654.                       [
  655.                           $translator->trans("ID")                  => 'f.id',
  656.                           $translator->trans("Date")                => 'f.date',
  657.                           $translator->trans("Date de fabrication") => 'f.dateFabrication',
  658.                           $translator->trans("Réf")                 => "f.reference",
  659.                           //$translator->trans("Réf Multiple") =>  "fm.reference",
  660.                           $translator->trans("Réf Multiple")        => "fm.reference",
  661.                           $translator->trans("Réf article")         => "a.reference",
  662.                           $translator->trans("Refs bloquantes")     => "a.id",
  663.                           $translator->trans("Libellé")             => "a.libelle",
  664.                           $translator->trans("Qté")                 => "f.quantite",
  665.                           //$translator->trans("Quantité fabricable") =>  "a.id",
  666.                           $translator->trans("Qté fabriquable")     => "f.quantiteFabriquable",
  667.                           $translator->trans("Date de fabrication") => 'f.dateFabrication',
  668.                           $translator->trans("Statut")              => 's.libelle',
  669.                           //$translator->trans("Prestation") =>  'a.id',
  670.                           $translator->trans("Type d'article")      => 't.libelle',
  671.                           $translator->trans("Atelier")             => 'at.libelle',
  672.                           $translator->trans("Actions")             => 'f.id',
  673.                           "_identifier_"                            => 'f.id',
  674.                       ]
  675.                   )
  676.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  677.                   ->addJoin('f.statutFabrication''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  678.                   ->addJoin('f.article''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  679.                   ->addJoin('a.atelier''at'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  680.                   ->addJoin('f.fabricationMultiple''fm'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  681.                   ->addJoin('a.type''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  682.                   ->setRenderers(
  683.                       [
  684.                           => [
  685.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  686.                               'params' => ['edit_route' => 'dtc_fabrication_modifier'],
  687.                           ],
  688.                           => [
  689.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  690.                               'params' => ['edit_route' => 'dtc_fabrication_modifier'],
  691.                           ],
  692.                           => [
  693.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  694.                               'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier''typeDocument' => 'OrdreFM'],
  695.                           ],
  696.                           => [
  697.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  698.                               'params' => ['edit_route' => 'dtc_article_modifier''typeDocument' => 'article''target' => '_blank'],
  699.                           ],
  700.                           => [
  701.                               'view' => 'FO/DataTable/refs_bloquantes.html.twig',
  702.                           ],
  703.                           => [
  704.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  705.                               'params' => ['edit_route' => 'dtc_article_modifier''typeDocument' => 'article'],
  706.                           ],
  707.                           8  => [
  708.                               'view'   => 'FO/DataTable/ajout_class.html.twig',
  709.                               'params' => ['class' => 'text-center'],
  710.                           ],
  711.                           9  => [
  712.                               'view'   => 'FO/DataTable/ajout_class.html.twig',
  713.                               'params' => ['class' => 'text-center'],
  714.                           ],
  715.                           1  => [
  716.                               'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  717.                           ],
  718.                           2  => [
  719.                               'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  720.                           ],
  721.                           /*
  722.                                 11 => array(
  723.                                     'view' => 'FO/DataTable/prestation.html.twig'
  724.                                 ),
  725.                                 */
  726.                           13 => [
  727.                               'view'   => 'FO/DataTable/actions.html.twig',
  728.                               'params' => [
  729.                                   'edit_route'          => 'dtc_fabrication_modifier',
  730.                                   //'supprimer_route'    => 'dtc_fabrication_supprimer',
  731.                                   'objet'               => 'DTCGestionComercialeBundle:Fabrication',
  732.                                   'fabrication'         => true,
  733.                                   'commandeFournisseur' => $commandeFournisseur,
  734.                                   'fabricationMultiple' => $fabricationMultiple,
  735.                               ],
  736.                           ],
  737.                       ]
  738.                   )
  739.                   ->setSearch(true)
  740.                   ->setSearchFields([3457891011])
  741.                   ->setOrder('s.ordre''DESC')
  742.                   ->setMultiple(
  743.                       [
  744.                           /*
  745.                                 'reception-multiple' => array(
  746.                                     'title' => 'Réception multiple',
  747.                                     'route' => 'dtc_fabrication_reception_multiple'
  748.                                 ),
  749.                                 */
  750.                           'ordre-prestation' => [
  751.                               'title' => 'Créer un ordre de prestation',
  752.                               'route' => 'dtc_fabrication_prestation_ajouter',
  753.                           ],
  754.                       ]
  755.                   );
  756.         $where 's.ordre IN (1,2,3,6,7,8,9)';
  757.         //$parametres['article']= 'test';
  758.         if ($fabricable != '') {
  759.             $where .= ' AND f.fabriquable = 2';
  760.         }
  761.         if ($type != '') {
  762.             $where              .= ' AND t.id = :type';
  763.             $parameters['type'] = $type;
  764.         }
  765.         if ($ref_bloquante != "") {
  766.             //print_r($param['article']);
  767.             $datatable->addJoin('f.articleCommande''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  768.             $datatable->addJoin('ac.article''aca'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  769.             $where                       .= " AND aca.id = :ref_bloquante";
  770.             $parameters['ref_bloquante'] = $ref_bloquante;
  771.         }
  772.         if ($fabricationParente != '') {
  773.             $datatable->addJoin('f.fabricationParente''fp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  774.             $where 'fp.id = '.$fabricationParente;
  775.         }
  776.         if ($fabricationMultiple != '') {
  777.             //$datatable->addJoin('f.fabricationMultiple', 'fm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  778.             $where 'fm.id = '.$fabricationMultiple;
  779.         }
  780.         if ($commandeFournisseur != '') {
  781.             $datatable->addJoin('f.commandeFournisseur''cf'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  782.             $ordre '';
  783.             $where 's.ordre IN (1,2,3,4) AND cf.id = '.$commandeFournisseur;
  784.         }
  785.         if ($prestationId != '') {
  786.             $datatable->addJoin('f.articleCommande''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  787.                       ->addJoin('ac.article''aca'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  788.             $where 's.ordre IN (1,2,3) AND aca.id = '.$prestationId;
  789.         }
  790.         if ($prestation != '') {
  791.             $where 's.ordre IN (1,2,3) AND f.prestation = '.$prestation;
  792.         }
  793.         //print_r($where.' / '.$parameters['article']);
  794.         if ($where != '') {
  795.             $datatable->setWhere($where$parameters);
  796.         }
  797.         return $datatable;
  798.     }
  799.     /**
  800.      * set datatable configs
  801.      *
  802.      * @return \App\Library\Datatable\Util\Datatable
  803.      */
  804.     private function datatableCarnetFabrication(Request $requestDatatable $datatableTranslatorInterface $translator)
  805.     {
  806.         $param      $request->query->all();
  807.         $parametres = [];
  808.         $where      "";
  809.         if ( ! array_key_exists('parametres'$param)) {
  810.             $param["parametres"] = $param;
  811.         }
  812.         $datatable->setEntity(Article::class, "p")
  813.                   ->setFields(
  814.                       [
  815.                           $translator->trans("ID")        => 'p.id',
  816.                           $translator->trans("Img")       => 'p.reference',
  817.                           $translator->trans("Réf")       => 'p.reference',
  818.                           $translator->trans("Libelle")   => 'p.libelle',
  819.                           $translator->trans("Qte à Fab") => "p.id",
  820.                           $translator->trans("Type")      => 't.libelle',
  821.                           $translator->trans("Stock")     => 'p.stock',
  822.                           $translator->trans("Dispo")     => 'p.id',
  823.                           $translator->trans("Minifab") => 'p.id',
  824.                           $translator->trans("Qmini")       => 'p.seuilMiniCommandeFournisseur',
  825.                           $translator->trans("Qmaxi")       => 'p.seuilMaxiCommandeFournisseur',
  826.                           $translator->trans("Ràl C")       => 'p.id',
  827.                           $translator->trans("Ràl F")       => 'p.ralFournisseur',
  828.                           'Ràf'                             => 'p.id',
  829.                           $translator->trans("Marque")      => 'm.libelle',
  830.                           $translator->trans("Pump")        => 'p.pump',
  831.                           $translator->trans("Cump")        => 'p.cpump',
  832.                           $translator->trans("Desc courte") => 'p.descriptionCourte',
  833.                           //$translator->trans("Prix HT") =>  'p.prixVente',
  834.                           //$translator->trans("Actions") =>  'p.id',
  835.                           "_identifier_"                    => 'p.id',
  836.                       ]
  837.                   )
  838.             //->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  839.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  840.             //->addJoin('p.fournisseurDefaut', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  841.             //->addJoin('p.articlesComposants', 'acmp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  842.                   ->addJoin('p.type''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  843.                   ->addJoin('p.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  844.                   ->setRenderers(
  845.                       [
  846.                           => [
  847.                               'view'   => 'FO/DataTable/image.html.twig',
  848.                               'params' => [
  849.                                   'edit_route' => 'dtc_article_modifier',
  850.                               ],
  851.                           ],
  852.                           => [
  853.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  854.                               'params' => ['edit_route' => 'dtc_article_modifier'],
  855.                           ],
  856.                           /*3 => array(
  857.                                     'view' => 'FO/DataTable/edit_texte.html.twig',
  858.                                     'params' => array(
  859.                                             'objet'    => 'DTCArticlesBundle:Article',
  860.                                             'champ'    => 'setLibelle',
  861.                                         ),
  862.                                 ),*/
  863.                           /*
  864.                 7 => array(
  865.                                     'view' => 'FO/DataTable/prixSuivi.html.twig',
  866.                                     'params' => array(
  867.                                             'surveillance'    => false,
  868.                                         )
  869.                                 ),
  870.                                  *
  871.                                  */
  872.                           => [
  873.                               'view' => 'FO/DataTable/qteAfabriquer.html.twig',
  874.                           ],
  875.                           => [
  876.                               'view' => 'FO/DataTable/article_dispo.html.twig',
  877.                           ],
  878.                           => [
  879.                               'view' => 'FO/DataTable/mini_fab.html.twig',
  880.                           ],
  881.                           11 => [
  882.                               'view' => 'FO/DataTable/article_ral.html.twig',
  883.                           ],
  884.                           13 => [
  885.                               'view' => 'FO/DataTable/article_raf.html.twig',
  886.                           ],
  887.                           15 => [
  888.                               'view'   => 'FO/DataTable/prix.html.twig',
  889.                               'params' => [
  890.                                   'afficher_total' => false,
  891.                               ],
  892.                           ],
  893.                           16 => [
  894.                               'view'   => 'FO/DataTable/prix.html.twig',
  895.                               'params' => [
  896.                                   'afficher_total' => false,
  897.                               ],
  898.                           ],
  899.                           /*
  900.                                 12=> array(
  901.                                     'view' => 'FO/DataTable/button.html.twig',
  902.                                     'params' => array(
  903.                                             'edit_route'    => 'dtc_fabrication_ajouter',
  904.                                             //'dupliquer_route'    => 'dtc_article_dupliquer',
  905.                                             'objet'    => 'DTCGestionComercialeBundle:Fabrication',
  906.                                             'name' => '<b>FABRIQUER</b>'
  907.                                         ),
  908.                                 ),
  909.                                 */
  910.                       ]
  911.                   )
  912.                   ->setGroupBy('p.id')
  913.                   ->setMultiple(
  914.                       [
  915.                           'fabrication-multiple' => [
  916.                               'title' => 'fabrication multiple',
  917.                               'route' => 'dtc_fabrication_multiple_ajouter_depuis_suggestion',
  918.                           ],
  919.                       ]
  920.                   )
  921.                   ->setSearch(true)
  922.                   ->setSearchFields([23514]);
  923.         //$where = '(p.stock-COALESCE(p.stockReserve,0)+COALESCE(p.ralFournisseur,0)) < p.seuilMiniCommandeFournisseur AND (p.produitInterne = 1 OR p.virtuel = 1) AND acmp.id is not null';
  924.         $where 'p.aFabriquer = 1 AND p.nomenclatureValidee = 1';
  925.         if (array_key_exists('categorie_article'$param['parametres']) and $param['parametres']['categorie_article'] != "") {
  926.             $datatable->addJoin('p.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  927.             $datatable->addJoin('ac.categorie''cat'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  928.             $where .= " AND cat.id = ".$param['parametres']['categorie_article'];
  929.             //$qb->join('x.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  930.             //$qb->join('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  931.             //$where .= " AND cat.id = :categorie";
  932.             //$parametres['categorie']=$param['parametres']['categorie_article'];
  933.             if (array_key_exists('sous_categorie_article'$param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
  934.                 $datatable->addJoin('p.articleCategorie''ac2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  935.                 $datatable->addJoin('ac2.categorie''cat2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  936.                 $where .= " AND cat2.id = ".$param['parametres']['sous_categorie_article'];
  937.                 /*
  938.               $qb->join('x.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  939.               $qb->join('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  940.               $where .= " AND cat2.id = :categorie2";
  941.               $parametres['categorie2']=$param['parametres']['sous_categorie_article'];
  942.               */
  943.             }
  944.             if (array_key_exists('sous_sous_categorie_article'$param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
  945.                 $datatable->addJoin('p.articleCategorie''ac3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  946.                 $datatable->addJoin('ac3.categorie''cat3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  947.                 $where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
  948.             }
  949.         }
  950.         if (array_key_exists('marque'$param['parametres']) and $param['parametres']['marque'] != "") {
  951.             $where .= " AND m.id = ".$param['parametres']['marque'];;
  952.         }
  953.         if (array_key_exists('type'$param['parametres']) and $param['parametres']['type'] != "") {
  954.             $where .= " AND t.id = ".$param['parametres']['type'];
  955.         }
  956.         //echo "TEST ".$where;
  957.         $datatable->setWhere($where);
  958.         $datatable->setOrder('p.reference''ASC');
  959.         //$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
  960.         return $datatable;
  961.     }
  962.     /**
  963.      * @Route("/fabrication/article/{id}/refs-equivalentes/ajax", name="dtc_fabrication_ajax_refs_equivalentes")
  964.      */
  965.     public function ajaxRefsEquivalentesFabricationAction(Request $requestArticle $article
  966.     ) {
  967.         $refs $article->getRefsEquivalentes();
  968.         /*
  969.         $articleAExclure = $request->query->get('articleAExclure');
  970.         foreach ($refs as $key => $ref){
  971.             foreach($ref->getArticlesComposants() as $composant){
  972.                 if ($this->verifierRefsEquivalentesNeContientPasArticle($composant, $article->getId()) == 'true')
  973.                     unset($refs[$key]);
  974.             }
  975.         }
  976.          *
  977.          */
  978.         $retour $this->renderView('GestionComerciale/Fabrication/refs-equivalentes.html.twig', [
  979.             'refs'     => $refs,
  980.             'quantite' => $request->query->get('quantite'),
  981.         ]);
  982.         $response = new JsonResponse();
  983.         $response->setData([
  984.                                'retour' => $retour,
  985.                            ]);
  986.         return $response;
  987.     }
  988.     /**
  989.      * @Route("/fabrication/article/{id}/refs-equivalentes-reception/ajax", name="dtc_fabrication_ajax_refs_equivalentes_reception")
  990.      */
  991.     public function ajaxRefsEquivalentesFabricationReceptionAction(Request $requestArticle $article
  992.     ) {
  993.         $refs $article->getRefsEquivalentes();
  994.         $retour $this->renderView('GestionComerciale/Fabrication/refs-equivalentes-reception.html.twig', [
  995.             'refs'     => $refs,
  996.             'quantite' => $request->query->get('quantite'),
  997.         ]);
  998.         $response = new JsonResponse();
  999.         $response->setData([
  1000.                                'retour' => $retour,
  1001.                            ]);
  1002.         return $response;
  1003.     }
  1004.     private function verifierRefsEquivalentesNeContientPasArticle(ArticleComposant $composant$article$retour '')
  1005.     {
  1006.         if ($composant->getArticle()->getId() == $article) {
  1007.             //return true;
  1008.             $retour 'true';
  1009.         } else {
  1010.             //$retour .= 'art'.$composant->getArticle()->getId().'/';
  1011.             $composants $composant->getArticle()->getArticlesComposants();
  1012.             foreach ($composants as $compo) {
  1013.                 $retour $this->verifierRefsEquivalentesNeContientPasArticle($compo$article$retour);
  1014.             }
  1015.         }
  1016.         //return false;
  1017.         return $retour;
  1018.     }
  1019.     /**
  1020.      * @Route("/fabrication/article/{id}/refs-equivalentes/ajax/remplacement", name="dtc_fabrication_ajax_refs_equivalentes_remplacement")
  1021.      */
  1022.     public function ajaxRefsEquivalentesFabricationRemplacementAction(Request $requestArticle $article)
  1023.     {
  1024.         //$composants = $article->getArticlesComposants();
  1025.         $retour $this->renderView('GestionComerciale/ArticleCommande/lister-avec-arbo.html.twig', [
  1026.             'composants' => $article,
  1027.             'quantite'   => $request->query->get('quantite'),
  1028.         ]);
  1029.         $response = new JsonResponse();
  1030.         $response->setData([
  1031.                                'retour' => $retour,
  1032.                            ]);
  1033.         return $response;
  1034.     }
  1035.     /**
  1036.      * @Route("/fabrication/article/{id}/refs-equivalentes-reception-toggle/ajax", name="dtc_fabrication_ajax_refs_equivalentes_reception_toggle")
  1037.      */
  1038.     public function ajaxRefsEquivalentesFabricationReceptionToggleAction(Request $requestArticle $article)
  1039.     {
  1040.         //echo "GGG";
  1041.         //$composants = $article->getArticlesComposants();
  1042.         $retour $this->renderView('GestionComerciale/Fabrication/reception-toggle-equivalence.html.twig', [
  1043.             'article'           => $article,
  1044.             'quantite'          => $request->query->get('quantite'),
  1045.             'quantiteCommandee' => $request->query->get('quantiteCommandee'),
  1046.             'index'             => $request->query->get('index'),
  1047.             'multiple'          => $request->query->get('multiple'),
  1048.             'ral'               => $request->query->get('ral'),
  1049.         ]);
  1050.         $response = new JsonResponse();
  1051.         $response->setData([
  1052.                                'retour' => $retour,
  1053.                            ]);
  1054.         return $response;
  1055.     }
  1056.     /**
  1057.      * @Route("/fabrication/reception/{id}", name="dtc_fabrication_reception")
  1058.      */
  1059.     public function receptionnerAction(Request             $requestFabrication $fabricationEntityManagerInterface $emFabricationService $fabricationService,
  1060.                                        TranslatorInterface $translatorValidatorInterface $validator
  1061.     ) {
  1062.         $user $this->getUser();
  1063.         //$fabrication->setUtilisateur($user);
  1064.         $errors           "";
  1065.         $repo_utilisateur $em->getRepository(Utilisateur::class);
  1066.         $repo_commande    $em->getRepository(Commande::class);
  1067.         $utilisateurs     $repo_utilisateur->findAll();
  1068.         if ($request->isMethod('POST')) {
  1069.             $articles = [
  1070.                 'ids'          => $request->request->get('ids'),
  1071.                 'commentaires' => $request->request->get('commentaires'),
  1072.                 'qtes'         => $request->request->get('qtes'),
  1073.                 'qtesCmdes'    => $request->request->get('qtesCmdes'),
  1074.                 'pumps'        => $request->request->get('pumps'),
  1075.                 'cumps'        => $request->request->get('cumps'),
  1076.                 'typesMvt'     => $request->request->get('typesMvt'),
  1077.                 'emplacement'  => $request->request->get('emplacement'),
  1078.             ];
  1079.             $valeurs  = ["articles" => $articles];
  1080.             $equipier $repo_utilisateur->find($request->request->get('equipier'));
  1081.             //echo $equipier->getId();
  1082.             //Tester si la fabrication a été modifiée à la réception
  1083.             // Si la fabrication a été modifiée on crée une nouvelle fabrication correspondant à cette réception et on modifie la réception existante
  1084.             $newFabrication false;
  1085.             foreach ($fabrication->getArticleCommande() as $ac) {
  1086.                 $articleId $ac->getArticle()->getId();
  1087.                 if ( ! in_array($articleId$articles['ids'])) {
  1088.                     $newFabrication true;
  1089.                 }
  1090.             }
  1091.             if ($newFabrication == true) {
  1092.                 //Création de la nouvelle fabrication
  1093.                 $valeurs['receptionnee'] = true;
  1094.                 $newFabrication          $fabricationService->modifierFabricationEtCreerNewFabrication($fabrication$articles$equipier);
  1095.                 $this->addFlash(
  1096.                     'notice',
  1097.                     $translator->trans('Nouvel ordre de fabrication créé !')
  1098.                 );
  1099.                 echo "<div>FIN</div>";
  1100.                 //exit;
  1101.                 $url $this->generateUrl('dtc_fabrication_modifier', ["id" => $newFabrication->getId(), 'tabs' => '#fabrications']);
  1102.                 //$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId(), 'tabs'=>'#fabrications'));
  1103.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1104.             } else {
  1105.                 $fabricationService->creerMvtStock($fabrication$valeurs''$equipier);
  1106.                 //echo 'test';
  1107.                 $this->addFlash(
  1108.                     'notice',
  1109.                     $translator->trans('Mouvements de stock créés avec succès !')
  1110.                 );
  1111.                 $url $this->generateUrl('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  1112.                 if ($request->query->get('commandeFournisseur') != '') {
  1113.                     $url $this->generateUrl('dtc_commande_fournisseur_modifier', ["id" => $request->query->get('commandeFournisseur'), 'tabs' => '#fabrications']);
  1114.                 } elseif ($request->query->get('fabricationMultiple') != '') {
  1115.                     $url $this->generateUrl('dtc_fabrication_multiple_modifier', ["id" => $request->query->get('fabricationMultiple'), 'tabs' => '#fabrications']);
  1116.                 }
  1117.                 $process  = new Process(['php''bin/console''articlesComposesModifierCondHa:maj']);
  1118.                 $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  1119.                 $process->setOptions(['create_new_console' => true]);
  1120.                 $process->start();
  1121.                 //exit;
  1122.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1123.             }
  1124.         }
  1125.         $etiquettes  $repo_commande $em->getRepository(Etiquette::class)->findAll();
  1126.         $titre_modal $translator->trans('Voulez-vous générer les mouvements de stock?');
  1127.         $rendu       $this->renderView(
  1128.             'GestionComerciale/Fabrication/reception.html.twig',
  1129.             ['errors' => $errors'fabrication' => $fabrication'user' => $user'utilisateurs' => $utilisateurs'etiquettes' => $etiquettes]
  1130.         );//'form' => $form->createView(),
  1131.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  1132.         //return $this->render('GestionComerciale/CommandeFournisseur/reception.html.twig', array('form' => $form->createView(),'errors'=>$errors,'commande'=>$commande));
  1133.     }
  1134.     /**
  1135.      * @Route("/fabrication-multiple/reception/{id}", name="dtc_fabrication_multiple_reception")
  1136.      */
  1137.     public function receptionnerMultipleAction(Request             $requestFabricationMultiple $fabricationMultipleEntityManagerInterface $em,
  1138.                                                TranslatorInterface $translatorFabricationService $fabricationService
  1139.     ) {
  1140.         $user $this->getUser();
  1141.         //$fabrication->setUtilisateur($user);
  1142.         $errors           "";
  1143.         $repo_utilisateur $em->getRepository(Utilisateur::class);
  1144.         $repo_commande    $em->getRepository(Commande::class);
  1145.         $repo_fabrication $em->getRepository(Fabrication::class);
  1146.         $utilisateurs     $repo_utilisateur->findAll();
  1147.         if ($request->isMethod('POST')) {
  1148.             $articles = [
  1149.                 'ids'          => $request->request->get('ids'),
  1150.                 'commentaires' => $request->request->get('commentaires'),
  1151.                 'qtes'         => $request->request->get('qtes'),
  1152.                 'qtesCmdes'    => $request->request->get('qtesCmdes'),
  1153.                 'pumps'        => $request->request->get('pumps'),
  1154.                 'cumps'        => $request->request->get('cumps'),
  1155.                 'typesMvt'     => $request->request->get('typesMvt'),
  1156.                 'emplacement'  => $request->request->get('emplacement'),
  1157.                 'fabrications' => $request->request->get('fabrications'),
  1158.             ];
  1159.             //$valeurs = array("articles"=>$articles);
  1160.             $equipier $repo_utilisateur->find($request->request->get('equipier'));
  1161.             //var_dump($articles);
  1162.             //die;
  1163.             //echo $equipier->getId();
  1164.             //Tester si la fabrication a été modifiée à la réception
  1165.             // Si la fabrication a été modifiée on crée une nouvelle fabrication correspondant à cette réception et on modifie la réception existante
  1166.             /*$newFabrication = false;
  1167.                     foreach($fabrication->getArticleCommande() as $ac){
  1168.                         $articleId = $ac->getArticle()->getId();
  1169.                         if(!in_array($articleId, $articles['ids'])){
  1170.                             $newFabrication = true;
  1171.                         }
  1172.                     }
  1173.                     if($newFabrication == true){
  1174.                         //Création de la nouvelle fabrication
  1175.                         $valeurs['receptionnee'] = true;
  1176.                         $newFabrication = $fabricationService->modifierFabricationEtCreerNewFabrication($fabrication, $articles, $equipier);
  1177.                         $this->addFlash(
  1178.                     'notice',
  1179.                    $translator->trans('Nouvel ordre de fabrication créé !')
  1180.                 );
  1181.                         //echo "<div>FIN</div>";
  1182.                          //exit;
  1183.                         $url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$newFabrication->getId(), 'tabs'=>'#fabrications'));
  1184.                         //$url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId(), 'tabs'=>'#fabrications'));
  1185.                         return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
  1186.                     } else {
  1187.                     $fabricationService->creerMvtStock($fabrication, $valeurs, '', $equipier);
  1188.                         //echo 'test';
  1189.                         $this->addFlash(
  1190.                     'notice',
  1191.                    $translator->trans('Mouvements de stock créés avec succès !')
  1192.                 );
  1193.                         $url = $this->generateUrl('dtc_fabrication_modifier',array("id"=>$fabrication->getId()));
  1194.                         if($request->query->get('commandeFournisseur') != '') {
  1195.                             $url = $this->generateUrl('dtc_commande_fournisseur_modifier',array("id"=>$request->query->get('commandeFournisseur'), 'tabs'=>'#fabrications'));
  1196.                         }
  1197.                         else if($request->query->get('fabricationMultiple') != '') {
  1198.                             $url = $this->generateUrl('dtc_fabrication_multiple_modifier',array("id"=>$request->query->get('fabricationMultiple'), 'tabs'=>'#fabrications'));
  1199.                         }
  1200.                         return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
  1201.                     }
  1202.                      *
  1203.                      */
  1204.             //Separer les donnees par fabrication.
  1205.             foreach ($articles['fabrications'] as $key => $fabricationId) {
  1206.                 foreach ($articles as $k => $value) {
  1207.                     if ($k != 'emplacement') {
  1208.                         $articlesByFabrication[$fabricationId][$k][] = $articles[$k][$key];
  1209.                     }
  1210.                 }
  1211.                 if (count($articles['emplacement']) > 0) {
  1212.                     foreach ($articles['emplacement'] as $emplId => $empl) {
  1213.                         foreach ($empl as $ke => $value) {
  1214.                             if ($ke == $key) {
  1215.                                 $articlesByFabrication[$fabricationId]['emplacement'][$emplId][] = $value;
  1216.                             }
  1217.                         }
  1218.                     }
  1219.                 }
  1220.             }
  1221.             //var_dump($articlesByFabrication);
  1222.             //die;
  1223.             foreach ($articlesByFabrication as $key => $donnees) {
  1224.                 $fabrication $repo_fabrication->find($key);
  1225.                 if (is_object($fabrication)) {
  1226.                     $valeurs = ["articles" => $donnees];
  1227.                     $fabricationService->creerMvtStock($fabrication$valeurs''$equipier);
  1228.                 }
  1229.             }
  1230.             $this->addFlash(
  1231.                 'notice',
  1232.                 $translator->trans('Mouvements de stock créés avec succès !')
  1233.             );
  1234.             $url $this->generateUrl('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId(), 'tabs' => '#fabrications']);
  1235.             $process  = new Process(['php''bin/console''articlesComposesModifierCondHa:maj']);
  1236.             $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  1237.             $process->setOptions(['create_new_console' => true]);
  1238.             $process->start();
  1239.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1240.         }
  1241.         $etiquettes  $repo_commande $em->getRepository(Etiquette::class)->findAll();
  1242.         $titre_modal $translator->trans('Voulez-vous générer les mouvements de stock?');
  1243.         $rendu       $this->renderView(
  1244.             'GestionComerciale/FabricationMultiple/reception.html.twig',
  1245.             [
  1246.                 'errors'              => $errors,
  1247.                 'fabricationMultiple' => $fabricationMultiple,
  1248.                 'user'                => $user,
  1249.                 'utilisateurs'        => $utilisateurs,
  1250.                 'etiquettes'          => $etiquettes,
  1251.             ]
  1252.         );//'form' => $form->createView(),
  1253.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  1254.         //return $this->render('GestionComerciale/CommandeFournisseur/reception.html.twig', array('form' => $form->createView(),'errors'=>$errors,'commande'=>$commande));
  1255.     }
  1256.     /**
  1257.      * @Route("/fabrication-multiple/etiquette/{id}", name="dtc_fabrication_multiple_etiquette")
  1258.      */
  1259.     public function etiquetteMultipleAction(Request             $requestFabricationMultiple $fabricationMultipleEntityManagerInterface $em,
  1260.                                             TranslatorInterface $translatorValidatorInterface $validator
  1261.     ) {
  1262.         $user $this->getUser();
  1263.         //$fabrication->setUtilisateur($user);
  1264.         $errors           "";
  1265.         $repo_utilisateur $em->getRepository(Utilisateur::class);
  1266.         $repo_commande    $em->getRepository(Commande::class);
  1267.         $repo_fabrication $em->getRepository(Fabrication::class);
  1268.         $utilisateurs     $repo_utilisateur->findAll();
  1269.         $etiquettes  $repo_commande $em->getRepository(Etiquette::class)->findAll();
  1270.         $titre_modal $translator->trans('Voulez-vous générer les mouvements de stock?');
  1271.         $rendu       $this->renderView(
  1272.             'GestionComerciale/FabricationMultiple/etiquette.html.twig',
  1273.             [
  1274.                 'errors'              => $errors,
  1275.                 'fabricationMultiple' => $fabricationMultiple,
  1276.                 'user'                => $user,
  1277.                 'utilisateurs'        => $utilisateurs,
  1278.                 'etiquettes'          => $etiquettes,
  1279.             ]
  1280.         );//'form' => $form->createView(),
  1281.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  1282.     }
  1283.     /**
  1284.      * @Route("/of/pdf/{id}", name="dtc_fabrication_pdf")
  1285.      */
  1286.     public function pdfFabricationAction(Request $requestFabrication $fabrication$retour trueEntityManagerInterface $emPdf $snappy)
  1287.     {
  1288.         $societe    $em->getRepository(Societe::class)->find(1);
  1289.         $date_Y     date("Y");
  1290.         $date_M     date("m");
  1291.         $date_D     date("d");
  1292.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  1293.         $chemin_pdf 'PDF/OF/'.$date.'/OF-'.$fabrication->getReference().'.pdf';
  1294.         if (file_exists($chemin_pdf)) {
  1295.             unlink($chemin_pdf);
  1296.         }
  1297.         //return $this->render('GestionComerciale/OrdreRep/template_pdf.html.twig',array('commande'  => $ordreRepration,'societe'  => $societe));
  1298.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  1299.         $header $this->renderView('FO/PDF/header_of_pdf.html.twig', ['societe' => $societe'fabrication' => $fabrication]);
  1300.         //return $header;
  1301.         //$snappy->setOption('page-size', 'A4');
  1302.         $snappy->setOption('header-html'$header);
  1303.         $snappy->setOption('footer-html'$footer);
  1304.         //$snappy->setOption('header-html',$footer);
  1305.         $snappy->setOption('margin-bottom'"10");
  1306.         //$snappy->setOption('margin-top',"2");
  1307.         //$snappy->setOption('zoom', 1 );
  1308.         //$snappy->setOption('dpi', 300 );
  1309.         $snappy->generateFromHtml(
  1310.             $this->renderView(
  1311.                 'GestionComerciale/Fabrication/template_pdf.html.twig',
  1312.                 [
  1313.                     'fabrication' => $fabrication,
  1314.                     'societe'     => $societe,
  1315.                     'detail'      => $request->query->get('detail'),
  1316.                 ]
  1317.             ),
  1318.             $chemin_pdf
  1319.         );
  1320.         if ($retour == true) {
  1321.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  1322.             //return new RedirectResponse("/".$chemin_pdf);
  1323.         }
  1324.         //return new RedirectResponse("/".$chemin_pdf);
  1325.         /*
  1326.                 return $this->render(
  1327.                 'GestionComerciale/Fabrication/template_pdf.html.twig',
  1328.                 array(
  1329.                     'fabrication'  => $fabrication,
  1330.                     'societe'  => $societe
  1331.                 )
  1332.             );
  1333.                  *
  1334.                  */
  1335.     }
  1336.     /**
  1337.      * @Route("/of-multiple/pdf/{id}", name="dtc_fabrication_multiple_pdf")
  1338.      */
  1339.     public function pdfFabricationMultipleAction(Request $requestFabricationMultiple $fabricationMultiple$retour trueEntityManagerInterface $emPdf $snappy)
  1340.     {
  1341.         $societe    $em->getRepository(Societe::class)->find(1);
  1342.         $date_Y     date("Y");
  1343.         $date_M     date("m");
  1344.         $date_D     date("d");
  1345.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  1346.         $chemin_pdf 'PDF/OFM/'.$date.'/OFM-'.$fabricationMultiple->getReference().'.pdf';
  1347.         if (file_exists($chemin_pdf)) {
  1348.             unlink($chemin_pdf);
  1349.         }
  1350.         //return $this->render('GestionComerciale/OrdreRep/template_pdf.html.twig',array('commande'  => $ordreRepration,'societe'  => $societe));
  1351.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe'masquerIncoterm' => 'true']);
  1352.         //$header = $this->renderView('FO/PDF/header_of_pdf.html.twig', array('societe'  => $societe,'fabrication'  => $fabricationMultiple));
  1353.         //return $header;
  1354.         //$snappy->setOption('page-size', 'A4');
  1355.         //$snappy->setOption('header-html',$header);
  1356.         $snappy->setOption('footer-html'$footer);
  1357.         //$snappy->setOption('header-html',$footer);
  1358.         $snappy->setOption('margin-bottom'"10");
  1359.         //$snappy->setOption('margin-top',"2");
  1360.         //$snappy->setOption('zoom', 1 );
  1361.         //$snappy->setOption('dpi', 300 );
  1362.         $snappy->generateFromHtml(
  1363.             $this->renderView(
  1364.                 'GestionComerciale/FabricationMultiple/template_pdf.html.twig',
  1365.                 [
  1366.                     'fabricationMultiple' => $fabricationMultiple,
  1367.                     'societe'             => $societe,
  1368.                     'detail'              => $request->query->get('detail'),
  1369.                 ]
  1370.             ),
  1371.             $chemin_pdf
  1372.         );
  1373.         if ($retour == true) {
  1374.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  1375.             //return new RedirectResponse("/".$chemin_pdf);
  1376.         }
  1377.         //return new RedirectResponse("/".$chemin_pdf);
  1378.         /*
  1379.                 return $this->render(
  1380.                 'GestionComerciale/Fabrication/template_pdf.html.twig',
  1381.                 array(
  1382.                     'fabrication'  => $fabrication,
  1383.                     'societe'  => $societe
  1384.                 )
  1385.             );
  1386.                  *
  1387.                  */
  1388.     }
  1389.     /**
  1390.      * @Route("/of/imprimer/multiple", name="dtc_fabrication_pdf_multiple")
  1391.      */
  1392.     public function imprimerMultipleAction(Request $requestEntityManagerInterface $emPdf $snappy)
  1393.     {
  1394.         $data       $request->get('dataTables');
  1395.         $ids        $data['actions'];
  1396.         $tableauPdf = [];
  1397.         $pdfRelier  'PDF/OF/OF-'.date('d-m-Y').'.pdf';
  1398.         //$ids = array("118","101","93");
  1399.         for ($i 0$i count($ids); $i++) {
  1400.             $repo $em->getRepository(Fabrication::class);
  1401.             $bon  $repo->find($ids[$i]);
  1402.             if (is_object($bon)) {
  1403.                 $this->pdfFabricationAction($request$bonfalse$em$snappy);
  1404.                 $tableauPdf[] = $chemin_pdf 'PDF/OF/OF-'.$bon->getReference().'.pdf';
  1405.             }
  1406.         }
  1407.         $cmd "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
  1408.         foreach ($tableauPdf as $file) {
  1409.             $cmd .= $file." ";
  1410.         }
  1411.         //echo "<div>".$cmd."</div>";
  1412.         $result shell_exec($cmd);
  1413.         return new JsonResponse(['target' => '_blank''url' => '/'.$pdfRelier'valide' => '1']);
  1414.     }
  1415.     /**
  1416.      * @Route("", name="")
  1417.      */
  1418.     public function getQuantiteFabriquableAction(Request $requestFabrication $fabricationFabricationService $fabricationService)
  1419.     {
  1420.         $quantiteFabriquable $fabricationService->quantiteFabricable($fabrication);
  1421.         return new Response('<p class="text-center">'.$quantiteFabriquable.'</p>');
  1422.     }
  1423.     /**
  1424.      * @Route("", name="")
  1425.      */
  1426.     public function fabricationMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  1427.     {
  1428.         $repoArticle $em->getRepository(Article::class);
  1429.         $articles    $repoArticle->getArticlesInternesAFabriquer();
  1430.         $fabrication = new Fabrication();
  1431.         $user        $this->getUser();
  1432.         $fabrication->setUtilisateur($user);
  1433.         $statut $em->getRepository(StatutFabrication::class)->findOneBy(['ordre' => 1]);//brouillon
  1434.         $fabrication->setStatutFabrication($statut);
  1435.         $quantite 1;
  1436.         $fabrication->setQuantite($quantite);
  1437.         $form   $this->createForm(FabricationType::class, $fabrication);
  1438.         $errors "";
  1439.         $form->handleRequest($request);
  1440.         if ($form->isSubmitted()) {
  1441.             if ($form->isValid()) {
  1442.                 $articles = [
  1443.                     'articles' => $request->request->get('articles'),
  1444.                     'ids'      => $request->request->get('ids'),
  1445.                     'qtes'     => $request->request->get('qtes'),
  1446.                     'pumps'    => $request->request->get('pumps'),
  1447.                     'cumps'    => $request->request->get('cumps'),
  1448.                     'parents'  => $request->request->get('parents'),
  1449.                 ];
  1450.                 for ($i 0$i count($articles['ids']); $i++) {
  1451.                     if ($articles['parents'][$i] == 'niveau1') {
  1452.                         $article $repoArticle->find($articles['articles'][$i]);
  1453.                         if (is_object($article)) {
  1454.                             $articleCommande = new ArticleCommande();
  1455.                             $articleCommande->setArticle($article);
  1456.                             $articleCommande->setLibelle($article->getLibelle());
  1457.                             $articleCommande->setQuantite($articles['qtes'][$i]);
  1458.                             $articleCommande->setRal($articles['qtes'][$i]);
  1459.                             $articleCommande->setFabrication($fabrication);
  1460.                             $em->persist($articleCommande);
  1461.                             //$em->flush();
  1462.                             $this->enregistrerArticlesCommandeSousNiveau($articles$articles['ids'][$i], $articleCommande$em);
  1463.                         }
  1464.                     }
  1465.                 }
  1466.                 $em->persist($fabrication);
  1467.                 $em->flush();
  1468.                 $this->addFlash(
  1469.                     'notice',
  1470.                     $translator->trans('Fabrication ajoutée avec succès !')
  1471.                 );
  1472.                 //\Doctrine\Common\Util\Debug::dump($idsArticle);
  1473.                 //return $this->redirectToRoute('dtc_carnet_fabrication_liste');
  1474.                 return $this->redirectToRoute('dtc_fabrication_modifier', ["id" => $fabrication->getId()]);
  1475.             }
  1476.         }
  1477.         return $this->render('GestionComerciale/Fabrication/carnet-fabrication2.html.twig', [
  1478.             'articles' => $articles,
  1479.             'form'     => $form->createView(),
  1480.             'quantite' => $quantite,
  1481.         ]);
  1482.     }
  1483.     /**
  1484.      * @Route("/fabrication-multiple/nouvelle/", name="dtc_fabrication_multiple_ajouter")
  1485.      */
  1486.     public function ajouterMultipleAction(Request             $requestEntityManagerInterface $emFabricationService $fabricationService,
  1487.                                           TranslatorInterface $translatorValidatorInterface $validator
  1488.     ) {
  1489.         //echo "XXXXX";
  1490.         set_time_limit(300);
  1491.         $user                $this->getUser();
  1492.         $fabricationMultiple = new FabricationMultiple;
  1493.         $fabricationMultiple->setUtilisateur($user);
  1494.         $fabricationMultiple->setMagasinier(null);
  1495.         //$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
  1496.         //$composants = $fabricationService->getArticlesCommande($fabrication);
  1497.         $repoArticle $em->getRepository(Article::class);
  1498.         $data $request->get('dataTables');
  1499.         $ids = array();
  1500.         if(!empty($data['actions'])) $ids  $data['actions'];
  1501.         $form $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
  1502.         $errors "";
  1503.         $error  "";
  1504.         $form->handleRequest($request);
  1505.         if ($form->isSubmitted()) {
  1506.             $droit $this->isGranted(EntityVoter::UPDATEFabrication::class);
  1507.             if ( ! $droit) {
  1508.                 return $this->redirectToRoute('dtc_fabrication_multiple_liste');
  1509.             }
  1510.             if ($form->isValid()) {
  1511.                 if ($request->request->get('annuler') != '') {
  1512.                     //$fabricationService->annulerFabrication($fabrication);
  1513.                     $this->addFlash(
  1514.                         'notice',
  1515.                         $translator->trans('Commande annulée avec succès !')
  1516.                     );
  1517.                     return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
  1518.                 }
  1519.                 /*
  1520.                         $articles = array(
  1521.                             'articles'=>$request->request->get('articles'),
  1522.                             'ids'=>$request->request->get('ids'),
  1523.                             'qtes'=>$request->request->get('qtes'),
  1524.                             'pumps'=>$request->request->get('pumps'),
  1525.                             'parents'=>$request->request->get('parents'),
  1526.                             'test'=>$request->query->get('ids'),
  1527.                             'modifies'=>$request->request->get('modifies'),
  1528.                         );
  1529.                                              *
  1530.                                              */
  1531.                 $articles = [
  1532.                     'articles'          => $request->request->all('articles'),
  1533.                     'ids'               => $request->request->all('ids'),
  1534.                     'idsTmp'            => $request->request->all('idsTmp'),
  1535.                     'qtes'              => $request->request->all('qtes'),
  1536.                     'pumps'             => $request->request->all('pumps'),
  1537.                     'cumps'             => $request->request->all('cumps'),
  1538.                     'parents'           => $request->request->all('parents'),
  1539.                     'test'              => $request->query->all('ids'),
  1540.                     'modifies'          => $request->request->all('modifies'),
  1541.                     'articlesComposant' => $request->request->all('articlesComposant'),
  1542.                 ];
  1543.                 $fabricationsIds $request->request->all('fabricationsIds');
  1544.                 $fabrications = [
  1545.                     'ids'       => $fabricationsIds,
  1546.                     'quantites' => $request->request->all('fabricationsQtes'),
  1547.                     'generer'   => [],
  1548.                 ];
  1549.                 $articlesByFabrication = [];
  1550.                 if (count($fabricationsIds) > 0) {
  1551.                     foreach ($fabricationsIds as $fabricationId) {
  1552.                         $fabrications['generer'][] = $request->request->get('g_'.$fabricationId);
  1553.                         $articlesByFabrication[$fabricationId] = [
  1554.                             'articles'          => $articles['articles'][$fabricationId],
  1555.                             'ids'               => $articles['ids'][$fabricationId],
  1556.                             'idsTmp'            => $articles['idsTmp'][$fabricationId],
  1557.                             'qtes'              => $articles['qtes'][$fabricationId],
  1558.                             'pumps'             => $articles['pumps'][$fabricationId],
  1559.                             'cumps'             => $articles['cumps'][$fabricationId],
  1560.                             'parents'           => $articles['parents'][$fabricationId],
  1561.                             'test'              => $articles['ids'][$fabricationId],
  1562.                             'modifies'          => $articles['modifies'][$fabricationId],
  1563.                             'articlesComposant' => $articles['articlesComposant'][$fabricationId],
  1564.                         ];
  1565.                     }
  1566.                     foreach ($articles['idsTmp'][$fabricationId] as $key => $id) {
  1567.                         if ($request->request->get('g_'.$id) != '') {
  1568.                             $articlesByFabrication[$fabricationId]['fabrications'][$key] = $request->request->get('g_'.$id);
  1569.                         }
  1570.                         /*
  1571.                                 $this->addFlash(
  1572.                                     'warning',
  1573.                                     $id
  1574.                                 );
  1575.                              *
  1576.                              */
  1577.                     }
  1578.                     //\Doctrine\Common\Util\Debug::dump($articlesByFabrication);
  1579.                     $valider $request->request->get('valider');
  1580.                     $valeurs = ['articles' => $articlesByFabrication'valider' => $valider'fabrications' => $fabrications];
  1581.                     $fabricationService->sauvegarderFabricationMultiple($fabricationMultiple$valeurs);
  1582.                     $this->addFlash(
  1583.                         'notice',
  1584.                         $translator->trans('Fabrication Multiple sauvegardée avec succès !')
  1585.                     );
  1586.                     return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
  1587.                 } else {
  1588.                     $error "Veuillez insérer au moins un article.";
  1589.                 }
  1590.             } else {
  1591.                 $errors $validator->validate($fabricationMultiple);
  1592.             }
  1593.         }
  1594.         //\Doctrine\Common\Util\Debug::dump($composants);
  1595.         return $this->render('GestionComerciale/FabricationMultiple/modifier.html.twig', [
  1596.             'form'                => $form->createView(),
  1597.             'errors'              => $errors,
  1598.             'error'               => $error,
  1599.             'fabricationMultiple' => $fabricationMultiple,
  1600.             //'articles'=>$articles
  1601.             //'composants'=>$composants,
  1602.             //'quantiteFabricable' => $quantiteFabricable,
  1603.             //'articles' => $articles,
  1604.         ]);
  1605.     }
  1606.     /**
  1607.      * @Route("/fabrication-multiple/liste", name="dtc_fabrication_multiple_liste")
  1608.      */
  1609.     public function listerMultipleAction(Request $requestColonneTableauService $serviceColonneTableauEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1610.     {
  1611.         $this->datatableFabricationMultiple($request$em$datatable$translator);
  1612.         $tableauClassColonne = [];
  1613.         $param          $request->query->all();
  1614.         $statutCommande $request->query->get('statutCommande');
  1615.         $tableauClassColonne[] = [
  1616.             "className" => "visible_export colonne_id",
  1617.             "targets"   => [0],
  1618.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "id"),
  1619.             "orderable" => true,
  1620.         ];
  1621.         $tableauClassColonne[] = [
  1622.             "className" => "visible_export colonne_id text-center",
  1623.             "targets"   => [1],
  1624.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "date"),
  1625.             "orderable" => true,
  1626.         ];
  1627.         $tableauClassColonne[] = [
  1628.             "className" => "visible_export colonne_id text-center",
  1629.             "targets"   => [2],
  1630.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "dateFabrication"),
  1631.             "orderable" => true,
  1632.         ];
  1633.         $tableauClassColonne[] = [
  1634.             "className" => "visible_export colonne_id",
  1635.             "targets"   => [3],
  1636.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "reference"),
  1637.             "orderable" => true,
  1638.         ];
  1639.         $tableauClassColonne[] = [
  1640.             "className" => "visible_export colonne_id",
  1641.             "targets"   => [4],
  1642.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfs"),
  1643.             "orderable" => true,
  1644.         ];
  1645.         $tableauClassColonne[] = [
  1646.             "className" => "visible_export colonne_id",
  1647.             "targets"   => [5],
  1648.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfsRestant"),
  1649.             "orderable" => true,
  1650.         ];
  1651.         $tableauClassColonne[] = [
  1652.             "className" => "visible_export colonne_id",
  1653.             "targets"   => [6],
  1654.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "nbOfsReceptionnes"),
  1655.             "orderable" => true,
  1656.         ];
  1657.         $tableauClassColonne[] = [
  1658.             "className" => "visible_export colonne_id",
  1659.             "targets"   => [7],
  1660.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "commentaire"),
  1661.             "orderable" => true,
  1662.         ];
  1663.         $tableauClassColonne[] = [
  1664.             "className" => "visible_export colonne_id",
  1665.             "targets"   => [8],
  1666.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "equipier"),
  1667.             "orderable" => true,
  1668.         ];
  1669.         $tableauClassColonne[] = [
  1670.             "className" => "visible_export colonne_id",
  1671.             "targets"   => [9],
  1672.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(FabricationMultiple::class, "statut"),
  1673.             "orderable" => true,
  1674.         ];
  1675.         $tableauClassColonne[] = ["orderable" => false"className" => "colonne_id""targets" => [10], "visible" => true];
  1676.         return $this->render('GestionComerciale/FabricationMultiple/lister.html.twig', [
  1677.             'tableauClassColonne' => $tableauClassColonne,
  1678.             'statutCommande'      => $statutCommande,
  1679.             'statuts'             => $em->getRepository(StatutFabrication::class)->findBy(['ordre' => [012345678,9,10,11,12]]),
  1680.             'parametres'          => $param,
  1681.         ]);
  1682.     }
  1683.     /**
  1684.      * Grid action
  1685.      * @return Response
  1686.      */
  1687.     /**
  1688.      * @Route("/fabrication-multiple/grid", name="dtc_fabrication_multiple_liste_grid")
  1689.      */
  1690.     public function gridMultipleAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1691.     {
  1692.         return $this->datatableFabricationMultiple($request$em$datatable$translator)->execute();
  1693.     }
  1694.     /**
  1695.      * set datatable configs
  1696.      *
  1697.      * @return \App\Library\Datatable\Util\Datatable
  1698.      */
  1699.     private function datatableFabricationMultiple(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1700.     {
  1701.         $param $request->query->all();
  1702.         $datatable->setEntity(FabricationMultiple::class, "f")
  1703.                   ->setFields(
  1704.                       [
  1705.                           $translator->trans("ID")                  => 'f.id',
  1706.                           $translator->trans("Date")                => 'f.date',
  1707.                           $translator->trans("Date de fabrication") => 'f.dateFabrication',
  1708.                           $translator->trans("Réf")                 => "f.reference",
  1709.                           $translator->trans("Nb ofs")              => "f.id",
  1710.                           $translator->trans("Nb ofs restant")      => "f.id",
  1711.                           $translator->trans("Nb ofs réceptionnés") => "f.id",
  1712.                           $translator->trans("Commentaire")         => "f.commentaire",
  1713.                           $translator->trans("Equipier")            => "f.id",
  1714.                           'Statut'                                  => 's.libelle',
  1715.                           $translator->trans("Actions")             => 'f.id',
  1716.                           "_identifier_"                            => 'f.id',
  1717.                       ]
  1718.                   )
  1719.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1720.                   ->addJoin('f.statutFabricationMultiple''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1721.                   ->addJoin('f.magasinier''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1722.             //->addJoin('f.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1723.                   ->setRenderers(
  1724.                 [
  1725.                     => [
  1726.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1727.                         'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier'],
  1728.                     ],
  1729.                     1  => [
  1730.                         'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  1731.                     ],
  1732.                     2  => [
  1733.                         'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  1734.                     ],
  1735.                     3  => [
  1736.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1737.                         'params' => ['edit_route' => 'dtc_fabrication_multiple_modifier'],
  1738.                     ],
  1739.                     4  => [
  1740.                         'view'   => 'FO/DataTable/nbOfs.html.twig',
  1741.                         'params' => ['param' => 'total'],
  1742.                     ],
  1743.                     5  => [
  1744.                         'view'   => 'FO/DataTable/nbOfs.html.twig',
  1745.                         'params' => ['param' => 'restant'],
  1746.                     ],
  1747.                     6  => [
  1748.                         'view'   => 'FO/DataTable/nbOfs.html.twig',
  1749.                         'params' => ['param' => 'receptionne'],
  1750.                     ],
  1751.                     8  => [
  1752.                         'view'   => 'FO/DataTable/prenom_nom.html.twig',
  1753.                         'params' => ['typeUtilisateur' => 'magasinier'],
  1754.                     ],
  1755.                     10 => [
  1756.                         'view'   => 'FO/DataTable/actions.html.twig',
  1757.                         'params' => [
  1758.                             'edit_route' => 'dtc_fabrication_multiple_modifier',
  1759.                             //'supprimer_route'    => 'dtc_fabrication_multiple_supprimer',
  1760.                             'objet'      => FabricationMultiple::class,
  1761.                         ],
  1762.                     ],
  1763.                 ]
  1764.             )
  1765.             //->setWhere('s.ordre IN (1,2,3) AND (f.prestation = 0 or f.prestation is null)')
  1766.                   ->setSearch(true)
  1767.                   ->setSearchFields([0379])
  1768.                   ->setOrder('f.id''DESC')
  1769.                   ->setMultiple(
  1770.                       [/*
  1771.                                 'fabrication-multiple' => array(
  1772.                                     'title' => 'fabrication multiple',
  1773.                                     'route' => 'dtc_fabrication_multiple_ajouter'
  1774.                                 ),
  1775.                                  *
  1776.                                  */
  1777.                       ]
  1778.                   );
  1779.         $where      '(f.prestation = 0 or f.prestation is null)';
  1780.         $parameters = [];
  1781.         /*
  1782.             if(is_object($request)){
  1783.                 $statutCommande = $request->query->get('statutCommande');
  1784.                 if ($statutCommande == '' || $statutCommande == '3'){
  1785.                     if ($where != '') $where .= ' AND ';
  1786.                     $where .= 's.ordre IN (:statutCommande)';
  1787.                     $parameters['statutCommande'] = array(1,2,3);
  1788.                     //$parameters['typeDocumentCommercial'] = 3;
  1789.                 } else {
  1790.                     if ($where != '') $where .= ' AND ';
  1791.                     $where .= 's.ordre = :statutCommande';
  1792.                     $parameters['statutCommande'] = $statutCommande;
  1793.                     //$parameters['typeDocumentCommercial'] = 3;
  1794.                 }
  1795.             } else {
  1796.                 $where .= 's.ordre IN (:statutCommande)';
  1797.                 //$parameters['statutCommande'] = array(2,3,4);
  1798.                 $parameters['statutCommande'] = array(2,3);
  1799.                 //$parameters['typeDocumentCommercial'] = 3;
  1800.             }
  1801.             */
  1802.         if (array_key_exists('parametres'$param)) {
  1803.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  1804.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  1805.                 $param["parametres"]["date_debut"]->setTime(000000);
  1806.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  1807.                 if ($where != "") {
  1808.                     $where .= " AND ";
  1809.                 }
  1810.                 $where .= "f.dateFabrication >= :date_debut";
  1811.             }
  1812.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  1813.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  1814.                 $param["parametres"]["date_fin"]->setTime(235959);
  1815.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  1816.                 if ($where != "") {
  1817.                     $where .= " AND ";
  1818.                 }
  1819.                 $where .= "f.dateFabrication <= :date_fin";
  1820.             }
  1821.             $statuts $em->getRepository(StatutFabrication::class)->findBy(['ordre' =>  [012345678,9,10,11,12]]);
  1822.             $statutIds = [];
  1823.             foreach ($statuts as $statut) {
  1824.                 $key $statut->getLibelleNettoye();
  1825.                 if (array_key_exists($key$param["parametres"])) {
  1826.                     $statutIds[] = $statut->getOrdre();
  1827.                 }
  1828.             }
  1829.             //print_r($statutIds);
  1830.             if (count($statutIds) > 0) {
  1831.                 if ($where != "") {
  1832.                     $where .= " AND ";
  1833.                 }
  1834.                 $where                 .= "s.ordre IN (:statuts)";
  1835.                 $parameters['statuts'] = $statutIds;
  1836.             }
  1837.         } else {
  1838.             if ($where != "") {
  1839.                 $where .= " AND ";
  1840.             }
  1841.             $where                        .= 's.ordre IN (:statutCommande)';
  1842.             $parameters['statutCommande'] = [23];
  1843.         }
  1844.         if ($where != '') {
  1845.             //echo $where;
  1846.             $datatable->setWhere($where$parameters);
  1847.         }
  1848.        // echo $where;
  1849.        // print_r($parameters);
  1850.         //dump($parameters);
  1851.         return $datatable;
  1852.     }
  1853.     /**
  1854.      * @Route("/fabrication-multiple-depuis-suggestion/nouvelle/", name="dtc_fabrication_multiple_ajouter_depuis_suggestion")
  1855.      */
  1856.     public function ajouterMultipleDepuisSuggestionAction(Request $requestEntityManagerInterface $emArticleService $articleService)
  1857.     {
  1858.         $user                $this->getUser();
  1859.         $fabricationMultiple = new FabricationMultiple;
  1860.         $fabricationMultiple->setUtilisateur($user);
  1861.         $date = new \DateTime();
  1862.         $fabricationMultiple->setDate($date);
  1863.         $repoStatutFabrication $em->getRepository(StatutFabrication::class);
  1864.         $statutFabrication     $repoStatutFabrication->findOneBy(["ordre" => "1"]);
  1865.         $fabricationMultiple->setStatutFabricationMultiple($statutFabrication);
  1866.         //$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
  1867.         //$composants = $fabricationService->getArticlesCommande($fabrication);
  1868.         $quantite 1;
  1869.         $em->persist($fabricationMultiple);
  1870.         $em->flush();
  1871.         $repoArticle $em->getRepository(Article::class);
  1872.         $data $request->get('dataTables');
  1873.         $ids  $data['actions'];
  1874.         foreach ($ids as $id) {
  1875.             $fabrication = new Fabrication();
  1876.             $article     $repoArticle->find($id);
  1877.             if ($article->getLibelle() == '') {
  1878.                 $article->setLibelle('_');
  1879.                 $em->persist($article);
  1880.                 //$em->flush();
  1881.             }
  1882.             $quantite $articleService->quantiteAfabriquer($article);
  1883.             $fabrication->setArticle($article);
  1884.             $fabrication->setDate($date);
  1885.             $fabrication->setQuantite($quantite);
  1886.             $fabrication->setStatutFabrication($statutFabrication);
  1887.             $fabricationMultiple->addFabrication($fabrication);
  1888.         }
  1889.         $em->persist($fabricationMultiple);
  1890.         $em->flush();
  1891.         $url $this->generateUrl('dtc_fabrication_multiple_modifier', ['id' => $fabricationMultiple->getId()]);
  1892.         return new JsonResponse(['url' => $url'valide' => '1']);
  1893.     }
  1894.     /**
  1895.      * @Route("/fabrication-multiple-depuis-suggestion-v2/nouvelle/", name="dtc_fabrication_multiple_ajouter_depuis_suggestion_v2")
  1896.      */
  1897.     public function ajouterMultipleDepuisSuggestionV2Action(Request $requestEntityManagerInterface $emNumerotationDocumentService $numerotationService)
  1898.     {
  1899.         $user                $this->getUser();
  1900.         $fabricationMultiple = new FabricationMultiple;
  1901.         $fabricationMultiple->setUtilisateur($user);
  1902.         $date = new \DateTime();
  1903.         $fabricationMultiple->setDate($date);
  1904.         $repoStatutFabrication    $em->getRepository(StatutFabrication::class);
  1905.         $repo_article_a_fabriquer $em->getRepository(ArticleAfabriquer::class);
  1906.         $statutFabrication $repoStatutFabrication->findOneBy(["ordre" => "1"]);
  1907.         $fabricationMultiple->setStatutFabricationMultiple($statutFabrication);
  1908.         //numeroter
  1909.         $fabricationMultiple->setReference($numerotationService->generer($fabricationMultiple));
  1910.         //$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
  1911.         //$composants = $fabricationService->getArticlesCommande($fabrication);
  1912.         $quantite 1;
  1913.         $fabricationMultiple->setUtilisateur($user);
  1914.         $fabricationMultiple->setMagasinier($user);
  1915.         $em->persist($fabricationMultiple);
  1916.         $em->flush();
  1917.         $data $request->get('dataTables');
  1918.         $ids  $data['actions'];
  1919.         foreach ($ids as $id) {
  1920.             $fabrication = new Fabrication();
  1921.             $fabrication->setUtilisateur($user);
  1922.             $fabrication->setMagasinier($user);
  1923.             $articleAfabriquer $repo_article_a_fabriquer->find($id);
  1924.             $article           $articleAfabriquer->getArticle();
  1925.             if ($article->getLibelle() == '') {
  1926.                 $article->setLibelle('_');
  1927.                 $em->persist($article);
  1928.                 //$em->flush();
  1929.             }
  1930.             //$quantite = $articleService->quantiteAfabriquer($article);
  1931.             $fabrication->setArticle($article);
  1932.             $ac $articleAfabriquer->getArticleCommande();
  1933.             if (is_object($ac)) {
  1934.                 $fabrication->setArticleCommandeCommandeClient($ac);
  1935.                 $fabrication->setCommande($ac->getCommande());
  1936.             }
  1937.             $fabrication->setDate($date);
  1938.             $fabrication->setQuantite($articleAfabriquer->getQuantite());
  1939.             $fabrication->setStatutFabrication($statutFabrication);
  1940.             //numeroter
  1941.             $fabrication->setReference($numerotationService->generer($fabrication));
  1942.             $fabrication->setFabricationMultiple($fabricationMultiple);
  1943.             $em->persist($fabrication);
  1944.             $em->flush();
  1945.             //$fabricationMultiple->addFabrication($fabrication);
  1946.         }
  1947.         //$em->persist($fabricationMultiple);
  1948.         //$em->flush();
  1949.         $url $this->generateUrl('dtc_fabrication_multiple_modifier', ['id' => $fabricationMultiple->getId()]);
  1950.         return new JsonResponse(['url' => $url'valide' => '1']);
  1951.     }
  1952.     /**
  1953.      * @Route("/fabrication-multiple/modifier/{id}", name="dtc_fabrication_multiple_modifier")
  1954.      */
  1955.     public function modifierMultipleAction(Request             $requestFabricationMultiple $fabricationMultipleEntityManagerInterface $em
  1956.                                            TranslatorInterface $translatorValidatorInterface $validatorFabricationService $fabricationService
  1957.     ) {
  1958.         set_time_limit(600);
  1959.         //set_time_limit(10);
  1960.         $user $this->getUser();
  1961.         $fabricationMultiple->setUtilisateur($user);
  1962.         //$quantiteFabricable = $fabricationService->quantiteFabricable($fabrication);
  1963.         //$composants = $fabricationService->getArticlesCommande($fabrication);
  1964.         $form $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
  1965.         $errors "";
  1966.         $form->handleRequest($request);
  1967.         if ($form->isSubmitted()) {
  1968.             $droit $this->isGranted(EntityVoter::UPDATEFabrication::class);
  1969.             if ( ! $droit) {
  1970.                 return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
  1971.             }
  1972.             if ($form->isValid()) {
  1973.                 if ($request->request->get('annuler') != '') {
  1974.                     $fabricationService->annulerFabricationMultiple($fabricationMultiple);
  1975.                     $this->addFlash('notice'$translator->trans('Fabrication multiple annulée avec succès !'));
  1976.                     return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
  1977.                 }
  1978.                 $articles = [
  1979.                     'articles'          => $request->request->get('articles'),
  1980.                     'ids'               => $request->request->get('ids'),
  1981.                     'idsTmp'            => $request->request->get('idsTmp'),
  1982.                     'qtes'              => $request->request->get('qtes'),
  1983.                     'pumps'             => $request->request->get('pumps'),
  1984.                     'cumps'             => $request->request->get('cumps'),
  1985.                     'parents'           => $request->request->get('parents'),
  1986.                     'test'              => $request->query->get('ids'),
  1987.                     'modifies'          => $request->request->get('modifies'),
  1988.                     'articlesComposant' => $request->request->get('articlesComposant'),
  1989.                 ];
  1990.                 //\Doctrine\Common\Util\Debug::dump($articles);
  1991.                 //exit;
  1992.                 $fabricationsIds $request->request->get('fabricationsIds');
  1993.                 $fabrications = [
  1994.                     'ids'       => $fabricationsIds,
  1995.                     'quantites' => $request->request->get('fabricationsQtes'),
  1996.                     'generer'   => [],
  1997.                 ];
  1998.                 $articlesByFabrication = [];
  1999.                 foreach ($fabricationsIds as $fabricationId) {
  2000.                     $fabrications['generer'][] = $request->request->get('g_'.$fabricationId);
  2001.                     /*
  2002.                             $this->addFlash(
  2003.                     'warning',
  2004.                     $request->request->get('g_'.$fabricationId)
  2005.                 );
  2006.                              * *
  2007.                              */
  2008.                     $articlesByFabrication[$fabricationId] = [
  2009.                         'articles'          => $articles['articles'][$fabricationId],
  2010.                         'ids'               => $articles['ids'][$fabricationId],
  2011.                         'idsTmp'            => $articles['idsTmp'][$fabricationId],
  2012.                         'qtes'              => $articles['qtes'][$fabricationId],
  2013.                         'pumps'             => $articles['pumps'][$fabricationId],
  2014.                         'cumps'             => $articles['cumps'][$fabricationId],
  2015.                         'parents'           => $articles['parents'][$fabricationId],
  2016.                         'test'              => $articles['ids'][$fabricationId],
  2017.                         'modifies'          => $articles['modifies'][$fabricationId],
  2018.                         'articlesComposant' => $articles['articlesComposant'][$fabricationId],
  2019.                     ];
  2020.                     foreach ($articles['idsTmp'][$fabricationId] as $key => $id) {
  2021.                         if ($request->request->get('g_'.$id) != '') {
  2022.                             $articlesByFabrication[$fabricationId]['fabrications'][$key] = $request->request->get('g_'.$id);
  2023.                             /*
  2024.                                     $this->addFlash(
  2025.                                         'warning',
  2026.                                         $request->request->get('g_'.$id)
  2027.                                     );
  2028.                                     */
  2029.                         }
  2030.                     }
  2031.                 }
  2032.                 // \Doctrine\Common\Util\Debug::dump($articlesByFabrication);
  2033.                 // exit;
  2034.                 $valider $request->request->get('valider');
  2035.                 $valeurs = ['articles' => $articlesByFabrication'valider' => $valider'fabrications' => $fabrications];
  2036.                 //\Doctrine\Common\Util\Debug::dump($valeurs);
  2037.                 $fabricationService->sauvegarderFabricationMultiple($fabricationMultiple$valeurs);
  2038.                 //var_dump('test2');die;
  2039.                 $this->addFlash('notice'$translator->trans('Fabrication multiple sauvegardée avec succès !'));
  2040.                 return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
  2041.             } else {
  2042.                 $errors $validator->validate($fabricationMultiple);
  2043.             }
  2044.         }
  2045.         //\Doctrine\Common\Util\Debug::dump($composants);
  2046.         return $this->render('GestionComerciale/FabricationMultiple/modifier.html.twig', [
  2047.             'form'                => $form->createView(),
  2048.             'errors'              => $errors,
  2049.             'fabricationMultiple' => $fabricationMultiple,
  2050.             //'articles'=>$articles
  2051.             //'composants'=>$composants,
  2052.             //'quantiteFabricable' => $quantiteFabricable,
  2053.             //'articles' => $articles,
  2054.         ]);
  2055.     }
  2056.     /**
  2057.      * @Route("/fabrication-multiple/liste-articles/{id}", name="dtc_fabrication_multiple_liste_articles")
  2058.      */
  2059.     public function listerMultipleArticlesAction(Request             $requestFabricationMultiple $fabricationMultipleEntityManagerInterface $em,
  2060.                                                  TranslatorInterface $translatorValidatorInterface $validatorArticleService $articleService
  2061.     ) {
  2062.         $aCommander  $request->query->get('aCommander');
  2063.         $titre_modal $translator->trans("Composants");
  2064.         if ($aCommander) {
  2065.             $titre_modal $translator->trans("Composants à commander");
  2066.         }
  2067.         $user                $this->getUser();
  2068.         $repoArticle         $em->getRepository(Article::class);
  2069.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  2070.         $repo_fabrication    $em->getRepository(Fabrication::class);
  2071.         $date                = new \DateTime();
  2072.         /*
  2073.                             $url = $this->generateUrl('dtc_fabrication_liste', array());//dtc_commande_fournisseur_liste
  2074.                             return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
  2075.             }
  2076.              else {
  2077.                 $errors = $validator->validate($or);
  2078.                 $rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$fabrication->getId(),'type'=>''));
  2079.                 return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  2080.             }
  2081.         }
  2082.          *
  2083.          */
  2084.         $donnees            = [];
  2085.         $composantsSansArbo = [];
  2086.         $composantsAvecArbo = [];
  2087.         $action $request->query->get('export');
  2088.         $handle    fopen('php://memory''r+');
  2089.         $delimiter ';';
  2090.         $entete = ['Qte''Reference''Libelle''Stock''RaL client''RaL fourn.''Qte mini''Qte maxi''Besoin''Qte mini conseillee''Qte maxi conseillee'];
  2091.         fputcsv($handle$entete$delimiter);
  2092.         //$fabrications = $fabricationMultiple->getFabrications();
  2093.         $fabrications     $repo_fabrication->findBy([
  2094.                                                           'fabricationMultiple' => $fabricationMultiple,
  2095.                                                           'sousFabrication'     => null,
  2096.                                                       ]);
  2097.         $donnees['infos'] = [];
  2098.         for ($i 0$i count($fabrications); $i++) {
  2099.             $fabrication $fabrications[$i];
  2100.             $article     $fabrication->getArticle();
  2101.             $quantite    $fabrication->getQuantite();
  2102.             //$donnees = $this->getDonneesArticle($article, $quantite, $donnees);
  2103.             $articlesCommande $repoArticleCommande->findByFabrication($fabrication);
  2104.             for ($j 0$j count($articlesCommande); $j++) {
  2105.                 $articleCommande $articlesCommande[$j];
  2106.                 $articleTmp      $articleCommande->getArticle();
  2107.                 if ($articleTmp->getMainOeuvre() !== true) {
  2108.                     $quantiteTmp $articleCommande->getQuantite();
  2109.                     //var_dump($articleTmp->getReference().' '.$quantiteTmp);
  2110.                     if ($quantite 0) {
  2111.                         //$besoin = $quantite;
  2112.                         $besoin1            $quantiteTmp;
  2113.                         $donnees['infos'][] = '- '.$articleTmp->getReference().':'.$besoin1.' -';
  2114.                     } else {
  2115.                         $besoin1 0;
  2116.                     }
  2117.                     $stock $articleTmp->getStock();
  2118.                     $ral   $articleService->ralClient($articleTmp);
  2119.                     $ralF  $articleTmp->getRalFournisseur();
  2120.                     $besoin $stock $besoin1 $ral $ralF;
  2121.                     if ($besoin 0) {
  2122.                         $besoin 0;
  2123.                     } else {
  2124.                         $besoin abs($besoin);
  2125.                     }
  2126.                     if ( ! $aCommander || ($aCommander && $besoin 0)) {
  2127.                         $donnees $this->getDonneesArticle($articleTmp$quantiteTmp$donnees$besoin$articleService);
  2128.                         //if ($j == 0) var_dump($donnees);
  2129.                         if (count($articleCommande->getArticlesCommande()) > 0) {
  2130.                             //var_dump('enfants '.count($articleCommande->getArticlesCommande()));
  2131.                             $donnees[$articleTmp->getId()]['enfants'] = 'oui';
  2132.                             $donnees                                  $this->getArticlesCommandeEnfants($articleCommande$donnees$besoin$aCommander$articleService);
  2133.                         }
  2134.                     }
  2135.                 }
  2136.             }
  2137.         }
  2138.         //var_dump($donnees);
  2139.         if ($action == "1") {
  2140.             $count 1;
  2141.             foreach ($donnees as $donnee) {
  2142.                 if ($count != && $donnee['enfants'] == 'non' && (($donnee['besoin'] != && $aCommander == 'true') || $aCommander != 'true')) {
  2143.                     unset($donnee['enfants']);
  2144.                     fputcsv($handle$donnee$delimiter);
  2145.                 }
  2146.                 $count++;
  2147.             }
  2148.             rewind($handle);
  2149.             $content stream_get_contents($handle);
  2150.             fclose($handle);
  2151.             $filename 'composans_'.$fabricationMultiple->getReference().'_'.date_format($date'Ymd_hms').'.csv';
  2152.             //$em->flush();
  2153.             return new Response($content200, [
  2154.                 'Content-Type'        => 'application/force-download; charset=ISO-8859-1',
  2155.                 'Content-Disposition' => 'attachment; filename="'.$filename.'"',
  2156.             ]);
  2157.         }
  2158.         $rendu $this->renderView(
  2159.             'GestionComerciale/FabricationMultiple/liste-articles.html.twig',
  2160.             ['fabricationMultiple' => $fabricationMultiple'donnees' => $donnees'aCommander' => $aCommander]
  2161.         );
  2162.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2163.     }
  2164.     private function getArticlesCommandeEnfants($articleCommande$donnees$besoinParent$aCommander nullArticleService $articleService)
  2165.     {
  2166.         $articleParent     $articleCommande->getArticle();
  2167.         $articlesCommandes $articleCommande->getArticlesCommande();
  2168.         for ($i 0$i count($articlesCommandes); $i++) {
  2169.             $ac      $articlesCommandes[$i];
  2170.             $article $ac->getArticle();
  2171.             if ($article->getMainOeuvre() !== true) {
  2172.                 $quantite $ac->getQuantite();
  2173.                 if ($besoinParent 0) {
  2174.                     $besoin1 $this->getMultiplicateurResteACommander($articleParent$besoinParent$articleService) * $quantite;
  2175.                     //$besoin = 7;
  2176.                     //$besoin = $donnees[$key]['stock'] - $besoin - $donnees[$key]['ral'] + $donnees[$key]['ralF'];
  2177.                     $donnees['infos'][] = '- '.$quantite.' -';
  2178.                 } else {
  2179.                     $besoin1 0;
  2180.                 }
  2181.                 $stock $article->getStock();
  2182.                 $ral   $articleService->ralClient($article);
  2183.                 $ralF  $article->getRalFournisseur();
  2184.                 $besoin $stock $besoin1 $ral $ralF;
  2185.                 if ($besoin 0) {
  2186.                     $besoin 0;
  2187.                 } else {
  2188.                     $besoin abs($besoin);
  2189.                 }
  2190.                 if ( ! $aCommander || ($aCommander && $besoin 0)) {
  2191.                     $donnees $this->getDonneesArticle($article$quantite$donnees$besoin$articleService);
  2192.                     if (count($ac->getArticlesCommande()) > && $besoin 0) {
  2193.                         $donnees[$article->getId()]['enfants'] = '->oui : '.count($articlesCommandes);
  2194.                         $donnees                               $this->getArticlesCommandeEnfants($ac$donnees$besoin$aCommander$articleService);
  2195.                     }
  2196.                 }
  2197.             }
  2198.         }
  2199.         return $donnees;
  2200.     }
  2201.     private function getMultiplicateurResteACommander($article$quantiteArticleService $articleService)
  2202.     {
  2203.         $stock          $article->getStock();
  2204.         $ralFournisseur $article->getRalFournisseur();
  2205.         $ralClient      $articleService->ralClient($article);
  2206.         $besoin floatval($stock) - floatval($quantite) - floatval($ralClient) - floatval($ralFournisseur);
  2207.         if ($besoin 0) {
  2208.             return 0;
  2209.         }
  2210.         $multiplicateur abs($besoin) / $quantite;
  2211.         return $multiplicateur;
  2212.     }
  2213.     private function getDonneesArticle($article$quantite$donnees$besoinArticleService $articleService)
  2214.     {
  2215.         $key                        $article->getId();
  2216.         $donnees[$key]['reference'] = $article->getReference();
  2217.         $donnees[$key]['libelle']   = $article->getLibelle();
  2218.         $donnees[$key]['stock']     = $article->getStock();
  2219.         $donnees[$key]['ral']       = $articleService->ralClient($article);
  2220.         $donnees[$key]['ralF']      = $article->getRalFournisseur();
  2221.         $donnees[$key]['mini']      = $article->getSeuilMiniCommandeFournisseur();
  2222.         $donnees[$key]['maxi']      = $article->getSeuilMaxiCommandeFournisseur();
  2223.         $donnees[$key]['nonStocke'] = $article->getNonStocke();
  2224.         if (array_key_exists($key$donnees) && array_key_exists('besoin'$donnees[$key])) {
  2225.             $donnees[$key]['besoin'] += $besoin;
  2226.         } else {
  2227.             $donnees[$key]['besoin'] = $besoin;
  2228.         }
  2229.         if (array_key_exists($key$donnees) && array_key_exists('quantite'$donnees[$key])) {
  2230.             $donnees[$key]['quantite'] += $quantite;
  2231.         } else {
  2232.             $donnees[$key]['quantite'] = $quantite;
  2233.         }
  2234.         if ($donnees[$key]['mini'] != '') {
  2235.             $qteConseilleeMini $donnees[$key]['mini'] - $besoin;
  2236.             if ($qteConseilleeMini 0) {
  2237.                 $donnees[$key]['qteConseilleeMini'] = $qteConseilleeMini;
  2238.             } else {
  2239.                 $donnees[$key]['qteConseilleeMini'] = '';
  2240.             }
  2241.         } else {
  2242.             $donnees[$key]['qteConseilleeMini'] = '';
  2243.         }
  2244.         if ($donnees[$key]['maxi'] != '') {
  2245.             $qteConseilleeMaxi $donnees[$key]['maxi'] - $besoin;
  2246.             if ($qteConseilleeMaxi 0) {
  2247.                 $donnees[$key]['qteConseilleeMaxi'] = $qteConseilleeMaxi;
  2248.             } else {
  2249.                 $donnees[$key]['qteConseilleeMaxi'] = '';
  2250.             }
  2251.         } else {
  2252.             $donnees[$key]['qteConseilleeMaxi'] = '';
  2253.         }
  2254.         if ( ! array_key_exists('enfants'$donnees[$key])) {
  2255.             $donnees[$key]['enfants'] = 'non';
  2256.         }
  2257.         return $donnees;
  2258.     }
  2259.     /**
  2260.      * @Route("/fabrication/reception-multiple", name="dtc_fabrication_reception_multiple")
  2261.      */
  2262.     public function receptionMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorFabricationService $fabricationService)
  2263.     {
  2264.         $data $request->get('dataTables');
  2265.         $ids  $data['actions'];
  2266.         $repo $em->getRepository(Fabrication::class);
  2267.         for ($i 0$i count($ids); $i++) {
  2268.             $fabrication $repo->find($ids[$i]);
  2269.             if (is_object($fabrication)) {
  2270.                 $fabricationService->creerMvtStock($fabrication);
  2271.             }
  2272.         }
  2273.         //$em->flush();
  2274.         $this->addFlash(
  2275.             'notice',
  2276.             $translator->trans('Fabrications réceptionnées avec succès ! Les mouvements de stock ont étés créés.')
  2277.         );
  2278.         $process  = new Process(['php''bin/console''articlesComposesModifierCondHa:maj']);
  2279.         $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  2280.         $process->setOptions(['create_new_console' => true]);
  2281.         $process->start();
  2282.         $url $this->generateUrl('dtc_fabrication_liste', []);
  2283.         return new JsonResponse(['url' => $url'valide' => '1']);
  2284.     }
  2285.     /**
  2286.      * @Route("/defabrication/nouvelle/", name="dtc_defabrication_ajouter")
  2287.      */
  2288.     public function defabriquerAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validatorFabricationService $fabricationService)
  2289.     {
  2290.         $repoArticle $em->getRepository(Article::class);
  2291.         $user        $this->getUser();
  2292.         $mvtStock    = new MouvementStock();
  2293.         $date        = new \DateTime();
  2294.         $mvtStock->setDate($date);
  2295.         $mvtStock->setDateMvt($date);
  2296.         $user $this->getUser();
  2297.         $form   $this->createForm(DefabriquerArticleType::class, $mvtStock);
  2298.         $errors "";
  2299.         $form->handleRequest($request);
  2300.         if ($form->isSubmitted()) {
  2301.             if ($form->isValid()) {
  2302.                 $fabricationService->creerMvtStockDefabrication($mvtStock$user);
  2303.                 $this->addFlash(
  2304.                     'notice',
  2305.                     $translator->trans('Article défabriqué avec succès !')
  2306.                 );
  2307.                 //\Doctrine\Common\Util\Debug::dump($idsArticle);
  2308.                 //return $this->redirectToRoute('dtc_carnet_fabrication_liste');
  2309.                 return $this->redirectToRoute('dtc_defabrication_ajouter', []);
  2310.             } else {
  2311.                 $errors $validator->validate($mvtStock);
  2312.             }
  2313.         }
  2314.         return $this->render('Articles/Article/defabriquer.html.twig', [
  2315.             'form'   => $form->createView(),
  2316.             //'fabrication'=>$fabrication,
  2317.             'errors' => $errors,
  2318.             //'id'=>$id
  2319.         ]);
  2320.     }
  2321.     /**
  2322.      * @Route("/fabrication/prestations", name="dtc_fabrication_prestations")
  2323.      */
  2324.     public function listerPrestationsAction(Request $requestEntityManagerInterface $em)
  2325.     {
  2326.         $repo_article        $em->getRepository(Article::class);
  2327.         $repo_fabrication    $em->getRepository(Fabrication::class);
  2328.         $fabrications        $repo_fabrication->getFabricationsAvecPrestation()->getQuery()->getResult();
  2329.         $tableauClassColonne '';
  2330.         return $this->render('GestionComerciale/Fabrication/lister-prestations.html.twig', [
  2331.             'fabrications'        => $fabrications,
  2332.             'typePrestations'     => $repo_article->findByPrestation(1),
  2333.             'tableauClassColonne' => $tableauClassColonne,
  2334.         ]);
  2335.     }
  2336.     /**
  2337.      * @Route("/fabrication-prestation/liste", name="dtc_fabrication_prestation_liste")
  2338.      */
  2339.     public function prestationListerAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  2340.     {
  2341.         $this->datatablePrestation($datatable$translator);
  2342.         $tableauClassColonne = [];
  2343.         $template            'GestionComerciale/Fabrication/lister-prestations.html.twig';
  2344.         return $this->render($template, [
  2345.             'tableauClassColonne' => $tableauClassColonne,
  2346.         ]);
  2347.     }
  2348.     /**
  2349.      * Grid action
  2350.      * @return Response
  2351.      */
  2352.     /**
  2353.      * @Route("/fabrication-prestation/grid", name="dtc_fabrication_prestation_liste_grid")
  2354.      */
  2355.     public function prestationGridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  2356.     {
  2357.         return $this->datatablePrestation($datatable$translator)->execute();
  2358.     }
  2359.     /**
  2360.      * set datatable configs
  2361.      *
  2362.      * @return \App\Library\Datatable\Util\Datatable
  2363.      */
  2364.     private function datatablePrestation(Datatable $datatableTranslatorInterface $translator)
  2365.     {
  2366.         $datatable->setEntity(FabricationMultiple::class, "f")
  2367.                   ->setFields(
  2368.                       [
  2369.                           $translator->trans("ID")                  => 'f.id',
  2370.                           $translator->trans("Réf")                 => "f.reference",
  2371.                           'Statut'                                  => 's.libelle',
  2372.                           //$translator->trans("Réf article") =>  "a.reference",
  2373.                           //$translator->trans("Libellé") =>  "a.libelle",
  2374.                           //$translator->trans("Quantité") =>  "f.quantite",
  2375.                           //$translator->trans("Quantité fabricable") =>  "a.id",
  2376.                           //$translator->trans("Quantité fabriquable") =>  "f.quantiteFabriquable",
  2377.                           $translator->trans("Date")                => 'f.date',
  2378.                           $translator->trans("Date de fabrication") => 'f.dateFabrication',
  2379.                           //$translator->trans("Statut") =>  's.libelle',
  2380.                           $translator->trans("Actions")             => 'f.id',
  2381.                           "_identifier_"                            => 'f.id',
  2382.                       ]
  2383.                   )
  2384.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2385.                   ->addJoin('f.statutFabricationMultiple''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2386.             //->addJoin('f.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2387.                   ->setRenderers(
  2388.                 [
  2389.                     => [
  2390.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2391.                         'params' => ['edit_route' => 'dtc_fabrication_prestation_modifier'],
  2392.                     ],
  2393.                     => [
  2394.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2395.                         'params' => ['edit_route' => 'dtc_fabrication_prestation_modifier'],
  2396.                     ],
  2397.                     /*
  2398.                                 4 => array(
  2399.                                     'view' => 'FO/DataTable/ajout_class.html.twig',
  2400.                                     'params' => array('class'=>'text-center'),
  2401.                                 ),
  2402.                                 /*
  2403.                                 5 => array(
  2404.                                     'view' => 'GestionComerciale/Fabrication/quantite_controller.html.twig',
  2405.                                 ),
  2406.                                  *
  2407.                                  */
  2408.                     /*
  2409.                                 5 => array(
  2410.                                     'view' => 'FO/DataTable/ajout_class.html.twig',
  2411.                                     'params' => array('class'=>'text-center'),
  2412.                                 ),
  2413.                                  *
  2414.                                  */
  2415.                     => [
  2416.                         'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  2417.                     ],
  2418.                     => [
  2419.                         'view' => 'FO/DataTable/date.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  2420.                     ],
  2421.                     => [
  2422.                         'view'   => 'FO/DataTable/actions.html.twig',
  2423.                         'params' => [
  2424.                             'edit_route'      => 'dtc_fabrication_prestation_modifier',
  2425.                             'supprimer_route' => 'dtc_fabrication_prestation_supprimer',
  2426.                             'objet'           => FabricationMultiple::class,
  2427.                         ],
  2428.                     ],
  2429.                 ]
  2430.             )
  2431.                   ->setWhere('s.ordre IN (1,2,3) AND f.prestation = 1')
  2432.                   ->setSearch(true)
  2433.                   ->setSearchFields([1234])
  2434.             //->setOrder('s.ordre', 'DESC')
  2435.                   ->setMultiple(
  2436.                 [/*
  2437.                                 'fabrication-multiple' => array(
  2438.                                     'title' => 'fabrication multiple',
  2439.                                     'route' => 'dtc_fabrication_multiple_ajouter'
  2440.                                 ),
  2441.                                  *
  2442.                                  */
  2443.                 ]
  2444.             );
  2445.         return $datatable;
  2446.     }
  2447.     /**
  2448.      * @Route("/fabrication-prestation/ajouter", name="dtc_fabrication_prestation_ajouter")
  2449.      */
  2450.     public function fabricationPrestationAjouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  2451.     {
  2452.         $data $request->get('dataTables');
  2453.         $ids  $data['actions'];
  2454.         $repo $em->getRepository(Fabrication::class);
  2455.         $prestations = [];
  2456.         for ($i 0$i count($ids); $i++) {
  2457.             $fabrication $repo->find($ids[$i]);
  2458.             if (is_object($fabrication)) {
  2459.                 //$articleId = $fabrication->getArticle()->getId();
  2460.                 $key '';
  2461.                 foreach ($fabrication->getArticleCommande() as $ac) {
  2462.                     $article $ac->getArticle();
  2463.                     if ($article->getPrestation() == 1) {
  2464.                         $key $article->getId();
  2465.                     }
  2466.                 }
  2467.                 if ($key != '') {
  2468.                     /*
  2469.                     foreach($fabrication->getArticleCommande() as $ac){
  2470.                         $article = $ac->getArticle();
  2471.                         if($article->getPrestation() == 1){
  2472.                             if(array_key_exists($key, $prestations)) {
  2473.                                 $prestations[$key]['qtePrestation'] += $ac->getQuantite();
  2474.                             } else {
  2475.                                 $prestations[$key]['qtePrestation'] = $ac->getQuantite();
  2476.                             }
  2477.                         } else {
  2478.                             if(array_key_exists($article->getId(), $prestations[$key])) {
  2479.                                 $prestations[$key][$article->getId()]['quantite'] += $ac->getQuantite();
  2480.                             } else {
  2481.                                 $prestations[$key][$article->getId()]['article'] = $article;
  2482.                                 $prestations[$key][$article->getId()]['quantite'] = $ac->getQuantite();
  2483.                             }
  2484.                         }
  2485.                     }
  2486.                      *
  2487.                      */
  2488.                     $prestations[$key]['fabrications'][] = $fabrication;
  2489.                 }
  2490.             }
  2491.         }
  2492.         foreach ($prestations as $prestation) {
  2493.             $prestation = new FabricationMultiple;
  2494.             $prestation->setPrestation(true);
  2495.             foreach ($prestation['fabrications'] as $fabrication) {
  2496.                 $prestation->addFabricationsPrestation($fabrication);
  2497.             }
  2498.             $em->persist($prestation);
  2499.         }
  2500.         $em->flush();
  2501.         $this->addFlash(
  2502.             'notice',
  2503.             $translator->trans('Ordre de prestation ajouté avec suuccès!')
  2504.         );
  2505.         if (count($prestations) == 1) {
  2506.             $this->addFlash(
  2507.                 'notice',
  2508.                 $translator->trans('Ordre de prestation ajouté avec suuccès!')
  2509.             );
  2510.             $url $this->generateUrl('dtc_fabrication_prestation_modifier', ['id' => $prestation->getId()]);
  2511.         } else {
  2512.             $this->addFlash(
  2513.                 'notice',
  2514.                 $translator->trans('Ordres de prestation ajoutés avec suuccès!')
  2515.             );
  2516.             $url $this->generateUrl('dtc_fabrication_prestation_liste', []);
  2517.         }
  2518.         return new JsonResponse(['url' => $url'valide' => '1']);
  2519.     }
  2520.     /**
  2521.      * @Route("/fabrication-prestation/modifier/{id}", name="dtc_fabrication_prestation_modifier")
  2522.      */
  2523.     public function modifierPrestationAction(Request             $requestFabricationMultiple $fabricationMultipleEntityManagerInterface $em,
  2524.                                              TranslatorInterface $translatorValidatorInterface $validatorFabricationService $fabricationService
  2525.     ) {
  2526.         $user $this->getUser();
  2527.         $prestations = [];
  2528.         $key         '';
  2529.         foreach ($fabricationMultiple->getfabricationsPrestation() as $fabrication) {
  2530.             foreach ($fabrication->getArticleCommande() as $ac) {
  2531.                 $article $ac->getArticle();
  2532.                 if ($article->getPrestation() == 1) {
  2533.                     $key $article->getId();
  2534.                     if ( ! array_key_exists($key$prestations)) {
  2535.                         $prestations[$key]             = [];
  2536.                         $prestations[$key]['article']  = $article;
  2537.                         $prestations[$key]['articles'] = [];
  2538.                     }
  2539.                 }
  2540.             }
  2541.             if ($key != '') {
  2542.                 foreach ($fabricationMultiple->getFabricationsPrestation() as $fabrication) {
  2543.                     foreach ($fabrication->getArticleCommande() as $ac) {
  2544.                         $article $ac->getArticle();
  2545.                         if ($article->getPrestation() == 1) {
  2546.                             if (array_key_exists('qtePrestation'$prestations)) {
  2547.                                 $prestations[$key]['qtePrestation'] += $ac->getQuantite();
  2548.                             } else {
  2549.                                 $prestations[$key]['qtePrestation'] = $ac->getQuantite();
  2550.                             }
  2551.                         } else {
  2552.                             if (array_key_exists($article->getId(), $prestations[$key]['articles'])) {
  2553.                                 $prestations[$key]['articles'][$article->getId()]['quantite'] += $ac->getQuantite();
  2554.                             } else {
  2555.                                 $prestations[$key]['articles'][$article->getId()]['article']  = $article;
  2556.                                 $prestations[$key]['articles'][$article->getId()]['quantite'] = $ac->getQuantite();
  2557.                             }
  2558.                         }
  2559.                     }
  2560.                 }
  2561.             }
  2562.         }
  2563.         $form $this->createForm(FabricationMultipleType::class, $fabricationMultiple);
  2564.         $errors "";
  2565.         $form->handleRequest($request);
  2566.         if ($form->isSubmitted()) {
  2567.             $droit $this->isGranted(EntityVoter::UPDATEFabricationMultiple::class);
  2568.             if ( ! $droit) {
  2569.                 return $this->redirectToRoute('dtc_fabrication_prestation_modifier', ["id" => $fabricationMultiple->getId()]);
  2570.             }
  2571.             if ($form->isValid()) {
  2572.                 if ($request->request->get('annuler') != '') {
  2573.                     $fabricationService->annulerFabricationPrestation($fabricationMultiple);
  2574.                     $this->addFlash(
  2575.                         'notice',
  2576.                         $translator->trans('Prestation annulée avec succès !')
  2577.                     );
  2578.                     return $this->redirectToRoute('dtc_fabrication_multiple_liste', []);
  2579.                 }
  2580.                 //$fabricationService->sauvegarderFabricationMultiple($fabricationMultiple,$valeurs);
  2581.                 $this->addFlash(
  2582.                     'notice',
  2583.                     $translator->trans('Prestation sauvegardée avec succès !')
  2584.                 );
  2585.                 return $this->redirectToRoute('dtc_fabrication_multiple_modifier', ["id" => $fabricationMultiple->getId()]);
  2586.             } else {
  2587.                 $errors $validator->validate($fabricationMultiple);
  2588.             }
  2589.         }
  2590.         //\Doctrine\Common\Util\Debug::dump($composants);
  2591.         return $this->render('GestionComerciale/Prestation/modifier.html.twig', [
  2592.             'form'        => $form->createView(),
  2593.             'errors'      => $errors,
  2594.             'prestation'  => $fabricationMultiple,
  2595.             'prestations' => $prestations,
  2596.         ]);
  2597.     }
  2598.     /**
  2599.      * @Route("/fabrication-prestation/supprimer/{id}", name="dtc_fabrication_prestation_supprimer")
  2600.      */
  2601.     public function supprimerPrestationAction(Request $requestFabricationMultiple $prestationEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  2602.     {
  2603.         $titre_modal $translator->trans("Demande de confirmation");
  2604.         $user        $this->getUser();
  2605.         $form   $this->createForm(SupprimerFabricationMultipleType::class, $prestation);
  2606.         $errors "";
  2607.         $form->handleRequest($request);
  2608.         if ($form->isSubmitted()) {
  2609.             if ($form->isValid()) {
  2610.                 //$fabricationService->annulerFabrication($fabrication);
  2611.                 $em->remove($prestation);
  2612.                 $em->flush();
  2613.                 $this->addFlash(
  2614.                     'notice',
  2615.                     $translator->trans('Prestation supprimée avec succès !')
  2616.                 );
  2617.                 $url $this->generateUrl('dtc_fabrication_prestation_liste', []);//dtc_commande_fournisseur_liste
  2618.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  2619.             } else {
  2620.                 $errors $validator->validate($prestation);
  2621.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $prestation->getId(), 'type' => '']
  2622.                 );
  2623.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2624.             }
  2625.         }
  2626.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $prestation->getId(), 'type' => '''errors' => $errors]);
  2627.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2628.     }
  2629.     /**
  2630.      * @Route("", name="")
  2631.      */
  2632.     public function listerCFAction(Request $request$articleId$commandeIdEntityManagerInterface $em)
  2633.     {
  2634.         $repo_fabrication $em->getRepository(Fabrication::class);
  2635.         $fabrications     $repo_fabrication->getFabricationsAvecPrestation($articleId$commandeId)->getQuery()->getResult();
  2636.         return $this->render('GestionComerciale/Fabrication/lister-cf.html.twig', [
  2637.             'fabrications' => $fabrications,
  2638.             'commandeId'   => $commandeId,
  2639.         ]);
  2640.     }
  2641.     /**
  2642.      * @Route("/carnet-fabrication/refresh", name="dtc_carnet_fabrication_refresh")
  2643.      */
  2644.     public function carnetCommandeRefreshAction(Request $requestEntityManagerInterface $emArticleService $service_article)
  2645.     {
  2646.         $conn $em->getConnection();
  2647.         $conn->getConfiguration()->setSQLLogger(null);
  2648.         $repo_commande $em->getRepository(Commande::class);
  2649.         $repo_article  $em->getRepository(Article::class);
  2650.         $sql  "UPDATE article__article SET a_fabriquer = 0 WHERE a_fabriquer = 1 ";
  2651.         $stmt $conn->executeQuery($sql);
  2652.         /*
  2653.             $sql = "UPDATE article__article as p
  2654.                     SET a_fabriquer = 1
  2655.                     WHERE (p.stock-COALESCE(p.stock_reserve,0)+COALESCE(p.ral_fournisseur,0)) < p.seuil_commande_f_mini AND (p.produit_interne = 1 OR p.virtuel = 0)
  2656.                     AND
  2657.                     p.id IN (SELECT article_compose_id FROM article__article_composant)
  2658.                     ";
  2659.             */
  2660.         //Recuperer les produits internes (produits composes)
  2661.         $produitsComposes $repo_article->findByProduitInterne(1);
  2662.         $ids              = [];
  2663.         foreach ($produitsComposes as $produitComposes) {
  2664.             $retour $service_article->articleAfabriquer($produitComposes);
  2665.             if ($retour == 1) {
  2666.                 $ids[] = $produitComposes->getId();
  2667.             }
  2668.         }
  2669.         if (count($ids)) {
  2670.             $idList implode(','$ids);
  2671.             //$output->writeln($idList);
  2672.             $sql "UPDATE article__article as p 
  2673.                         SET a_fabriquer = 1 
  2674.                         WHERE p.id IN (".$idList.")
  2675.                         ";
  2676.             //$stmt = $conn->prepare($sql);
  2677.             //$stmt = $conn->executeQuery($sql, array('idList'=>$idList));
  2678.             $stmt $conn->executeQuery($sql);
  2679.         }
  2680.         //$em->flush();
  2681.         $response = new JsonResponse();
  2682.         $response->setData(1);
  2683.         return $response;
  2684.     }
  2685.     /**
  2686.      * @Route("/carnet-fabrication-v2/refresh", name="dtc_carnet_fabrication_refresh_v2")
  2687.      */
  2688.     public function carnetCommandeRefreshV2Action(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  2689.     {
  2690.         /*
  2691.             $dir = realpath(__DIR__.'../../../../');
  2692.             //dump($dir);
  2693.             $process = new Process($dir, 'php app/console cron:carnetfabrication:v2');
  2694.             $process->run();
  2695.             */
  2696.         // Refactor Commande
  2697.         $builder = new ProcessBuilder();
  2698.         $builder->setArguments(['php''../app/console''cron:carnetfabrication:v2']);
  2699.         $builder->getProcess()->start();
  2700.         $response = new JsonResponse();
  2701.         $response->setData(1);
  2702.         return $response;
  2703.     }
  2704.     /**
  2705.      * @Route("/carnet-fabrication-v2", name="dtc_carnet_fabrication_liste_v2")
  2706.      */
  2707.     public function carnetFabricationV2Action(Request $requestEntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  2708.     {
  2709.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  2710.         $tableau_class_cellule[] = [
  2711.             "className" => "visible_export colonne_id",
  2712.             "targets"   => [1],
  2713.             // TODO refactor THIS
  2714.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "id"),
  2715.         ];
  2716.         $tableau_class_cellule[] = [
  2717.             "className" => "visible_export colonne_id",
  2718.             "targets"   => [2],
  2719.             "visible"   => false,
  2720.         ];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"commande")
  2721.         $tableau_class_cellule[] = [
  2722.             "className" => "visible_export colonne_id",
  2723.             "targets"   => [3],
  2724.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "logo"),
  2725.         ];
  2726.         $tableau_class_cellule[] = [
  2727.             "className" => "visible_export colonne_id",
  2728.             "targets"   => [4],
  2729.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "reference"),
  2730.         ];
  2731.         $tableau_class_cellule[] = [
  2732.             "className" => "visible_export colonne_id",
  2733.             "targets"   => [5],
  2734.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "libelle"),
  2735.         ];
  2736.         $tableau_class_cellule[] = [
  2737.             "className" => "visible_export colonne_id text-center",
  2738.             "targets"   => [6],
  2739.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "qteAfabriquer"),
  2740.         ];
  2741.         $tableau_class_cellule[] = [
  2742.             "className" => "visible_export colonne_id",
  2743.             "targets"   => [7],
  2744.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "type"),
  2745.         ];
  2746.         $tableau_class_cellule[] = [
  2747.             "className" => "visible_export colonne_id text-center",
  2748.             "targets"   => [8],
  2749.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "stock"),
  2750.         ];
  2751.         $tableau_class_cellule[] = [
  2752.             "className" => "visible_export colonne_id text-center",
  2753.             "targets"   => [9],
  2754.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "dispo"),
  2755.         ];//
  2756.         $tableau_class_cellule[] = [
  2757.             "title"     => "<span data-toggle='tooltip' title='Mini fab'>Mini fab</span>",
  2758.             "className" => "visible_export colonne_id text-center",
  2759.             "targets"   => [10],
  2760.             "visible"   => false,
  2761.         ];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"miniFab")
  2762.         $tableau_class_cellule[] = [
  2763.             "title"     => "<span data-toggle='tooltip' title='Quantité mini'>Q&nbsp;mini</span>",
  2764.             "className" => "visible_export colonne_id text-center",
  2765.             "targets"   => [11],
  2766.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMiniCommandeFournisseur"),
  2767.         ];
  2768.         $tableau_class_cellule[] = [
  2769.             "title"     => "<span data-toggle='tooltip' title='Quantité maxi'>Q&nbsp;maxi</span>",
  2770.             "className" => "visible_export colonne_id text-center",
  2771.             "targets"   => [12],
  2772.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "seuilMaxiCommandeFournisseur"),
  2773.         ];
  2774.         $tableau_class_cellule[] = [
  2775.             "title"     => "<span data-toggle='tooltip' title='Reste à livrer client'>Ràl&nbsp;C</span>",
  2776.             "className" => "visible_export colonne_id text-center",
  2777.             "targets"   => [13],
  2778.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralC"),
  2779.         ];
  2780.         $tableau_class_cellule[] = [
  2781.             "title"     => "<span data-toggle='tooltip' title='Reste à livrer fournisseur'>Ràl&nbsp;F</span>",
  2782.             "className" => "visible_export colonne_id text-center",
  2783.             "targets"   => [14],
  2784.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "ralF"),
  2785.         ];
  2786.         $tableau_class_cellule[] = [
  2787.             "title"     => "<span data-toggle='tooltip' title='Reste à fabriquer'>RàF</span>",
  2788.             "className" => "visible_export colonne_id text-center",
  2789.             "targets"   => [15],
  2790.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "raf"),
  2791.         ];
  2792.         $tableau_class_cellule[] = [
  2793.             "className" => "visible_export colonne_id",
  2794.             "targets"   => [16],
  2795.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "marque"),
  2796.         ];
  2797.         $tableau_class_cellule[] = [
  2798.             "className" => "visible_export colonne_id",
  2799.             "targets"   => [17],
  2800.             "visible"   => false,
  2801.         ];//$serviceColonneTableau->getColonneUtilisateur(Fabrication::class,"pump")
  2802.         $tableau_class_cellule[] = [
  2803.             "className" => "visible_export colonne_id",
  2804.             "targets"   => [18],
  2805.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "cump"),
  2806.         ];
  2807.         $tableau_class_cellule[] = [
  2808.             "className" => "visible_export colonne_id",
  2809.             "targets"   => [19],
  2810.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "descCourte"),
  2811.         ];
  2812.         $tableau_class_cellule[] = [
  2813.             "className" => "visible_export colonne_id",
  2814.             "targets"   => [20],
  2815.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Fabrication::class, "atelier"),
  2816.         ];
  2817.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id off""targets" => [21], "visible" => true];
  2818.         //$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(13),"visible"=>true);
  2819.         $categorie_enfants         = [];
  2820.         $categorie_enfants_enfants = [];
  2821.         $repo_categorie_article    $em->getRepository(Categorie::class);
  2822.         $categorie_article_racine  $repo_categorie_article->findBy(["categorieParent" => 1]);
  2823.         $repo_marque_article $em->getRepository(Marque::class);
  2824.         $marque_article      $repo_marque_article->findBy([], ['libelle' => 'ASC']);
  2825.         $repo_type_article $em->getRepository(Type::class);
  2826.         $type_article      $repo_type_article->findBy([], ['libelle' => 'ASC']);
  2827.         $repo_atelier $em->getRepository(Atelier::class);
  2828.         $ateliers     $repo_atelier->findBy([], ['libelle' => 'ASC']);
  2829.         $param $request->query->all();
  2830.         if (array_key_exists('categorie_article'$param) and $param["categorie_article"] > 0) {
  2831.             $parent $repo_categorie_article->find($param["categorie_article"]);
  2832.             if (is_object($parent)) {
  2833.                 $categorie_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  2834.             }
  2835.         }
  2836.         if (array_key_exists('sous_categorie_article'$param) and $param["sous_categorie_article"] > 0) {
  2837.             $parent2 $repo_categorie_article->find($param["sous_categorie_article"]);
  2838.             if (is_object($parent2)) {
  2839.                 $categorie_enfants_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  2840.             }
  2841.         }
  2842.         $this->datatableCarnetFabricationV2($request$datatable$translator);
  2843.         return $this->render('GestionComerciale/Fabrication/carnet-fabrication-v2.html.twig', [
  2844.             'tableauClassColonne'         => $tableau_class_cellule,
  2845.             'parametres'                  => $param,
  2846.             "categorie_article"           => $categorie_article_racine,
  2847.             "sous_categorie_article"      => $categorie_enfants,
  2848.             "sous_sous_categorie_article" => $categorie_enfants_enfants,
  2849.             "marque"                      => $marque_article,
  2850.             "type"                        => $type_article,
  2851.             "ateliers"                    => $ateliers,
  2852.         ]);
  2853.     }
  2854.     /**
  2855.      * set datatable configs
  2856.      *
  2857.      * @return \App\Library\Datatable\Util\Datatable
  2858.      */
  2859.     private function datatableCarnetFabricationV2(Request $requestDatatable $datatableTranslatorInterface $translator)
  2860.     {
  2861.         $param      $request->query->all();
  2862.         $parametres = [];
  2863.         $where      "";
  2864.         if ( ! array_key_exists('parametres'$param)) {
  2865.             $param["parametres"] = $param;
  2866.         }
  2867.         $datatable->setEntity(ArticleAfabriquer::class, "af")
  2868.                   ->setFields(
  2869.                       [
  2870.                           $translator->trans("ID")        => 'af.id',
  2871.                           $translator->trans("Commande")  => 'c.reference',
  2872.                           $translator->trans("Img")       => 'p.reference',
  2873.                           $translator->trans("Réf")       => 'p.reference',
  2874.                           $translator->trans("Libelle")   => 'p.libelle',
  2875.                           $translator->trans("Qte à Fab") => "af.quantite",
  2876.                           $translator->trans("Type")      => 't.libelle',
  2877.                           $translator->trans("Stock")     => 'p.stock',
  2878.                           $translator->trans("Dispo")     => 'p.id',
  2879.                           $translator->trans("Minifab") => 'p.id',
  2880.                           $translator->trans("Qmini")       => 'p.seuilMiniCommandeFournisseur',
  2881.                           $translator->trans("Qmaxi")       => 'p.seuilMaxiCommandeFournisseur',
  2882.                           $translator->trans("Ràl C")       => 'p.id',
  2883.                           $translator->trans("Ràl F")       => 'p.ralFournisseur',
  2884.                           'Ràf'                             => 'p.id',
  2885.                           $translator->trans("Marque")      => 'm.libelle',
  2886.                           $translator->trans("Pump")        => 'p.pump',
  2887.                           $translator->trans("Cump")        => 'p.cpump',
  2888.                           $translator->trans("Desc courte") => 'p.descriptionCourte',
  2889.                           $translator->trans("Atelier")     => 'at.libelle',
  2890.                           //$translator->trans("Prix HT") =>  'p.prixVente',
  2891.                           //$translator->trans("Actions") =>  'p.id',
  2892.                           'hidden'                          => 'af.id',
  2893.                           "_identifier_"                    => 'af.id',
  2894.                       ]
  2895.                   )
  2896.             //->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2897.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2898.             //->addJoin('p.fournisseurDefaut', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2899.             //->addJoin('p.articlesComposants', 'acmp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2900.                   ->addJoin('af.article''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2901.                   ->addJoin('p.atelier''at'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2902.                   ->addJoin('af.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2903.                   ->addJoin('p.type''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2904.                   ->addJoin('p.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2905.                   ->setRenderers(
  2906.                       [
  2907.                           /*
  2908.                                 1 => array(
  2909.                                     'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2910.                                     'params' => array('edit_route'=>'dtc_commande_modifier',
  2911.                                     'typeDocument' => 'articleAfabriquerCommande'
  2912.                                     ),
  2913.                                 ),
  2914.                                 */
  2915.                           => [
  2916.                               'view'   => 'FO/DataTable/image.html.twig',
  2917.                               'params' => [
  2918.                                   'edit_route'   => 'dtc_article_modifier',
  2919.                                   'typeDocument' => 'article',
  2920.                               ],
  2921.                           ],
  2922.                           => [
  2923.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2924.                               'params' => [
  2925.                                   'edit_route'   => 'dtc_article_modifier',
  2926.                                   'typeDocument' => 'article',
  2927.                               ],
  2928.                           ],
  2929.                           /*3 => array(
  2930.                                     'view' => 'FO/DataTable/edit_texte.html.twig',
  2931.                                     'params' => array(
  2932.                                             'objet'    => 'DTCArticlesBundle:Article',
  2933.                                             'champ'    => 'setLibelle',
  2934.                                         ),
  2935.                                 ),*/
  2936.                           /*
  2937.                 7 => array(
  2938.                                     'view' => 'FO/DataTable/prixSuivi.html.twig',
  2939.                                     'params' => array(
  2940.                                             'surveillance'    => false,
  2941.                                         )
  2942.                                 ),
  2943.                                  *
  2944.                                  */
  2945.                           /*
  2946.                                 4 => array(
  2947.                                     'view' => 'FO/DataTable/qteAfabriquer.html.twig'
  2948.                                 ),
  2949.                                 */
  2950.                           8  => [
  2951.                               'view' => 'FO/DataTable/article_dispo.html.twig',
  2952.                           ],
  2953.                           /*
  2954.                                 8 => array(
  2955.                                     'view' => 'FO/DataTable/mini_fab.html.twig'
  2956.                                 ),
  2957.                                 */
  2958.                           12 => [
  2959.                               'view' => 'FO/DataTable/article_ral.html.twig',
  2960.                           ],
  2961.                           14 => [
  2962.                               'view' => 'FO/DataTable/article_raf.html.twig',
  2963.                           ],
  2964.                           15 => [
  2965.                               'view'   => 'FO/DataTable/prix.html.twig',
  2966.                               'params' => [
  2967.                                   'afficher_total' => false,
  2968.                               ],
  2969.                           ],
  2970.                           17 => [
  2971.                               'view'   => 'FO/DataTable/prix.html.twig',
  2972.                               'params' => [
  2973.                                   'afficher_total' => false,
  2974.                               ],
  2975.                           ],
  2976.                           20 => [
  2977.                               'view'   => 'FO/DataTable/hidden.html.twig',
  2978.                               'params' => [
  2979.                                   'typeDonnees' => ['commande'],
  2980.                               ],
  2981.                           ],
  2982.                           /*
  2983.                                 12=> array(
  2984.                                     'view' => 'FO/DataTable/button.html.twig',
  2985.                                     'params' => array(
  2986.                                             'edit_route'    => 'dtc_fabrication_ajouter',
  2987.                                             //'dupliquer_route'    => 'dtc_article_dupliquer',
  2988.                                             'objet'    => 'DTCGestionComercialeBundle:Fabrication',
  2989.                                             'name' => '<b>FABRIQUER</b>'
  2990.                                         ),
  2991.                                 ),
  2992.                                 */
  2993.                       ]
  2994.                   )
  2995.             //->setGroupBy('p.id')
  2996.                   ->setMultiple(
  2997.                 [
  2998.                     'fabrication-multiple' => [
  2999.                         'title' => 'fabrication multiple',
  3000.                         'route' => 'dtc_fabrication_multiple_ajouter_depuis_suggestion_v2',
  3001.                     ],
  3002.                 ]
  3003.             )
  3004.                   ->setSearch(true)
  3005.                   ->setSearchFields([34]);
  3006.         //$where = '(p.stock-COALESCE(p.stockReserve,0)+COALESCE(p.ralFournisseur,0)) < p.seuilMiniCommandeFournisseur AND (p.produitInterne = 1 OR p.virtuel = 1) AND acmp.id is not null';
  3007.         //$where = 'p.aFabriquer = 1 AND p.nomenclatureValidee = 1';
  3008.         $where 'p.nomenclatureValidee = 1';
  3009.         if (array_key_exists('categorie_article'$param['parametres']) and $param['parametres']['categorie_article'] != "") {
  3010.             $datatable->addJoin('p.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3011.             $datatable->addJoin('ac.categorie''cat'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3012.             $where .= " AND cat.id = ".$param['parametres']['categorie_article'];
  3013.             //$qb->join('x.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3014.             //$qb->join('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3015.             //$where .= " AND cat.id = :categorie";
  3016.             //$parametres['categorie']=$param['parametres']['categorie_article'];
  3017.             if (array_key_exists('sous_categorie_article'$param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
  3018.                 $datatable->addJoin('p.articleCategorie''ac2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3019.                 $datatable->addJoin('ac2.categorie''cat2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3020.                 $where .= " AND cat2.id = ".$param['parametres']['sous_categorie_article'];
  3021.                 /*
  3022.               $qb->join('x.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3023.               $qb->join('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3024.               $where .= " AND cat2.id = :categorie2";
  3025.               $parametres['categorie2']=$param['parametres']['sous_categorie_article'];
  3026.               */
  3027.             }
  3028.             if (array_key_exists('sous_sous_categorie_article'$param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
  3029.                 $datatable->addJoin('p.articleCategorie''ac3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3030.                 $datatable->addJoin('ac3.categorie''cat3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  3031.                 $where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
  3032.             }
  3033.         }
  3034.         if (array_key_exists('marque'$param['parametres']) and $param['parametres']['marque'] != "") {
  3035.             $where .= " AND m.id = ".$param['parametres']['marque'];;
  3036.         }
  3037.         if (array_key_exists('type'$param['parametres']) and $param['parametres']['type'] != "") {
  3038.             $where .= " AND t.id = ".$param['parametres']['type'];
  3039.         }
  3040.         if (array_key_exists('atelier'$param['parametres']) and $param['parametres']['atelier'] != "") {
  3041.             $where .= " AND at.id = ".$param['parametres']['atelier'];
  3042.         }
  3043.         //echo "TEST ".$where;
  3044.         if ( ! empty($where)) {
  3045.             $datatable->setWhere($where);
  3046.         }
  3047.         //$datatable->setOrder('p.reference', 'ASC');
  3048.         //$datatable->setOrder('c.reference', 'ASC');
  3049.         //$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
  3050.         return $datatable;
  3051.     }
  3052.     /**
  3053.      * @Route("/carnet-fabrication-v2/grid", name="dtc_carnet_fabrication_liste_grid_v2")
  3054.      */
  3055.     public function carnetFabricationGridV2Action(Request $requestDatatable $datatableTranslatorInterface $translator)
  3056.     {
  3057.         return $this->datatableCarnetFabricationV2($request$datatable$translator)->execute();
  3058.     }
  3059. }