src/Controller/GestionComerciale/CommandeFournisseurController.php line 2703

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\Categorie;
  5. use App\Entity\Articles\ConditionAchat;
  6. use App\Entity\Articles\Marque;
  7. use App\Entity\Articles\MouvementStock;
  8. use App\Entity\Articles\NumeroSerie;
  9. use App\Entity\Articles\Type;
  10. use App\Entity\Email\Modele;
  11. use App\Entity\Etiquettes\Etiquette;
  12. use App\Entity\Email\Categorie as CategorieEmail;
  13. use App\Entity\FO\Parametrage;
  14. use App\Entity\FO\Societe;
  15. use App\Entity\Fournisseurs\Fournisseur;
  16. use App\Entity\GestionComerciale\ArticleCommande;
  17. use App\Entity\GestionComerciale\Commande;
  18. use App\Entity\GestionComerciale\CommandeFournisseur;
  19. use App\Entity\GestionComerciale\Fabrication;
  20. use App\Entity\GestionComerciale\HistoriqueCommande;
  21. use App\Entity\GestionComerciale\ModeReglement;
  22. use App\Entity\GestionComerciale\Reception;
  23. use App\Entity\GestionComerciale\StatutCommandeFournisseur;
  24. use App\Entity\Taxes\Taxe;
  25. use App\Form\GestionComerciale\AvoirFactureCommandeFournisseurType;
  26. use App\Form\GestionComerciale\CommandeFournisseurType;
  27. use App\Form\GestionComerciale\FactureFournisseurType;
  28. use App\Form\GestionComerciale\SupprimerCommandeFournisseurType;
  29. use App\Library\Datatable\Util\Datatable;
  30. use App\Library\Uploader\Services\FileUploader;
  31. use App\Security\Voter\EntityVoter;
  32. use App\Service\Articles\ArticleService;
  33. use App\Service\Fournisseurs\FournisseurService;
  34. use App\Service\GestionComerciale\CommandeFournisseurService;
  35. use App\Service\GestionComerciale\CommandeService;
  36. use App\Service\GestionComerciale\EmailService;
  37. use App\Service\GestionComerciale\EtatCommandeService;
  38. use App\Service\GestionComerciale\NumerotationDocumentService;
  39. use App\Service\Utilisateur\ColonneTableauService;
  40. use Doctrine\ORM\EntityManagerInterface;
  41. use DTS\eBaySDK\FileTransfer\Types\Data;
  42. use Knp\Snappy\Pdf;
  43. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  44. use Symfony\Component\HttpFoundation\Request;
  45. use Symfony\Component\HttpFoundation\JsonResponse;
  46. use Symfony\Component\HttpFoundation\Response;
  47. use Symfony\Component\Form\Extension\Validator\ViolationMapper\ViolationMapper;
  48. use Symfony\Component\Routing\Annotation\Route;
  49. use Symfony\Component\Validator\Validation;
  50. use Symfony\Component\Validator\ConstraintViolation;
  51. use Symfony\Component\Form\FormError;
  52. use Symfony\Component\Process\Process;
  53. use Symfony\Component\Validator\Validator\ValidatorInterface;
  54. use Symfony\Contracts\Translation\TranslatorInterface;
  55. class CommandeFournisseurController extends AbstractController
  56. {
  57.     /**
  58.      * @Route("/carnet-commande/", name="dtc_carnet_commande")
  59.      */
  60.     public function carnetCommandeAction(Request $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translatorColonneTableauService $serviceColonneTableau)
  61.     {
  62.         //test git
  63.         $errors        '';
  64.         $selectReappro $request->request->get('selectReappro');
  65.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false"searchable" => false];
  66.         $tableau_class_cellule[] = [
  67.             "className" => "colonne_id",
  68.             "targets"   => [1],
  69.             // TODO CHANGE THIS
  70.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "id"),
  71.         ];
  72.         $tableau_class_cellule[] = [
  73.             "className" => "colonne_id",
  74.             "targets"   => [2],
  75.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "reference"),
  76.         ];
  77.         $tableau_class_cellule[] = [
  78.             "className" => "colonne_id",
  79.             "targets"   => [3],
  80.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "referenceFournisseur"),
  81.         ];
  82.         $tableau_class_cellule[] = [
  83.             "className" => "colonne_id",
  84.             "targets"   => [4],
  85.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "libelle"),
  86.         ];
  87.         $tableau_class_cellule[] = [
  88.             "className" => "colonne_id",
  89.             "targets"   => [5],
  90.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "fournisseur"),
  91.         ];
  92.         $tableau_class_cellule[] = [
  93.             "className" => "colonne_id ",
  94.             "orderable" => false,
  95.             "targets"   => [6],
  96.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "client"),
  97.         ];
  98.         $tableau_class_cellule[] = [
  99.             "className" => "colonne_id w200",
  100.             "targets"   => [7],
  101.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "qteMini"),
  102.         ];
  103.         $tableau_class_cellule[] = [
  104.             "className" => "colonne_id w200",
  105.             "targets"   => [8],
  106.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "qteMaxi"),
  107.         ];
  108.         $tableau_class_cellule[] = [
  109.             "className" => "colonne_id w200",
  110.             "targets"   => [9],
  111.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "stock"),
  112.         ];
  113.         $tableau_class_cellule[] = [
  114.             "className" => "colonne_id w200",
  115.             "targets"   => [10],
  116.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "dispo"),
  117.         ];
  118.         $tableau_class_cellule[] = [
  119.             "className" => "colonne_id w300",
  120.             "targets"   => [11],
  121.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "ralClient"),
  122.         ];
  123.         $tableau_class_cellule[] = [
  124.             "className" => "colonne_id w300",
  125.             "targets"   => [12],
  126.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "stockReserveFabrication"),
  127.         ];
  128.         $tableau_class_cellule[] = [
  129.             "className" => "colonne_id w300",
  130.             "targets"   => [13],
  131.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "ralFournisseur"),
  132.         ];
  133.         $tableau_class_cellule[] = [
  134.             "className" => "colonne_id w300",
  135.             "targets"   => [14],
  136.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "conditionnement"),
  137.         ];
  138.         $tableau_class_cellule[] = [
  139.             "className" => "colonne_id w300",
  140.             "targets"   => [15],
  141.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "delai"),
  142.         ];
  143.         $tableau_class_cellule[] = [
  144.             "className" => "colonne_id w200 qte",
  145.             "targets"   => [16],
  146.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "qte"),
  147.         ];
  148.         $tableau_class_cellule[] = [
  149.             "className" => "colonne_id w200 prixHT",
  150.             "targets"   => [17],
  151.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "prixHT"),
  152.         ];
  153.         $tableau_class_cellule[] = [
  154.             "className" => "colonne_id",
  155.             "targets"   => [18],
  156.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "pump"),
  157.         ];
  158.         $tableau_class_cellule[] = [
  159.             "className" => "colonne_id",
  160.             "targets"   => [19],
  161.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "typeReapro"),
  162.         ];
  163.         $categorie_enfants         = [];
  164.         $categorie_enfants_enfants = [];
  165.         $repo_categorie_article    $em->getRepository(Categorie::class);
  166.         $categorie_article_racine  $repo_categorie_article->findBy(["categorieParent" => 1]);
  167.         $repo_marque_article $em->getRepository(Marque::class);
  168.         $marque_article      $repo_marque_article->findBy([], ['libelle' => 'ASC']);
  169.         $repo_type_article $em->getRepository(Type::class);
  170.         $type_article      $repo_type_article->findBy([], ['libelle' => 'ASC']);
  171.         $param $request->query->all();
  172.         if (array_key_exists('categorie_article'$param) and $param["categorie_article"] > 0) {
  173.             $parent $repo_categorie_article->find($param["categorie_article"]);
  174.             if (is_object($parent)) {
  175.                 $categorie_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  176.             }
  177.             if (array_key_exists('sous_categorie_article'$param) and $param["sous_categorie_article"] > 0) {
  178.                 $parent2 $repo_categorie_article->find($param["sous_categorie_article"]);
  179.                 if (is_object($parent2)) {
  180.                     $categorie_enfants_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  181.                 }
  182.             }
  183.         }
  184.         $this->datatableCarnetCommande2($selectReappro$request$datatable$em$translator);
  185.         return $this->render('GestionComerciale/CommandeFournisseur/carnet-commande.html.twig', [
  186.             'tableauClassColonne'    => $tableau_class_cellule,
  187.             'errors'                 => $errors,
  188.             'selectReappro'          => $selectReappro,
  189.             'parametres'             => $param,
  190.             "categorie_article"      => $categorie_article_racine,
  191.             "sous_categorie_article" => $categorie_enfants,
  192.             "sous_categorie_article" => $categorie_enfants_enfants,
  193.             "marque"                 => $marque_article,
  194.             "type"                   => $type_article,
  195.         ]);
  196.     }
  197.     /**
  198.      * @Route("/achat/commande/nouveau/", name="dtc_commande_fournisseur_ajouter")
  199.      */
  200.     public function ajouterAction(Request         $request$id nullEntityManagerInterface $emCommandeFournisseurService $commandeFournisseurService,
  201.                                   CommandeService $commandeServiceFournisseurService $fournisseurServiceTranslatorInterface $translatorValidatorInterface $validator
  202.     ) {
  203.         $repoArticle      $em->getRepository(Article::class);
  204.         $repoFournisseurs $em->getRepository(Fournisseur::class);
  205.         $repo_taxe        $em->getRepository(Taxe::class);
  206.         $commande         = new CommandeFournisseur();
  207.         $user             $this->getUser();
  208.         $commande->setUtilisateur($user);
  209.         $conditionId $request->request->get('conditionId');
  210.         $id "";
  211.         $dataTables $request->request->get('dataTables');
  212.         if(!empty($dataTables['actions'])) {
  213.             $tempArray  = ['ids' => $dataTables['actions']];
  214.             $id         $tempArray['ids'][0];
  215.         }
  216.         else {
  217.             $dataTables['actions']=array();
  218.         }
  219.         if ($id != "") {
  220.             $fournisseurIds $request->request->get('fournisseur');
  221.             if ($fournisseurIds[$id] != '') {
  222.                 $repoFournisseurs $em->getRepository(Fournisseur::class);
  223.                 $fournisseur      $repoFournisseurs->find($fournisseurIds[$id]);
  224.                 if (is_object($fournisseur)) {
  225.                     $commande->setFraisFixe($fournisseur->getFraisFixe());
  226.                     if (is_object($fournisseur->getModereglement())) {
  227.                         $commande->setModeReglement($fournisseur->getModereglement());
  228.                         if (is_object($fournisseur->getCompta()) && $fournisseur->getCompta()->getId() == 1) {
  229.                             $commande->setAvecTaxe(true);
  230.                         }
  231.                     }
  232.                 }
  233.             }
  234.         }
  235.         //Saisie préremplie (avoir)
  236.         $valeurs $request->query->get('valeurs');
  237.         //var_dump($valeurs);
  238.         if ($valeurs != '') {
  239.             $repo_commande   $em->getRepository(CommandeFournisseur::class);
  240.             $commandeOrigine $repo_commande->find($valeurs['commande']);
  241.             if (is_object($commandeOrigine)) {
  242.                 $commande = new CommandeFournisseur;
  243.                 $commande->setFournisseur($commandeOrigine->getFournisseur());
  244.             }
  245.             //print_r($valeurs['articles']['choixArticlesAvoir']);
  246.             if (array_key_exists('commande'$valeurs)) {
  247.                 $repo_article_commande $em->getRepository(ArticleCommande::class);
  248.                 //print_r($valeurs);
  249.                 for ($i 0$i count($valeurs['articles']['idArticleCommande']); $i++) {
  250.                     if (in_array($valeurs['articles']['idArticleCommande'][$i], $valeurs['articles']['choixArticlesAvoir'])) {
  251.                         $articleCommande $repo_article_commande->find($valeurs['articles']['idArticleCommande'][$i]);
  252.                         if (is_object($articleCommande)) {
  253.                             $clone = clone $articleCommande;
  254.                             $clone->setId(null);
  255.                             $clone->setArticleCommandeParent(null);
  256.                             $clone->setArticleCommandeRepris($articleCommande);
  257.                             $clone->setQuantite(-$valeurs['articles']['quantite'][$i]);
  258.                             $date        date_format($commande->getDate(), 'd/m/Y');
  259.                             $utilisateur $commande->getUtilisateur();
  260.                             //$commentaire = "Reprise sur facture n° ".$commande->getReference()." du ".$date.' saisie par '.$utilisateur->getNom().' '.$utilisateur->getPrenom();
  261.                             $commentaire "Reprise sur facture n° ".$commandeOrigine->getReference()." du ".$date;
  262.                             $clone->setCommentaire($commentaire);
  263.                             //echo "<div>Qte : ".$valeurs['articles']['quantite'][$i]."</div>";
  264.                             //echo "<div>ID : ".$valeurs['articles']['idArticle'][$i]."</div>";
  265.                             //echo "<div>REM : ".$clone->getRemise()."</div>";
  266.                             //echo "<br/>";
  267.                             $commande->addArticleCommande($clone);
  268.                         }
  269.                     }
  270.                 }
  271.             }
  272.         }
  273.         $form   $this->createForm(CommandeFournisseurType::class, $commande);
  274.         $errors "";
  275.         $form->handleRequest($request);
  276.         if ($form->isSubmitted()) {
  277.             if ($form->isValid()) {
  278.                 if ($request->request->get('export') != '') {
  279.                     //echo "toto";
  280.                     //exit;
  281.                 }
  282.                 $articles = [
  283.                     'ids'                         => $request->request->get('ids'),
  284.                     'commentaire'                 => $request->request->get('commentaire'),
  285.                     'commentaireSuppl'            => $request->request->get('commentaireSuppl'),
  286.                     'commentairePrive'            => $request->request->get('commentairePrive'),
  287.                     'libelles'                    => $request->request->get('libelles'),
  288.                     'tva'                         => $request->request->get('tva'),
  289.                     'idsTva'                      => $request->request->get('idsTva'),
  290.                     'remise'                      => $request->request->get('remiseValue'),
  291.                     'remiseSuppl'                 => $request->request->get('remiseSuppl'),
  292.                     'prix'                        => $request->request->get('prix'),
  293.                     'qte'                         => $request->request->get('qte'),
  294.                     'rals'                        => $request->request->get('rals'),
  295.                     'conditionsAchat'             => $request->request->get('conditionsAchat'),
  296.                     'fabricationIds'              => $request->request->get('fabricationIds'),
  297.                     'fraisAnnexes'                => $request->request->get('fraisAnnexes'),
  298.                     'articlesCommande'            => $request->request->get('articlesCommande'),
  299.                     'coefficientsConditionnement' => $request->request->get('coefficientsConditionnement'),
  300.                     'ecocontribution'             => $request->request->get('ecocontribution'),
  301.                     'dateApproximativeReception'  => $request->request->get('dateApproximativeReception'),
  302.                     'montantHT'                   => $request->request->get('montantHT'),
  303.                     'montantTVA'                  => $request->request->get('montantTVA'),
  304.                     'PrixAchatUnitaireAvecFrais'  => $request->request->get('PrixAchatUnitaireAvecFrais'),
  305.                     'ajouterFraisPrixAchat'       => $request->request->get('ajouterFraisPrixAchat'),
  306.                     'articlesCommandeRepris'      => $request->request->get('articlesCommandeRepris'),
  307.                     'idsArticleCommandeOrigine'   => $request->request->get('idArticleCommandeOrigine'),
  308.                     'articlesCommandeIds'         => $request->request->get('articlesCommandeIds'),
  309.                 ];
  310.                 //
  311.                 if (is_array($articles['ids'])  && count($articles['ids']) > 0) {
  312.                     foreach ($articles['ids'] as $key => $article) {
  313.                         if ($articles['conditionsAchat'][$key] == "") {
  314.                             $id  $articles['ids'][$key];
  315.                             $art $repoArticle->find($id);
  316.                             if ($art->getDivers() == 1) {
  317.                                 $repo_cond $em->getRepository(ConditionAchat::class);
  318.                                 $cond      $repo_cond->findOneBy(['article' => $art]);
  319.                                 if (is_object($cond)) {
  320.                                     $articles['conditionsAchat'][$key] = $cond->getId();
  321.                                 }
  322.                             }
  323.                         }
  324.                     }
  325.                 }
  326.                 $valeurs = ["articles" => $articles'typeDocument' => 'commande'];
  327.                 $em->persist($commande);
  328.                 $em->flush();
  329.                 $commandeFournisseurService->sauvegarder($commande$valeurs);
  330.                 $commandeService->changeDateLivraisonTheoriqueCommandeProcess(null$commande);
  331.                 /*
  332.         $commandeFournisseurService = $this->container->get('dtc.commande.fournisseur');
  333.         $commandeFournisseurService->creerHistorique($commande, 1);
  334. */
  335.                 $this->addFlash('notice'$translator->trans('Commande fournisseur ajoutée avec succès !'));
  336.                 //exit;
  337.                 //return $this->redirectToRoute('dtc_commande_fournisseur_liste',array());
  338.                 return $this->redirectToRoute('dtc_commande_fournisseur_modifier', ["id" => $commande->getId()]);
  339.             } else {
  340.                 $errors $validator->validate($commande);
  341.                 //echo "PAS VALIDE";
  342.             }
  343.         } elseif ($conditionId != '') {
  344.             $conditionAchat $em->getRepository(ConditionAchat::class)->find($conditionId);
  345.             if (is_object($conditionAchat)) {
  346.                 $article     $conditionAchat->getArticle();
  347.                 $fournisseur $conditionAchat->getFournisseur();
  348.                 if (is_object($fournisseur)) {
  349.                     $commande->setFournisseur($fournisseur);
  350.                     $commande->setModeReglement($fournisseur->getModereglement());
  351.                 }
  352.                 $conditionAchats = [$conditionAchat];
  353.                 if (is_object($article->getArticleEnconsigne())) {
  354.                     //verifier condition d'achat
  355.                     $conditionAchat $em->getRepository(ConditionAchat::class)->findOneBy([
  356.                                                                                                'article'     => $article->getArticleEnconsigne(),
  357.                                                                                                'fournisseur' => $fournisseur,
  358.                                                                                            ]);
  359.                     if (is_object($conditionAchat)) {
  360.                         $conditionAchats[] = $conditionAchat;
  361.                     }
  362.                 }
  363.                 foreach ($conditionAchats as $conditionAchat) {
  364.                     $article         $conditionAchat->getArticle();
  365.                     $articleCommande = new ArticleCommande;
  366.                     if (is_object($article)) {
  367.                         $articleCommande->setArticle($article);
  368.                         $articleCommande->setEcocontribution($article->getEcocontribution());
  369.                     }
  370.                     $quantite $request->request->get('qteAcommander');
  371.                     $articleCommande->setQuantite($quantite);
  372.                     $articleCommande->setRal($quantite);
  373.                     $articleCommande->setPrixBase($conditionAchat->getPrixAchatBrut());
  374.                     $articleCommande->setConditionAchat($conditionAchat);
  375.                     $articleCommande->setLibelle($conditionAchat->getLibelle());
  376.                     $articleCommande->setFraisAnnexes($conditionAchat->getFraisAnnexes());
  377.                     if ($conditionAchat->getCoefficientConditionnement() == '') {
  378.                         $articleCommande->setCoefficientConditionnement(1);
  379.                     } else {
  380.                         $articleCommande->setCoefficientConditionnement($conditionAchat->getCoefficientConditionnement());
  381.                     }
  382.                     $articleCommande->setRemise($conditionAchat->getTauxRemise());
  383.                     $articleCommande->setRemiseSupplementaire($conditionAchat->getTauxRemiseSupplementaire());
  384.                     $taxe $repo_taxe->find(5);
  385.                     if (is_object($fournisseur)) {
  386.                         $taxe $fournisseurService->getTaxe($fournisseur$article);
  387.                     }
  388.                     if (is_object($taxe)) {
  389.                         $articleCommande->setTva($taxe->getTaux());
  390.                         $articleCommande->setTaxe($taxe);
  391.                     }
  392.                     $commande->addArticleCommande($articleCommande);
  393.                 }
  394.             }
  395.         } else {
  396.             //print_r($request->request->get('libelles'));
  397.             $dataTables $request->request->get('dataTables');
  398.             if(!empty($dataTables['actions'])) {
  399.                 $tempArray  = ['ids' => $dataTables['actions']];
  400.             }
  401.             else {
  402.                 $dataTables['actions']=array();
  403.             }
  404.             $articles   = [
  405.                 'ids'        => $dataTables['actions'],
  406.                 'qte'        => $request->request->get('qte'),
  407.                 'conditions' => $request->request->get('conditions'),
  408.                 /*
  409.       'commentaire'=>$request->request->get('commentaire'),
  410.       'commentaireSuppl'=>$request->request->get('commentaireSuppl'),
  411.       'libelles'=>$request->request->get('libelles'),
  412.       'tva'=>$request->request->get('tva'),
  413.       'remise'=>$request->request->get('remiseValue'),
  414.       'remiseSuppl'=>$request->request->get('remiseSuppl'),
  415.       'prix'=>$request->request->get('prix'),
  416.       'qte'=>$request->request->get('qte'),
  417.       'rals'=>$request->request->get('rals')
  418.       */
  419.             ];
  420.             $id "";
  421.             if(!empty($articles['ids'])) $id         $articles['ids'][0];
  422.             if ($id != "") {
  423.                 $fournisseurIds $request->request->get('fournisseur');
  424.                 if ($fournisseurIds[$id] != '') {
  425.                     $repo_fabrication $em->getRepository(Fabrication::class);
  426.                 }
  427.                 $repoFournisseurs $em->getRepository(Fournisseur::class);
  428.                 $fournisseur      $repoFournisseurs->find($fournisseurIds[$id]);
  429.                 if (is_object($fournisseur)) {
  430.                     $commande->setFournisseur($fournisseur);
  431.                 }
  432.                 if (is_object($fournisseur->getModereglement())) {
  433.                     $commande->setModeReglement($fournisseur->getModereglement());
  434.                 }
  435.                 foreach ($articles['ids'] as $key => $id) {
  436.                     $article $repoArticle->find($id);
  437.                     if (is_object($article)) {
  438.                         $conditionAchat       '';
  439.                         $repo_condition_achat $em->getRepository(ConditionAchat::class);
  440.                         if ( ! empty($articles['conditions'][$id])) {
  441.                             $conditionAchat $repo_condition_achat->find($articles['conditions'][$id]);
  442.                         }
  443.                         if ( ! is_object($conditionAchat)) {
  444.                             $conditionAchat $repo_condition_achat->findOneBy(['article' => $id]);
  445.                         }
  446.                         if (is_object($conditionAchat)) {
  447.                             $conditionAchats = [$conditionAchat];
  448.                             if (is_object($article->getArticleEnconsigne())) {
  449.                                 //verifier condition d'achat
  450.                                 $conditionAchat $em->getRepository(ConditionAchat::class)->findOneBy([
  451.                                                                                                            'article'     => $article->getArticleEnconsigne(),
  452.                                                                                                            'fournisseur' => $fournisseur,
  453.                                                                                                        ]);
  454.                                 if (is_object($conditionAchat)) {
  455.                                     $conditionAchats[] = $conditionAchat;
  456.                                 }
  457.                             }
  458.                             foreach ($conditionAchats as $conditionAchat) {
  459.                                 $article         $conditionAchat->getArticle();
  460.                                 $articleCommande = new ArticleCommande;
  461.                                 $articleCommande->setArticle($article);
  462.                                 $articleCommande->setEcocontribution($article->getEcocontribution());
  463.                                 $articleCommande->setRal($articles['qte'][$id]);
  464.                                 $articleCommande->setQuantite($articles['qte'][$id]);
  465.                                 //prix
  466.                                 $prix                 0;
  467.                                 $quantite             0;
  468.                                 $remise               0;
  469.                                 $remiseSupplementaire 0;
  470.                                 if (is_object($conditionAchat)) {
  471.                                     $articleCommande->setConditionAchat($conditionAchat);
  472.                                     $articleCommande->setLibelle($conditionAchat->getLibelle());
  473.                                     $articleCommande->setFraisAnnexes($conditionAchat->getFraisAnnexes());
  474.                                     $articleCommande->setCoefficientConditionnement($conditionAchat->getCoefficientConditionnement());
  475.                                     $articleCommande->setRemise(floatval($conditionAchat->getTauxRemise()));
  476.                                     $articleCommande->setRemiseSupplementaire(floatval($conditionAchat->getTauxRemiseSupplementaire()));
  477.                                     $prix $conditionAchat->getPrixAchatBrut();
  478.                                 }
  479.                                 if ($prix == 0) {
  480.                                     $prix     $article->getPrixBase();
  481.                                     $quantite $articles['qte'][$id];
  482.                                     $remise   0;
  483.                                 }
  484.                                 $articleCommande->setPrixBase($prix);
  485.                                 $taxe $repo_taxe->find(5);
  486.                                 if (is_object($commande->getFournisseur())) {
  487.                                     $taxe $fournisseurService->getTaxe($commande->getFournisseur(), $article);
  488.                                 }
  489.                                 if (is_object($taxe)) {
  490.                                     $articleCommande->setTva($taxe->getTaux());
  491.                                     $articleCommande->setTaxe($taxe);
  492.                                 }
  493.                                 //$artCode->setTvaVente($tva);
  494.                                 //$artCode->setTotalHt(round($valeurs['articles']['montantHT'][$i],2));
  495.                                 //$totalTva += $tva;
  496.                                 //$total += $artCode->getTotalHtV2();
  497.                                 $articleCommande->setAjouterFraisPrixAchat(true);
  498.                                 $commande->addArticleCommande($articleCommande);
  499.                             }
  500.                         }
  501.                     }
  502.                 }
  503.                 //$commande->setTotal
  504.             }
  505.         }
  506.         return $this->render('GestionComerciale/CommandeFournisseur/ajouter.html.twig', ['commande' => $commande'form' => $form->createView(), 'errors' => $errors]);
  507.     }
  508.     /**
  509.      * @Route("/achat/commande/modifier/{id}", name="dtc_commande_fournisseur_modifier")
  510.      */
  511.     public function modifierAction(Request                    $requestCommandeFournisseur $commandeEntityManagerInterface $em
  512.                                    CommandeFournisseurService $commandeFournisseurServiceCommandeService $commandeServiceTranslatorInterface $translatorValidatorInterface $validator
  513.     ) {
  514.         $user $this->getUser();
  515.         //$commande->setUtilisateur($user);
  516.         $modalWidth 800;
  517.         if ( ! empty($request->request->get('commande'))) {
  518.             $commandeClient $em->getRepository(Commande::class)->find($request->request->get('commande'));
  519.             if (is_object($commandeClient)) {
  520.                 $commande->setCommande($commandeClient);
  521.             }
  522.         }
  523.         $form               $this->createForm(CommandeFournisseurType::class, $commande);
  524.         $est_editable       $commandeFournisseurService->estEditable($commande);
  525.         $est_receptionnable $commandeFournisseurService->estReceptionnable($commande);
  526.         $est_annulable      $commandeFournisseurService->estAnnulable($commande);
  527.         $taxes              $em->getRepository(Taxe::class)->findAll();
  528.         $errors "";
  529.         $form->handleRequest($request);
  530.         if ($form->isSubmitted()) {
  531.             $droit $this->isGranted(EntityVoter::UPDATECommandeFournisseur::class);
  532.             if ( ! $droit) {
  533.                 return $this->redirectToRoute('dtc_commande_fournisseur_modifier', ["id" => $commande->getId()]);
  534.             }
  535.             if ($form->isValid()) {
  536.                 if ($request->request->get('annuler') != '') {
  537.                     $commandeFournisseurService->annulerCommande($commande);
  538.                     $commandeService->changeDateLivraisonTheoriqueCommandeProcess(null$commande);
  539.                     $this->addFlash('notice'$translator->trans('Commande annulée avec succès !'));
  540.                     $commandeFournisseurService->creerHistorique($commande6);
  541.                     return $this->redirectToRoute('dtc_commande_fournisseur_liste', []);
  542.                 }
  543.                 $em->persist($commande);
  544.                 $em->flush();
  545.                 $articles = [
  546.                     'valider'                     => $request->request->get('valider'),
  547.                     'valider-commande'            => $request->request->get('valider-commande'),
  548.                     'ids'                         => $request->request->get('ids'),
  549.                     'commentaire'                 => $request->request->get('commentaire'),
  550.                     'commentaireSuppl'            => $request->request->get('commentaireSuppl'),
  551.                     'commentairePrive'            => $request->request->get('commentairePrive'),
  552.                     'libelles'                    => $request->request->get('libelles'),
  553.                     'tva'                         => $request->request->get('tva'),
  554.                     'idsTva'                      => $request->request->get('idsTva'),
  555.                     'remise'                      => $request->request->get('remiseValue'),
  556.                     'remiseSuppl'                 => $request->request->get('remiseSuppl'),
  557.                     'prix'                        => $request->request->get('prix'),
  558.                     'qte'                         => $request->request->get('qte'),
  559.                     'rals'                        => $request->request->get('rals'),
  560.                     'conditionsAchat'             => $request->request->get('conditionsAchat'),
  561.                     'fabricationIds'              => $request->request->get('fabricationIds'),
  562.                     'fraisAnnexes'                => $request->request->get('fraisAnnexes'),
  563.                     'articlesCommande'            => $request->request->get('articlesCommande'),
  564.                     'coefficientsConditionnement' => $request->request->get('coefficientsConditionnement'),
  565.                     'ecocontribution'             => $request->request->get('ecocontribution'),
  566.                     'dateApproximativeReception'  => $request->request->get('dateApproximativeReception'),
  567.                     'montantHT'                   => $request->request->get('montantHT'),
  568.                     'montantTVA'                  => $request->request->get('montantTVA'),
  569.                     'PrixAchatUnitaireAvecFrais'  => $request->request->get('PrixAchatUnitaireAvecFrais'),
  570.                     'ajouterFraisPrixAchat'       => $request->request->get('ajouterFraisPrixAchat'),
  571.                     'articlesCommandeRepris'    => $request->request->get('articlesCommandeRepris'),
  572.                     'idsArticleCommandeOrigine' => $request->request->get('idArticleCommandeOrigine'),
  573.                     'articlesCommandeIds'       => $request->request->get('articlesCommandeIds'),
  574.                 ];
  575.                 //print_r($articles);
  576.                 //exit;
  577.                 //echo "<div>GGGGGG</div>";
  578.                 $valeurs = ["articles" => $articles'typeDocument' => 'commande'];
  579.                 if ($request->request->get('action') == 'valider') {
  580.                     $valeurs['valider'] = true;
  581.                 }
  582.                 //if($request->request->get('action') == 'devalider') $valeurs['devalider'] = true;
  583.                 if ($request->isXmlHttpRequest()) {
  584.                     $commandeFournisseurService->sauvegarder($commande$valeursfalsefalse);
  585.                     if ($request->request->get('declencheur') != "supprimer-row-article") {
  586.                         $commandeFournisseurService->creerHistorique($commande$request->request->get('declencheur'));
  587.                     }
  588.                     return new JsonResponse(['data' => 1'date' => (new \Datetime)->format('d/m/Y Ã  H:i')]);
  589.                 }
  590.                 $commandeFournisseurService->sauvegarder($commande$valeurs);
  591.                 $commandeService->changeDateLivraisonTheoriqueCommandeProcess(null$commande);
  592.                 $this->addFlash('notice'$translator->trans('Commande sauvegardée avec succès !'));
  593.                 $commandeFournisseurService->creerHistorique($commande2);
  594.                 //dump($valeurs);
  595.                 return $this->redirectToRoute('dtc_commande_fournisseur_modifier', ["id" => $commande->getId()]);
  596.             } else {
  597.                 $errors $validator->validate($commande);
  598.             }
  599.         }
  600.         if ($commande->getTotal() < $commande->getFournisseur()->getMinimumFacturation()) {
  601.             $this->addFlash(
  602.                 'warning',
  603.                 'La commande n\'a pas atteint le minimum de commande de <b>'.$commande->getFournisseur()->getMinimumFacturation().'&euro;</b> pour ce fournisseur !'
  604.             );
  605.         }
  606.         if ($commande->getTotal() < $commande->getFournisseur()->getFranco()) {
  607.             $this->addFlash(
  608.                 'warning',
  609.                 'La commande n\'a pas atteint le franco de <b>'.$commande->getFournisseur()->getFranco().'&euro;</b> pour ce fournisseur !'
  610.             );
  611.         }
  612.         return $this->render('GestionComerciale/CommandeFournisseur/ajouter.html.twig', [
  613.             'form'               => $form->createView(),
  614.             'errors'             => $errors,
  615.             'commande'           => $commande,
  616.             'modalWidth'         => $modalWidth,
  617.             'est_editable'       => $est_editable,
  618.             'est_receptionnable' => $est_receptionnable,
  619.             'est_annulable'      => $est_annulable,
  620.             'taxes'              => $taxes,
  621.         ]);
  622.     }
  623.     /**
  624.      * @Route("/achat/commande/supprimer/multiple", name="dtc_commande_fournisseur_liste_supprimer")
  625.      */
  626.     public function supprimerMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  627.     {
  628.         $data $request->get('dataTables');
  629.         $ids  $data['actions'];
  630.         $repo $em->getRepository(CommandeFournisseur::class);
  631.         for ($i 0$i count($ids); $i++) {
  632.             $v $repo->find($ids[$i]);
  633.             if (is_object($v)) {
  634.                 $em->remove($v);
  635.             }
  636.         }
  637.         $em->flush();
  638.         $this->addFlash(
  639.             'notice',
  640.             $translator->trans('Commande supprimée avec succès !')
  641.         );
  642.         $url $this->generateUrl('dtc_commande_fournisseur_liste', []);
  643.         return new JsonResponse(['url' => $url'valide' => '1']);
  644.     }
  645.     /**
  646.      * @Route("/achat/commande/supprimer/{id}", name="dtc_commande_fournisseur_supprimer")
  647.      */
  648.     public function supprimerAction(Request $requestCommandeFournisseur $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  649.     {
  650.         $titre_modal $translator->trans("Demande de confirmation");
  651.         $user        $this->getUser();
  652.         $form   $this->createForm(SupprimerCommandeFournisseurType::class, $commande);
  653.         $errors "";
  654.         $form->handleRequest($request);
  655.         if ($form->isSubmitted()) {
  656.             if ($form->isValid()) {
  657.                 $em->remove($commande);
  658.                 $em->flush();
  659.                 $this->addFlash(
  660.                     'notice',
  661.                     $translator->trans('Commande supprimée avec succès !')
  662.                 );
  663.                 $url $this->generateUrl('dtc_commande_fournisseur_liste', []);//dtc_commande_fournisseur_liste
  664.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  665.             } else {
  666.                 $errors $validator->validate($commande);
  667.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $commande->getId(), 'type' => '']);
  668.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  669.             }
  670.         }
  671.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $commande->getId(), 'type' => '''errors' => $errors]);
  672.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  673.     }
  674.     /**
  675.      * @Route("/achat/charger-tableau/{id}/{type}", name="dtc_commande_fournisseur_charger_tableau")
  676.      */
  677.     public function chargerTableauAction(Request $request$id "0"$type "a"EntityManagerInterface $em)
  678.     {
  679.         $repo_article $em->getRepository(Article::class);
  680.         //$article = $repo_article->findBy(array());
  681.         //$rendu = $this->renderView('GestionComerciale/CommandeFournisseur/charger_tableau.html.twig', array("id"=>$article,"article"=>$id));
  682.         $rendu $this->renderView('GestionComerciale/CommandeFournisseur/charger_tableau.html.twig', ["id" => $id"type" => $type]);
  683.         return new JsonResponse(['rendu' => $rendu]);
  684.     }
  685.     /**
  686.      * @Route("/achat/commande", name="dtc_commande_fournisseur_liste")
  687.      */
  688.     public function listerAction(Request             $request$article ''EntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatable,
  689.                                  TranslatorInterface $translator
  690.     ) {
  691.         $statutCommande $request->query->get('statutCommande');
  692.         //$tableau_class_cellule[]=array("className"=>"visible_export  colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false);
  693.         $tableau_class_cellule[] = [
  694.             "className" => "visible_export colonne_id",
  695.             "targets"   => [0],
  696.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "id"),
  697.         ];
  698.         $tableau_class_cellule[] = [
  699.             "className" => "visible_export colonne_id text-center",
  700.             "targets"   => [1],
  701.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "date"),
  702.         ];
  703.         $tableau_class_cellule[] = [
  704.             "className" => "visible_export colonne_id",
  705.             "targets"   => [2],
  706.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "utilisateur"),
  707.         ];
  708.         $tableau_class_cellule[] = [
  709.             "className" => "visible_export colonne_id text-center",
  710.             "targets"   => [3],
  711.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "dateReceptionEstime"),
  712.         ];
  713.         $tableau_class_cellule[] = [
  714.             "className" => "visible_export colonne_id text-center",
  715.             "targets"   => [4],
  716.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "dateReception"),
  717.         ];
  718.         $tableau_class_cellule[] = [
  719.             "className" => "visible_export colonne_id text-center",
  720.             "targets"   => [5],
  721.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "accuse"),
  722.         ];
  723.         $tableau_class_cellule[] = [
  724.             "className" => "visible_export colonne_id text-center",
  725.             "targets"   => [6],
  726.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "dateAccuse"),
  727.         ];
  728.         $tableau_class_cellule[] = [
  729.             "className" => "visible_export colonne_id",
  730.             "targets"   => [7],
  731.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "reference"),
  732.         ];
  733.         $tableau_class_cellule[] = [
  734.             "className" => "visible_export colonne_id",
  735.             "targets"   => [8],
  736.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "fournisseur"),
  737.         ];
  738.         $tableau_class_cellule[] = [
  739.             "className" => "visible_export colonne_id",
  740.             "targets"   => [9],
  741.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "statut"),
  742.         ];
  743.         $tableau_class_cellule[] = [
  744.             "className" => "visible_export colonne_id text-right",
  745.             "targets"   => [10],
  746.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "totalHT"),
  747.         ];
  748.         $tableau_class_cellule[] = [
  749.             "className" => "visible_export colonne_id text-center",
  750.             "targets"   => [11],
  751.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "litige"),
  752.         ];
  753.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [12], "visible" => true];
  754.         $this->datatable($request$datatable$translator);
  755.         $param $request->query->all();
  756.         $repo_statut  $em->getRepository(StatutCommandeFournisseur::class);
  757.         $liste_statut $repo_statut->findBy(['id' => [51234]]);
  758.         $affichageParDefaut true;
  759.         foreach ($param as $key => $par) {
  760.             $pos strpos($key'statut_commande_');
  761.             if ($pos !== false) {
  762.                 $affichageParDefaut false;
  763.                 break;
  764.             }
  765.         }
  766.         $param['affichageParDefaut'] = $affichageParDefaut;
  767.         $repo_fournisseur $em->getRepository(Fournisseur::class);
  768.         $fournisseurs     $repo_fournisseur->findBy([], ['libelle' => 'ASC']);
  769.         if ($article == '') {
  770.             return $this->render(
  771.                 'GestionComerciale/CommandeFournisseur/lister.html.twig',
  772.                 [
  773.                     'liste_statut'        => $liste_statut,
  774.                     'parametres'          => $param,
  775.                     "fournisseurs"        => $fournisseurs,
  776.                     'tableauClassColonne' => $tableau_class_cellule,
  777.                     'statutCommande'      => $statutCommande,
  778.                 ]
  779.             );
  780.         } else {
  781.             return $this->render(
  782.                 'GestionComerciale/CommandeFournisseur/dataTableCommandesF.html.twig',
  783.                 [
  784.                     'liste_statut'        => $liste_statut,
  785.                     'parametres'          => $param,
  786.                     "fournisseurs"        => $fournisseurs,
  787.                     'tableauClassColonne' => $tableau_class_cellule,
  788.                     'article'             => $article,
  789.                 ]
  790.             );
  791.         }
  792.     }
  793.     /**
  794.      * set datatable configs
  795.      *
  796.      * @return \App\Library\Datatable\Util\Datatable
  797.      */
  798.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  799.     {
  800.         $param $request->query->all();
  801.         $datatable->setEntity(CommandeFournisseur::class, "x")
  802.                   ->setFields(
  803.                       [
  804.                           $translator->trans("ID") => 'x.id',
  805.                           $translator->trans("Date")                      => 'x.date',
  806.                           $translator->trans("Créée par")                 => 'u.nom',
  807.                           $translator->trans("Date de réception estimée") => 'x.dateApproximativeReception',
  808.                           $translator->trans("Date réception")            => 'r.date',
  809.                           $translator->trans("Accusé")                    => 'x.accuseReception',
  810.                           $translator->trans("Date accusé")               => 'x.dateAccuseReception',
  811.                           $translator->trans("Réf")                       => 'x.reference',
  812.                           $translator->trans("Fournisseur")               => 'f.libelle',
  813.                           $translator->trans("Statut")                    => 's.id',
  814.                           $translator->trans("Total HT")                  => 'x.total',
  815.                           $translator->trans("Litige")                    => 'l.id',
  816.                           $translator->trans("Actions")                   => 'x.id',
  817.                           "_identifier_" => 'x.id',
  818.                       ]
  819.                   )
  820.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  821.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  822.                   ->addJoin('x.receptions''r'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  823.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  824.                   ->addJoin('x.litiges''l'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  825.                   ->setRenderers(
  826.                       [
  827.                           => [
  828.                               'view' => 'FO/DataTable/heure.html.twig',
  829.                           ],
  830.                           => [
  831.                               'view' => 'FO/DataTable/utilisateur.html.twig',
  832.                           ],
  833.                           => [
  834.                               'view' => 'FO/DataTable/date.html.twig',
  835.                           ],
  836.                           => [
  837.                               'view' => 'FO/DataTable/date_reception_cmde_fournisseur.html.twig',
  838.                           ],
  839.                           => [
  840.                               'view'   => 'FO/DataTable/statut.html.twig',
  841.                               'params' => [
  842.                                   'edit_route' => 'dtc_commande_fournisseur_accuse',
  843.                               ],
  844.                           ],
  845.                           => [
  846.                               'view' => 'FO/DataTable/date.html.twig',
  847.                           ],
  848.                           7  => [
  849.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  850.                               'params' => ['edit_route' => 'dtc_commande_fournisseur_modifier'],
  851.                           ],
  852.                           8  => [
  853.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  854.                               'params' => [
  855.                                   'edit_route'   => 'dtc_fournisseur_modifier',
  856.                                   'typeDocument' => 'fournisseur',
  857.                               ],
  858.                           ],
  859.                           9  => [
  860.                               'view' => 'FO/DataTable/statut-commande-fournisseur.html.twig',
  861.                           ],
  862.                           10 => [
  863.                               'view' => 'FO/DataTable/total-ht-cf.html.twig',
  864.                           ],
  865.                           11 => [
  866.                               'view' => 'FO/DataTable/litiges.html.twig',
  867.                           ],
  868.                           12 => [
  869.                               'view'   => 'FO/DataTable/actions.html.twig',
  870.                               'params' => [
  871.                                   'edit_route'         => 'dtc_commande_fournisseur_modifier',
  872.                                   //'supprimer_route'    => 'dtc_commande_fournisseur_supprimer',
  873.                                   'objet'              => CommandeFournisseur::class,
  874.                                   'deplierFournisseur' => true,
  875.                               ],
  876.                           ],
  877.                       ]
  878.                   )
  879.                   ->setOrder("x.id""desc")
  880.                   ->setSearch(true)
  881.                   ->setSearchFields([678])
  882.                   ->setGroupBy("x.id");;
  883.         $where      '';
  884.         $parameters = [];
  885.         if (is_object($request)) {
  886.             $article $request->query->get('article');
  887.             if ($article != '') {
  888.                 $datatable->addJoin('x.articleCommande''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  889.                           ->addJoin('ac.article''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)/*->setWhere(                                                     // set your dql where statement
  890.           'a.id = :article',
  891.           array('article' => $article)
  892.           )*/
  893.                 ;
  894.                 $where                 .= 'a.id = :article';
  895.                 $parameters['article'] = $article;
  896.                 //$datatable->setGroupBy("a.id");
  897.             }
  898.             /*
  899.         $statutCommande = $request->query->get('statutCommande');
  900.         if ($statutCommande == '' || $statutCommande == '3'){
  901.         if ($where != '') $where .= ' AND ';
  902.         $where .= 's.ordre IN (:statutCommande)';
  903.         $parameters['statutCommande'] = array(5,1);
  904.       } else {
  905.       if ($where != '') $where .= ' AND ';
  906.       $where .= 's.ordre IN (:statutCommande)';
  907.       $parameters['statutCommande'] = array($statutCommande);
  908.     }
  909.     */
  910.         } else {
  911.             $datatable->setMultiple(
  912.                 [
  913.                     'delete' => [
  914.                         'title' => 'Supprimer',
  915.                         'route' => 'dtc_commande_liste_supprimer',
  916.                     ],
  917.                 ]
  918.             );
  919.             //$where .= 's.ordre IN (:statutCommande)';
  920.             //$parameters['statutCommande'] = array(5,1);
  921.         }
  922.         if (array_key_exists('parametres'$param)) {
  923.             if ( ! empty($param["parametres"]['litige'])) {
  924.                 if ($where != "") {
  925.                     $where .= " AND ";
  926.                 }
  927.                 $where .= '(l.id IS NOT NULL)';
  928.             }
  929.             if (array_key_exists('fournisseur'$param["parametres"]) and $param["parametres"]["fournisseur"] > 0) {
  930.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  931.                 $parameters["fournisseur"] = $param["parametres"]["fournisseur"];
  932.                 $where .= "f.id = :fournisseur";
  933.             }
  934.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  935.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  936.                 $param["parametres"]["date_debut"]->setTime(000000);
  937.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  938.                 if ($where != "") {
  939.                     $where .= " AND ";
  940.                 }
  941.                 $where .= "x.date >= :date_debut";
  942.             }
  943.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  944.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  945.                 $param["parametres"]["date_fin"]->setTime(235959);
  946.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  947.                 if ($where != "") {
  948.                     $where .= " AND ";
  949.                 }
  950.                 $where .= "x.date <= :date_fin";
  951.             }
  952.             foreach ($param['parametres'] as $key => $par) {
  953.                 $pos strpos($key'statut_commande_');
  954.                 if ($pos !== false) {
  955.                     $statutsCommande[] = str_replace('statut_commande_'''$key);
  956.                 }
  957.             }
  958.         }
  959.         if (empty($statutsCommande)) {
  960.             $statutsCommande = [512];
  961.         }
  962.         if (count($statutsCommande)) {
  963.             if (in_array(4$statutsCommande)) {
  964.                 if ($where != '') {
  965.                     $where .= ' AND ';
  966.                 }
  967.                 $where              .= 'x.reference NOT LIKE :like';
  968.                 $parameters['like'] = "FF%";
  969.             }
  970.             if ($where != '') {
  971.                 $where .= ' AND ';
  972.             }
  973.             $where                         .= 's.id IN (:statutsCommande)';
  974.             $parameters['statutsCommande'] = $statutsCommande;
  975.         }
  976.         //echo $where;
  977.         //print_r($parameters['statutsCommande']);
  978.         if ($where != '') {
  979.             $datatable->setWhere($where$parameters);
  980.         }
  981.         //$datatable->setSearchFields(array(0,2));
  982.         return $datatable;
  983.     }
  984.     /**
  985.      * @Route("/achat/commande/grid", name="dtc_commande_fournisseur_liste_grid")
  986.      */
  987.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  988.     {
  989.         return $this->datatable($request$datatable$translator)->execute();
  990.     }
  991.     /**
  992.      * Grid action
  993.      * @return Response
  994.      */
  995.     /**
  996.      * @Route("/carnet-commande/grid", name="dtc_carnet_commande_liste_grid")
  997.      */
  998.     public function carnetCommandeGridAction(Request $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  999.     {
  1000.         $selectReappro $request->query->get('selectReappro');
  1001.         return $this->datatableCarnetCommande2($selectReappro$request$datatable$em$translator)->execute();
  1002.     }
  1003.     /**
  1004.      * @Route("/achat/commande/{id}/reception", name="dtc_commande_fournisseur_reception")
  1005.      */
  1006.     public function receptionAction(Request               $requestCommandeFournisseur $commandeEntityManagerInterface $emTranslatorInterface $translator,
  1007.                                     ColonneTableauService $serviceColonneCommandeFournisseurService $commandeServiceNumerotationDocumentService $numerotationService,
  1008.                                     EtatCommandeService   $etatCommandeService
  1009.     ) {
  1010.         set_time_limit(600);
  1011.         $articles_array_pour_bp_auto = [];
  1012.         $repo_article                $em->getRepository(Article::class);
  1013.         $repo_article_commande       $em->getRepository(ArticleCommande::class);
  1014.         $user                        $this->getUser();
  1015.         $commande->setUtilisateur($user);
  1016.         //$request = $request;
  1017.         $errors "";
  1018.         //$colspan = 14;
  1019.         $tabColonneUser                      = [];
  1020.         $tabColonneUser["id"]                = 1;
  1021.         $tabColonneUser["reference"]         = 1;
  1022.         $tabColonneUser["libelle"]           = 1;
  1023.         $tabColonneUser["referenceF"]        = 1;
  1024.         $tabColonneUser["libelleF"]          = 1;
  1025.         $tabColonneUser["qteStockCommande"]  = 1;
  1026.         $tabColonneUser["uniteVente"]        = 1;
  1027.         $tabColonneUser["qte"]               = 1;
  1028.         $tabColonneUser["uniteAchat"]        = 1;
  1029.         $tabColonneUser["ralF"]              = 1;
  1030.         $tabColonneUser["qtéreceptionn"]     = 1;
  1031.         $tabColonneUser["prixHT"]            = 1;
  1032.         $tabColonneUser["txRem"]             = 1;
  1033.         $tabColonneUser["txRemSuppl"]        = 1;
  1034.         $tabColonneUser["fraisAnnexes"]      = 1;
  1035.         $tabColonneUser["ecocontribution"]   = 0;
  1036.         $tabColonneUser["prixAchatUnitaire"] = 1;
  1037.         $tabColonneUser["montantHt"]         = 1;
  1038.         $tabColonneUser["totalHt"]           = 1;
  1039.         $tabColonneUser["CC"]                = 1;
  1040.         $tabColonneUser["qteMiniAchat"]      = 1;
  1041.         $tabColonneUser["conditionnement"]   = 1;
  1042.         $tabColonneUser["etiquettes"]        = 1;
  1043.         $colspan                             count($tabColonneUser);
  1044.         $colonneUtilisateur "App\\Entity\\GestionComerciale\\ReceptionCommandeFournisseur";
  1045.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'id') == false) {
  1046.             $colspan--;
  1047.             $tabColonneUser["id"] = 0;
  1048.         }
  1049.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'reference') == false) {
  1050.             $colspan--;
  1051.             $tabColonneUser["reference"] = 0;
  1052.         }
  1053.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'libelle') == false) {
  1054.             $colspan--;
  1055.             $tabColonneUser["libelle"] = 0;
  1056.         }
  1057.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'referenceF') == false) {
  1058.             $colspan--;
  1059.             $tabColonneUser["referenceF"] = 0;
  1060.         }
  1061.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'libelleF') == false) {
  1062.             $colspan--;
  1063.             $tabColonneUser["libelleF"] = 0;
  1064.         }
  1065.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'qteStockCommande') == false) {
  1066.             $colspan--;
  1067.             $tabColonneUser["qteStockCommande"] = 0;
  1068.         }
  1069.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'uniteVente') == false) {
  1070.             $colspan--;
  1071.             $tabColonneUser["uniteVente"] = 0;
  1072.         }
  1073.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'qte') == false) {
  1074.             $colspan--;
  1075.             $tabColonneUser["qte"] = 0;
  1076.         }
  1077.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'uniteAchat') == false) {
  1078.             $colspan--;
  1079.             $tabColonneUser["uniteAchat"] = 0;
  1080.         }
  1081.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'ralF') == false) {
  1082.             $colspan--;
  1083.             $tabColonneUser["ralF"] = 0;
  1084.         }
  1085.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'qtéreceptionn') == false) {
  1086.             $colspan--;
  1087.             $tabColonneUser["qtéreceptionn"] = 0;
  1088.         }
  1089.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'prixHT') == false) {
  1090.             $colspan--;
  1091.             $tabColonneUser["prixHT"] = 0;
  1092.         }
  1093.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'txRem') == false) {
  1094.             $colspan--;
  1095.             $tabColonneUser["txRem"] = 0;
  1096.         }
  1097.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'txRemSuppl') == false) {
  1098.             $colspan--;
  1099.             $tabColonneUser["txRemSuppl"] = 0;
  1100.         }
  1101.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'fraisAnnexes') == false) {
  1102.             $colspan--;
  1103.             $tabColonneUser["fraisAnnexes"] = 0;
  1104.         }
  1105.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'ecocontribution') == false) {
  1106.             $colspan--;
  1107.             $tabColonneUser["ecocontribution"] = 0;
  1108.         }
  1109.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'prixAchatUnitaire') == false) {
  1110.             $colspan--;
  1111.             $tabColonneUser["prixAchatUnitaire"] = 0;
  1112.         }
  1113.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'montantHt') == false) {
  1114.             $colspan--;
  1115.             $tabColonneUser["montantHt"] = 0;
  1116.         }
  1117.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'totalHt') == false) {
  1118.             $colspan--;
  1119.             $tabColonneUser["totalHt"] = 0;
  1120.         }
  1121.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'CC') == false) {
  1122.             $colspan--;
  1123.             $tabColonneUser["CC"] = 0;
  1124.         }
  1125.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'qteMiniAchat') == false) {
  1126.             $colspan--;
  1127.             $tabColonneUser["qteMiniAchat"] = 0;
  1128.         }
  1129.         if ($serviceColonne->getColonneUtilisateur($colonneUtilisateur'conditionnement') == false) {
  1130.             $colspan--;
  1131.             $tabColonneUser["conditionnement"] = 0;
  1132.         }
  1133.         if ($request->isMethod('POST')) {
  1134.             /*
  1135.       $conditionsAchat = $request->request->get('conditionsAchat');
  1136.       foreach($conditionsAchat as $conditionAchat){
  1137.       $actionAmener = $request->request->get('nvelleCondAchat_'.$conditionAchat);
  1138.       $commandeService->creerOuMajConditionAchat($conditionAchat, $actionAmener);
  1139.     }
  1140.     *
  1141.     */
  1142.             $prixCalc str_replace(" """$request->request->get('prix'));
  1143.             $prixCalc str_replace(chr(194).chr(160), ''$prixCalc);
  1144.             $commentaireReception $request->request->get('commentaireReception');
  1145.             $articles         = [
  1146.                 'ids'                         => $request->request->get('ids'),
  1147.                 'commentaire'                 => $request->request->get('commentaire'),
  1148.                 'libelles'                    => $request->request->get('libelles'),
  1149.                 'tva'                         => $request->request->get('tva'),
  1150.                 //'remiseSuppl'=>$request->request->get('remiseSuppl'),
  1151.                 'prix'                        => $prixCalc,
  1152.                 'qte'                         => $request->request->get('qte'),
  1153.                 'rals'                        => $request->request->get('rals'),
  1154.                 //'nvellesCond'=>$request->request->get('NvellesCondition'),
  1155.                 'conditionsAchat'             => $request->request->get('conditionsAchat'),
  1156.                 'etiquettes'                  => $request->request->get('etiquettes'),
  1157.                 'remises'                     => $request->request->get('remises'),
  1158.                 'remisesSuppl'                => $request->request->get('remisesSuppl'),
  1159.                 'receptions'                  => $request->request->get('receptions'),
  1160.                 'fabrications'                => $request->request->get('fabrications'),
  1161.                 'emplacement'                 => $request->request->get('emplacement'),
  1162.                 'nbEmplacement'               => $request->request->get('nbEmplacement'),
  1163.                 'fraisAnnexes'                => $request->request->get('fraisAnnexes'),
  1164.                 'articlesCommande'            => $request->request->get('articlesCommande'),
  1165.                 'articlesCommandeRepris'      => $request->request->get('articlesCommandeRepris'),
  1166.                 'coefficientsConditionnement' => $request->request->get('coefficientsConditionnement'),
  1167.                 'ecocontribution'             => $request->request->get('ecocontribution')
  1168.                 //'numero_serie'=>$request->request->get('numero_serie'),
  1169.                 //'duree_garantie'=>$request->request->get('duree_garantie'),
  1170.             ];
  1171.             $BL               $request->request->get('BL');
  1172.             $dateReceptionTxt $request->request->get('dateReception');
  1173.             $dateReception    date_create_from_format('d/m/Y H:i'$dateReceptionTxt);
  1174.             if ($BL == '') {
  1175.                 $BL $dateReception->format('Ymd-His');
  1176.             }
  1177.             foreach ($articles['ids'] as $key => $article) {
  1178.                 if ($articles['qte'][$key] > 0) {
  1179.                     $articles_array_pour_bp_auto $articles['ids'][$key];
  1180.                 }
  1181.                 if ($articles['conditionsAchat'][$key] == "") {
  1182.                     $id  $articles['ids'][$key];
  1183.                     $art $repo_article->find($id);
  1184.                     if ($art->getDivers() == 1) {
  1185.                         $repo_cond $em->getRepository("DTCArticlesBundle:ConditionAchat");
  1186.                         $cond      $repo_cond->findOneBy(['article' => $art]);
  1187.                         if (is_object($cond)) {
  1188.                             $articles['conditionsAchat'][$key] = $cond->getId();
  1189.                         }
  1190.                     }
  1191.                 }
  1192.             }
  1193.             $valeurs   = ["articles" => $articles'typeDocument' => 'commande''BL' => $BL'dateReception' => $dateReception];
  1194.             $reception = new Reception();
  1195.             $reception->setCommandeFournisseur($commande);
  1196.             $reception->setFraisPortSupplementaire($commande->getFraisPortSupplementaire());
  1197.             $reception->setFraisFixe($commande->getFraisFixe());
  1198.             $reception->setFraisApproche($commande->getFraisApproche());
  1199.             $reception->setCommentaire($commentaireReception);
  1200.             $reception->setFournisseur($commande->getFournisseur());
  1201.             $reception->setBonLivraison($BL);
  1202.             if (is_object($dateReception)) {
  1203.                 $reception->setDate($dateReception);
  1204.             }
  1205.             $reception->setReference($numerotationService->generer($reception));
  1206.             $em->persist($reception);
  1207.             //les numéros de série
  1208.             $numeraux_serie  $request->request->get('numero_serie');
  1209.             $durees_garantie $request->request->get('duree_garantie');
  1210.             if (count($numeraux_serie) > 0) {
  1211.                 foreach ($numeraux_serie as $articleCommandeId => $numerauxByArticle) {
  1212.                     foreach ($numerauxByArticle as $numero_serie) {
  1213.                         if ($numero_serie != '') {
  1214.                             $ac          $repo_article_commande->find($articleCommandeId);
  1215.                             $duree       $durees_garantie[$articleCommandeId];
  1216.                             $numeroSerie = new NumeroSerie();
  1217.                             $numeroSerie->setDureeGarantie($duree);
  1218.                             if (is_object($ac)) {
  1219.                                 $numeroSerie->setArticleCommande($ac);
  1220.                             }
  1221.                             $numeroSerie->setNumero($numero_serie);
  1222.                             $em->persist($numeroSerie);
  1223.                         }
  1224.                     }
  1225.                 }
  1226.             }
  1227.             $em->flush();
  1228.             //echo "OKOKOKOKOAAAAA";
  1229.             $commandeService->creerMvtStock($commande$valeurs$reception);
  1230.             //$commandeService->creerNouvellesConditionsAchat($commande, $valeurs);
  1231.             $message '';
  1232.             foreach ($articles['ids'] as $key => $article) {
  1233.                 $conditionAchat $articles['conditionsAchat'][$key];
  1234.                 $actionAmener $request->request->get('condAchat_'.$conditionAchat);
  1235.                 $message      .= $conditionAchat.' - '.$actionAmener.' - ';
  1236.                 if ($actionAmener != 1) {
  1237.                     $donnees['prix']         = $articles['prix'][$key];
  1238.                     $donnees['fraisAnnexes'] = $articles['fraisAnnexes'][$key];
  1239.                     $message                 .= $donnees['prix'];
  1240.                     $commandeService->creerOuMajConditionAchat($conditionAchat$actionAmener$donnees);
  1241.                 }
  1242.                 $message .= ' / ';
  1243.             }
  1244.             //Création des BPs
  1245.             $repo_commande $em->getRepository(Commande::class);
  1246.             /*
  1247.   if(count($commande->getArticleCommande())>0) {
  1248.   foreach($commande->getArticleCommande() as $acc) {
  1249.   $articles_array_pour_bp_auto[]=$acc->getArticle()->getId();
  1250. }
  1251. }
  1252. */
  1253.             if (count($articles_array_pour_bp_auto) > 0) {
  1254.                 //print_r($articles_array_pour_bp_auto);
  1255.                 $commandesEnCours $repo_commande->listeCommandeEnCoursPourReception($articles_array_pour_bp_auto);
  1256.                 foreach ($commandesEnCours as $c) {
  1257.                     //echo "<div>".$c->getReference()." ID ".$c->getId()."</div>";
  1258.                     $etatCommandeService->calculerEtatCommande($c$creer_bon true);
  1259.                 }
  1260.             }
  1261.             /*
  1262. $commandes = $repo_commande->listeCommandeEnCours2();
  1263. $output->writeln('<info>qte : '.count($commandes).'</info>');
  1264. foreach($commandes as $c ) {
  1265. $output->writeln('COMMANDE ID : '.$c->getId());
  1266. if($c->getId() == 18018 or 1==1)  {
  1267. $etatCommandeService->calculerEtatCommande($c,$creer_bon = true);
  1268. // exit;
  1269. }
  1270. }
  1271. */
  1272. //Reduction du temps possible en utilisant un process pour mettre Ã  jour les Ã©tats de commande.
  1273.             /*
  1274. $repo_commande = $em->getRepository(Commande::class);
  1275. $etatCommandeService = $this->container->get('dtc.etatcommande');
  1276. $commandes = $repo_commande->listeCommandeEnCours();
  1277. foreach($commandes as $c ) {
  1278. $etatCommandeService->calculerEtatCommande($c,$creer_bon = true);
  1279. }
  1280. *
  1281. */
  1282.             $this->addFlash('notice'$translator->trans('Mouvements de stock créés avec succès !'));
  1283. //return $this->redirectToRoute('dtc_commande_fournisseur_modifier',array("id"=>$commande->getId()));
  1284.             $url $this->generateUrl('dtc_commande_fournisseur_modifier', ["id" => $commande->getId(), "tab" => "receptions"]);
  1285.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1286.         }
  1287.         $etiquettes $repo_commande $em->getRepository(Etiquette::class)->findAll();
  1288.         $titre_modal $translator->trans('Réceptionner');
  1289.         $rendu       $this->renderView('GestionComerciale/CommandeFournisseur/reception.html.twig', [
  1290.             'etiquettes'     => $etiquettes,
  1291.             'errors'         => $errors,
  1292.             'commande'       => $commande,
  1293.             'tabColonneUser' => $tabColonneUser,
  1294.             'modalWidth'     => 800,
  1295.         ]);//'form' => $form->createView(),
  1296.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  1297.         //return $this->render('GestionComerciale/CommandeFournisseur/reception.html.twig', array('form' => $form->createView(),'errors'=>$errors,'commande'=>$commande));
  1298.     }
  1299.     /**
  1300.      * set datatable configs
  1301.      *
  1302.      * @return \App\Library\Datatable\Util\Datatable
  1303.      */
  1304.     private function datatableCarnetCommande(Datatable $datatableTranslatorInterface $translator)
  1305.     {
  1306.         $datatable->setEntity(ArticleCommande::class, "ac")
  1307.                   ->setFields(
  1308.                       [
  1309.                           $translator->trans("ID")             => 'p.id',
  1310.                           $translator->trans("Réf")            => 'p.reference',
  1311.                           $translator->trans("Libelle")        => 'p.libelle',
  1312.                           $translator->trans("Fournisseur")    => 'f.libelle',//'p.id',
  1313.                           $translator->trans("Stock")          => 'p.stock',
  1314.                           $translator->trans("Qté mini")       => 'p.seuilMiniCommandeFournisseur',
  1315.                           //$translator->trans("Clients") =>  'c.id',
  1316.                           $translator->trans("Clients")        => 'p.id',
  1317.                           $translator->trans("Ral client")     => 'p.stockReserve',
  1318.                           $translator->trans("Ral fourn.")     => 'p.ralFournisseur',
  1319.                           $translator->trans("Qté")            => 'p.id',
  1320.                           $translator->trans("Type Réappro")   => 'p.id',
  1321.                           $translator->trans("Art. int./ext.") => 'p.id',
  1322.                           /*
  1323.      $translator->trans("Actions") =>  'p.id',
  1324.       *
  1325.       */
  1326.                           "_identifier_"                       => 'p.id',
  1327.                       ]
  1328.                   )
  1329.                   ->addJoin('ac.article''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1330.             //->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1331.                   ->addJoin('ac.commandeFournisseur''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1332.                   ->addJoin('p.fournisseurDefaut''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1333.             //->addJoin('p.conditionsAchat', 'ca', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1334.             //->addJoin('ca.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1335.                   ->setRenderers(
  1336.                 [
  1337.                     3  => [
  1338.                         'view' => 'FOBundle:DataTable:choix_fournisseur_2.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  1339.                     ],
  1340.                     /*
  1341.         4 => array(
  1342.         'view' => 'FO/DataTable/etat_commande_fournisseur.html.twig'
  1343.       ),
  1344.       *
  1345.       */
  1346.                     /*
  1347.       6 => array(
  1348.       'view' => 'FO/DataTable/clients_controller.html.twig'
  1349.     ),
  1350.     *
  1351.     */
  1352.                     6  => [
  1353.                         'view' => 'FO/DataTable/clients2.html.twig',
  1354.                     ],
  1355.                     9  => [
  1356.                         'view' => 'FO/DataTable/qte_conseillee_controller.html.twig',
  1357.                     ],
  1358.                     10 => [
  1359.                         'view' => 'FO/DataTable/type_reappro.html.twig',
  1360.                     ],
  1361.                     11 => [
  1362.                         'view' => 'FO/DataTable/type_reappro_int_ext.html.twig',
  1363.                     ],
  1364.                     /*
  1365.     12 => array(
  1366.     'view' => 'FO/DataTable/actions.html.twig',
  1367.     'params' => array(
  1368.     'edit_route'    => 'dtc_commande_fournisseur_modifier',
  1369.     'supprimer_route'    => 'dtc_commande_fournisseur_supprimer',
  1370.     'objet'    => 'DTCGestionComercialeBundle:CommandeFournisseur',
  1371.   ),
  1372. ),
  1373. *
  1374. */
  1375.                 ]
  1376.             )
  1377.                   ->setWhere('(p.stock-COALESCE(p.stockReserve,0)+COALESCE(p.ralFournisseur,0)) < p.seuilMiniCommandeFournisseur and c.statutCommande IN (1,2)')
  1378.                   ->setGroupBy('p.id')
  1379.                   ->setMultiple(
  1380.                       [
  1381.                           'commande'  => [
  1382.                               'title' => 'Commander',
  1383.                               'route' => 'dtc_commande_fournisseur_ajouter',
  1384.                           ],
  1385.                           'exportPdf' => [
  1386.                               'title' => 'Export PDF',
  1387.                               'route' => 'dtc_suggestion_commande_fournisseur_export',
  1388.                           ],
  1389.                       ]
  1390.                   )
  1391.                   ->setSearch(true)
  1392.                   ->setSearchFields([1231011]);
  1393.         //$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
  1394.         return $datatable;
  1395.     }
  1396.     /**
  1397.      * set datatable configs
  1398.      *
  1399.      * @return \App\Library\Datatable\Util\Datatable
  1400.      */
  1401.     private function datatableCarnetCommande2($selectReapproRequest $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1402.     {
  1403.         $conn $em->getConnection();
  1404.         $conn->getConfiguration()->setSQLLogger(null);
  1405.         $param      $request->query->all();
  1406.         $parametres = [];
  1407.         if ( ! array_key_exists('parametres'$param)) {
  1408.             $param["parametres"] = $param;
  1409.         }
  1410.         $datatable->setEntity(Article::class, "p")
  1411.                   ->setFields(
  1412.                       [
  1413.                           $translator->trans("ID")              => 'p.id',
  1414.                           $translator->trans("Réf")             => 'p.reference',
  1415.                           $translator->trans("Réf fourn")       => 'cha.referenceFournisseur',
  1416.                           $translator->trans("Libellé")         => 'p.libelle',
  1417.                           $translator->trans("Fournisseur")     => 'f.reference',//'p.id',
  1418.                           $translator->trans("Clients")         => 'p.id',
  1419.                           $translator->trans("Qté mini")        => 'p.seuilMiniCommandeFournisseur',
  1420.                           $translator->trans("Qté maxi")        => 'p.seuilMaxiCommandeFournisseur',
  1421.                           $translator->trans("Stock")           => 'p.stock',
  1422.                           $translator->trans("Dispo")           => 'p.dispo',
  1423.                           $translator->trans("RAL client")      => 'p.stockReserve',
  1424.                           $translator->trans("Reserve fab.")    => 'p.stockReserveFabrication',
  1425.                           $translator->trans("RAL fourn.")      => 'p.ralFournisseur',
  1426.                           $translator->trans('conditionnement') => 'cha.conditionnement',
  1427.                           $translator->trans('delai')           => 'cha.delai',
  1428.                           $translator->trans("Qté")             => 'p.id',
  1429.                           $translator->trans("PU HT")           => 'p.prixBase',
  1430.                           $translator->trans("CUMP")            => 'p.cpump',
  1431.                           $translator->trans("Type Réappro")    => 'p.id',
  1432.                           //$translator->trans("Art. int./ext.") =>  'p.produitInterne',
  1433.                           /*
  1434.      $translator->trans("Actions") =>  'p.id',
  1435.       *
  1436.       */
  1437.                           "_identifier_"                        => 'p.id',
  1438.                       ]
  1439.                   )
  1440.             //->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1441.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1442.                   ->addJoin('p.conditionsAchat''cha'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1443.                   ->addJoin('p.fournisseurDefaut''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1444.                   ->setRenderers(
  1445.                       [
  1446.                           1  => [
  1447.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1448.                               'params' => ['edit_route' => 'dtc_article_modifier'],
  1449.                           ],
  1450.                           2  => [
  1451.                               'view'   => 'FO/DataTable/reference_fournisseur.html.twig',
  1452.                               'params' => [],
  1453.                           ],
  1454.                           4  => [
  1455.                               'view' => 'FO/DataTable/choix_fournisseur_2.1.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  1456.                           ],
  1457.                           5  => [
  1458.                               'view' => 'FO/DataTable/clients2.html.twig',
  1459.                           ],
  1460.                           6  => [
  1461.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1462.                               'params' => ['class' => 'text-center'],
  1463.                           ],
  1464.                           7  => [
  1465.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1466.                               'params' => ['class' => 'text-center'],
  1467.                           ],
  1468.                           8  => [
  1469.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1470.                               'params' => ['class' => 'text-center'],
  1471.                           ],
  1472.                           9  => [
  1473.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1474.                               'params' => ['class' => 'text-center'],
  1475.                           ],
  1476.                           10 => [
  1477.                               'view'   => 'FO/DataTable/ral.html.twig',
  1478.                               'params' => ['class' => 'text-center'],
  1479.                           ],
  1480.                           11 => [
  1481.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1482.                               'params' => ['class' => 'text-center'],
  1483.                           ],
  1484.                           12 => [
  1485.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  1486.                               'params' => ['class' => 'text-center'],
  1487.                           ],
  1488.                           13 => [
  1489.                               'view' => 'FO/DataTable/conditionnement.html.twig',
  1490.                           ],
  1491.                           14 => [
  1492.                               'view' => 'FO/DataTable/delai.html.twig',
  1493.                           ],
  1494.                           15 => [
  1495.                               'view' => 'FO/DataTable/qte_conseillee2.html.twig',
  1496.                           ],
  1497.                           16 => [
  1498.                               //'view' => 'FO/DataTable/prix.html.twig'
  1499.                               'view' => 'FO/DataTable/prix_condition_achat.html.twig',
  1500.                           ],
  1501.                           17 => [
  1502.                               'view' => 'FO/DataTable/prix.html.twig',
  1503.                           ],
  1504.                           18 => [
  1505.                               'view' => 'FO/DataTable/type_reappro_2.html.twig',
  1506.                           ],
  1507.                           /*
  1508.         14 => array(
  1509.         'view' => 'FO/DataTable/type_reappro_int_ext_2.html.twig'
  1510.       ),
  1511.       *
  1512.       */
  1513.                           /*
  1514.       12 => array(
  1515.       'view' => 'FO/DataTable/actions.html.twig',
  1516.       'params' => array(
  1517.       'edit_route'    => 'dtc_commande_fournisseur_modifier',
  1518.       'supprimer_route'    => 'dtc_commande_fournisseur_supprimer',
  1519.       'objet'    => 'DTCGestionComercialeBundle:CommandeFournisseur',
  1520.     ),
  1521.   ),
  1522.   *
  1523.   */
  1524.                       ]
  1525.                   )
  1526.                   ->setGroupBy('p.id')
  1527.                   ->setMultiple(
  1528.                       [
  1529.                           'commande' => [
  1530.                               'title' => 'Commander',
  1531.                               'route' => 'dtc_commande_fournisseur_ajouter',
  1532.                           ],
  1533.                       ]
  1534.                   )
  1535.                   ->setSearch(true)
  1536.                   ->setSearchFields([1234]);
  1537.         $where "(p.aCommander = 1 and (p.est_commentaire = 0 or p.est_commentaire is NULL) and (p.divers is null or p.divers = 0 or (p.divers = 1 and p.stock >= 0 and p.stockReserve > 0)))";
  1538.         $where .= " and (p.arretGamme IS NULL or p.arretGamme = 0)";
  1539.         //$where .= "and f.id != 132 ";
  1540.         //$where = 'p.aCommander = 1 and p.produitInterne != 1 and p.virtuel != 1 and p.consigne != 1 ';
  1541.         /*
  1542.   if ($selectReappro == 'ral')
  1543.   $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 ';
  1544.   if ($selectReappro == 'reappro')
  1545.   $where .= ' and p.stockReserve = 0 ';
  1546.   if ($selectReappro == 'fabrication')
  1547.   $where .= ' and p.stockReserveFabrication > 0 ';
  1548.   */
  1549.         switch ($selectReappro) {
  1550.             case 'ral':
  1551.                 $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 ';
  1552.                 break;
  1553.             case 'ralP':
  1554.                 $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0) - COALESCE(p.stockReserve, 0)) < 0 ';
  1555.                 break;
  1556.             case 'reappro':
  1557.                 $where .= ' and COALESCE(p.seuilMiniCommandeFournisseur, 0) > 0 and COALESCE(p.seuilMaxiCommandeFournisseur, 0) > 0 ';
  1558.                 break;
  1559.             case 'reapproP':
  1560.                 $where .= ' and COALESCE(p.seuilMiniCommandeFournisseur, 0) > 0 and COALESCE(p.seuilMaxiCommandeFournisseur, 0) > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0)) < COALESCE(p.seuilMaxiCommandeFournisseur, 0)';
  1561.                 break;
  1562.             case 'fabrication':
  1563.                 $where .= ' and p.stockReserveFabrication > 0 ';
  1564.                 break;
  1565.             case 'fabricationP':
  1566.                 $where .= ' and p.stockReserveFabrication > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0) - COALESCE(p.stockReserve, 0)) < 0 ';
  1567.                 break;
  1568.             default:
  1569.                 break;
  1570.         }
  1571.         if (array_key_exists('categorie_article'$param['parametres']) and $param['parametres']['categorie_article'] != "") {
  1572.             $datatable->addJoin('p.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1573.             $datatable->addJoin('ac.categorie''cat'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1574.             $where                   .= " AND cat.id = :categorie";
  1575.             $parametres['categorie'] = $param['parametres']['categorie_article'];
  1576.             if (array_key_exists('sous_categorie_article'$param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
  1577.                 $datatable->addJoin('p.articleCategorie''ac2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1578.                 $datatable->addJoin('ac2.categorie''cat2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1579.                 $where                    .= " AND cat2.id = :categorie2";
  1580.                 $parametres['categorie2'] = $param['parametres']['sous_categorie_article'];
  1581.             }
  1582.             if (array_key_exists('sous_sous_categorie_article'$param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
  1583.                 $datatable->addJoin('p.articleCategorie''ac3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1584.                 $datatable->addJoin('ac3.categorie''cat3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1585.                 $where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
  1586.             }
  1587.         }
  1588.         if (array_key_exists('marque'$param['parametres']) and $param['parametres']['marque'] != "") {
  1589.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1590.             $where                .= " AND p.marque = :marque";
  1591.             $parametres['marque'] = $param['parametres']['marque'];
  1592.         }
  1593.         if (array_key_exists('type'$param['parametres']) and $param['parametres']['type'] != "") {
  1594.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1595.             $where              .= " AND p.type = :type";
  1596.             $parametres['type'] = $param['parametres']['type'];
  1597.         }
  1598.         if (array_key_exists('client'$param['parametres']) and $param['parametres']['client'] != "") {
  1599.             $datatable->addJoin('p.clientsEnRal''cRal'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1600.             $where                .= " AND cRal.id = :client";
  1601.             $parametres['client'] = $param['parametres']['client'];
  1602.         }
  1603.         $datatable->setWhere($where$parametres)
  1604.                   ->setOrder("p.reference""asc");
  1605.         //$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
  1606.         return $datatable;
  1607.     }
  1608.     public function qteConseilleeAction(Request $requestArticle $articleArticleService $articleService)
  1609.     {
  1610.         $retour $articleService->getQteConseillee($article);
  1611.         return $this->render('FO/DataTable/qte_conseillee.html.twig', [
  1612.             'qteConseillee' => $retour['qteConseillee'],
  1613.             'qteMini'       => $retour['qteMini'],
  1614.             'qteMaxi'       => $retour['qteMaxi'],
  1615.             'article'       => $article,
  1616.         ]);
  1617.     }
  1618.     /**
  1619.      * @Route("", name="")
  1620.      */
  1621.     public function getClientsAction(Request $requestArticle $articleEntityManagerInterface $em)
  1622.     {
  1623.         $clients             = [];
  1624.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  1625.         if (is_object($article)) {
  1626.             $retour $repoArticleCommande->getRalClientEtCmdAssociees($article);
  1627.             if ($retour != '') {
  1628.                 foreach ($retour as $datas) {
  1629.                     foreach ($datas as $data) {
  1630.                         $client['id']               = $data['clientId'];
  1631.                         $client['name']             = $data['client'];
  1632.                         $clients[$data['clientId']] = $client;
  1633.                     }
  1634.                 }
  1635.             }
  1636.         }
  1637.         return $this->render('FO/DataTable/clients.html.twig', [
  1638.             'clients' => $clients,
  1639.         ]);
  1640.     }
  1641.     /**
  1642.      * @Route("", name="")
  1643.      */
  1644.     public function getPrixByConditionAchatAction(Request $request$condition$quantite)
  1645.     {
  1646.         $quantiteMini            $condition->getQuantite();
  1647.         $quantiteConditionnement $condition->getConditionnement();
  1648.         if ($quantite $quantiteMini) {
  1649.             $quantiteR ceil($quantite $quantiteMini) * $quantiteMini;
  1650.         } else {
  1651.             $quantiteR $quantiteMini;
  1652.         }
  1653.         $retour['quantite'] = ceil($quantiteR $quantiteConditionnement) * $quantiteConditionnement;
  1654.         $retour['remise']   = $condition->getRemise();
  1655.         $retour['prix']     = $condition->getPrixUnitaire();
  1656.         $response = new JsonResponse();
  1657.         $response->setData($retour);
  1658.         return $response;
  1659.     }
  1660.     /**
  1661.      * @Route("/carnet-commande/refresh", name="dtc_carnet_commande_refresh")
  1662.      */
  1663.     public function carnetCommandeRefreshAction(Request $requestEntityManagerInterface $em)
  1664.     {
  1665.         /*
  1666.   $process = new Process('php app/console maj:qteConseillee');
  1667.   $process->run();
  1668.   *
  1669.   */
  1670.         $em          $em;
  1671.         $repoArticle $em->getRepository(Article::class);
  1672.         $repoArticle->updateACommander();
  1673.         /*
  1674.   $articlesAmaj = $repoArticle->findByACommander(true);
  1675.   foreach ($articlesAmaj as $article){
  1676.   $articleService = $this->get('dtc.article');
  1677.   $articleService->majQteConseillee($article);
  1678. }
  1679. *
  1680. */
  1681.         $response = new JsonResponse();
  1682.         $response->setData(1);
  1683.         return $response;
  1684.     }
  1685.     /**
  1686.      * @Route("/achat/facturer", name="dtc_facturer_fournisseur")
  1687.      */
  1688.     public function facturerAction(Request $requestEntityManagerInterface $emFournisseurService $fournisseurServiceCommandeFournisseurService $commandeService)
  1689.     {
  1690.         $data $request->get('dataTables');
  1691.         $ids  $data['actions'];
  1692.         $ids $request->get('mouvementsStock');
  1693.         $repo_mode_reglement       $em->getRepository(ModeReglement::class);
  1694.         $repo_mvt_stock            $em->getRepository(MouvementStock::class);
  1695.         $repo_fournisseur          $em->getRepository(Fournisseur::class);
  1696.         $repo_article_commande     $em->getRepository(ArticleCommande::class);
  1697.         $repo_conditionAchat       $em->getRepository(ConditionAchat::class);
  1698.         $repo_statut_commande      $em->getRepository(StatutCommandeFournisseur::class);
  1699.         $statutCommandeFournisseur $repo_statut_commande->findOneByOrdre(5);//Facture
  1700.         $repo_taxe                 $em->getRepository(Taxe::class);
  1701.         $date      = new \DateTime;
  1702.         $commandes = [];
  1703.         $message   '';
  1704.         $count     0;
  1705.         $modeReglementFournisseurTab = [];
  1706.         //Regroupement par fournisseur
  1707.         foreach ($ids as $id) {
  1708.             //Verifier si le mvt de stock n'est pas déjà facturé totalement
  1709.             $mvtStock $repo_mvt_stock->find($id);
  1710.             //$fournisseur = $mvtStock->getFournisseur();
  1711.             $fournisseur $mvtStock->getCommandeFournisseur()->getFournisseur();
  1712.             if ($fournisseur->getDivers() == && is_object($fournisseur->getParent())) {
  1713.                 $fournisseur $fournisseur->getParent();
  1714.             }
  1715.             $fournisseurs[$fournisseur->getId()][]                = $id;
  1716.             $modeReglementFournisseurTab[$fournisseur->getId()][] = $mvtStock->getCommandeFournisseur()->getModeReglement()->getId();
  1717.         }
  1718.         //print_r($modeReglementFournisseurTab);
  1719.         //exit;
  1720.         if ($em->getFilters()->isEnabled('softdeleteable')) {
  1721.             $em->getFilters()->disable('softdeleteable');
  1722.         }
  1723.         //Regroupement par ref
  1724.         foreach ($fournisseurs as $fournisseur => $mvtsStockId) {
  1725.             $articles = [];
  1726.             foreach ($mvtsStockId as $mvtStockId) {
  1727.                 $mvtStock     $repo_mvt_stock->find($mvtStockId);
  1728.                 $articleId    $mvtStock->getArticle()->getId();
  1729.                 $divers       $mvtStock->getArticle()->getDivers();
  1730.                 $prix         $mvtStock->getPrixAchat();
  1731.                 $remise       $mvtStock->getRemise();
  1732.                 $remiseSuppl  $mvtStock->getRemiseSuppl();
  1733.                 $fraisAnnexes $mvtStock->getFraisAnnexes();
  1734.                 //Regroupement par ref
  1735.                 //$key = $articleId.'-'.strval($prix).'-'.strval($remise).'-'.strval($remiseSuppl).'-'.strval($fraisAnnexes);
  1736.                 //Pas de regroupement par réf
  1737.                 $key $mvtStockId;
  1738.                 if (array_key_exists($key$articles)) {
  1739.                     //$articles[$key]['quantite'] += floatval($mvtStock->getQuantite());
  1740.                     $articles[$key]['quantite']    += floatval($mvtStock->getResteAfacturer());
  1741.                     $articles[$key]['mvtsStock'][] = $mvtStock;
  1742.                 } else {
  1743.                     $article['mvtsStock'] = [$mvtStock];
  1744.                     //$article['quantite'] = floatval($mvtStock->getQuantite());
  1745.                     $article['quantite'] = floatval($mvtStock->getResteAfacturer());
  1746.                     //$article['prix'] = floatval($mvtStock->getPrixAchat());
  1747.                     if (is_object($mvtStock->getArticleCommandeCf()) && ! empty($mvtStock->getArticleCommandeCf()->getCoefficientConditionnement())) {
  1748.                         $article['prix'] = floatval($mvtStock->getPrixSansRemise()) * $mvtStock->getArticleCommandeCf()->getCoefficientConditionnement();
  1749.                     } elseif (is_object($mvtStock->getConditionAchat()) && ! empty($mvtStock->getConditionAchat()->getCoefficientConditionnement())) {
  1750.                         $article['prix'] = floatval($mvtStock->getPrixSansRemise()) * $mvtStock->getConditionAchat()->getCoefficientConditionnement();
  1751.                     } else {
  1752.                         $article['prix'] = floatval($mvtStock->getPrixSansRemise());
  1753.                     }
  1754.                     /*
  1755.         if(is_object($mvtStock->getConditionAchat()) && !empty($mvtStock->getConditionAchat()->getCoefficientConditionnement())){
  1756.         $article['prix'] = floatval($mvtStock->getPrixSansRemise()) * $mvtStock->getConditionAchat()->getCoefficientConditionnement();
  1757.       } else {
  1758.       $article['prix'] = floatval($mvtStock->getPrixSansRemise());
  1759.     }
  1760.     */
  1761.                     //$article['prix'] = floatval($mvtStock->getPrixSansRemise());
  1762.                     $article['remise']                     = floatval($remise);
  1763.                     $article['remiseSuppl']                = floatval($remiseSuppl);
  1764.                     $article['fraisAnnexes']               = floatval($fraisAnnexes);
  1765.                     $article['article']                    = $mvtStock->getArticle();
  1766.                     $article['conditionAchat']             = $mvtStock->getConditionAchat();
  1767.                     $article['coefficientConditionnement'] = 1;
  1768.                     $article['ecocontribution']            = $mvtStock->getEcocontribution();
  1769.                     if ($mvtStock->getLibelle() == '') {
  1770.                         $article['libelle'] = $mvtStock->getArticle()->getLibelle();
  1771.                     } else {
  1772.                         $article['libelle'] = $mvtStock->getLibelle();
  1773.                     }
  1774.                     //
  1775.                     $articleCommande $mvtStock->getArticleCommandeCf();
  1776.                     if ( ! is_object($articleCommande)) {
  1777.                         $articleCommande $repo_article_commande->findOneBy([
  1778.                                                                                  'commandeFournisseur' => $mvtStock->getCommandeFournisseur()->getId(),
  1779.                                                                                  'article'             => $mvtStock->getArticle()->getId(),
  1780.                                                                              ]);
  1781.                     }
  1782.                     if (is_object($articleCommande)) {
  1783.                         $article['tva']             = $articleCommande->getTvaVente();
  1784.                         $coefficientConditionnement $articleCommande->getCoefficientConditionnement();
  1785.                         if ($coefficientConditionnement != '') {
  1786.                             $article['coefficientConditionnement'] = $coefficientConditionnement;
  1787.                         }
  1788.                         $article['prixAchatUnitaireAvecFrais'] = $articleCommande->getPrixAchatUnitaireAvecFrais();
  1789.                         $article['ajouterFraisPrixAchat']      = $articleCommande->getAjouterFraisPrixAchat();
  1790.                     } else {
  1791.                         $article['tva'] = 0;
  1792.                     }
  1793.                     $articles[$key] = $article;
  1794.                 }
  1795.             }
  1796.             $commandes[$fournisseur] = $articles;
  1797.         }
  1798.         foreach ($commandes as $key => $articles) {
  1799.             $count++;
  1800.             $commande    = new CommandeFournisseur();
  1801.             $fournisseur $repo_fournisseur->find($key);
  1802.             if (is_object($fournisseur)) {
  1803.                 $commande->setFournisseur($fournisseur);
  1804.                 $commande->setTauxEscompte($fournisseur->getTauxEscompte());
  1805.                 if (is_object($fournisseur->getCompta()) && $fournisseur->getCompta()->getId() == 1) {//Taxable
  1806.                     $tauxTva $repo_taxe->find(1)->getTaux();
  1807.                 } else {
  1808.                     $tauxTva 0;
  1809.                 }
  1810.                 for ($m 0$m count($modeReglementFournisseurTab[$fournisseur->getId()]); $m++) {
  1811.                     //  echo "<div>COMPTEUR : ".$m." FOUR ID:".$fournisseur->getId()." VALEUR TAB:".$modeReglementFournisseurTab[$fournisseur->getId()][$m]."</div>";
  1812.                     if ($m == 0) {
  1813.                         $modeReglement $repo_mode_reglement->find($modeReglementFournisseurTab[$fournisseur->getId()][$m]);
  1814.                     } else {
  1815.                         if ($modeReglement->getId() != $modeReglementFournisseurTab[$fournisseur->getId()][$m] && is_object($fournisseur->getModeReglement())) {
  1816.                             $modeReglement $fournisseur->getModeReglement();
  1817.                         }
  1818.                     }
  1819.                 }
  1820.                 //  echo "<div>FIN</div>";
  1821.                 //exit;
  1822.                 $commande->setModeReglement($modeReglement);
  1823.                 $commande->setTauxTvaFraisPort($tauxTva);
  1824.                 $commande->setFraisFixe($fournisseur->getFraisFixe());
  1825.                 if (is_object($fournisseur->getDevise())) {
  1826.                     $tauxChange $fournisseur->getDevise()->getTauxChange();
  1827.                 } else {
  1828.                     $tauxChange 1;
  1829.                 }
  1830.                 $commande->setTauxChange($tauxChange);
  1831.             }
  1832.             // if(is_object($statutCommandeFournisseur)) $commande->setStatutCommande($statutCommandeFournisseur);
  1833.             $commande->setDate($date);
  1834.             //Numérotation
  1835.             /*
  1836.   $numerotationService = $this->container->get('dtc.numerotationdocument');
  1837.   $commande->setReference($numerotationService->generer($commande));
  1838.   *
  1839.   */
  1840.             $totalHtCommande 0;
  1841.             $poids           0;
  1842.             $receptions = [];
  1843.             foreach ($articles as $article) {
  1844.                 //$mvtStock = $repo_mvt_stock->find($mvtStockId);
  1845.                 //$message .= $ac['id'].', '.$ac;
  1846.                 $articleCommande = new ArticleCommande();
  1847.                 $articleCommande->setQuantite($article['quantite']);
  1848.                 $articleCommande->setPrixBase($article['prix']);
  1849.                 $articleCommande->setRemise($article['remise']);
  1850.                 $articleCommande->setRemiseSupplementaire($article['remiseSuppl']);
  1851.                 $articleCommande->setFraisAnnexes($article['fraisAnnexes']);
  1852.                 $articleCommande->setLibelle($article['libelle']);
  1853.                 $articleCommande->setArticle($article['article']);
  1854.                 //$articleCommande->setTvaAchat($article['tva']);
  1855.                 //$articleCommande->setTvaVente($article['tva']);
  1856.                 $articleCommande->setConditionAchat($article['conditionAchat']);
  1857.                 $articleCommande->setCoefficientConditionnement($article['coefficientConditionnement']);
  1858.                 $articleCommande->setEcocontribution($article['ecocontribution']);
  1859.                 $taxe '';
  1860.                 if (is_object($fournisseur)) {
  1861.                     $taxe $fournisseurService->getTaxe($fournisseur$article['article']);
  1862.                 }
  1863.                 if ( ! is_object($taxe)) {
  1864.                     $taxe $repo_taxe->find(5);
  1865.                 }
  1866.                 if (is_object($taxe)) {
  1867.                     $articleCommande->setTva($taxe->getTaux());
  1868.                     $articleCommande->setTaxe($taxe);
  1869.                 }
  1870.                 foreach ($article['mvtsStock'] as $mvtStock) {
  1871.                     $receptions[$mvtStock->getReception()->getId()] = $mvtStock->getReception();
  1872.                     $articleCommande->addMouvementsStockFF($mvtStock);
  1873.                 }
  1874.                 //Calcul pu ht
  1875.                 //$montantHt = $article['prix'] - ($article['prix'] - $article['prix']*$article['remise'])*$article['remiseSuppl'];
  1876.                 $montantRemise $article['prix'] * $article['remise'] / 100;
  1877.                 $montantHt     $article['prix'] - $montantRemise;
  1878.                 $montantHt     $montantHt - ($article['remiseSuppl'] * $montantHt 100);
  1879.                 //$totalHt = $montantHt * $article['quantite'] / $article['coefficientConditionnement'];
  1880.                 //$totalHt = (($montantHt / $article['coefficientConditionnement']) + floatval($article['ecocontribution']) ) * $article['quantite'];
  1881.                 //$totalHt = ($montantHt + floatval($article['ecocontribution']) + floatval($article['fraisAnnexes'])) * $article['quantite'] / $article['coefficientConditionnement'];
  1882.                 $totalHt = ($montantHt $article['coefficientConditionnement'] + floatval($article['ecocontribution']) + floatval($article['fraisAnnexes'])) * $article['quantite'];
  1883.                 $articleCommande->setTotalHt($totalHt);
  1884.                 //recalcul tva achat/vente
  1885.                 $tva $totalHt floatval($articleCommande->getTva()) / 100;
  1886.                 $tva round($tva2);
  1887.                 $articleCommande->setTvaAchat($tva);
  1888.                 $articleCommande->setTvaVente($tva);
  1889.                 //echo "<div>a totalHtCommande ".$totalHtCommande."</div>";
  1890.                 $totalHtCommande += $totalHt;
  1891.                 $poids           floatval($article['article']->getPoids()) * floatval($article['quantite']);
  1892.                 if ( ! empty($article['prixAchatUnitaireAvecFrais'])) {
  1893.                     $articleCommande->setPrixAchatUnitaireAvecFrais($article['prixAchatUnitaireAvecFrais']);
  1894.                 }
  1895.                 $articleCommande->setAjouterFraisPrixAchat($article['ajouterFraisPrixAchat']);
  1896.                 //echo "<div>b totalHtCommande ".$totalHtCommande."</div>";
  1897.                 $em->persist($articleCommande);
  1898.                 $commande->addArticleCommande($articleCommande);
  1899.             }
  1900.             $fraisPortSupplementaire 0;
  1901.             $fraisFixe               0;
  1902.             $fraisApproche           0;
  1903.             foreach ($receptions as $reception) {
  1904.                 $fraisPortSupplementaire += $reception->getFraisPortSupplementaire();
  1905.                 $fraisFixe               += $reception->getFraisFixe();
  1906.                 $fraisApproche           += $reception->getFraisApproche();
  1907.             }
  1908.             $commande->setFraisPortSupplementaire($fraisPortSupplementaire);
  1909.             $commande->setFraisFixe($fraisFixe);
  1910.             $commande->setFraisApproche($fraisApproche);
  1911.             //Calcul du total de la commande
  1912.             //TestCalcule
  1913.             $commande->setTotal($totalHtCommande);
  1914.             $commande->setTotalPoids($poids);
  1915.             //$commande->setFraisPortSupplementaire($this->get('dtc.fournisseur')->getFraisPort($commande));
  1916.             $em->persist($commande);
  1917.             $em->flush();
  1918.             $commandeService->sauvegarderFacture($commande, [], true);
  1919.         }
  1920.         $em->getFilters()->enable('softdeleteable');
  1921. //$em->flush();
  1922.         if ($count == 1) {
  1923.             $message '1 facture ajoutée!';
  1924.         } else {
  1925.             $message $count.' factures ajoutées!';
  1926.         }
  1927.         $this->addFlash(
  1928.             'notice',
  1929.             $message
  1930.         );
  1931. //Une seule facture -> redirection vers cette facture
  1932.         if (count($commandes) == 1) {
  1933.             //$form = $this->createForm(new CommandeFournisseurType($em), $commande);
  1934.             //return $this->render('GestionComerciale/CommandeFournisseur/ajouter.html.twig', array('commande' => $commande, 'form' => $form->createView(),'errors'=>$errors));
  1935.             $url $this->generateUrl('dtc_facture_fournisseur_modifier', ['id' => $commande->getId()]);
  1936.         } else {
  1937.             $url $this->generateUrl('dtc_factures_fournisseur_liste');
  1938.         }
  1939.         return new JsonResponse(['url' => $url'valide' => '1']);
  1940.     }
  1941.     /**
  1942.      * @Route("/achat/factures", name="dtc_factures_fournisseur_liste")
  1943.      */
  1944.     public function factureListerAction(Request             $request$article ''EntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatable,
  1945.                                         TranslatorInterface $translator
  1946.     ) {
  1947.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  1948.         $tableau_class_cellule[] = [
  1949.             "className" => "visible_export colonne_id",
  1950.             "targets"   => [1],
  1951.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "id"),
  1952.         ];
  1953.         $tableau_class_cellule[] = [
  1954.             "className" => "visible_export colonne_id text-center",
  1955.             "targets"   => [2],
  1956.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "date"),
  1957.         ];
  1958.         $tableau_class_cellule[] = [
  1959.             "className" => "visible_export colonne_id",
  1960.             "targets"   => [3],
  1961.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "reference"),
  1962.         ];
  1963.         $tableau_class_cellule[] = [
  1964.             "className" => "visible_export colonne_id",
  1965.             "targets"   => [4],
  1966.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "fournisseurNumeroFacture"),
  1967.         ];
  1968.         $tableau_class_cellule[] = [
  1969.             "className" => "visible_export colonne_id",
  1970.             "targets"   => [5],
  1971.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "fournisseur"),
  1972.         ];
  1973.         $tableau_class_cellule[] = [
  1974.             "className" => "visible_export colonne_id",
  1975.             "targets"   => [6],
  1976.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "statut"),
  1977.         ];
  1978.         $tableau_class_cellule[] = [
  1979.             "className" => "visible_export colonne_id text-right",
  1980.             "targets"   => [7],
  1981.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class, "totalHT"),
  1982.         ];
  1983.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [8], "visible" => true];
  1984.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(7),"visible"=>$serviceColonneTableau->getColonneUtilisateur(CommandeFournisseur::class,"totalHT"));
  1985.         $this->datatableFacture($request$datatable$translator);
  1986.         $transfertCompta $request->query->get('transfertCompta');
  1987.         if ($transfertCompta == '') {
  1988.             $transfertCompta 0;
  1989.         }
  1990.         $param $request->query->all();
  1991.         $repo_fournisseur $em->getRepository(Fournisseur::class);
  1992.         $fournisseurs     $repo_fournisseur->findBy([], ['libelle' => 'ASC']);
  1993.         if ($article == '') {
  1994.             return $this->render(
  1995.                 'GestionComerciale/CommandeFournisseur/lister-facture.html.twig',
  1996.                 ['parametres' => $param"fournisseurs" => $fournisseurs'tableauClassColonne' => $tableau_class_cellule'transfertCompta' => $transfertCompta]
  1997.             );
  1998.         } else {
  1999.             return $this->render(
  2000.                 'GestionComerciale/CommandeFournisseur/dataTableCommandesF.html.twig',
  2001.                 [
  2002.                     'parametres'          => $param,
  2003.                     "fournisseurs"        => $fournisseurs,
  2004.                     'tableauClassColonne' => $tableau_class_cellule,
  2005.                     'article'             => $article,
  2006.                     'transfertCompta'     => $transfertCompta,
  2007.                 ]
  2008.             );
  2009.         }
  2010.     }
  2011.     /**
  2012.      * set datatable configs
  2013.      *
  2014.      * @return \App\Library\Datatable\Util\Datatable
  2015.      */
  2016.     private function datatableFacture(Request $requestDatatable $datatableTranslatorInterface $translator)
  2017.     {
  2018.         $param           $request->query->all();
  2019.         $transfertCompta $request->query->get('transfertCompta');
  2020.         $datatable->setEntity(CommandeFournisseur::class, "x")
  2021.                   ->setFields(
  2022.                       [
  2023.                           $translator->trans("ID")                      => 'x.id',
  2024.                           $translator->trans("Date")                    => 'x.date',
  2025.                           $translator->trans("Réf")                     => 'x.reference',
  2026.                           $translator->trans("Réf facture fournisseur") => 'x.fournisseurNumeroFacture',
  2027.                           $translator->trans("Fournisseur")             => 'f.libelle',
  2028.                           $translator->trans("Validée")                 => 'x.transfertCompta',
  2029.                           $translator->trans("Total HT")                => 'x.total',
  2030.                           $translator->trans("Actions") => 'x.id',
  2031.                           "_identifier_"                => 'x.id',
  2032.                       ]
  2033.                   )
  2034.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2035.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2036.                   ->setRenderers(
  2037.                       [
  2038.                           => [
  2039.                               'view' => 'FO/DataTable/heure.html.twig',
  2040.                           ],
  2041.                           => [
  2042.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2043.                               'params' => ['edit_route' => 'dtc_facture_fournisseur_modifier'],
  2044.                           ],
  2045.                           => [
  2046.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2047.                               'params' => [
  2048.                                   'edit_route'   => 'dtc_fournisseur_modifier',
  2049.                                   'typeDocument' => 'fournisseur',
  2050.                               ],
  2051.                           ],
  2052.                           => [
  2053.                               'view' => 'FO/DataTable/booleen.html.twig',
  2054.                           ],
  2055.                           /*
  2056.         4 => array(
  2057.         'view' => 'FO/DataTable/statut-commande-fournisseur.html.twig'
  2058.       ),
  2059.       *
  2060.       */
  2061.                           => [
  2062.                               'view' => 'FO/DataTable/total-ht-cf.html.twig',
  2063.                           ],
  2064.                           => [
  2065.                               'view'   => 'FO/DataTable/actions.html.twig',
  2066.                               'params' => [
  2067.                                   'edit_route'         => 'dtc_facture_fournisseur_modifier',
  2068.                                   //'supprimer_route'    => 'dtc_commande_fournisseur_supprimer',
  2069.                                   'objet'              => CommandeFournisseur::class,
  2070.                                   'deplierFournisseur' => true,
  2071.                               ],
  2072.                           ],
  2073.                       ]
  2074.                   )
  2075.                   ->setMultiple(
  2076.                       [
  2077.                           /*
  2078.         'delete' => array(
  2079.         'title' => 'Supprimer',
  2080.         'route' => 'dtc_commande_liste_supprimer'
  2081.       ),
  2082.       *
  2083.       */
  2084.                           'valider' => [
  2085.                               'title' => 'Valider',
  2086.                               'route' => 'dtc_factures_fournisseur_liste_valider',
  2087.                           ],
  2088.                       ]
  2089.                   )
  2090.                   ->setOrder("x.id""desc")
  2091.                   ->setSearch(true)
  2092.                   ->setSearchFields([2345]);
  2093.         $where      '';
  2094.         $parameters = [];
  2095.         $where                        .= 's.ordre IN (:statutCommande)';
  2096.         $parameters['statutCommande'] = [5];
  2097.         /*
  2098.     if($transfertCompta == 1 || $transfertCompta == 0 || $transfertCompta == ''){
  2099.     $where .= ' AND x.transfertCompta = :transfertCompta';
  2100.     if($transfertCompta == '') $transfertCompta = 0;
  2101.     $parameters['transfertCompta'] = $transfertCompta;
  2102.   }
  2103.   */
  2104.         if (array_key_exists('parametres'$param)) {
  2105.             //print_r($param["parametres"]);
  2106.             if (array_key_exists('transfertCompta'$param["parametres"])) {
  2107.                 $transfertCompta $param["parametres"]["transfertCompta"];
  2108.                 if ($transfertCompta == || $transfertCompta == || $transfertCompta == '') {
  2109.                     $where .= ' AND x.transfertCompta = :transfertCompta';
  2110.                     if ($transfertCompta == '') {
  2111.                         $transfertCompta 0;
  2112.                     }
  2113.                     $parameters['transfertCompta'] = $transfertCompta;
  2114.                 }
  2115.             }
  2116.             if (array_key_exists('fournisseur'$param["parametres"]) and $param["parametres"]["fournisseur"] > 0) {
  2117.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2118.                 $parameters["fournisseur"] = $param["parametres"]["fournisseur"];
  2119.                 if ($where != "") {
  2120.                     $where .= " AND ";
  2121.                 }
  2122.                 $where .= "f.id = :fournisseur";
  2123.             }
  2124.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  2125.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  2126.                 $param["parametres"]["date_debut"]->setTime(000000);
  2127.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  2128.                 if ($where != "") {
  2129.                     $where .= " AND ";
  2130.                 }
  2131.                 $where .= "x.date >= :date_debut";
  2132.             }
  2133.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  2134.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  2135.                 $param["parametres"]["date_fin"]->setTime(235959);
  2136.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  2137.                 if ($where != "") {
  2138.                     $where .= " AND ";
  2139.                 }
  2140.                 $where .= "x.date <= :date_fin";
  2141.             }
  2142.         } else {
  2143.             $where                         .= ' AND x.transfertCompta = :transfertCompta';
  2144.             $parameters['transfertCompta'] = 0;
  2145.         }
  2146.         $datatable->setWhere($where$parameters);
  2147.         //$datatable->setSearchFields(array(0,2));
  2148.         return $datatable;
  2149.     }
  2150.     /**
  2151.      * @Route("/achat/factures/grid", name="dtc_factures_fournisseur_liste_grid")
  2152.      */
  2153.     public function factureGridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  2154.     {
  2155.         return $this->datatableFacture($request$datatable$translator)->execute();
  2156.     }
  2157.     /**
  2158.      * @Route("/achat/facture/modifier/{id}", name="dtc_facture_fournisseur_modifier")
  2159.      */
  2160.     public function modifierFactureAction(Request                    $requestCommandeFournisseur $commandeEntityManagerInterface $em
  2161.                                           CommandeFournisseurService $commandeServiceTranslatorInterface $translatorValidatorInterface $validator
  2162.     ) {
  2163.         set_time_limit(600);
  2164.         $user $this->getUser();
  2165.         if ( ! is_object($commande->getUtilisateur())) {
  2166.             $commande->setUtilisateur($user);
  2167.         }
  2168.         $modal      $request->query->get('modal');
  2169.         $modalWidth 800;
  2170.         $form $this->createForm(FactureFournisseurType::class, $commande, ['validation_groups' => 'facture']);
  2171.         $est_editable       $commandeService->estEditable($commande);
  2172.         $est_receptionnable $commandeService->estReceptionnable($commande);
  2173.         $est_annulable      $commandeService->factureEstAnnulable($commande);
  2174.         $taxes $em->getRepository(Taxe::class)->findAll();
  2175.         $errors "";
  2176.         $errors $validator->validate($commandenull, ['facture']);
  2177.         $form->handleRequest($request);
  2178.         //echo 'test';
  2179.         if ($form->isSubmitted()) {
  2180.             //echo 'test 2';
  2181.             $droit $this->isGranted(EntityVoter::UPDATECommandeFournisseur::class);
  2182.             if ( ! $droit) {
  2183.                 return $this->redirectToRoute('dtc_commande_fournisseur_modifier', ["id" => $commande->getId()]);
  2184.             }
  2185.             if ($form->isValid()) {
  2186.                 if ($request->request->get('annuler') != '') {
  2187.                     $commandeService->annulerFactureCommande($commande);
  2188.                     $this->addFlash(
  2189.                         'notice',
  2190.                         $translator->trans('Facture annulée avec succès !')
  2191.                     );
  2192.                     return $this->redirectToRoute('dtc_factures_fournisseur_liste', []);
  2193.                 }
  2194.                 $em->persist($commande);
  2195.                 $em->flush();
  2196.                 $articles = [
  2197.                     'valider'                    => $request->request->get('valider'),
  2198.                     'ids'                        => $request->request->get('ids'),
  2199.                     'commentaire'                => $request->request->get('commentaire'),
  2200.                     'libelles'                   => $request->request->get('libelles'),
  2201.                     'tva'                        => $request->request->get('tva'),
  2202.                     'idsTva'                     => $request->request->get('idsTva'),
  2203.                     'remise'                     => $request->request->get('remiseValue'),
  2204.                     'txRemise'                   => $request->request->get('txRemise'),
  2205.                     'remiseSuppl'                => $request->request->get('remiseSuppl'),
  2206.                     'prix'                       => $request->request->get('prix'),
  2207.                     'qte'                        => $request->request->get('qte'),
  2208.                     'rals'                       => $request->request->get('rals'),
  2209.                     'conditionsAchat'            => $request->request->get('conditionsAchat'),
  2210.                     'articlesCommande'           => $request->request->get('articlesCommande'),
  2211.                     'actionMajCondHA'            => $request->request->get('actionMaj'),
  2212.                     'mvtsStock'                  => $request->request->get('mvtsStock'),
  2213.                     'montantHT'                  => $request->request->get('montantHT'),
  2214.                     'montantTVA'                 => $request->request->get('montantTVA'),
  2215.                     'PrixAchatUnitaireAvecFrais' => $request->request->get('PrixAchatUnitaireAvecFrais'),
  2216.                     'ajouterFraisPrixAchat'      => $request->request->get('ajouterFraisPrixAchat'),
  2217.                     'choixArticles'              => $request->request->get('choixArticles'),
  2218.                     'fraisAnnexes'               => $request->request->get('fraisAnnexes'),
  2219.                     'ecocontribution'            => $request->request->get('ecocontribution'),
  2220.                 ];
  2221.                 //print_r($request->request->get('mvtsStock'));
  2222.                 //$articleCommande->addMouvementsStockFF($mvtStock);
  2223.                 $valeurs = ["articles" => $articles'typeDocument' => 'commande'];
  2224.                 if ($request->request->get('action') == 'valider') {
  2225.                     $valeurs['valider'] = true;
  2226.                 }
  2227.                 if ($request->request->get('action') == 'devalider') {
  2228.                     $valeurs['devalider'] = true;
  2229.                 }
  2230.                 if ($commande->getDateTransfertCompta() === null) {
  2231.                     $commandeService->sauvegarderFacture($commande$valeurs);
  2232.                 }
  2233.                 $this->addFlash(
  2234.                     'notice',
  2235.                     $translator->trans('Facture sauvegardée avec succès !')
  2236.                 );
  2237.                 return $this->redirectToRoute('dtc_facture_fournisseur_modifier', ["id" => $commande->getId()]);
  2238.             } else {
  2239.                 $errors $validator->validate($commandenull, ['facture']);
  2240.             }
  2241.         }
  2242.         if ($modal == 1) {
  2243.             $template    'GestionComerciale/CommandeFournisseur/facture-modal.html.twig';
  2244.             $titre_modal $commande->getReference();
  2245.             $rendu       $this->renderView($template, [
  2246.                 'form'               => $form->createView(),
  2247.                 'errors'             => $errors,
  2248.                 'commande'           => $commande,
  2249.                 'modalWidth'         => $modalWidth,
  2250.                 'est_editable'       => $est_editable,
  2251.                 'est_receptionnable' => $est_receptionnable,
  2252.                 'est_annulable'      => $est_annulable,
  2253.                 'taxes'              => $taxes,
  2254.             ]);
  2255.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2256.         } else {
  2257.             $template 'GestionComerciale/CommandeFournisseur/facture.html.twig';
  2258.             return $this->render($template, [
  2259.                 'form'               => $form->createView(),
  2260.                 'errors'             => $errors,
  2261.                 'commande'           => $commande,
  2262.                 'modalWidth'         => $modalWidth,
  2263.                 'est_editable'       => $est_editable,
  2264.                 'est_receptionnable' => $est_receptionnable,
  2265.                 'est_annulable'      => $est_annulable,
  2266.                 'taxes'              => $taxes,
  2267.             ]);
  2268.         }
  2269.     }
  2270.     /**
  2271.      * @Route("/achat/commande/pdf/{id}", name="dtc_commande_fournisseur_pdf")
  2272.      */
  2273.     public function pdfCommandeAction(Request $requestCommandeFournisseur $commande$retour trueEntityManagerInterface $emPdf $snappy)
  2274.     {
  2275.         $societe    $em->getRepository(Societe::class)->find(1);
  2276.         $date_Y     date("Y");
  2277.         $date_M     date("m");
  2278.         $date_D     date("d");
  2279.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  2280.         $chemin_pdf 'PDF/COMMANDES-ACHAT/'.$date.'/CMDE-'.$commande->getReference().'.pdf';
  2281.         if (file_exists($chemin_pdf)) {
  2282.             unlink($chemin_pdf);
  2283.         }
  2284.         //$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', array('societe'  => $societe));
  2285.         $footer $this->renderView('FO/PDF/footer_commande_fournisseur_pdf_pagination_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  2286.         $header $this->renderView('FO/PDF/header_commande_fournisseur_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  2287.         $snappy->setOption('header-html'$header);
  2288.         $snappy->setOption('footer-html'$footer);
  2289.         $snappy->setOption('header-spacing'"4");
  2290.         $snappy->setOption('footer-spacing'"3");
  2291.         $snappy->setOption('disable-smart-shrinking'true);
  2292.         //$snappy->setOption('print-media-type', false );
  2293.         $snappy->setOption('page-height'"297");
  2294.         $snappy->setOption('page-width'"210");
  2295.         $articlesByPrestation = [];
  2296.         if (count($commande->getFabrications()) > 0) {
  2297.             foreach ($commande->getFabrications() as $fabrication) {
  2298.                 foreach ($fabrication->getArticleCommande() as $ac) {
  2299.                     if ($ac->getArticle()->getPrestation() == 1) {
  2300.                         $key $ac->getArticle()->getId();
  2301.                     }
  2302.                 }
  2303.                 if ($key != '') {
  2304.                     foreach ($fabrication->getArticleCommande() as $ac) {
  2305.                         if ($ac->getArticle()->getPrestation() != 1) {
  2306.                             $articlesByPrestation[$key][] = $ac;
  2307.                         }
  2308.                     }
  2309.                 }
  2310.             }
  2311.         }
  2312.         $snappy->generateFromHtml(
  2313.             $this->renderView(
  2314.                 'GestionComerciale/CommandeFournisseur/template_pdf.html.twig',
  2315.                 [
  2316.                     'commande'             => $commande,
  2317.                     'societe'              => $societe,
  2318.                     'articlesByPrestation' => $articlesByPrestation,
  2319.                 ]
  2320.             ),
  2321.             $chemin_pdf
  2322.         );
  2323.         /*
  2324.   $service = $this->get('dtc.commande');
  2325.   $retour = $service->pdf($commande);
  2326.   $chemin_pdf = $retour['chemin'];
  2327.   */
  2328.         if ($retour == true) {
  2329.             return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  2330.                 'objet'      => $commande,
  2331.                 'chemin_pdf' => '/'.$chemin_pdf,
  2332.                 'visualiser' => $request->query->get('visualiser'),
  2333.             ]);
  2334.         }
  2335.     }
  2336.     /**
  2337.      * @Route("/achat/facture/pdf/{id}", name="dtc_facture_fournisseur_pdf")
  2338.      */
  2339.     public function pdfFactureAction(Request             $requestCommandeFournisseur $commande$retour trueEntityManagerInterface $em,
  2340.                                      TranslatorInterface $translatorValidatorInterface $validatorPdf $snappy
  2341.     ) {
  2342.         $societe    $em->getRepository(Societe::class)->find(1);
  2343.         $date_Y     date("Y");
  2344.         $date_M     date("m");
  2345.         $date_D     date("d");
  2346.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  2347.         $chemin_pdf 'PDF/FACTURE-ACHAT/'.$date.'/C'.$commande->getReference().'.pdf';
  2348.         if (file_exists($chemin_pdf)) {
  2349.             unlink($chemin_pdf);
  2350.         }
  2351.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  2352.         $header $this->renderView('FO/PDF/header_commande_fournisseur_facture_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  2353.         $snappy->setOption('header-html'$header);
  2354.         $snappy->setOption('footer-html'$footer);
  2355.         $snappy->setOption('margin-bottom'"10");
  2356.         $articlesByPrestation = [];
  2357.         if (count($commande->getFabrications()) > 0) {
  2358.             foreach ($commande->getFabrications() as $fabrication) {
  2359.                 foreach ($fabrication->getArticleCommande() as $ac) {
  2360.                     if ($ac->getArticle()->getPrestation() == 1) {
  2361.                         $key $ac->getArticle()->getId();
  2362.                     }
  2363.                 }
  2364.                 if ($key != '') {
  2365.                     foreach ($fabrication->getArticleCommande() as $ac) {
  2366.                         if ($ac->getArticle()->getPrestation() != 1) {
  2367.                             $articlesByPrestation[$key][] = $ac;
  2368.                         }
  2369.                     }
  2370.                 }
  2371.             }
  2372.         }
  2373.         $snappy->generateFromHtml(
  2374.             $this->renderView(
  2375.                 'GestionComerciale/CommandeFournisseur/template_facture_pdf.html.twig',
  2376.                 [
  2377.                     'commande'             => $commande,
  2378.                     'societe'              => $societe,
  2379.                     'articlesByPrestation' => $articlesByPrestation,
  2380.                 ]
  2381.             ),
  2382.             $chemin_pdf
  2383.         );
  2384.         /*
  2385.   $service = $this->get('dtc.commande');
  2386.   $retour = $service->pdf($commande);
  2387.   $chemin_pdf = $retour['chemin'];
  2388.   */
  2389.         if ($retour == true) {
  2390.             return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  2391.                 'objet'      => $commande,
  2392.                 'chemin_pdf' => '/'.$chemin_pdf,
  2393.                 'visualiser' => $request->query->get('visualiser'),
  2394.             ]);
  2395.         }
  2396.     }
  2397.     /**
  2398.      * @Route("/achat/commande/{id}/email/envoyer", name="dtc_commande_fournisseur_email_envoyer")
  2399.      */
  2400.     public function emailEnvoyerAction(Request         $requestCommandeFournisseur $commandeEntityManagerInterface $emTranslatorInterface $translator,
  2401.                                        CommandeService $commande_serviceCommandeFournisseurService $commandeFournisseurServiceEmailService $emailService,
  2402.                                        FileUploader    $fileUploader
  2403.     ) {
  2404.         $titre_modal $translator->trans("Nouvel e-mail");
  2405.         $errors      '';
  2406.         if ($request->isMethod('POST')) {
  2407.             $post       $request->request->all();
  2408.             $expediteur $post["expediteur"];
  2409.             $donnees = [
  2410.                 'titre'         => $request->request->get('titre'),
  2411.                 'nomFichier'    => $request->request->get('nomFichier'),
  2412.                 'cheminPDF'     => $request->request->get('cheminPDF'),
  2413.                 'message'       => $request->request->get('message'),
  2414.                 'destinataires' => $request->request->get('destinataires'),
  2415.                 'expediteur'    => $expediteur,
  2416.                 'images'        => $request->request->get('images'),
  2417.                 'documents'     => $request->request->get('documents'),
  2418.             ];
  2419.             $errors $emailService->envoyerEmailFournisseur($commande$donnees);
  2420.             if ($errors == '') {
  2421.                 $this->addFlash('notice'$translator->trans('Email envoyé avec succès !'));
  2422.             } else {
  2423.                 $this->addFlash('warning'$errors);
  2424.             }
  2425.             $url $request->request->get('url');
  2426.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'errors' => $errors]);
  2427.         } else {
  2428.             $fileUploader->removeFiles(['folder' => 'emails/tmp/'.$commande->getId()]);
  2429.             $retour        $commandeFournisseurService->pdf($commande);
  2430.             $emails        = [];
  2431.             $emailsOrigine "";
  2432.             if ($commande->getFournisseur()->getEmail() != "") {
  2433.                 $emails = [$commande->getFournisseur()->getEmail()];
  2434.             }
  2435.             $emailsPD null;
  2436.             if (is_object($commande->getFournisseur()->getContacts())) {
  2437.                 foreach ($commande->getFournisseur()->getContacts() as $contact) {
  2438.                     if ($contact->getDefaut() == true) {
  2439.                         $emailsPD[] = $contact->getEmail();
  2440.                     } else {
  2441.                         $emails[] = $contact->getEmail();
  2442.                     }
  2443.                 }
  2444.             } else {
  2445.                 foreach ($commande->getFournisseur()->getContacts() as $contact) {
  2446.                     $emails[] = $contact->getEmail();
  2447.                 }
  2448.             }
  2449.             $repoParametrage   $em->getRepository(Parametrage::class);
  2450.             $Parametrage       $repoParametrage->find(1);
  2451.             $texteMailCommande "";
  2452.             $texteMailCommande $Parametrage->getTexteMailCommandeFournisseur();
  2453.             $societe $em->getRepository(Societe::class)->find(1);
  2454.             $categorieEmail 10;
  2455.             $modelesEmail   = [];
  2456.             if ( ! empty($categorieEmail)) {
  2457.                 $categorieEmailObjet $em->getRepository(CategorieEmail::class)->find($categorieEmail);
  2458.                 if (is_object($categorieEmailObjet)) {
  2459.                     $modelesEmail $em->getRepository(Modele::class)->findBy([
  2460.                                                                                   'sousCategorie'   => $categorieEmailObjet,
  2461.                                                                                   'statut'          => true,
  2462.                                                                                   'dateSuppression' => null,
  2463.                                                                               ]);
  2464.                 }
  2465.             }
  2466.             if (count($modelesEmail) == 0) {
  2467.                 $modelesEmail $em->getRepository(Modele::class)->findBy(['statut' => true]);
  2468.             }
  2469.             $modelesEmailRendu = [];
  2470.             foreach ($modelesEmail as $modeleEmail) {
  2471.                 $sujet   $commande_service->replaceTag($modeleEmail->getSujet(), ['commandeFournisseur' => $commande]);
  2472.                 $message $commande_service->replaceTag($modeleEmail->getMessage(), ['commandeFournisseur' => $commande]);
  2473.                 $expediteur $modeleEmail->getExpediteur();
  2474.                 if ( ! filter_var($expediteurFILTER_VALIDATE_EMAIL)) {
  2475.                     $expediteur $societe->getEmail();
  2476.                 }
  2477.                 $modelesEmailRendu[$modeleEmail->getSousCategorie()->getCategorieParent()->getId()][$modeleEmail->getSousCategorie()->getId()][] = [
  2478.                     'modeleEmail' => $modeleEmail,
  2479.                     'sujet'       => $sujet,
  2480.                     'message'     => $message,
  2481.                     'expediteur'  => $expediteur,
  2482.                 ];
  2483.             }
  2484.             if ( ! empty($get["origine"]) && $get["origine"] != "") {
  2485.                 $repoHistoriqueMail $em->getRepository(HistoriqueCommande::class);
  2486.                 $historiqueMail     $repoHistoriqueMail->find($get["origine"]);
  2487.                 if (is_object($historiqueMail)) {
  2488.                     $texteMailCommande $historiqueMail->getMessageMail();
  2489.                     $sujetMail         $historiqueMail->getSujetMail();
  2490.                     $emailsOrigine     $historiqueMail->getDestinataireMail();
  2491.                 }
  2492.             }
  2493.             $rendu $this->renderView('GestionComerciale/CommandeFournisseur/email.html.twig', [
  2494.                 'errors'            => $errors,
  2495.                 'commande'          => $commande,
  2496.                 'nomFichier'        => $retour['nom_fichier'],
  2497.                 'type'              => $retour['type'],
  2498.                 'cheminPDF'         => $retour['chemin'],
  2499.                 'url'               => $retour['url'],
  2500.                 'emails'            => $emails,
  2501.                 'emailsPD'          => $emailsPD,
  2502.                 'texteMailCommande' => $texteMailCommande,
  2503.                 'modelesEmail'      => $modelesEmailRendu,
  2504.                 'emailsOrigine'     => $emailsOrigine,
  2505.             ]);
  2506.             return new JsonResponse(
  2507.                 ['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal"width" => 1000]
  2508.             );
  2509.         }
  2510.     }
  2511.     /**
  2512.      * @Route("/achat/factures/validation-multiple", name="dtc_factures_fournisseur_liste_valider")
  2513.      */
  2514.     public function factureValiderMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  2515.     {
  2516.         $data $request->get('dataTables');
  2517.         $ids  $data['actions'];
  2518.         $repo $em->getRepository(CommandeFournisseur::class);
  2519.         for ($i 0$i count($ids); $i++) {
  2520.             $v $repo->find($ids[$i]);
  2521.             if (is_object($v)) {
  2522.                 $v->setTransfertCompta(true);
  2523.                 $em->persist($v);
  2524.             }
  2525.         }
  2526.         $em->flush();
  2527.         $this->addFlash(
  2528.             'notice',
  2529.             $translator->trans('Factures validées avec succès !')
  2530.         );
  2531.         $url $this->generateUrl('dtc_factures_fournisseur_liste', []);
  2532.         return new JsonResponse(['url' => $url'valide' => '1']);
  2533.     }
  2534.     /**
  2535.      * @Route("/achat/suggestion/export/", name="dtc_suggestion_commande_fournisseur_export")
  2536.      */
  2537.     public function suggestionExportAction(Request $requestEntityManagerInterface $emPdf $snappy)
  2538.     {
  2539.         $repo_article     $em->getRepository(Article::class);
  2540.         $repoFournisseurs $em->getRepository(Fournisseur::class);
  2541.         $dataTables    $request->request->get('dataTables');
  2542.         $fournisseurs  $request->request->get('fournisseur');
  2543.         $fournisseurId $fournisseurs[$dataTables['actions'][0]];
  2544.         $fournisseur   $repoFournisseurs->find($fournisseurId);
  2545.         /*
  2546.   $dataTables = $request->request->get('dataTables');
  2547.   $tempArray = array('ids'=>$dataTables['actions']);
  2548.   $id = $tempArray['ids'][0];
  2549.   if($id != "")
  2550.   {
  2551.   $fournisseurIds = $request->request->get('fournisseur');
  2552.   if ($fournisseurIds[$id] != '') {
  2553.   $repoFournisseurs = $em->getRepository('DTCFournisseursBundle:Fournisseur');
  2554.   $fournisseur = $repoFournisseurs->find($fournisseurIds[$id]);
  2555.   if (is_object($fournisseur)) {
  2556.   if(is_object($fournisseur->getModereglement())) {
  2557.   $commande->setModeReglement($fournisseur->getModereglement());
  2558. }
  2559. }
  2560. }
  2561. }
  2562. *
  2563. */
  2564.         $articles = [];
  2565.         foreach ($dataTables['actions'] as $articleId) {
  2566.             $article $repo_article->find($articleId);
  2567.             if (is_object($article)) {
  2568.                 $articles[] = $article;
  2569.             }
  2570.         }
  2571.         $chemin_pdf 'PDF/SUGGESTIONS/'.time().'.pdf';
  2572.         if (file_exists($chemin_pdf)) {
  2573.             unlink($chemin_pdf);
  2574.         }
  2575.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', []);
  2576. //$header = $this->renderView('FO/PDF/header_suggestion_pdf.html.twig', array('societe'  => $societe,'commande'  => $commande));
  2577.         $header '';
  2578.         $snappy->setOption('header-html'$header);
  2579.         $snappy->setOption('footer-html'$footer);
  2580.         $snappy->setOption('margin-bottom'"10");
  2581.         $snappy->setOption('orientation''Landscape');
  2582.         $snappy->generateFromHtml(
  2583.             $this->renderView(
  2584.                 'GestionComerciale/CommandeFournisseur/suggestion-export-pdf.html.twig',
  2585.                 [
  2586.                     'articles'    => $articles,
  2587.                     'fournisseur' => $fournisseur,
  2588.                     'date'        => new \DateTime,
  2589.                 ]
  2590.             ),
  2591.             $chemin_pdf
  2592.         );
  2593.         return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  2594.     }
  2595.     /**
  2596.      * @Route("/achat/commande/accuse/{id}", name="dtc_commande_fournisseur_accuse")
  2597.      */
  2598.     public function changeAccuseAction(Request $requestCommandeFournisseur $commandeFournisseurEntityManagerInterface $em)
  2599.     {
  2600.         if ($commandeFournisseur->getAccuseReception() == 1) {
  2601.             $commandeFournisseur->setAccuseReception(0);
  2602.         } else {
  2603.             $commandeFournisseur->setAccuseReception(1);
  2604.         }
  2605.         $em->persist($commandeFournisseur);
  2606.         $em->flush();
  2607.         $em->refresh($commandeFournisseur);
  2608.         $headers = [
  2609.             'Content-Type'                 => 'application/json',
  2610.             'Access-Control-Allow-Origin'  => '*',
  2611.             'Access-Control-Allow-Methods' => 'POST',
  2612.         ];
  2613.         return new JsonResponse(['data' => '1''id_datatable' => 'dta-commandes-fournisseur']);
  2614.     }
  2615.     private function datatableCarnetCommande3($fournisseur$selectReapproRequest $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  2616.     {
  2617.         $conn $em->getConnection();
  2618.         $conn->getConfiguration()->setSQLLogger(null);
  2619.         $param      $request->query->all();
  2620.         $parametres = [];
  2621.         if ( ! array_key_exists('parametres'$param)) {
  2622.             $param["parametres"] = $param;
  2623.         }
  2624.         $datatable->setEntity(Article::class, "p")
  2625.                   ->setFields(
  2626.                       [
  2627.                           $translator->trans("ID")           => 'p.id',
  2628.                           $translator->trans("    Réf")      => 'p.reference',
  2629.                           $translator->trans("Réf fourn")    => 'cha.referenceFournisseur',
  2630.                           $translator->trans("Libellé")      => 'p.libelle',
  2631.                           //$translator->trans("Fournisseur") =>  'f.libelle',//'p.id',
  2632.                           //$translator->trans("Clients") =>  'p.id',
  2633.                           $translator->trans("Qté mini")     => 'p.seuilMiniCommandeFournisseur',
  2634.                           $translator->trans("Qté maxi")     => 'p.seuilMaxiCommandeFournisseur',
  2635.                           $translator->trans("Stock")        => 'p.stock',
  2636.                           $translator->trans("RAL client")   => 'p.stockReserve',
  2637.                           $translator->trans("Reserve fab.") => 'p.stockReserveFabrication',
  2638.                           $translator->trans("RAL fourn.")   => 'p.ralFournisseur',
  2639.                           $translator->trans("Qté")          => 'p.id',
  2640.                           $translator->trans("PU HT")        => 'p.prixBase',
  2641.                           $translator->trans("CUMP")         => 'p.cpump',
  2642.                           //$translator->trans("Type Réappro") =>  'p.id',
  2643.                           //$translator->trans("Art. int./ext.") =>  'p.produitInterne',
  2644.                           /*
  2645.      $translator->trans("Actions") =>  'p.id',
  2646.       *
  2647.       */
  2648.                           "_identifier_"                     => 'p.id',
  2649.                       ]
  2650.                   )
  2651.             //->addJoin('p.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2652.             //->addJoin('ac.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2653.                   ->addJoin('p.conditionsAchat''cha'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2654.                   ->addJoin('p.fournisseurDefaut''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  2655.                   ->setRenderers(
  2656.                       [
  2657.                           1  => [
  2658.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  2659.                               'params' => ['edit_route' => 'dtc_article_modifier'],
  2660.                           ],
  2661.                           2  => [
  2662.                               'view'   => 'FO/DataTable/reference_fournisseur.html.twig',
  2663.                               'params' => [],
  2664.                           ],
  2665.                           /*
  2666.         4 => array(
  2667.         'view' => 'FOBundle:DataTable:choix_fournisseur_2.1.html.twig'//'DTCFO/DataTable/choix_fournisseur_controller.html.twig'
  2668.       ),
  2669.       5 => array(
  2670.       'view' => 'FO/DataTable/clients2.html.twig'
  2671.     ),
  2672.     */
  2673.                           4  => [
  2674.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  2675.                               'params' => ['class' => 'text-center'],
  2676.                           ],
  2677.                           5  => [
  2678.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  2679.                               'params' => ['class' => 'text-center'],
  2680.                           ],
  2681.                           6  => [
  2682.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  2683.                               'params' => ['class' => 'text-center'],
  2684.                           ],
  2685.                           7  => [
  2686.                               'view'   => 'FO/DataTable/ral.html.twig',
  2687.                               'params' => ['class' => 'text-center'],
  2688.                           ],
  2689.                           8  => [
  2690.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  2691.                               'params' => ['class' => 'text-center'],
  2692.                           ],
  2693.                           9  => [
  2694.                               'view'   => 'FO/DataTable/ajout_class_number.html.twig',
  2695.                               'params' => ['class' => 'text-center'],
  2696.                           ],
  2697.                           10 => [
  2698.                               'view' => 'FO/DataTable/qte_conseillee2.html.twig',
  2699.                           ],
  2700.                           11 => [
  2701.                               //'view' => 'FO/DataTable/prix.html.twig'
  2702.                               'view' => 'FO/DataTable/prix_condition_achat.html.twig',
  2703.                           ],
  2704.                           12 => [
  2705.                               'view' => 'FO/DataTable/prix.html.twig',
  2706.                           ],
  2707.                           /*
  2708.     15 => array(
  2709.     'view' => 'FO/DataTable/type_reappro_2.html.twig'
  2710.   ),
  2711.   */
  2712.                           /*
  2713.   14 => array(
  2714.   'view' => 'FO/DataTable/type_reappro_int_ext_2.html.twig'
  2715. ),
  2716. *
  2717. */
  2718.                           /*
  2719. 12 => array(
  2720. 'view' => 'FO/DataTable/actions.html.twig',
  2721. 'params' => array(
  2722. 'edit_route'    => 'dtc_commande_fournisseur_modifier',
  2723. 'supprimer_route'    => 'dtc_commande_fournisseur_supprimer',
  2724. 'objet'    => 'DTCGestionComercialeBundle:CommandeFournisseur',
  2725. ),
  2726. ),
  2727. *
  2728. */
  2729.                       ]
  2730.                   )
  2731.                   ->setGroupBy('p.id')
  2732.                   ->setMultiple(
  2733.                       [
  2734.                           'commande' => [
  2735.                               'title' => 'Commander',
  2736.                               'route' => 'dtc_commande_fournisseur_ajouter',
  2737.                           ],
  2738.                       ]
  2739.                   )
  2740.                   ->setSearch(true)
  2741.                   ->setSearchFields([1234]);
  2742.         $where "(p.aSuggerer = 1 and (p.est_commentaire = 0 or p.est_commentaire is NULL) and (p.divers is null or p.divers = 0 or (p.divers = 1 and p.stock >= 0 and p.stockReserve > 0)))";
  2743.         $where .= " and (p.arretGamme IS NULL or p.arretGamme = 0)";
  2744.         $where .= ' AND f.id = '.$fournisseur;
  2745.         //$where .= "and f.id != 132 ";
  2746.         //$where = 'p.aCommander = 1 and p.produitInterne != 1 and p.virtuel != 1 and p.consigne != 1 ';
  2747.         /*
  2748.   if ($selectReappro == 'ral')
  2749.   $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 ';
  2750.   if ($selectReappro == 'reappro')
  2751.   $where .= ' and p.stockReserve = 0 ';
  2752.   if ($selectReappro == 'fabrication')
  2753.   $where .= ' and p.stockReserveFabrication > 0 ';
  2754.   */
  2755.         switch ($selectReappro) {
  2756.             case 'ral':
  2757.                 $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 ';
  2758.                 break;
  2759.             case 'ralP':
  2760.                 $where .= ' and (COALESCE(p.stockReserve, 0) - COALESCE(p.stockReserveFabrication, 0)) > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0) - COALESCE(p.stockReserve, 0)) < 0 ';
  2761.                 break;
  2762.             case 'reappro':
  2763.                 $where .= ' and COALESCE(p.seuilMiniCommandeFournisseur, 0) > 0 and COALESCE(p.seuilMaxiCommandeFournisseur, 0) > 0 ';
  2764.                 break;
  2765.             case 'reapproP':
  2766.                 $where .= ' and COALESCE(p.seuilMiniCommandeFournisseur, 0) > 0 and COALESCE(p.seuilMaxiCommandeFournisseur, 0) > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0)) < COALESCE(p.seuilMaxiCommandeFournisseur, 0)';
  2767.                 break;
  2768.             case 'fabrication':
  2769.                 $where .= ' and p.stockReserveFabrication > 0 ';
  2770.                 break;
  2771.             case 'fabricationP':
  2772.                 $where .= ' and p.stockReserveFabrication > 0 and (COALESCE(p.stock, 0) + COALESCE(p.ralFournisseur, 0) - COALESCE(p.stockReserve, 0)) < 0 ';
  2773.                 break;
  2774.             default:
  2775.                 break;
  2776.         }
  2777.         if ( ! empty($param['parametres']['articleAexclure'])) {
  2778.             $where                         .= " AND p.id NOT IN (:articleAexclure)";
  2779.             $parametres['articleAexclure'] = $param['parametres']['articleAexclure'];
  2780.         }
  2781.         if (array_key_exists('categorie_article'$param['parametres']) and $param['parametres']['categorie_article'] != "") {
  2782.             $datatable->addJoin('p.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2783.             $datatable->addJoin('ac.categorie''cat'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2784.             $where                   .= " AND cat.id = :categorie";
  2785.             $parametres['categorie'] = $param['parametres']['categorie_article'];
  2786.             if (array_key_exists('sous_categorie_article'$param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
  2787.                 $datatable->addJoin('p.articleCategorie''ac2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2788.                 $datatable->addJoin('ac2.categorie''cat2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2789.                 $where                    .= " AND cat2.id = :categorie2";
  2790.                 $parametres['categorie2'] = $param['parametres']['sous_categorie_article'];
  2791.             }
  2792.             if (array_key_exists('sous_sous_categorie_article'$param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
  2793.                 $datatable->addJoin('p.articleCategorie''ac3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2794.                 $datatable->addJoin('ac3.categorie''cat3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2795.                 $where .= " AND cat3.id = ".$param['parametres']['sous_sous_categorie_article'];
  2796.             }
  2797.         }
  2798.         if (array_key_exists('marque'$param['parametres']) and $param['parametres']['marque'] != "") {
  2799.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2800.             $where                .= " AND p.marque = :marque";
  2801.             $parametres['marque'] = $param['parametres']['marque'];
  2802.         }
  2803.         if (array_key_exists('type'$param['parametres']) and $param['parametres']['type'] != "") {
  2804.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  2805.             $where              .= " AND p.type = :type";
  2806.             $parametres['type'] = $param['parametres']['type'];
  2807.         }
  2808.         $datatable->setWhere($where$parametres)
  2809.                   ->setOrder("p.reference""asc");
  2810.         //$datatable->getQueryBuilder()->setDoctrineQueryBuilder($query);
  2811.         return $datatable;
  2812.     }
  2813.     /**
  2814.      * @Route("/achat/suggestion/{fournisseur}", name="dtc_commande_fournisseur_suggestion")
  2815.      */
  2816.     public function suggestionAction(Request             $requestFournisseur $fournisseurColonneTableauService $serviceColonneTableauEntityManagerInterface $emDatatable $datatable,
  2817.                                      TranslatorInterface $translator
  2818.     ) {
  2819.         $errors        '';
  2820.         $selectReappro $request->request->get('selectReappro');
  2821.         // TODO Change this
  2822.         $colonneUtilisateur      "DTCGestionComercialeBundle:SuggestionCommandeFournisseur";
  2823.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false"searchable" => false];
  2824.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"id")];
  2825.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [2], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"reference")];
  2826.         $tableau_class_cellule[] = [
  2827.             "className" => "colonne_id",
  2828.             "targets"   => [3],
  2829.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"referenceFournisseur"),
  2830.         ];
  2831.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [4], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"libelle")];
  2832.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur,"fournisseur"));
  2833.         //$tableau_class_cellule[]=array("className"=>"colonne_id ","targets"=>array(6),"visible"=>$serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur,"client"));
  2834.         $tableau_class_cellule[] = ["className" => "colonne_id w200""targets" => [5], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"qteMini")];
  2835.         $tableau_class_cellule[] = ["className" => "colonne_id w200""targets" => [6], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"qteMaxi")];
  2836.         $tableau_class_cellule[] = ["className" => "colonne_id w200""targets" => [7], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"stock")];
  2837.         $tableau_class_cellule[] = [
  2838.             "className" => "colonne_id w300",
  2839.             "targets"   => [8],
  2840.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"ralClient"),
  2841.         ];
  2842.         $tableau_class_cellule[] = [
  2843.             "className" => "colonne_id w300",
  2844.             "targets"   => [9],
  2845.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"stockReserveFabrication"),
  2846.         ];
  2847.         $tableau_class_cellule[] = [
  2848.             "className" => "colonne_id w300",
  2849.             "targets"   => [10],
  2850.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"ralFournisseur"),
  2851.         ];
  2852.         $tableau_class_cellule[] = [
  2853.             "className" => "colonne_id w200 qte",
  2854.             "targets"   => [11],
  2855.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"qte"),
  2856.         ];
  2857.         $tableau_class_cellule[] = [
  2858.             "className" => "colonne_id w200 prixHT",
  2859.             "targets"   => [12],
  2860.             "visible"   => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"prixHT"),
  2861.         ];
  2862.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [13], "visible" => $serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur"pump")];
  2863.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(16),"visible"=>$serviceColonneTableau->getColonneUtilisateur($colonneUtilisateur,"typeReapro"));
  2864.         $categorie_enfants         = [];
  2865.         $categorie_enfants_enfants = [];
  2866.         $repo_categorie_article    $em->getRepository(Categorie::class);
  2867.         $categorie_article_racine  $repo_categorie_article->findBy(["categorieParent" => 1]);
  2868.         $repo_marque_article $em->getRepository(Marque::class);
  2869.         $marque_article      $repo_marque_article->findBy([], ['libelle' => 'ASC']);
  2870.         $repo_type_article $em->getRepository(Type::class);
  2871.         $type_article      $repo_type_article->findBy([], ['libelle' => 'ASC']);
  2872.         $param $request->query->all();
  2873.         if (array_key_exists('categorie_article'$param) and $param["categorie_article"] > 0) {
  2874.             $parent $repo_categorie_article->find($param["categorie_article"]);
  2875.             if (is_object($parent)) {
  2876.                 $categorie_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  2877.             }
  2878.             if (array_key_exists('sous_categorie_article'$param) and $param["sous_categorie_article"] > 0) {
  2879.                 $parent2 $repo_categorie_article->find($param["sous_categorie_article"]);
  2880.                 if (is_object($parent2)) {
  2881.                     $categorie_enfants_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  2882.                 }
  2883.             }
  2884.         }
  2885.         $this->datatableCarnetCommande3($fournisseur$selectReappro$request$em$datatable$translator);
  2886.         $rendu $this->renderView('GestionComerciale/CommandeFournisseur/suggestion.html.twig', [
  2887.             'tableauClassColonne'    => $tableau_class_cellule,
  2888.             'errors'                 => $errors,
  2889.             'selectReappro'          => $selectReappro,
  2890.             'parametres'             => $param,
  2891.             "categorie_article"      => $categorie_article_racine,
  2892.             "sous_categorie_article" => $categorie_enfants,
  2893.             "sous_categorie_article" => $categorie_enfants_enfants,
  2894.             "marque"                 => $marque_article,
  2895.             "type"                   => $type_article,
  2896.             "fournisseur"            => $fournisseur,
  2897.         ]);
  2898.         return new JsonResponse(['rendu' => $rendu]);
  2899.     }
  2900.     /**
  2901.      * @Route("/commande-fournisseur/suggestion/grid", name="dtc_commande_fournisseur_suggestion_liste_grid")
  2902.      */
  2903.     public function suggestionGridAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  2904.     {
  2905.         $selectReappro $request->query->get('selectReappro');
  2906.         $fournisseur   $request->query->get('fournisseur');
  2907.         return $this->datatableCarnetCommande3($fournisseur$selectReappro$request$em$datatable$translator)->execute();
  2908.     }
  2909.     /**
  2910.      * @Route("/commande-fournisseur/ajouter-depuis-article/{id}", name="dtc_commande_fournisseur_ajouter_depuis_article")
  2911.      */
  2912.     public function ajouterDepuisArticleAction(Request $requestArticle $articleArticleService $articleServiceEntityManagerInterface $emTranslatorInterface $translator)
  2913.     {
  2914.         $repoConditionsAchat $em->getRepository(ConditionAchat::class);
  2915.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  2916.         $conditions $repoConditionsAchat->findBy(['article' => $article->getId()]);
  2917.         $ralFourn   $repoArticleCommande->getRalFournisseur($article);
  2918.         $qteConseillee $articleService->getQteConseillee($article);
  2919.         $titreModal $translator->trans('Commander cet article');
  2920.         $rendu      $this->renderView('GestionComerciale/CommandeFournisseur/ajouter-depuis-article.html.twig', [
  2921.             'conditions'     => $conditions,
  2922.             'article'        => $article,
  2923.             'ralFournisseur' => $ralFourn,
  2924.             'qteConseillee'  => $qteConseillee,
  2925.         ]);
  2926.         return new JsonResponse(['rendu' => $rendu'titre' => $titreModal]);
  2927.     }
  2928.     /**
  2929.      * @Route("/commande-fournisseur/historique/{commandeFournisseur}", name="dtc_commande_fournisseur_historique")
  2930.      */
  2931.     public function historiqueAction(Request $requestCommandeFournisseur $commandeFournisseurEntityManagerInterface $emTranslatorInterface $translator)
  2932.     {
  2933.         $titre_modal $translator->trans("Historique du document");
  2934.         $commandes[] = $commandeFournisseur;
  2935.         $historiques $em->getRepository(HistoriqueCommande::class)->findBy([
  2936.                                                                                  'commandeFournisseur' => $commandes,
  2937.                                                                              ], ['id' => 'DESC']);
  2938.         $rendu $this->renderView('GestionComerciale/CommandeFournisseur/historique.html.twig', [
  2939.             'historiques' => $historiques,
  2940.         ]);
  2941.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal'width' => 900]);
  2942.     }
  2943.     /**
  2944.      * @Route("/achat/facture/reprise/nouveau/modal/{id}/{type}", name="dtc_facture_fournisseur_reprise_modal")
  2945.      */
  2946.     public function ajouterRepriseModalAction(Request $request$id$type ""EntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  2947.     {
  2948.         $titre_modal $translator->trans("Nouvelle reprise sur facture");
  2949.         $repo_objet $em->getRepository(CommandeFournisseur::class);
  2950.         $objet      $repo_objet->find($id);
  2951.         $avoir      = clone $objet;
  2952.         $user       $this->getUser();
  2953.         //$avoir->setUtilisateur($user);
  2954.         if (is_object($avoir->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $avoir->getUtilisateur()->getId(
  2955.             ) == $this->getParameter('utilisateur_site_internet')) {
  2956.         } else {
  2957.             //    $avoir->setUtilisateur($user);
  2958.         }
  2959.         $form   $this->createForm(AvoirFactureCommandeFournisseurType::class, $avoir);
  2960.         $errors "";
  2961.         $form->handleRequest($request);
  2962.         $idsArticleCommande $request->query->get('choixArticles');
  2963.         $repo_objet         $em->getRepository(Commande::class);
  2964.         $objet              $repo_objet->find($id);
  2965.         //$avoir->setFacture($objet);
  2966.         $link            $this->generateUrl('dtc_facture_fournisseur_reprise_modal', ['id' => $objet->getId(), 'type' => 'avoir']);
  2967.         $articleCommande $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
  2968.         if ($form->isSubmitted()) {
  2969.             if ($form->isValid()) {
  2970.                 $link $this->generateUrl('dtc_facture_afficher', ['id' => $objet->getId()]);
  2971.                 $articles = [
  2972.                     'choixArticlesAvoir' => $request->request->get('choixArticlesAvoir'),
  2973.                     'idArticle'          => $request->request->get('idArticle'),
  2974.                     'idArticleCommande'  => $request->request->get('idArticleCommande'),
  2975.                     'quantiteInit'       => $request->request->get('quantiteInit'),
  2976.                     'quantite'           => $request->request->get('quantite'),
  2977.                     'quantiteRepris'     => $request->request->get('quantiteRepris'),
  2978.                 ];
  2979.                 $valeurs = ["commande" => $objet->getId(), "articles" => $articles];
  2980.                 $url $this->generateUrl('dtc_commande_fournisseur_ajouter', ['valeurs' => $valeurs]);
  2981.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  2982.             } else {
  2983.                 $errors $validator->validate($avoir);
  2984.                 $rendu  $this->renderView(
  2985.                     'GestionComerciale/Avoir/ajouter_modal_commande_fournisseur.html.twig',
  2986.                     [
  2987.                         'form'            => $form->createView(),
  2988.                         'errors'          => $errors,
  2989.                         'id'              => $id,
  2990.                         'type'            => $type,
  2991.                         'articleCommande' => $articleCommande,
  2992.                         'commande'        => $objet,
  2993.                     ]
  2994.                 );
  2995.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2996.             }
  2997.         }
  2998.         $rendu $this->renderView(
  2999.             'GestionComerciale/Avoir/ajouter_modal_commande_fournisseur.html.twig',
  3000.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'articleCommande' => $articleCommande'commande' => $objet]
  3001.         );
  3002.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''link' => $link'titre' => $titre_modal]);
  3003.     }
  3004. }