src/Controller/Inventaires/InventaireController.php line 751

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Inventaires;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\FO\Societe;
  5. use App\Entity\Inventaires\ArticleInventaire;
  6. use App\Entity\Inventaires\Inventaire;
  7. use App\Entity\Inventaires\Type;
  8. use App\Entity\Rangements\Emplacement;
  9. use App\Form\Inventaires\ArticleInventaireType;
  10. use App\Form\Inventaires\InventaireType;
  11. use App\Form\Inventaires\SupprimerInventaireType;
  12. use App\Form\Inventaires\ValoriserInventaireType;
  13. use App\Library\Datatable\Util\Datatable;
  14. use App\Security\Voter\EntityVoter;
  15. use App\Service\Articles\MouvementStockService;
  16. use App\Service\Inventaires\InventaireService;
  17. use App\Service\Utilisateur\ColonneTableauService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Knp\Snappy\Pdf;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Process\Process;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Validator\Validator\ValidatorInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. class InventaireController extends AbstractController
  29. {
  30.     /**
  31.      * @Route("/inventaire/nouveau", name="dtc_inventaire_ajouter")
  32.      */
  33.     public function ajouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  34.     {
  35.         $user       $this->getUser();
  36.         $inventaire = new Inventaire();
  37.         $inventaire->setUtilisateur($user);
  38.         $form   $this->createForm(InventaireType::class, $inventaire);
  39.         $errors "";
  40.         $form->handleRequest($request);
  41.         if ($form->isSubmitted()) {
  42.             if ($form->isValid()) {
  43.                 $em->persist($inventaire);
  44.                 $em->flush();
  45.                 $this->addFlash(
  46.                     'notice',
  47.                     $translator->trans('Inventaire ajouté avec succès !')
  48.                 );
  49.                 return $this->redirectToRoute('dtc_inventaire_liste');
  50.             } else {
  51.                 $errors $validator->validate($inventaire);
  52.             }
  53.         }
  54.         return $this->render('Inventaires/Inventaire/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'inventaire' => $inventaire]);
  55.     }
  56.     /**
  57.      * @Route("/inventaire/modifier/{id}", name="dtc_inventaire_modifier")
  58.      */
  59.     public function modifierAction(Request            $requestInventaire $inventaireEntityManagerInterface $emTranslatorInterface $translator,
  60.                                    ValidatorInterface $validator
  61.     ) {
  62.         $user $this->getUser();
  63.         $inventaire->setUtilisateur($user);
  64.         $form   $this->createForm(InventaireType::class, $inventaire);
  65.         $errors "";
  66.         $form->handleRequest($request);
  67.         if ($form->isSubmitted()) {
  68.             $droit $this->isGranted(EntityVoter::UPDATEInventaire::class);
  69.             if ( ! $droit) {
  70.                 return $this->redirectToRoute('dtc_inventaire_modifier', ["id" => $inventaire->getId()]);
  71.             }
  72.             if ($form->isValid()) {
  73.                 if ($request->request->get('annuler') != '' && ! is_object($inventaire->getDateCloture())) {
  74.                     $em->remove($inventaire);
  75.                     $em->flush();
  76.                     return $this->redirectToRoute('dtc_inventaire_liste');
  77.                 }
  78.                 $em->persist($inventaire);
  79.                 $em->flush();
  80.                 $this->addFlash(
  81.                     'notice',
  82.                     $translator->trans('Inventaire modifié avec succès !')
  83.                 );
  84.                 return $this->redirectToRoute('dtc_inventaire_modifier', ["id" => $inventaire->getId()]);
  85.             } else {
  86.                 $errors $validator->validate($inventaire);
  87.             }
  88.         }
  89.         return $this->render('Inventaires/Inventaire/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'inventaire' => $inventaire]);
  90.     }
  91.     /**
  92.      * @Route("/inventaire", name="dtc_inventaire_liste")
  93.      */
  94.     public function listerAction(Request $requestColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  95.     {
  96.         /*
  97.                 $builder = new ProcessBuilder();
  98.                 //$builder->setPrefix('../');
  99.                 $builder->setArguments(array('php', '../app/console', 'ajouter:articleInventaire'));
  100.                 $builder->getProcess()->start();
  101.                 */
  102.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => false"orderable" => false];
  103.         $tableau_class_cellule[] = [
  104.             "className" => "visible_export colonne_id",
  105.             "targets"   => [1],
  106.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "id"),
  107.         ];
  108.         $tableau_class_cellule[] = [
  109.             "className" => " visible_export colonne_id text-center",
  110.             "targets"   => [2],
  111.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "date"),
  112.         ];
  113.         $tableau_class_cellule[] = [
  114.             "className" => " visible_export colonne_id text-center",
  115.             "targets"   => [3],
  116.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "dateCloture"),
  117.         ];
  118.         $tableau_class_cellule[] = [
  119.             "className" => " visible_export colonne_id",
  120.             "targets"   => [4],
  121.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "libelle"),
  122.         ];
  123.         $tableau_class_cellule[] = [
  124.             "className" => " visible_export colonne_id",
  125.             "targets"   => [5],
  126.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Inventaire::class, "type"),
  127.         ];
  128.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [6], "visible" => true];
  129.         $this->datatable($datatable$translator);
  130.         return $this->render('Inventaires/Inventaire/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
  131.     }
  132.     /**
  133.      * set datatable configs
  134.      *
  135.      * @return \App\Library\Datatable\Util\Datatable
  136.      */
  137.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  138.     {
  139.         $datatable->setEntity(Inventaire::class, "x")
  140.                   ->setFields(
  141.                       [
  142.                           $translator->trans("ID")              => 'x.id',
  143.                           $translator->trans("Date")            => 'x.date',
  144.                           $translator->trans("Date de clôture") => 'x.dateCloture',
  145.                           $translator->trans("Libellé")         => 'x.libelle',
  146.                           $translator->trans("Type")            => 't.libelle',
  147.                           $translator->trans("Actions")         => 'x.id',
  148.                           "_identifier_"                        => 'x.id',
  149.                       ]
  150.                   )
  151.                   ->addJoin('x.type''t')
  152.                   ->setRenderers(
  153.                       [
  154.                           => [
  155.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  156.                               'params' => [
  157.                                   'edit_route' => 'dtc_inventaire_modifier',
  158.                               ],
  159.                           ],
  160.                           => ['view' => 'FO/DataTable/date.html.twig'],
  161.                           => ['view' => 'FO/DataTable/date.html.twig'],
  162.                           => [
  163.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  164.                               'params' => [
  165.                                   'edit_route'  => 'dtc_inventaire_modifier',
  166.                                   'progressbar' => 1,
  167.                               ],
  168.                           ],
  169.                           => [
  170.                               'view'   => 'FO/DataTable/actions.html.twig',
  171.                               'params' => [
  172.                                   'edit_route' => 'dtc_inventaire_modifier',
  173.                                   'objet'      => Inventaire::class,
  174.                               ],
  175.                           ],
  176.                       ]
  177.                   )
  178.                   ->setMultiple(
  179.                       [
  180.                           'delete' => [
  181.                               'title' => 'Non disponible',
  182.                               'route' => 'dtc_inventaire_liste',
  183.                           ],
  184.                       ]
  185.                   )
  186.                   ->setOrder("x.id""desc")
  187.                   ->setSearch(true);
  188.         $datatable->setSearchFields([3]);
  189.         return $datatable;
  190.     }
  191.     /**
  192.      * @Route("/inventaire/grid", name="dtc_inventaire_liste_grid")
  193.      */
  194.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  195.     {
  196.         return $this->datatable($datatable$translator)->execute();
  197.     }
  198.     /**
  199.      * @Route("/inventaire/nouveau-modal", name="dtc_inventaire_ajouter_modal")
  200.      */
  201.     public function ajouterModalAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  202.     {
  203.         set_time_limit(300);
  204.         $repo_type        $em->getRepository(Type::class);
  205.         $repo_emplacement $em->getRepository(Emplacement::class);
  206.         $repo_article     $em->getRepository(Article::class);
  207.         $user             $this->getUser();
  208.         $inventaire       = new Inventaire();
  209.         $inventaire->setUtilisateur($user);
  210.         $errors      "";
  211.         $titre_modal $translator->trans('Nouvel inventaire');
  212.         $modificationFormulaire $request->request->get('modificationFormulaire');
  213.         $typeId                 $request->request->get('dtc_inventairesbundle_inventaire', ['type'=>''])['type'];
  214.         if ($typeId != '' && $modificationFormulaire == 'true') {
  215.             $type $repo_type->find($typeId);
  216.             if (is_object($type)) {
  217.                 $inventaire->setType($type);
  218.             }
  219.         }
  220.         $form $this->createForm(InventaireType::class, $inventaire);
  221.         if ($modificationFormulaire != 'true') {
  222.             $form->handleRequest($request);
  223.             if ($form->isSubmitted()) {
  224.                 if ($form->isValid()) {
  225.                     $inventaire->setEnCoursTraitement(1);
  226.                     if (is_object($inventaire->getType()) && in_array($inventaire->getType()->getId(), [134])) {
  227.                         $emplacement $inventaire->getEmplacement();
  228.                         if (is_object($emplacement)) {
  229.                             $niveau1 $emplacement->getNiveauUn();
  230.                             if ( ! is_object($niveau1)) {
  231.                                 $inventaire->setEmplacement(null);
  232.                             }
  233.                         }
  234.                     } else {
  235.                         $inventaire->setEmplacement(null);
  236.                     }
  237.                     $em->persist($inventaire);
  238.                     $em->flush();
  239.                     //$builder = new ProcessBuilder();
  240.                     //$builder->setPrefix('../');
  241.                     //$builder->setArguments(array('php', '../app/console', 'ajouter:articleInventaire', $inventaire->getId()));
  242.                     //$builder->getProcess()->start();
  243.                     /*
  244.                     $count = 0;
  245.                     //Ajouter les articles inventaire à l'inventaire
  246.                     if(is_object($inventaire->getType()) && $inventaire->getType()->getId() == 1){//par emplacement
  247.                         $emplacement = $inventaire->getEmplacement();
  248.                         $articles = $repo_article->getArticlesAinventorierParEmplacement($emplacement, $inventaire->getDateMouvement());
  249.                         $recherche = array();
  250.                         if(is_object($emplacement->getNiveauUn())) $recherche['niveauUn'] = $emplacement->getNiveauUn();
  251.                         if(is_object($emplacement->getNiveauDeux())) $recherche['niveauDeux'] = $emplacement->getNiveauDeux();
  252.                         if(is_object($emplacement->getNiveauTrois())) $recherche['niveauTrois'] = $emplacement->getNiveauTrois();
  253.                         if(is_object($emplacement->getNiveauQuatre())) $recherche['niveauQuatre'] = $emplacement->getNiveauQuatre();
  254.                         foreach($articles as $article){
  255.                             //Rechercher les emplacements
  256.                             $recherche['article'] = $article['id'];
  257.                             $emplacements = $repo_emplacement->findBy($recherche);
  258.                             foreach($emplacements as $emplacement){
  259.                                 $articleInventaire = new ArticleInventaire();
  260.                                 $articleInventaire->setArticle($emplacement->getArticle());
  261.                                 $articleInventaire->setEmplacement($emplacement);
  262.                                 $articleInventaire->setStock($emplacement->getStock());
  263.                                 $articleInventaire->setStockArticle($emplacement->getArticle()->getStock());
  264.                                 $articleInventaire->setInventaire($inventaire);
  265.                                 //$inventaire->addArticleInventaire($articleInventaire);
  266.                                 $em->persist($articleInventaire);
  267.                             }
  268.                             if($count > 100){
  269.                                 $em->flush();
  270.                                 $count = 0;
  271.                             } else {
  272.                                 $count++;
  273.                             }
  274.                         }
  275.                     } else if (is_object($inventaire->getType()) && $inventaire->getType()->getId() == 2){//sans emplacement
  276.                         $articles = $repo_article->getArticlesAinventorierSansEmplacement($inventaire->getDateMouvement());
  277.                         //\Doctrine\Common\Util\Debug::dump(count($articles));
  278.                         foreach($articles as $article){
  279.                             $objet = $repo_article->find($article['id']);
  280.                             if(is_object($objet)){
  281.                                 $articleInventaire = new ArticleInventaire();
  282.                                 $articleInventaire->setArticle($objet);
  283.                                 $articleInventaire->setStock($objet->getStock());
  284.                                 $articleInventaire->setStockArticle($objet->getStock());
  285.                                 $articleInventaire->setInventaire($inventaire);
  286.                                 //$inventaire->addArticleInventaire($articleInventaire);
  287.                                 $em->persist($articleInventaire);
  288.                             }
  289.                             if($count > 100){
  290.                                 $em->flush();
  291.                                 $count = 0;
  292.                             } else {
  293.                                 $count++;
  294.                             }
  295.                         }
  296.                     } else if (is_object($inventaire->getType()) && $inventaire->getType()->getId() == 3){//par marque
  297.                         $articles = $repo_article->getArticlesAinventorierParMarque($inventaire->getMarque()->getId(), $inventaire->getDateMouvement());
  298.                         foreach($articles as $article){
  299.                             $objet = $repo_article->find($article['id']);
  300.                             $emplacements = $objet->getEmplacements();
  301.                             if(count($emplacements) > 0){
  302.                                 foreach($emplacements as $emplacement){
  303.                                     $articleInventaire = new ArticleInventaire();
  304.                                     $articleInventaire->setArticle($objet);
  305.                                     $articleInventaire->setEmplacement($emplacement);
  306.                                     $articleInventaire->setStock($emplacement->getStock());
  307.                                     $articleInventaire->setStockArticle($objet->getStock());
  308.                                     $articleInventaire->setInventaire($inventaire);
  309.                                     //$inventaire->addArticleInventaire($articleInventaire);
  310.                                     $em->persist($articleInventaire);
  311.                                 }
  312.                             } else {
  313.                                 $articleInventaire = new ArticleInventaire();
  314.                                 $articleInventaire->setArticle($objet);
  315.                                 $articleInventaire->setStock($objet->getStock());
  316.                                 $articleInventaire->setStockArticle($objet->getStock());
  317.                                 $articleInventaire->setInventaire($inventaire);
  318.                                 $em->persist($articleInventaire);
  319.                             }
  320.                             if($count > 100){
  321.                                 $em->flush();
  322.                                 $count = 0;
  323.                             } else {
  324.                                 $count++;
  325.                             }
  326.                         }
  327.                     }
  328.                     $em->flush();
  329.                      *
  330.                      */
  331.                     $this->addFlash(
  332.                         'notice',
  333.                         $translator->trans('Inventaire ajouté avec succès !')
  334.                     );
  335.                     //$url = $this->generateUrl('dtc_inventaire_modifier', array('id'=>$inventaire->getId()));
  336.                     $url $this->generateUrl('dtc_inventaire_liste');
  337.                     return new JsonResponse([
  338.                                                 'rendu'  => '',
  339.                                                 'valide' => '1',
  340.                                                 'url'    => $url,
  341.                                                 'titre'  => '',
  342.                                             ]);
  343.                 } else {
  344.                     $errors $validator->validate($inventaire);
  345.                 }
  346.             }
  347.         }
  348.         $rendu $this->renderView('Inventaires/Inventaire/ajouter-modal.html.twig', [
  349.             'form'       => $form->createView(),
  350.             'errors'     => $errors,
  351.             'inventaire' => $inventaire,
  352.         ]);
  353.         //return $this->render('Inventaires/Inventaire/ajouter-modal.html.twig', array('form' => $form->createView(),'errors'=>$errors,'inventaire'=>$inventaire));
  354.         return new JsonResponse(
  355.             [
  356.                 'rendu'  => $rendu,
  357.                 'valide' => '0',
  358.                 'url'    => '',
  359.                 'titre'  => $titre_modal,
  360.             ]
  361.         );
  362.     }
  363.     /**
  364.      * @Route("/inventaire/{id}/PDF/fiche-comptage", name="dtc_inventaire_pdf_fiche_comptage")
  365.      */
  366.     public function ficheComptagePdfAction(Request $requestInventaire $inventairePdf $snappy)
  367.     {
  368.         $date_Y date("Y");
  369.         $date_M date("m");
  370.         $date_D date("d");
  371.         $date   $date_Y.'/'.$date_M.'/'.$date_D;
  372.         //$societe = $em->getRepository('DTCFOBundle:Societe')->find(1);
  373.         $chemin_pdf 'PDF/Inventaires/'.$date.'/inventaire-'.$inventaire->getId().'.pdf';
  374.         if (file_exists($chemin_pdf)) {
  375.             unlink($chemin_pdf);
  376.         }
  377.         $footer $this->renderView('FO/PDF/footer_inventaire_pagination_pdf.html.twig', []);//'societe'  => $societe
  378.         $header $this->renderView('FO/PDF/header_inventaire_pdf.html.twig', ['inventaire' => $inventaire]);//'societe'  => $societe,
  379.         $snappy->setOption('header-html'$header);
  380.         $snappy->setOption('footer-html'$footer);
  381.         $snappy->setOption('margin-bottom'"10");
  382.         //$snappy->setOption('margin-top',"25");
  383.         /*
  384.         foreach($inventaire->getArticleInventaire() as $articleInventaire){
  385.             $emplacement = $articleInventaire->getEmplacement();
  386.             if(is_object($emplacement)){
  387.                 $articlesParEmplacements[$emplacement->getLibelle()][] = $articleInventaire;
  388.             } else {
  389.                 $reference = $articleInventaire->getArticle()->getReference();
  390.                 $articlesParEmplacements[$reference][] = $articleInventaire;
  391.             }
  392.             ksort($articlesParEmplacements, SORT_FLAG_CASE);
  393.         }
  394.          *
  395.          */
  396.         $articlesParEmplacements $inventaire->getArticleInventaire();
  397.         // return $this->render('Inventaires/Inventaire/template_pdf_fiche_comptage.html.twig', array(
  398.         // 'inventaire'  => $inventaire,
  399.         //             'articlesParEmplacements' => $articlesParEmplacements,
  400.         //                                     ));
  401.         $snappy->generateFromHtml(
  402.             $this->renderView(
  403.                 'Inventaires/Inventaire/template_pdf_fiche_comptage.html.twig',
  404.                 [
  405.                     'inventaire'              => $inventaire,
  406.                     'articlesParEmplacements' => $articlesParEmplacements,
  407.                     //'societe'  => $societe
  408.                 ]
  409.             ),
  410.             $chemin_pdf
  411.         );
  412.         return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  413.     }
  414.     /**
  415.      * @Route("/inventaire/{id}/basculer", name="dtc_inventaire_basculer")
  416.      */
  417.     public function basculerAction(Request $requestInventaire $inventaireEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  418.     {
  419.         $aiSsQte = [];
  420.         $user    $this->getUser();
  421.         $inventaire->setUtilisateur($user);
  422.         $errors      "";
  423.         $titre_modal 'Clôturer l\'inventaire';
  424.         $form $this->createForm(ValoriserInventaireType::class);
  425.         $form->handleRequest($request);
  426.         if ($form->isSubmitted()) {
  427.             if ($form->isValid()) {
  428.                 $inventaire->setABasculer(true);
  429.                 $inventaire->setDateCloture(new \DateTime);
  430.                 $em->persist($inventaire);
  431.                 $em->flush();
  432.                 $process  = new Process(['php''bin/console''basculer:inventaire',  $inventaire->getId()]);
  433.                 $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  434.                 $process->setOptions(['create_new_console' => true]);
  435.                 $process->start();
  436.                 $this->addFlash(
  437.                     'notice',
  438.                     $translator->trans('Cet inventaire est en cours de clôture. Vous serez averti dès la fin de la clôture.')
  439.                 );
  440.                 //sleep(5);
  441.                 $url $this->generateUrl('dtc_inventaire_modifier', ['id' => $inventaire->getId()]);
  442.                 return new JsonResponse([
  443.                                             'rendu'  => '',
  444.                                             'valide' => '1',
  445.                                             'url'    => $url,
  446.                                             'titre'  => '',
  447.                                         ]);
  448.             } else {
  449.                 $errors $validator->validate($inventaire);
  450.             }
  451.         } else {
  452.             foreach ($inventaire->getArticleInventaire() as $articleInventaire) {
  453.                 //var_dump($articleInventaire->getStockReleve());
  454.                 if ($articleInventaire->getStockReleve() === null) {
  455.                     /*
  456.                     $this->addFlash(
  457.                         'warning',
  458.                         'Vous n\'avez pas renseigné de quantité pour certains articles.'.$articleInventaire->getNumerotation()
  459.                     );
  460.                      *
  461.                      */
  462.                     $aiSsQte[] = $articleInventaire->getNumerotation();
  463.                     //if(count($aiSsQte) >= 5) break;
  464.                 }
  465.             }
  466.         }
  467.         $rendu $this->renderView('Inventaires/Inventaire/basculer-modal.html.twig', [
  468.             'form'       => $form->createView(),
  469.             'errors'     => $errors,
  470.             'aiSsQte'    => $aiSsQte,
  471.             'inventaire' => $inventaire,
  472.         ]);
  473.         return new JsonResponse(
  474.             [
  475.                 'rendu'  => $rendu,
  476.                 'valide' => '0',
  477.                 'url'    => '',
  478.                 'titre'  => $titre_modal,
  479.             ]
  480.         );
  481.     }
  482.     /**
  483.      * @Route("/inventaire/{id}/ajouter-article", name="dtc_inventaire_ajouter_article")
  484.      */
  485.     public function ajouterArticleAction(Request $requestInventaire $inventaireEntityManagerInterface $emMouvementStockService $mvtStockServiceValidatorInterface $validator)
  486.     {
  487.         $repo_type               $em->getRepository(Type::class);
  488.         $repo_emplacement        $em->getRepository(Emplacement::class);
  489.         $repo_article            $em->getRepository(Article::class);
  490.         $repo_article_inventaire $em->getRepository(ArticleInventaire::class);
  491.         $user                    $this->getUser();
  492.         $articleInventaire = new ArticleInventaire();
  493.         $articleInventaire->setInventaire($inventaire);
  494.         $inventaire->setUtilisateur($user);
  495.         $errors      "";
  496.         $titre_modal 'Ajouter un article sur l\'inventaire';
  497.         $form        $this->createForm(ArticleInventaireType::class, $articleInventaire);
  498.         $form->handleRequest($request);
  499.         if ($form->isSubmitted()) {
  500.             if ($form->isValid()) {
  501.                 $article $articleInventaire->getArticle();
  502.                 if (is_object($article)) {
  503.                     if (is_object($articleInventaire->getEmplacement())) {
  504.                         //Récupérer le stock de l'article au moment de l'inventaire
  505.                         $stockArticle $mvtStockService->getStockArticleAuneDate($article->getId(), ''$inventaire->getDate());
  506.                         $articleInventaire->setStockArticle($stockArticle);
  507.                         $emplacement $repo_emplacement->findOneBy([
  508.                                                                         'niveauUn'     => $articleInventaire->getEmplacement()->getNiveauUn(),
  509.                                                                         'niveauDeux'   => $articleInventaire->getEmplacement()->getNiveauDeux(),
  510.                                                                         'niveauTrois'  => $articleInventaire->getEmplacement()->getNiveauTrois(),
  511.                                                                         'niveauQuatre' => $articleInventaire->getEmplacement()->getNiveauQuatre(),
  512.                                                                         'article'      => $article,
  513.                                                                         'visibilite'   => true,
  514.                                                                     ]);
  515.                         $stockReleve $articleInventaire->getStockReleve();
  516.                         if (is_object($emplacement)) {
  517.                             //Si cet article, à cet emplacement, existe déjà on ne peux pas le rajouter --> message d'erreur
  518.                             $articleInventaireExistant $repo_article_inventaire->findOneBy([
  519.                                                                                                  'inventaire'  => $inventaire,
  520.                                                                                                  'article'     => $article,
  521.                                                                                                  'emplacement' => $emplacement,
  522.                                                                                              ]);
  523.                             if (is_object($articleInventaireExistant)) {
  524.                                 $errors[] = ['message' => 'Cet article est déjà présent sur l\'inventaire'];
  525.                             }
  526.                             //Si emplacement existe recuperer le stock de cet emplacement au moment de l'inventaire
  527.                             $stock $mvtStockService->getStockArticleAuneDate($article->getId(), $emplacement->getId(), $inventaire->getDate());
  528.                             //$emplacement->setStock($stockReleve);
  529.                             $em->persist($emplacement);
  530.                             //Attacher l'emplacement à l'article inventaire
  531.                             $articleInventaire->setEmplacement($emplacement);
  532.                         } elseif (is_object($articleInventaire->getEmplacement()) && is_object($articleInventaire->getEmplacement()->getNiveauUn())) {
  533.                             $emplacement = new Emplacement;
  534.                             //$emplacement->setArticle($article);//La liaison à l'article se fait uniquement à la clôture de l'inventaire
  535.                             $emplacement->setNiveauUn($articleInventaire->getEmplacement()->getNiveauUn());
  536.                             $emplacement->setNiveauDeux($articleInventaire->getEmplacement()->getNiveauDeux());
  537.                             $emplacement->setNiveauTrois($articleInventaire->getEmplacement()->getNiveauTrois());
  538.                             $emplacement->setNiveauQuatre($articleInventaire->getEmplacement()->getNiveauQuatre());
  539.                             $emplacement->setUtilisateur($user);
  540.                             $em->persist($emplacement);
  541.                             //Stock
  542.                             //$stock = 0;
  543.                             //$stock = $article->getStock();
  544.                             $stock                $stockArticle;
  545.                             $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true'visibilite' => true]);
  546.                             if ( ! is_object($emplacementPardefaut)) {
  547.                                 $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
  548.                             }
  549.                             if (is_object($emplacementPardefaut)) {
  550.                                 //$stock = $emplacementPardefaut->getStock();
  551.                                 $stock $mvtStockService->getStockArticleAuneDate($article->getId(), $emplacementPardefaut->getId(), $inventaire->getDate());;
  552.                                 $articleInventaire->setEmplacement($emplacementPardefaut);
  553.                             } else {
  554.                                 $articleInventaire->setEmplacement(null);
  555.                             }
  556.                             //
  557.                             //$emplacement->setStock($stockReleve);
  558.                             //dump($emplacement);
  559.                             //$articleInventaire->setEmplacement($emplacement);
  560.                             $articleInventaire->setNouvelEmplacement($emplacement);
  561.                         } else {
  562.                             $articleInventaire->setEmplacement(null);
  563.                             $stock $stockArticle;
  564.                         }
  565.                         $articleInventaire->setStock($stock);
  566.                     }
  567.                 }
  568.                 $marque $inventaire->getMarque();
  569.                 if (is_object($marque)) {
  570.                     $article->setMarque($marque);
  571.                 }
  572.                 $em->persist($inventaire);
  573.                 //numeroter l'articleInventaire
  574.                 $numero count($inventaire->getArticleInventaire());
  575.                 $numero++;
  576.                 $numerotation $inventaire->getId().'-'.str_pad($numero6"0"STR_PAD_LEFT);
  577.                 $articleInventaire->setNumerotation($numerotation);
  578.                 $em->persist($articleInventaire);
  579.                 if ($errors == '') {
  580.                     $em->flush();
  581.                     $this->addFlash(
  582.                         'notice',
  583.                         'Article ajouté à l\'inventaire avec succès !'
  584.                     );
  585.                     //return $this->redirectToRoute('dtc_inventaire_modifier', array('id'=>$inventaire->getId()));
  586.                     $url $this->generateUrl('dtc_inventaire_modifier', ['id' => $inventaire->getId()]);
  587.                     return new JsonResponse([
  588.                                                 'rendu'  => '',
  589.                                                 'valide' => '1',
  590.                                                 'url'    => $url,
  591.                                                 'titre'  => '',
  592.                                             ]);
  593.                 }
  594.             } else {
  595.                 $errors $validator->validate($inventaire);
  596.             }
  597.         }
  598.         $rendu $this->renderView('Inventaires/Inventaire/ajouter-article.html.twig', [
  599.             'form'       => $form->createView(),
  600.             'errors'     => $errors,
  601.             'inventaire' => $inventaire,
  602.         ]);
  603.         //return $this->render('Inventaires/Inventaire/ajouter-modal.html.twig', array('form' => $form->createView(),'errors'=>$errors,'inventaire'=>$inventaire));
  604.         return new JsonResponse(
  605.             [
  606.                 'rendu'  => $rendu,
  607.                 'valide' => '0',
  608.                 'url'    => '',
  609.                 'titre'  => $titre_modal,
  610.             ]
  611.         );
  612.     }
  613.     /**
  614.      * @Route("/inventaire/{id}/differences", name="dtc_inventaire_differences")
  615.      */
  616.     public function differencesAction(Request $requestInventaire $inventaireEntityManagerInterface $emTranslatorInterface $translator)
  617.     {
  618.         $titre_modal $translator->trans("Différence de stock");
  619.         $valid       '0';
  620.         if ($request->isMethod('POST')) {
  621.             $type    "valorisation";
  622.             $suffixe "aaaa";
  623.             $param   $request->request->all();
  624.             //$param['inventaire'] = $inventaire;
  625.             //$this->pdfValorisationAction($suffixe,$param,false);
  626.             $url $this->generateUrl('dtc_inventaire_differences_pdf', ['id' => $inventaire->getId(), 'param' => $param't' => time()]);
  627.             //$valid = '1';
  628.         } else {
  629.             $type  "";
  630.             $url   "";
  631.             $valid '0';
  632.         }
  633.         $rendu $this->renderView('Articles/Stock/valorisation.html.twig', [
  634.             'inventaire' => $inventaire,
  635.         ]);
  636.         return new JsonResponse(['rendu' => $rendu'valide' => $valid'url' => $url'titre' => $titre_modal'type' => $type]);
  637.     }
  638.     /**
  639.      * @Route("/inventaire/{id}/differences/pdf", name="dtc_inventaire_differences_pdf")
  640.      */
  641.     public function pdfDifferencesAction(Request $requestInventaire $inventaire$retour trueEntityManagerInterface $emPdf $snappy)
  642.     {
  643.         $param   $request->query->all();
  644.         $societe $em->getRepository(Societe::class)->find(1);
  645.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  646.         //$header = $this->renderView('FO/PDF/header_bl_pdf.html.twig', array('societe'  => $societe,'commande'  => $bonPreparation));
  647.         $header "";
  648.         //$snappy->setOption('page-size', 'A4');
  649.         $snappy->setOption('header-html'$header);
  650.         $snappy->setOption('footer-html'$footer);
  651.         //$snappy->setOption('header-html',$footer);
  652.         $snappy->setOption('margin-bottom'"10");
  653.         //$snappy->setOption('margin-top',"10");
  654.         //$snappy->setOption('zoom', 1 );
  655.         //$snappy->setOption('dpi', 300 );
  656.         $order              $param['param']['tri'];
  657.         $articlesInventaire $em->getRepository(ArticleInventaire::class)->getDifferences($inventaire->getId(), $order)->getQuery()->getResult();;
  658.         $chemin_pdf 'PDF/STOCK/DIFFERENCE-INVENTAIRE'.$inventaire->getId().'.pdf';
  659.         if (file_exists($chemin_pdf)) {
  660.             unlink($chemin_pdf);
  661.         }
  662.         $snappy->generateFromHtml(
  663.             $this->renderView(
  664.                 'Inventaires/Inventaire/difference_inventaire_template_pdf.html.twig',
  665.                 [
  666.                     'societe'            => $societe,
  667.                     'articlesInventaire' => $articlesInventaire,
  668.                     'parametres'         => $param['param'],
  669.                     'inventaire'         => $inventaire,
  670.                 ]
  671.             ),
  672.             $chemin_pdf
  673.         );
  674.         if ($retour == true) {
  675.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  676.         }
  677.     }
  678.     /**
  679.      * @Route("/inventaire/{id}/pourcentage-traitement", name="dtc_inventaire_pourcentage_traitement")
  680.      */
  681.     public function pourcentageTraitementAction(Request $requestInventaire $inventaireInventaireService $service)
  682.     {
  683.         $pourcentageTraitement $service->pourcentageTraitement($inventaire);
  684.         $response = new JsonResponse();
  685.         $response->setData([
  686.                                'pourcentageTraitement' => $pourcentageTraitement,
  687.                            ]);
  688.         return $response;
  689.     }
  690.     /**
  691.      * @Route("/inventaire/process/lancer", name="dtc_inventaire_process_lancer")
  692.      */
  693.     public function lancerProcessInventaireAction(Request $request)
  694.     {
  695.         /*
  696.         $builder = new ProcessBuilder();
  697.         $builder->setArguments(array('php', '../app_dev.php/app/console', 'ajouter:articleInventaire'));
  698.         $builder->getProcess()->start();
  699.          *
  700.          */
  701.         // TODO Refactor Command
  702.         $process  = new Process(['nohup php''bin/console''ajouter:articleInventaire x &']);
  703.         $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  704.         $process->setOptions(['create_new_console' => true]);
  705.         $process->start();
  706.         sleep(1);
  707.         //exec('nohup php ../app/console ajouter:articleInventaire &');
  708.         $response = new JsonResponse();
  709.         $response->setData([
  710.                                'message' => 'lancement du process inventaire.'.$message,
  711.                            ]);
  712.         return $response;
  713.     }
  714.     /**
  715.      * @Route("/inventaire/{id}/supprimer", name="dtc_inventaire_supprimer")
  716.      */
  717.     public function supprimerAction(Request $requestInventaire $inventaireEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  718.     {
  719.         $titre_modal    $translator->trans("Demande de confirmation");
  720.         $message        'Vous vous apprêtez à supprimer l\'inventaire "'.$inventaire->getLibelle().'" du '.$inventaire->getDate()->format('d/m/Y H:i').', souhaitez vous continuer ?';
  721.         $user           $this->getUser();
  722.         $nonSupprimable false;
  723.         $errors         "";
  724.         if (is_object($inventaire->getDateCloture())) {
  725.             $errors[]['message'] = 'Cet inventaire est clôturé. Vous ne pouvez pas le supprimer!';
  726.             $nonSupprimable      true;
  727.         }
  728.         $form $this->createForm(SupprimerInventaireType::class, $inventaire);
  729.         $form->handleRequest($request);
  730.         if ($form->isSubmitted()) {
  731.             if ($form->isValid()) {
  732.                 $em->remove($inventaire);
  733.                 $em->flush();
  734.                 $this->addFlash(
  735.                     'notice',
  736.                     $translator->trans('Inventaire supprimé avec succès !')
  737.                 );
  738.                 $url $this->generateUrl('dtc_inventaire_liste', []);
  739.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  740.             } else {
  741.                 $errors $validator->validate($inventaire);
  742.                 $rendu  $this->renderView(
  743.                     'FO/Supprimer/supprimer.html.twig',
  744.                     ['form' => $form->createView(), 'errors' => $errors'id' => $inventaire->getId(), 'type' => '''messageModal' => $message]
  745.                 );
  746.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  747.             }
  748.         }
  749.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', [
  750.             'form'           => $form->createView(),
  751.             'id'             => $inventaire->getId(),
  752.             'type'           => '',
  753.             'errors'         => $errors,
  754.             'messageModal'   => $message,
  755.             'nonSupprimable' => $nonSupprimable,
  756.         ]);
  757.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  758.     }
  759. }