src/Controller/Articles/MouvementStockController.php line 349

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ArticleComposant;
  5. use App\Entity\Articles\ConditionAchat;
  6. use App\Entity\Articles\MouvementStock;
  7. use App\Entity\GestionComerciale\ArticleCommande;
  8. use App\Entity\GestionComerciale\Reception;
  9. use App\Event\Article\ArticlePumpUpdateEvent;
  10. use App\Form\Articles\MouvementStockType;
  11. use App\Form\Articles\SupprimerMouvementStockType;
  12. use App\Library\Datatable\Util\Datatable;
  13. use App\Service\Articles\ArticleService;
  14. use App\Service\Articles\MouvementStockService;
  15. use App\Service\GestionComerciale\CommandeFournisseurService;
  16. use App\Service\MarketPlace\ArticleMarketPlaceService;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpFoundation\StreamedResponse;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Validator\Validator\ValidatorInterface;
  25. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. class MouvementStockController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/article/stock/nouveau/{id}", name="dtc_article_stock_ajouter")
  31.      */
  32.     public function ajouterAction(Request               $requestEntityManagerInterface $emArticleService $articleService,
  33.                                   MouvementStockService $mvtStockServiceArticleMarketPlaceService $articleMarketPlaceServiceTranslatorInterface $translator,
  34.                                   ValidatorInterface    $validatorEventDispatcherInterface $eventDispatcherArticle $article$modal ''
  35.     ) {
  36.         //$modal = $request->query->get('modal');
  37.         $user $this->getUser();
  38.         $ms   = new MouvementStock();
  39.         $ms->setArticle($article);
  40.         $ms->setUtilisateur($user);
  41.         $ms->setPrixAchat(0);
  42.         $dernierMouvement $em->getRepository(MouvementStock::class)->findOneBy(['article' => $article], ['id' => 'DESC']);
  43.         $dernierMouvementDate $em->getRepository(MouvementStock::class)->getDernierMouvementDateHeure($article->getId(), $ms->getDateMvt());
  44.         //$prixUnitaire = $dernierMouvementDate["pump"];
  45.         //$stockValorisation = $dernierMouvementDate["stock"];
  46.         $dernierMouvement $em->getRepository(MouvementStock::class)->find($dernierMouvementDate["id"]);
  47.         $prixRegulation 0;
  48.         if (is_object($dernierMouvement)) {
  49.             //$ms->setPrixAchat($dernierMouvement->getPrixAchat());
  50.             $prixRegulation 0;
  51.             if ($dernierMouvement->getCpump() != null && $dernierMouvement->getCpump() != "") {
  52.                 $prixRegulation $dernierMouvement->getCpump();
  53.             } elseif ($dernierMouvement->getAnnexe() != null && $dernierMouvement->getAnnexe() != "") {
  54.                 $prixRegulation $dernierMouvement->getAnnexe();
  55.             } else {
  56.                 $repo_condha $em->getRepository(ConditionAchat::class);
  57.                 $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  58.                 if (is_object($condHa)) {
  59.                     $devise null;
  60.                     $prix   $condHa->getPrixAchatNet();
  61.                     if ($condHa->getCoefficientConditionnement() != 0) {
  62.                         $prix $prix $condHa->getCoefficientConditionnement();
  63.                     }
  64.                     $tauxChange  1;
  65.                     $fournisseur $condHa->getFournisseur();
  66.                     if (is_object($fournisseur)) {
  67.                         $devise $fournisseur->getDevise();
  68.                     }
  69.                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  70.                         $tauxChange $devise->getTauxChange();
  71.                     }
  72.                     $prix $prix $tauxChange;
  73.                     $prixRegulation $prix;
  74.                 } else {
  75.                     $devise null;
  76.                     $condHa $repo_condha->findOneBy(["article" => $article]);
  77.                     if (is_object($condHa)) {
  78.                         $prix $condHa->getPrixAchatNet();
  79.                         if ($condHa->getCoefficientConditionnement() != 0) {
  80.                             $prix $prix $condHa->getCoefficientConditionnement();
  81.                         }
  82.                         $tauxChange  1;
  83.                         $fournisseur $condHa->getFournisseur();
  84.                         if (is_object($fournisseur)) {
  85.                             $devise $fournisseur->getDevise();
  86.                         }
  87.                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  88.                             $tauxChange $devise->getTauxChange();
  89.                         }
  90.                         $prix $prix $tauxChange;
  91.                         $prixRegulation $prix;
  92.                     }
  93.                 }
  94.             }
  95.         }
  96.         if ($article->getPump() != "") {
  97.             $prixRegulation $article->getPump();
  98.         }
  99.         $ms->setPrixAchat($prixRegulation);
  100.         $ms->setPrixSansRemise($prixRegulation);
  101.         $ms->setPrixAchatUnitaireAvecFrais($prixRegulation);
  102.         $form $this->createForm(MouvementStockType::class, $ms);
  103.         $errors "";
  104.         $pump2  $em->getRepository(Article::class)->getPumpR($article->getId());
  105.         //exit;
  106.         if ($pump2 == 0) {
  107.             $pump2 $articleService->getPrixAchatNetEuro($article->getId());
  108.         }
  109.         $cpump2 $em->getRepository(Article::class)->getPumpC($article->getId());
  110.         //graphiques
  111.         $variationsStock $em->getRepository(MouvementStock::class)->getVariationsStockParMois($article->getId(), 12);
  112.         $variationsPump  $em->getRepository(MouvementStock::class)->getVariationsPumpParMois($article->getId(), 12);
  113.         $variationsCpump $em->getRepository(MouvementStock::class)->getVariationsCpumpParMois($article->getId(), 12);
  114.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  115.         $ralClient           $repoArticleCommande->getRalClient($article);
  116.         $total_devise $repoArticleCommande->getDevisArticle($article);
  117.         //reservations de stock
  118.         $repo_article_composant $em->getRepository(ArticleComposant::class);
  119.         //$composants = $repo_article_composant->findByArticle($article);
  120.         $composants               $repo_article_composant->getComposantsComposeVirtuel($article)->getQuery()->getResult();
  121.         $reservations             $repoArticleCommande->getRalClientEtCmdAssociees($article$composants);
  122.         $reservationsFabrications $repoArticleCommande->getReservationsFabrications($article$composants);
  123.         //\Doctrine\Common\Util\Debug::dump($reservations);
  124.         $form->handleRequest($request);
  125.         if ($form->isSubmitted()) {
  126.             if ($form->isValid()) {
  127.                 //echo $user->getEmail();
  128.                 $prixAchatSaisie $ms->getPrixAchat();
  129.                 $ms->setUtilisateur($user);
  130.                 $mvtStockService->sauvegarder($ms$article"regulation");
  131.                 $ms->setPrixAchat($prixAchatSaisie);
  132.                 $ms->setPrixSansRemise($prixAchatSaisie);
  133.                 $em->persist($ms);
  134.                 $em->flush();
  135.                 $this->addFlash('notice'$translator->trans('Mouvement de stock ajouté avec succès !'));
  136.                 $tab_message            = [];
  137.                 $tab_message["message"] = "Suite mouvement de stock manuel (".$ms->getRaisonMouvementStock()->getLibelle()." qte : ".$ms->getQuantite().") sur la fiche article";
  138.                 $message_maj            $articleMarketPlaceService->majStockAnnonceSuiteRetourBext($article->getId(), $tab_message);
  139.                 if (is_array($message_maj)) {
  140.                     if (array_key_exists('notice'$message_maj) && $message_maj["notice"] != "") {
  141.                         $this->addFlash('notice'$message_maj["notice"]);
  142.                     }
  143.                     if (array_key_exists('warning'$message_maj) && $message_maj["warning"] != "") {
  144.                         $this->addFlash('warning'$message_maj["warning"]);
  145.                     }
  146.                 }
  147.                 if ($ms->getRaisonMouvementStock()->getAction() == "augmenter" && $ms->getQuantite() > 0) {
  148.                     $pumpHorsFrais $em->getRepository(Article::class)->getPumpHorsFrais($article->getId());
  149.                     if ($pumpHorsFrais == 0) {
  150.                         $pumpHorsFrais $articleService->getPrixAchatNetEuro($article->getId());
  151.                     }
  152.                     $pump2 $em->getRepository(Article::class)->getPumpR($article->getId());
  153.                     if ($pump2 == 0) {
  154.                         $pump2 $articleService->getPrixAchatNetEuro($article->getId());
  155.                     }
  156.                     //$cpump2 = $em->getRepository('DTCArticlesBundle:Article')->getPumpC($article->getId());
  157.                     $ms->setPumpHorsFrais($pumpHorsFrais);
  158.                     $ms->setPump($pump2);
  159.                     $em->persist($ms);
  160.                     $article->setPump($pump2);
  161.                     $article->setPumpHorsFrais($pumpHorsFrais);
  162.                     //$article->setCpump($cpump2);
  163.                     $em->persist($article);
  164.                     $em->flush();
  165.                 }
  166.                 $articlePumpUpdateEvent = new ArticlePumpUpdateEvent($articlenull$ms );
  167.                 $eventDispatcher->dispatch($articlePumpUpdateEvent);
  168.                 //return $this->redirectToRoute('dtc_article_modifier',array('id' => $article->getId(), 'pump2' => $pump2, 'tab' => 'stocks', 'variationsStock' => $variationsStock, 'variationsPump' => $variationsPump));
  169.                 return $this->redirectToRoute('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
  170.             } else {
  171.                 $errors $validator->validate($ms);
  172.                 return $this->redirectToRoute(
  173.                     'dtc_article_modifier',
  174.                     [
  175.                         'id'              => $article->getId(),
  176.                         'forms'           => $form,
  177.                         'tab'             => 'stocks',
  178.                         'pump2'           => $pump2,
  179.                         'variationsStock' => $variationsStock,
  180.                         'variationsPump'  => $variationsPump,
  181.                         'variationsCpump' => $variationsCpump,
  182.                     ]
  183.                 );
  184.             }
  185.         }
  186.         return $this->render('Articles/MouvementStock/ajouter.html.twig', [
  187.             'form'                     => $form->createView(),
  188.             'errors'                   => $errors,
  189.             'article'                  => $article,
  190.             'pump2'                    => $pump2,
  191.             'variationsStock'          => $variationsStock,
  192.             'variationsPump'           => $variationsPump,
  193.             'variationsCpump'          => $variationsCpump,
  194.             'ralClient'                => $ralClient,
  195.             'reservations'             => $reservations,
  196.             'reservationsFabrications' => $reservationsFabrications,
  197.             'modal'                    => $modal,
  198.             'total_devise'             => $total_devise,
  199.             'composants'               => $composants,
  200.         ]);
  201.     }
  202.     /**
  203.      * @Route("/mouvement/stock", name="dtc_mouvement_stock_liste")
  204.      */
  205.     public function listerAction(Datatable $datatableTranslatorInterface $translator)
  206.     {
  207.         $this->datatable($datatable$translator);
  208.         return $this->render('Articles/MouvementStock/lister.html.twig', []);
  209.     }
  210.     /**
  211.      * set datatable configs
  212.      *
  213.      * @return \App\Library\Datatable\Util\Datatable
  214.      */
  215.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  216.     {
  217.         $datatable->setEntity(MouvementStock::class, "x")
  218.                   ->setFields(
  219.                       [
  220.                           $translator->trans("ID")       => 'x.id',
  221.                           $translator->trans("Quantité") => 'x.quantite',
  222.                           $translator->trans("Article")  => 'a.libelle',
  223.                           $translator->trans("Raison")   => 'r.libelle',
  224.                           $translator->trans("Date")     => 'x.date',
  225.                           "_identifier_"                 => 'x.id',
  226.                       ]
  227.                   )
  228.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  229.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  230.                   ->setRenderers(
  231.                       [
  232.                           => [
  233.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  234.                           ],
  235.                       ]
  236.                   )
  237.                   ->setOrder("x.id""desc")
  238.                   ->setSearch(true)
  239.                   ->setSearchFields([5]);
  240.         return $datatable;
  241.     }
  242.     /**
  243.      * Grid action
  244.      * @return Response
  245.      */
  246.     /**
  247.      * @Route("/mouvement/stock/grid", name="dtc_mouvement_stock_liste_grid")
  248.      */
  249.     public function gridAction(Datatable $datatableTranslatorInterface $translator)
  250.     {
  251.         return $this->datatable($datatable$translator)->execute();
  252.     }
  253.     /**
  254.      * @Route("", name="")
  255.      */
  256.     public function listerArticleAction(Datatable $datatableTranslatorInterface $translator$article$achat false): Response
  257.     {
  258.         //$achat = $request->query->get('achat');
  259.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => true];
  260.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [1], "visible" => true"orderable" => true];
  261.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [2], "visible" => true"orderable" => true];
  262.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [3], "visible" => true"orderable" => true];
  263.         $tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id""targets" => [4], "visible" => true"orderable" => true];
  264.         $tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id""targets" => [5], "visible" => true"orderable" => true];
  265.         $tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id""targets" => [6], "visible" => true"orderable" => true];
  266.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [7], "visible" => true"orderable" => true];
  267.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [8], "visible" => true"orderable" => true];
  268.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [9], "visible" => true"orderable" => true];
  269.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [10], "visible" => true"orderable" => true];
  270.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [11], "visible" => true"orderable" => true];
  271.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [12], "visible" => true"orderable" => true];
  272.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [13], "visible" => true"orderable" => true];
  273.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(14),"visible"=>true,"orderable"=>true);
  274.         $this->datatableArticle($article$achat$datatable$translator);
  275.         return $this->render('Articles/MouvementStock/listerArticle.html.twig', ['article' => $article'achat' => $achat'tableauClassColonne' => $tableau_class_cellule]);
  276.     }
  277.     /**
  278.      * set datatable configs
  279.      *
  280.      * @return \App\Library\Datatable\Util\Datatable
  281.      */
  282.     private function datatableArticle($article$achat falseDatatable $datatableTranslatorInterface $translator)
  283.     {
  284.         $datatable->setEntity(MouvementStock::class, "x")
  285.                   ->setFields(
  286.                       [
  287.                           $translator->trans("ID")               => 'x.id',
  288.                           $translator->trans("Date")             => 'x.dateMvt',
  289.                           $translator->trans("Qté&nbsp;E&nbsp;") => 'x.quantite',
  290.                           $translator->trans("Qté&nbsp;S")       => 'x.quantite',
  291.                           $translator->trans("Prix")             => 'x.prixAchat',
  292.                           $translator->trans("Pump")             => 'x.pump',
  293.                           $translator->trans("Cump")             => 'x.cpump',
  294.                           $translator->trans("Annexe")           => 'x.annexe',
  295.                           $translator->trans("Raison")           => 'r.libelle',
  296.                           $translator->trans("Client")           => 'cl.nom',
  297.                           $translator->trans("Doc") => 'c.reference',
  298.                           $translator->trans("Fournisseur") => 'f.libelle',
  299.                           $translator->trans("BL fourn.")   => 'x.bonLivraison',
  300.                           $translator->trans("Commentaire") => 'x.commentaire',
  301.                           $translator->trans("Stock")       => 'x.stock',
  302.                           $translator->trans("Recept")   => 'rcp.reference',
  303.                           $translator->trans("Equipier") => 'x.id',
  304.                           $translator->trans("Empl.")    => 'e.id',
  305.                           "_identifier_"                 => 'x.id',
  306.                       ]
  307.                   )
  308.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  309.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  310.                   ->addJoin('x.commandeVirtuel''cv'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  311.                   ->addJoin('c.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  312.                   ->addJoin('c.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  313.                   ->addJoin('x.commandeFournisseur''cf'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  314.                   ->addJoin('x.reception''rcp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  315.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  316.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  317.                   ->addJoin('x.emplacement''e'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  318.                   ->setRenderers(
  319.                       [
  320.                           => [
  321.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  322.                           ],
  323.                           => [
  324.                               'view'   => 'FO/DataTable/qte.html.twig',
  325.                               'params' => ['entrant' => 'true'],
  326.                           ],
  327.                           => [
  328.                               'view'   => 'FO/DataTable/qte.html.twig',
  329.                               'params' => ['sortant' => 'true'],
  330.                           ],
  331.                           => [
  332.                               'view'   => 'FO/DataTable/prix.html.twig',
  333.                               'params' => ['forceEuro' => 1],
  334.                           ],
  335.                           => [
  336.                               'view'   => 'FO/DataTable/prix.html.twig',
  337.                               'params' => ['forceEuro' => '1'],
  338.                           ],
  339.                           => [
  340.                               'view'   => 'FO/DataTable/prix.html.twig',
  341.                               'params' => ['forceEuro' => '1'],
  342.                           ],
  343.                           => [
  344.                               'view' => 'FO/DataTable/clientMS.html.twig',
  345.                           ],
  346.                           10 => [
  347.                               'view'   => 'FO/DataTable/commande.html.twig',
  348.                               'params' => [
  349.                                   'route'       => 'dtc_commande_fournisseur_modifier',
  350.                                   'edit_route'  => 'dtc_bon_livraison_modifier',
  351.                                   'edit_route1' => 'dtc_facture_afficher',
  352.                                   'edit_route2' => 'dtc_avoir_modifier',
  353.                               ],
  354.                           ],
  355.                           11 => [
  356.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  357.                               'params' => [
  358.                                   'edit_route'   => 'dtc_commande_fournisseur_modifier',
  359.                                   'typeDocument' => 'fournisseur',
  360.                               ],
  361.                           ],
  362.                           13 => [
  363.                               'view' => 'FO/DataTable/virtuel-parent-commentaire.html.twig',
  364.                           ],
  365.                           15 => [
  366.                               'view'   => 'FO/DataTable/commande.html.twig',
  367.                               'params' => [
  368.                                   'type'        => 'reception',
  369.                                   'route'       => 'dtc_commande_fournisseur_modifier',
  370.                                   'edit_route'  => 'dtc_bon_livraison_modifier',
  371.                                   'edit_route1' => 'dtc_facture_afficher',
  372.                                   'edit_route2' => 'dtc_avoir_modifier',
  373.                               ],
  374.                           ],
  375.                           16 => [
  376.                               'view' => 'FO/DataTable/utilisateur.html.twig',
  377.                           ],
  378.                           17 => [
  379.                               'view' => 'FO/DataTable/nom_emplacement.html.twig',
  380.                           ],
  381.                       ]
  382.                   )
  383.                   ->setOrder("x.dateMvt""desc")
  384.             //->setOrder("x.dateMvt", "desc")
  385.             //->setOrder("x.stock", "desc")
  386.         ;
  387.         if ($achat === false) {
  388.             $datatable->setWhere(                                                     // set your dql where statement
  389.                 'a.id = :article',
  390.                 ['article' => $article]
  391.             );
  392.         } else {
  393.             $datatable->setWhere(
  394.                 'a.id = :article and x.raisonMouvementStock = 3',
  395.                 ['article' => $article]
  396.             );
  397.         }
  398.         $datatable->setSearch(true)
  399.                   ->setSearchFields([89101113141516]);
  400.         return $datatable;
  401.     }
  402.     /**
  403.      * @Route("/mouvement/stock/grid/article/{article}", name="dtc_mouvement_stock_liste_article_grid")
  404.      */
  405.     public function gridArticleAction(Request $request$articleDatatable $datatableTranslatorInterface $translator)
  406.     {
  407.         $achat $request->query->get('achat');
  408.         if ($achat == true) {
  409.             return $this->datatableArticle($article$achat$datatable$translator)->execute();
  410.         } else {
  411.             return $this->datatableArticle($articlefalse$datatable$translator)->execute();
  412.         }
  413.         //\Doctrine\Common\Util\Debug::dump($achat);
  414.     }
  415.     /**
  416.      * @Route("", name="")
  417.      */
  418.     public function listerArticleStockAction(Datatable $datatableTranslatorInterface $translator$article$achat false)
  419.     {
  420.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => false];
  421.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w100""targets" => [1], "visible" => true"orderable" => true];
  422.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w100""targets" => [2], "visible" => true"orderable" => true];
  423.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w100 text-right""targets" => [3], "visible" => true"orderable" => true];
  424.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200 text-right""targets" => [4], "visible" => true"orderable" => true];
  425.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200 text-right""targets" => [5], "visible" => true"orderable" => true];
  426.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w400 text-right""targets" => [6], "visible" => true"orderable" => true];
  427.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w400 text-right""targets" => [7], "visible" => true"orderable" => true];
  428.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w300""targets" => [8], "visible" => true"orderable" => true];
  429.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w500""targets" => [9], "visible" => false"orderable" => true];
  430.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200""targets" => [10], "visible" => true"orderable" => true];
  431.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200""targets" => [11], "visible" => true"orderable" => true];
  432.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200""targets" => [12], "visible" => true"orderable" => true];
  433.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export text-center w200""targets" => [13], "visible" => true"orderable" => true];
  434.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200""targets" => [14], "visible" => true"orderable" => true];
  435.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200 text-center""targets" => [15], "visible" => true"orderable" => true];
  436.         $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export w200""targets" => [16], "visible" => true"orderable" => true];
  437.         $this->datatableArticleStock($article$achat$datatable$translator);
  438.         return $this->render('Articles/MouvementStock/listerArticle2.html.twig', ['article' => $article'achat' => $achat'tableauClassColonne' => $tableau_class_cellule,]);
  439.     }
  440.     /**
  441.      * set datatable configs
  442.      *
  443.      * @return \App\Library\Datatable\Util\Datatable
  444.      */
  445.     private function datatableArticleStock($article$achat falseDatatable $datatableTranslatorInterface $translator)
  446.     {
  447.         $datatable->setEntity(MouvementStock::class, "x")
  448.                   ->setFields(
  449.                       [
  450.                           $translator->trans("ID")    => 'x.id',
  451.                           $translator->trans("Date")  => 'x.dateMvt',
  452.                           $translator->trans("Qté E") => 'x.quantite',
  453.                           $translator->trans("Qté S") => 'x.quantite',
  454.                           $translator->trans("Prix")  => 'x.prixAchat',
  455.                           $translator->trans("Stock") => 'x.stock',
  456.                           $translator->trans("Pump hors frais") => 'x.pumpHorsFrais',
  457.                           $translator->trans("Prix avec frais") => 'x.prixAchatUnitaireAvecFrais',
  458.                           $translator->trans("Pump")            => 'x.pump',
  459.                           $translator->trans("Annexe")          => 'x.annexe',
  460.                           $translator->trans("Raison")          => 'r.libelle',
  461.                           $translator->trans("Client")          => 'cl.nom',
  462.                           $translator->trans("Doc")             => 'c.reference',
  463.                           $translator->trans("Fournisseur")     => 'f.libelle',
  464.                           $translator->trans("BL Fourn.")       => 'x.bonLivraison',
  465.                           $translator->trans("Comm")            => 'x.commentaire',
  466.                           //$translator->trans("Stock") =>  'x.stock',
  467.                           $translator->trans("Recept")   => 'rcp.reference',
  468.                           $translator->trans("Equipier") => 'x.id',
  469.                           $translator->trans("Empl")     => 'e.id',
  470.                           "_identifier_"                 => 'x.id',
  471.                       ]
  472.                   )
  473.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  474.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  475.                   ->addJoin('c.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  476.                   ->addJoin('x.commandeFournisseur''cf'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  477.                   ->addJoin('x.reception''rcp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  478.                   ->addJoin('c.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  479.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  480.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  481.                   ->addJoin('x.emplacement''e'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  482.                   ->setRenderers(
  483.                       [
  484.                           1  => [
  485.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  486.                           ],
  487.                           2  => [
  488.                               'view'   => 'FO/DataTable/qte.html.twig',
  489.                               'params' => ['entrant' => 'true'],
  490.                           ],
  491.                           3  => [
  492.                               'view'   => 'FO/DataTable/qte.html.twig',
  493.                               'params' => ['sortant' => 'true'],
  494.                           ],
  495.                           4  => [
  496.                               'view'   => 'FO/DataTable/prix.html.twig',
  497.                               'params' => ['forceEuro' => '1'],
  498.                           ],
  499.                           6  => [
  500.                               'view'   => 'FO/DataTable/prix.html.twig',
  501.                               'params' => ['forceEuro' => '1'],
  502.                           ],
  503.                           7  => [
  504.                               'view'   => 'FO/DataTable/prix.html.twig',
  505.                               'params' => ['forceEuro' => '1'],
  506.                           ],
  507.                           8  => [
  508.                               'view'   => 'FO/DataTable/prix.html.twig',
  509.                               'params' => ['forceEuro' => '1'],
  510.                           ],
  511.                           10 => [
  512.                               'view' => 'FO/DataTable/supprimer_espace.html.twig',
  513.                           ],
  514.                           11 => [
  515.                               'view' => 'FO/DataTable/clientMS.html.twig',
  516.                           ],
  517.                           12 => [
  518.                               'view'   => 'FO/DataTable/commande.html.twig',
  519.                               'params' => [
  520.                                   'route'       => 'dtc_commande_fournisseur_modifier',
  521.                                   'edit_route'  => 'dtc_bon_livraison_modifier',
  522.                                   'edit_route1' => 'dtc_facture_afficher',
  523.                                   'edit_route2' => 'dtc_avoir_modifier',
  524.                               ],
  525.                           ],
  526.                           13 => [
  527.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  528.                               'params' => [
  529.                                   'edit_route'   => 'dtc_fournisseur_modifier',
  530.                                   'typeDocument' => 'fournisseur',
  531.                               ],
  532.                           ],
  533.                           15 => [
  534.                               'view' => 'FO/DataTable/virtuel-parent-commentaire.html.twig',
  535.                           ],
  536.                           16 => [
  537.                               'view'   => 'FO/DataTable/commande.html.twig',
  538.                               'params' => [
  539.                                   'type'        => 'reception',
  540.                                   'route'       => 'dtc_commande_fournisseur_modifier',
  541.                                   'edit_route'  => 'dtc_bon_livraison_modifier',
  542.                                   'edit_route1' => 'dtc_facture_afficher',
  543.                                   'edit_route2' => 'dtc_avoir_modifier',
  544.                               ],
  545.                           ],
  546.                           17 => [
  547.                               'view' => 'FO/DataTable/utilisateur.html.twig',
  548.                           ],
  549.                           18 => [
  550.                               'view' => 'FO/DataTable/nom_emplacement.html.twig',
  551.                           ],
  552.                       ]
  553.                   )
  554.             //->setOrder("x.dateMvt", "desc")
  555.                   ->setOrder("x.dateMvt desc,x.id""desc");
  556.         if ($achat === false) {
  557.             $datatable->setWhere(                                                     // set your dql where statement
  558.                 'a.id = :article AND x.dateSuppression IS NULL',
  559.                 ['article' => $article]
  560.             );
  561.         } else {
  562.             $datatable->setWhere(
  563.                 'a.id = :article and x.raisonMouvementStock = 3 AND x.dateSuppression IS NULL',
  564.                 ['article' => $article]
  565.             );
  566.         }
  567.         $datatable->setSearch(true)
  568.                   ->setSearchFields([6]);
  569.         return $datatable;
  570.     }
  571.     /**
  572.      * @Route("/mouvement/stock/grid/article_stock/{article}", name="dtc_mouvement_stock_liste_article_stock_grid")
  573.      */
  574.     public function gridArticleStockAction(Request $request$articleDatatable $datatableTranslatorInterface $translator)
  575.     {
  576.         $achat $request->query->get('achat');
  577.         if ($achat == true) {
  578.             return $this->datatableArticleStock($article$achat$datatable$translator)->execute();
  579.         } else {
  580.             return $this->datatableArticleStock($articlefalse$datatable$translator)->execute();
  581.         }
  582.     }
  583.     /**
  584.      * @Route("", name="")
  585.      */
  586.     public function listerByCommandeAction($commandeDatatable $datatableTranslatorInterface $translator)
  587.     {
  588.         //$achat = $request->query->get('achat');
  589.         $this->datatableCommande($commande$datatable$translator);
  590.         return $this->render('Articles/MouvementStock/lister-by-commande.html.twig', ['commande' => $commande]);
  591.     }
  592.     /**
  593.      * set datatable configs
  594.      *
  595.      * @return \App\Library\Datatable\Util\Datatable
  596.      */
  597.     private function datatableCommande($commandeDatatable $datatableTranslatorInterface $translator)
  598.     {
  599.         $datatable->setEntity(MouvementStock::class, "x")
  600.                   ->setFields(
  601.                       [
  602.                           //$translator->trans("ID") =>  'x.id',
  603.                           $translator->trans("Date")           => 'x.date',
  604.                           $translator->trans("Libelle")        => 'a.libelle',
  605.                           $translator->trans("Qté")            => 'x.quantite',
  606.                           $translator->trans("Prix d'achat")   => 'x.prixAchat',
  607.                           $translator->trans("Pump")           => 'x.pump',
  608.                           $translator->trans("BL Fournisseur") => "x.bonLivraison",
  609.                           $translator->trans("Commentaire")    => 'x.commentaire',
  610.                           $translator->trans("Actions")        => "x.id",
  611.                           "_identifier_" => 'x.id',
  612.                       ]
  613.                   )
  614.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  615.                   ->addJoin('x.commandeFournisseur''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  616.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  617.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  618.                   ->setRenderers(
  619.                       [
  620.                           => [
  621.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  622.                           ],
  623.                           => [
  624.                               'view'   => 'FO/DataTable/prix.html.twig',
  625.                               'params' => ['forceEuro' => '1'],
  626.                           ],
  627.                           => [
  628.                               'view'   => 'FO/DataTable/prix.html.twig',
  629.                               'params' => ['forceEuro' => '1'],
  630.                           ],
  631.                           => [
  632.                               'view'   => 'FO/DataTable/actions.html.twig',
  633.                               'params' => [
  634.                                   //'edit_route'    => 'dtc_commande_fournisseur_modifier',
  635.                                   'supprimer_route' => 'dtc_mouvement_stock_supprimer',
  636.                                   'objet'           => MouvementStock::class,
  637.                               ],
  638.                           ],
  639.                       ]
  640.                   )
  641.                   ->setWhere(                                                     // set your dql where statement
  642.                       'c.id = :commande',
  643.                       ['commande' => $commande]
  644.                   )
  645.                   ->setOrder("x.id""desc")
  646.                   ->setSearch(true)
  647.                   ->setSearchFields([5]);
  648.         return $datatable;
  649.     }
  650.     /**
  651.      * @Route("/mouvement/stock/grid/commande/{commande}", name="dtc_mouvement_stock_liste_by_commande_grid")
  652.      */
  653.     public function gridCommandeAction($commandeDatatable $datatableTranslatorInterface $translator)
  654.     {
  655.         return $this->datatableCommande($commande$datatable$translator)->execute();
  656.         //\Doctrine\Common\Util\Debug::dump($achat);
  657.     }
  658.     /**
  659.      * @Route("", name="")
  660.      */
  661.     public function listerByFabricationAction(Request $request$fabrication$composeDatatable $datatableTranslatorInterface $translator)
  662.     {
  663.         //$compose = $request->query->get('compose');
  664.         $this->datatableFabrication($fabrication$compose$datatable$translator);
  665.         return $this->render('Articles/MouvementStock/lister-by-fabrication.html.twig', ['fabrication' => $fabrication'compose' => $compose]);
  666.     }
  667.     /**
  668.      * set datatable configs
  669.      *
  670.      * @return \App\Library\Datatable\Util\Datatable
  671.      */
  672.     private function datatableFabrication($fabrication$compose falseDatatable $datatableTranslatorInterface $translator)
  673.     {
  674.         $datatable->setEntity(MouvementStock::class, "x")
  675.                   ->setFields(
  676.                       [
  677.                           $translator->trans("ID")      => 'x.id',
  678.                           $translator->trans("Date")    => 'x.date',
  679.                           $translator->trans("Libelle") => 'a.libelle',
  680.                           //$translator->trans("Qté") =>  'x.quantite',
  681.                           $translator->trans("Qté E")   => 'x.quantite',
  682.                           $translator->trans("Qté S")   => 'x.quantite',
  683.                           $translator->trans("Prix d'achat") => 'x.prixAchat',
  684.                           $translator->trans("Pump")         => 'x.pump',
  685.                           //$translator->trans("Raison") =>  'r.libelle',
  686.                           //$translator->trans("Fournisseur") =>  'f.reference',
  687.                           $translator->trans("Commentaire")  => 'x.commentaire',
  688.                           //$translator->trans("Actions") =>  'x.id',
  689.                           "_identifier_"                     => 'x.id',
  690.                       ]
  691.                   )
  692.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  693.                   ->addJoin('x.fabrication''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  694.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  695.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  696.                   ->setRenderers(
  697.                       [
  698.                           => [
  699.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  700.                           ],
  701.                           => [
  702.                               'view'   => 'FO/DataTable/qte.html.twig',
  703.                               'params' => ['entrant' => 'true'],
  704.                           ],
  705.                           => [
  706.                               'view'   => 'FO/DataTable/qte.html.twig',
  707.                               'params' => ['sortant' => 'true'],
  708.                           ],
  709.                           => [
  710.                               'view'   => 'FO/DataTable/prix.html.twig',
  711.                               'params' => [
  712.                                   'forceEuro'      => '1',
  713.                                   'afficher_total' => false,
  714.                               ],
  715.                           ],
  716.                           => [
  717.                               'view'   => 'FO/DataTable/prix.html.twig',
  718.                               'params' => [
  719.                                   'forceEuro'      => '1',
  720.                                   'afficher_total' => false,
  721.                               ],
  722.                           ],
  723.                           /*
  724.                           8 => array(
  725.                               'view' => 'FO/DataTable/actions.html.twig',
  726.                               'params' => array(
  727.                                       'edit_route_modal'    => 'dtc_mouvement_stock_modifier',
  728.                                       'objet'    => 'DTCGestionComercialeBundle:Reception',
  729.                                       //'deplierReception'    => true,
  730.                                   ),
  731.                           ),
  732.                            *
  733.                            */
  734.                       ]
  735.                   );
  736.         if ($compose == 'true') {
  737.             $where "c.id = :fabrication AND r.action LIKE 'augmenter'";
  738.         } else {
  739.             $where 'c.id = :fabrication';
  740.         }
  741.         $datatable->setWhere(                                                     // set your dql where statement
  742.             $where,
  743.             ['fabrication' => $fabrication]
  744.         )
  745.                   ->setOrder("x.id""desc")
  746.                   ->setSearch(true)
  747.                   ->setSearchFields([5]);
  748.         return $datatable;
  749.     }
  750.     /**
  751.      * Grid action
  752.      * @return Response
  753.      */
  754.     /**
  755.      * @Route("/mouvement/stock/grid/fabrication/{fabrication}", name="dtc_mouvement_stock_liste_by_fabrication_grid")
  756.      */
  757.     public function gridFabricationAction(Request $request$fabricationDatatable $datatableTranslatorInterface $translator)
  758.     {
  759.         $compose $request->query->get('compose');
  760.         return $this->datatableFabrication($fabrication$compose$datatable$translator)->execute();
  761.         //\Doctrine\Common\Util\Debug::dump($achat);
  762.     }
  763.     /**
  764.      * @Route("/mouvement/stock/{id}/supprimer", name="dtc_mouvement_stock_supprimer")
  765.      */
  766.     public function supprimerAction(Request                    $requestMouvementStock $msEntityManagerInterface $emMouvementStockService $mvtStockService,
  767.                                     CommandeFournisseurService $commandeFournisseurServiceTranslatorInterface $translatorValidatorInterface $validator
  768.     ) {
  769.         $titre_modal          $translator->trans("Demande de confirmation");
  770.         $user                 $this->getUser();
  771.         $commandeFounisseurId $ms->getCommandeFournisseur()->getId();
  772.         //$ms->setCommentaire($ms->getCommentaire()." Annulation réception sur la commande fournisseur ".$ms->getCommandeFournisseur()->getReference()." par ".$user->getPrenom()." ".$user->getNom());
  773.         $ms->setCommentaire("Sans commentaire");
  774.         $form   $this->createForm(SupprimerMouvementStockType::class, $ms);
  775.         $errors "";
  776.         $form->handleRequest($request);
  777.         if ($form->isSubmitted()) {
  778.             if ($form->isValid()) {
  779.                 $commandeFounisseur $ms->getCommandeFournisseur();
  780.                 $mvtStockService->supprimer($ms);
  781.                 $ms->getArticle()->setRalFournisseur($ms->getArticle()->getRalFournisseur() + $ms->getQuantite());
  782.                 $commandeFournisseurService->changementStatut($commandeFounisseur);
  783.                 $em->persist($ms->getArticle());
  784.                 $em->flush();
  785.                 //$em->remove($ms);
  786.                 //$em->flush();
  787.                 $this->addFlash(
  788.                     'notice',
  789.                     $translator->trans('Mouvement de stock supprimé avec succès !')
  790.                 );
  791.                 $url $this->generateUrl('dtc_commande_fournisseur_modifier', ['id' => $commandeFounisseurId]);
  792.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  793.             } else {
  794.                 $errors $validator->validate($ms);
  795.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $ms->getId(), 'type' => '']);
  796.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  797.             }
  798.         }
  799.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $ms->getId(), 'type' => '''errors' => $errors]);
  800.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  801.     }
  802.     /**
  803.      * @Route("/receptions", name="dtc_receptions_liste")
  804.      */
  805.     public function listerAfacturerAction(Datatable $datatableTranslatorInterface $translator)
  806.     {
  807.         $this->datatableAfacturer($datatable$translator);
  808.         return $this->render('Articles/MouvementStock/lister-a-facturer.html.twig', []);
  809.     }
  810.     /**
  811.      * set datatable configs
  812.      *
  813.      * @return \App\Library\Datatable\Util\Datatable
  814.      */
  815.     private function datatableAfacturer(Datatable $datatableTranslatorInterface $translator)
  816.     {
  817.         $datatable->setEntity(MouvementStock::class, "x")
  818.                   ->setFields(
  819.                       [
  820.                           //$translator->trans("ID") =>  'x.id',
  821.                           $translator->trans("Date")               => 'x.date',
  822.                           $translator->trans("Réf fourn.")         => 'x.referenceFournisseur',
  823.                           $translator->trans("Quantité")           => 'x.quantite',
  824.                           'Prix'                                   => 'x.prixAchat',
  825.                           $translator->trans("Bon de livraison")   => 'x.bonLivraison',
  826.                           $translator->trans("N° commande fourn.") => 'cf.reference',
  827.                           $translator->trans("Libelle")            => 'x.libelle',
  828.                           $translator->trans("Fournisseur")        => 'fo.libelle',
  829.                           "_identifier_"                           => 'x.id',
  830.                       ]
  831.                   )
  832.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  833.                   ->addJoin('x.raisonMouvementStock''r'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  834.                   ->addJoin('x.factureFournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  835.                   ->addJoin('x.fournisseur''fo'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  836.                   ->addJoin('x.commandeFournisseur''cf'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  837.                   ->setRenderers(
  838.                       [
  839.                           => [
  840.                               'view' => 'Articles/MouvementStock/table-date.html.twig',
  841.                           ],
  842.                           => [
  843.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  844.                               'params' => [
  845.                                   'edit_route'   => 'dtc_commande_fournisseur_modifier',
  846.                                   'typeDocument' => 'commandeFournisseur',
  847.                               ],
  848.                           ],
  849.                           => [
  850.                               'view' => 'FO/DataTable/facturation-fournisseur.html.twig',
  851.                           ],
  852.                       ]
  853.                   )
  854.                   ->setOrder("x.bonLivraison""asc")
  855.                   ->setSearch(true)
  856.                   ->setSearchFields([01234567])
  857.                   ->setWhere('r.id = :raison AND f.id is null', ['raison' => 3])//Achat
  858.                   ->setMultiple(
  859.                 [
  860.                     'facturer' => [
  861.                         'title' => 'Facturer',
  862.                         'route' => 'dtc_facturer_fournisseur' // path to multiple delete route
  863.                     ],
  864.                 ]
  865.             );
  866.         return $datatable;
  867.     }
  868.     /**
  869.      * @Route("/receptions/grid", name="dtc_receptions_liste_grid")
  870.      */
  871.     public function gridAfacturerAction(Datatable $datatableTranslatorInterface $translator)
  872.     {
  873.         return $this->datatableAfacturer($datatable$translator)->execute();
  874.     }
  875.     /**
  876.      * @Route("/mouvement/stock/nombre/inventaire/{id}", name="dtc_ajax_nb_mvts_stock_inventaire")
  877.      */
  878.     public function nbMouvementsStockInventaireAction($idEntityManagerInterface $em)
  879.     {
  880.         $mouvementsStockInventaire   $em->getRepository(MouvementStock::class)->findBy([
  881.                                                                                              'inventaire' => $id,
  882.                                                                                          ]);
  883.         $nbMouvementsStockInventaire count($mouvementsStockInventaire);
  884.         $response                    = new JsonResponse();
  885.         $response->setData(['nombre' => $nbMouvementsStockInventaire]);
  886.         return $response;
  887.     }
  888.     /**
  889.      * @Route("/mouvement/modifier/{id}", name="dtc_mouvement_stock_modifier")
  890.      */
  891.     public function modifierAction(Request $requestReception $receptionEntityManagerInterface $emCommandeFournisseurService $commandeFournisseurServiceTranslatorInterface $translator)
  892.     {
  893.         $titre_modal $translator->trans("Modifier un mouvement de stock");
  894.         $user        $this->getUser();
  895.         if ($request->isMethod('POST')) {
  896.             $valeurs         $request->request->all();
  897.             $commandeFournisseurService->modifierReception($reception$valeurs);
  898.             $this->addFlash('notice'$translator->trans('Mouvements de stock modifié avec succès !'));
  899.             $url $this->generateUrl('dtc_commande_fournisseur_modifier', ["id" => $reception->getCommandeFournisseur()->getId(), "tab" => "receptions"]);
  900.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  901.         }
  902.         $rendu $this->renderView('Articles/MouvementStock/modifier_modal.html.twig', ["reception" => $reception]);
  903.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  904.     }
  905. }