src/Controller/Articles/ArticleController.php line 3662

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ArticleCategorie;
  5. use App\Entity\Articles\Categorie;
  6. use App\Entity\Articles\ConditionAchat;
  7. use App\Entity\Articles\FamilleCompta;
  8. use App\Entity\Articles\HistoriqueArticle;
  9. use App\Entity\Articles\Image;
  10. use App\Entity\Articles\Marque;
  11. use App\Entity\Articles\MouvementStock;
  12. use App\Entity\Articles\RaisonMouvementStock;
  13. use App\Entity\Articles\RefsEquivalentes;
  14. use App\Entity\Articles\Type;
  15. use App\Entity\FO\Societe;
  16. use App\Entity\Fournisseurs\Fournisseur;
  17. use App\Entity\Ged\Fichier;
  18. use App\Entity\GestionComerciale\Commande;
  19. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  20. use App\Entity\GestionComerciale\ArticleCommande;
  21. use App\Entity\GestionComerciale\StatutCommande;
  22. use App\Entity\MarketPlace\ArticleMarketPlace;
  23. use App\Entity\MarketPlace\ArticleMarketPlaceCaracteristique;
  24. use App\Entity\MarketPlace\ArticleMarketPlaceImage;
  25. use App\Entity\MarketPlace\Caracteristiques;
  26. use App\Entity\MarketPlace\CategorieErpCategorieMarketPlace;
  27. use App\Entity\MarketPlace\CompteMarketPlace;
  28. use App\Entity\MarketPlace\ErreurPublicationArticleMarketPlace;
  29. use App\Entity\MarketPlace\MarketPlace;
  30. use App\Entity\MarketPlace\Profil;
  31. use App\Entity\MarketPlace\StatutArticle;
  32. use App\Entity\MarketPlace\TarifModeLivraison;
  33. use App\Entity\Vehicules\Application;
  34. use App\Entity\Vehicules\Modele;
  35. use App\Entity\Vehicules\Type as VehiculesType;
  36. use App\Form\Articles\ArticleDiversType;
  37. use App\Form\Articles\ArticleRechercheType;
  38. use App\Form\Articles\ArticleType;
  39. use App\Library\Datatable\Util\Datatable;
  40. use App\Library\Uploader\Services\FileUploader;
  41. use App\Security\Voter\EntityVoter;
  42. use App\Service\Articles\ArticleCategorieService;
  43. use App\Service\Articles\ArticleService;
  44. use App\Service\Articles\DocumentArticle;
  45. use App\Service\Articles\ImageArticleService;
  46. use App\Service\MarketPlace\ArticleMarketPlaceService;
  47. use App\Service\Utilisateur\ColonneTableauService;
  48. use Doctrine\ORM\EntityManagerInterface;
  49. use DTS\eBaySDK\FileTransfer\Types\Data;
  50. use JMS\Serializer\SerializerBuilder;
  51. use Knp\Component\Pager\PaginatorInterface;
  52. use Knp\Snappy\Pdf;
  53. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  54. use Symfony\Component\HttpFoundation\Request;
  55. use Symfony\Component\HttpFoundation\JsonResponse;
  56. use Symfony\Component\HttpFoundation\Response;
  57. use Symfony\Component\Routing\Annotation\Route;
  58. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  59. use Symfony\Component\Validator\Validator\ValidatorInterface;
  60. use Symfony\Contracts\Translation\TranslatorInterface;
  61. class ArticleController extends AbstractController
  62. {
  63.     /**
  64.      * @Route("/article/statut-nomenclature/modifier/{id}", name="dtc_article_nomemclature_statut")
  65.      */
  66.     public function changeStatutNomemclatureAction(Article $articleEntityManagerInterface $em)
  67.     {
  68.         if ($article->getNomenclatureValidee() == 1) {
  69.             $article->setNomenclatureValidee(0);
  70.         } else {
  71.             $article->setNomenclatureValidee(1);
  72.         }
  73.         $em->persist($article);
  74.         $em->flush();
  75.         $em->refresh($article);
  76.         $headers = ['Content-Type' => 'application/json''Access-Control-Allow-Origin' => '*''Access-Control-Allow-Methods' => 'POST'];
  77.         return new JsonResponse(['data' => '1'], 200$headers);
  78.     }
  79.     /**
  80.      * @Route("/article/dupliquer/{id}", name="dtc_article_dupliquer")
  81.      */
  82.     public function dupliquerAction(Article $articleEntityManagerInterface $emTranslatorInterface $translator)
  83.     {
  84.         $article_duplique = clone $article;
  85.         $article_duplique->setLibelle("COPIE ".$article_duplique->getLibelle());
  86.         $em->persist($article_duplique);
  87.         $em->flush();
  88.         $this->addFlash('notice'$translator->trans('Produit dupliqué avec succès !'));
  89.         return $this->redirectToRoute('dtc_article_liste');
  90.     }
  91.     /**
  92.      * @Route("/article/dupliquer/{id}/formulaire", name="dtc_article_dupliquer_formulaire")
  93.      */
  94.     public function dupliquerFormulaireAction(Request             $requestArticle $articleEntityManagerInterface $emValidatorInterface $validatorArticleService $articleService,
  95.                                               ImageArticleService $imageArticleServiceDocumentArticle $documentArticleTranslatorInterface $translator
  96.     ) {
  97.         $article_duplique = new Article;
  98.         //Champs obligatoire
  99.         /*
  100.     $article_duplique->setLibelle(" ");
  101.         $article_duplique->setDescriptionCourte(" ");
  102.         $article_duplique->setPrixBase(0);
  103.         $article_duplique->setPrixVente(0);
  104.          *
  105.          */
  106.         //com git
  107.         //Marque
  108.         $article_duplique->setReference("");
  109.         $article_duplique->setStatut(false);
  110.         $article_duplique->setLibelle($article->getLibelle());
  111.         $article_duplique->setCoefficientPrixBaseVente($article->getCoefficientPrixBaseVente());
  112.         $article_duplique->setIdImport("");
  113.         if (is_object($article->getRegleTaxe())) {
  114.             $article_duplique->setRegleTaxe($article->getRegleTaxe());
  115.         }
  116.         if (is_object($article->getFamilleCompta())) {
  117.             $article_duplique->setFamilleCompta($article->getFamilleCompta());
  118.         }
  119.         $marque $article->getMarque();
  120.         if (is_object($marque)) {
  121.             $article_duplique->setMarque($marque);
  122.         }
  123.         if (is_object($article->getType())) {
  124.             $article_duplique->setType($article->getType());
  125.         }
  126.         //Publication
  127.         //$statut = $article->getStatut();
  128.         //$article_duplique->setStatut($statut);
  129.         $aConsigner $article->getAConsigner();
  130.         $article_duplique->setAConsigner($aConsigner);
  131.         $consigne $article->getConsigne();
  132.         $article_duplique->setConsigne($consigne);
  133.         $stockAuto $article->getStockAuto();
  134.         $article_duplique->setStockAuto($stockAuto);
  135.         $produitInterne $article->getProduitInterne();
  136.         $article_duplique->setProduitInterne($produitInterne);
  137.         $virtuel $article->getVirtuel();
  138.         $article_duplique->setVirtuel($virtuel);
  139.         $majPrix $article->getMajPrix();
  140.         $article_duplique->setMajPrix($majPrix);
  141.         $arretGamme $article->getArretGamme();
  142.         $article_duplique->setArretGamme($arretGamme);
  143.         $afficherComposantPdfInterne $article->getAfficherComposantPdfInterne();
  144.         $article_duplique->setAfficherComposantPdfInterne($afficherComposantPdfInterne);
  145.         $afficherComposantPdfExterne $article->getAfficherComposantPdfExterne();
  146.         $article_duplique->setAfficherComposantPdfExterne($afficherComposantPdfExterne);
  147.         $article_duplique->setDivers($article->getDivers());
  148.         $article_duplique->setNumSerieObligatoire($article->getNumSerieObligatoire());
  149.         $article_duplique->setNonCommandable($article->getNonCommandable());
  150.         $article_duplique->setMainOeuvre($article->getMainOeuvre());
  151.         $article_duplique->setPrestation($article->getPrestation());
  152.         $article_duplique->setArchive($article->getArchive());
  153.         $article_duplique->setNonStocke($article->getNonStocke());
  154.         //Catégorie de remise
  155.         $categorieRemise $article->getCategorieRemiseArticle();
  156.         $article_duplique->setCategorieRemiseArticle($categorieRemise);
  157.         /*
  158.     $em->persist($article_duplique);
  159.     $em->flush();
  160.          *
  161.          */
  162.         //Catégories
  163.         $categories $article->getArticleCategorie();
  164.         foreach ($categories as $categorie) {
  165.             $categorie_dupliquee = clone $categorie;
  166.             //$categorie_dupliquee->setArticle($article_duplique);
  167.             //$em->persist($categorie_dupliquee);
  168.             $article_duplique->addArticleCategorie($categorie_dupliquee);
  169.         }
  170.         //Codes Comptables
  171.         /*
  172.         $codesCompta = $article->getArticlesCompta();
  173.         foreach($codesCompta as $codeCompta){
  174.             $codeCompta_duplique = clone $codeCompta;
  175.             //$codeCompta_duplique->setArticle($article_duplique);
  176.             //$em->persist($codeCompta_duplique);
  177.             $article_duplique->addArticlesComptum($codeCompta_duplique);
  178.         }*/
  179.         $user $this->getUser();
  180.         $article_duplique->setUtilisateur($user);
  181.         $tokenPicture sprintf('%09d'mt_rand(01999999999));
  182.         $photosArray = [];
  183.         $form        $this->createForm(ArticleType::class, $article_duplique);
  184.         $errors      "";
  185.         $form->handleRequest($request);
  186.         if ($form->isSubmitted()) {
  187.             $tokenP $request->request->get('tokenPicture');
  188.             $tokenD $request->request->get('tokenDocument');
  189.             //echo 'submitted';
  190.             if ($form->isValid()) {
  191.                 //echo 'valid';
  192.                 //Remplissage auto des champs web
  193.                 /*
  194.                         if ($article->getNomWeb() == '') $article->setNomWeb($article->getLibelle().' '.$article->getLibelleSecondaire());
  195.                         if ($article->getReferenceWeb() == '') $article->setReferenceWeb($article->getReference());
  196.                         if ($article->getReferenceFournisseurWeb() == '') $article->setReferenceFournisseurWeb($article->getReferenceFournisseur());
  197.                         if ($article->getDescriptionWeb() == '') $article->setDescriptionWeb($article->getDescription());
  198.                         if ($article->getResumeWeb() == '') $article->setResumeWeb($article->getDescriptionCourte());
  199.                          *
  200.                          */
  201.                 //  $article
  202.                 //echo "<div>TEST : ".$article->getId()."</div>";
  203.                 //exit;
  204.                 $em->persist($article_duplique);
  205.                 $em->flush();
  206.                 if (count($article->getConditionsAchat()) > 0) {
  207.                     foreach ($article->getConditionsAchat() as $cond) {
  208.                         if ($cond->getDefaut()) {
  209.                             $clone_cond = clone $cond;
  210.                             $clone_cond->setArticle($article_duplique);
  211.                             $clone_cond->setPrixAchatBrut(null);
  212.                             $clone_cond->setPrixAchatNet(null);
  213.                             $article_duplique->addConditionsAchat($clone_cond);
  214.                             $em->persist($clone_cond);
  215.                         }
  216.                     }
  217.                 }
  218.                 foreach ($article->getArticlesComposants() as $ac) {
  219.                     $article_comosant = clone $ac;
  220.                     $article_comosant->setArticleCompose($article_duplique);
  221.                     $em->persist($article_comosant);
  222.                 }
  223.                 /*
  224.                         foreach($article->getRefsEquivalentes() as $rf) {
  225.                             $article_duplique->addRefsEquivalente($rf);
  226.                             $em->persist($article_duplique);
  227.                         }
  228.                         foreach($article->getRefsEquivalentesConcurrence() as $rec) {
  229.                             $rec_clone = clone $rec;
  230.                             $rec_clone->setArticle($article_duplique);
  231.                             $em->persist($rec_clone);
  232.                         }
  233.                         */
  234.                 $em->flush();
  235.                 $imageArticleService->sauvegarder($article_duplique'images'$tokenP);
  236.                 $documentArticle->sauvegarder($article_duplique'documents'$tokenD);
  237.                 $this->addFlash('notice'$translator->trans('Produit ajouté avec succès !'));
  238.                 $message_historique            = [];
  239.                 $message_historique["titre"]   = "Création d'un article";
  240.                 $message_historique["message"] = "";
  241.                 $articleService->creerHistorique($article'defaut'$message_historique);
  242.                 return $this->redirectToRoute('dtc_article_modifier', ['id' => $article_duplique->getId()]);
  243.             } else {
  244.                 $errors $validator->validate($article_duplique);
  245.                 //\Doctrine\Common\Util\Debug::dump($errors);
  246.             }
  247.         }
  248.         return $this->render('Articles/Article/ajouter.html.twig', [
  249.             'form'         => $form->createView(),
  250.             'errors'       => $errors,
  251.             'photos'       => $photosArray,
  252.             'tokenPicture' => $tokenPicture,
  253.             'article'      => $article_duplique,
  254.         ]);
  255.     }
  256.     /**
  257.      * @Route("/article/modal/afficher/{id}", name="dtc_article_afficher_modal")
  258.      */
  259.     public function afficherModalAction(Article $articleEntityManagerInterface $em)
  260.     {
  261.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  262.         $url                 $this->generateUrl('dtc_article_modifier', ["id" => $article->getId()]);
  263.         $titre_modal         "<a target='_blank' href='".$url."'>".$article->getReference()."</a>";
  264.         $form      $this->createForm(ArticleType::class, $article);
  265.         $ralClient $repoArticleCommande->getRalClient($article);
  266.         $rendu     $this->renderView('Articles/Article/afficher.html.twig', ['article' => $article'form' => $form->createView(), 'ralClient' => $ralClient]);
  267.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  268.     }
  269.     /**
  270.      * @Route("/article/modal/afficher/ref/{id}", name="dtc_article_afficher_ref_modal")
  271.      */
  272.     public function afficherRefModalAction(Article $article)
  273.     {
  274.         $titre_modal $article->getLibelle();
  275.         $form        $this->createForm(ArticleType::class, $article);
  276.         $rendu       $this->renderView('Articles/Article/refAppel.html.twig', ['article' => $article'form' => $form->createView()]);
  277.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  278.     }
  279.     /**
  280.      * @Route("/article/modifier/{id}", name="dtc_article_modifier", requirements={"id"="\d+"})
  281.      */
  282.     public function modifierAction(Request                 $requestArticle $articleEntityManagerInterface $em,  ImageArticleService $imageArticleService,
  283.                                    ArticleCategorieService $articleCategorieServiceValidatorInterface $validatorDocumentArticle $documentArticleArticleService $articleService,
  284.                                    Datatable $datatableTranslatorInterface $translatorFileUploader $fileUploader
  285.     ) {
  286.         //set_time_limit(15);
  287.         $user                  $this->getUser();
  288.         $repoCompteMarketPlace $em->getRepository(CompteMarketPlace::class);
  289.         $repoMarketPlace       $em->getRepository(MarketPlace::class);
  290.         $compteMarketPlace $repoCompteMarketPlace->findBy(["statut" => 1]);
  291.         $marketPlace       $repoMarketPlace->findAll();
  292.         $repoDossier $em->getRepository(Fichier::class);
  293.         $parent      $repoDossier->find(3);
  294.         $fichier     $repoDossier->findOneBy(["article" => $article"type" => "dossier""parent" => $parent]);
  295.         if ( ! is_object($fichier)) {
  296.             $fichier = new Fichier();
  297.             $fichier->setUtilisateur($user);
  298.             $fichier->setType("dossier");
  299.             $fichier->setRenomme(true);
  300.             $fichier->setSupprimable(false);
  301.             $fichier->setModifiable(false);
  302.             $fichier->setArticle($article);
  303.             $fichier->setParent($parent);
  304.             $libelle_ged trim($article->getReference());
  305.             $fichier->setLIbelle($libelle_ged);
  306.             $em->persist($fichier);
  307.             $enfant2 = new Fichier();
  308.             $enfant2->setUtilisateur($user);
  309.             $enfant2->setType("dossier");
  310.             $enfant2->setRenomme(true);
  311.             $enfant2->setSupprimable(false);
  312.             $enfant2->setModifiable(false);
  313.             $enfant2->setArticle($article);
  314.             $enfant2->setParent($fichier);
  315.             $enfant2->setLibelle("Documents");
  316.             $em->persist($enfant2);
  317.             $enfant3 = new Fichier();
  318.             $enfant3->setUtilisateur($user);
  319.             $enfant3->setType("dossier");
  320.             $enfant3->setRenomme(true);
  321.             $enfant3->setSupprimable(false);
  322.             $enfant3->setModifiable(false);
  323.             $enfant3->setArticle($article);
  324.             $enfant3->setParent($fichier);
  325.             $enfant3->setLibelle("Divers");
  326.             $em->persist($enfant3);
  327.             $em->flush();
  328.         }
  329.         $repoDossier  $em->getRepository(Fichier::class);
  330.         $parent       $repoDossier->find(3);
  331.         $fichier_plan $repoDossier->findOneBy(["article" => $article"type" => "dossier""parent" => $fichier"libelle" => "Plans"]);
  332.         if ( ! is_object($fichier_plan)) {
  333.             $enfant4 = new Fichier();
  334.             $enfant4->setUtilisateur($user);
  335.             $enfant4->setType("dossier");
  336.             $enfant4->setRenomme(true);
  337.             $enfant4->setSupprimable(false);
  338.             $enfant4->setModifiable(false);
  339.             $enfant4->setArticle($article);
  340.             $enfant4->setParent($fichier);
  341.             $enfant4->setLibelle("Plans");
  342.             $em->persist($enfant4);
  343.             $em->flush();
  344.         }
  345.         $user $this->getUser();
  346.         $article->setUtilisateur($user);
  347.         //$reserv = $serviceArticle->getRalClientArticle($article);
  348.         $repoArticleCommande  $em->getRepository(ArticleCommande::class);
  349.         $repo_fournisseur     $em->getRepository(Fournisseur::class);
  350.         $repo_condition_achat $em->getRepository(ConditionAchat::class);
  351.         //$form_stock = $request->request->get('forms[vars][id]', '');
  352.         // \Doctrine\Common\Util\Debug::dump($form_stock);
  353.         $refsEquiActives             $em->getRepository(RefsEquivalentes::class)->actives();
  354.         $refsEquivalentesConcurrence $article->getRefsEquivalentesConcurrence();
  355.         $refsEquivalentes            $article->getRefsEquivalentes();
  356.         $statutMajPrixInitial $article->getMajPrix();
  357.         $prixBaseInitial      $article->getPrixBase();
  358.         $form   $this->createForm(ArticleType::class, $article);
  359.         $errors "";
  360.         $form->handleRequest($request);
  361.         $tokenPicture sprintf('%09d'mt_rand(01999999999));
  362.         $photosExistantes $fileUploader->getFiles(['folder' => 'tmp/attachments/article-'.$article->getId()]);
  363.         if ($form->isSubmitted()) {
  364.             $droit $this->isGranted(EntityVoter::UPDATEArticle::class);
  365.             if ( ! $droit) {
  366.                 return $this->redirectToRoute('dtc_article_modifier', ["id" => $article->getId()]);
  367.             }
  368.             if ($form->isValid()) {
  369.                 $imageArticleService->sauvegarder($article'images');
  370.                 $articleCategorieService->sauvegarder($article$request->request->get('categories'));
  371.                 foreach ($article->getArticlesComposants() as $articleComposant) {
  372.                     if (is_object($articleComposant)) {
  373.                         $article->setProduitInterne(true);
  374.                     };
  375.                 }
  376.                 $documentArticle->sauvegarder($article'documents');
  377.                 $ref11      $article->getReference();
  378.                 $delimiteur = ["-"" ""_""."];
  379.                 $test       str_replace($delimiteur""$ref11);
  380.                 $article->setReferenceAppel11($test);
  381.                 if ($article->getStatut()) {
  382.                     $article->setSurPrestashop(1);
  383.                 }
  384.                 $article->setDateMaj(new \Datetime());
  385.                 //Si on décoche DIVERS et que le parent n'est pas null, supprimer le parent de l'article
  386.                 if ( ! $article->getDivers() && $article->getParent() != null) {
  387.                     $article->setParent(null);
  388.                     if ($article->getCommentairePonctuel() == "PRODUIT DIVERS") {
  389.                         $article->setCommentairePonctuel("");
  390.                     }
  391.                     if ($article->getLibelleSecondaire() == "PRODUIT DIVERS") {
  392.                         $article->setLibelleSecondaire("");
  393.                     }
  394.                 }
  395.                 $em->persist($article);
  396.                 $em->flush();
  397.                 $articleService->majQteConseillee($article);
  398.                 if ($article->getFournisseurDefaut() == null) {
  399.                     $articleService->setFournisseurDefaut($article);
  400.                 }
  401.                 $commentaire '';
  402.                 //si le prix de base a été modifié et maj auto, mettre à jour la condition HA par défaut
  403.                 if ($article->getMajPrix() === true && $prixBaseInitial != $article->getPrixBase()) {
  404.                     //$commentaire .= 'Modification du prix de base de la condition d\'achat.<br>';
  405.                     $articleService->majCondHaEnFonctionPrixBase($article);
  406.                 }
  407.                 //produit compose dont la condition achat par défaut a pour fournisseur dreamteamcar
  408.                 if ($article->getProduitInterne() === true) {
  409.                     $dtc $repo_fournisseur->findOneBy(['reference' => 12000]);
  410.                     if (is_object($dtc)) {
  411.                         //$condHa = $repo_condition_achat->findOneBy(array('defaut'=>true, 'fournisseur'=>$dtc, 'article'=>$article));
  412.                         $condHa $repo_condition_achat->findOneBy(['fournisseur' => $dtc'article' => $article]);
  413.                         if (is_object($condHa)) {
  414.                             $prixCondHa $articleService->getPrixCondHaCompose($article);
  415.                             $condHa->setPrixAchatBrut($prixCondHa);
  416.                             $condHa->setPrixAchatNet($prixCondHa);
  417.                             $em->persist($condHa);
  418.                             $em->flush();
  419.                         }
  420.                     }
  421.                 }
  422.                 //Si on passe la maj à auto, mettre à jour l'article en fonction de la cond HA
  423.                 if ($article->getMajPrix() === true && $article->getMajPrix() != $statutMajPrixInitial) {
  424.                     //$commentaire .= 'Mise à jour de l\'article en fonction de la condition d\'achat.<br>';
  425.                     $articleService->majEnFonctionDuPrixAchat($article);
  426.                 }
  427.                 /*
  428.                 $article->setCommentairePonctuel($commentaire);
  429.                 $em->persist($article);
  430.                 $em->flush();
  431.                  *
  432.                  */
  433.                 //if($this->getParameter('domaine_prestashop') != '') @fopen('http://'.$this->getParameter('domaine_prestashop').'/67PHEAuaps4P4h3/articles.php?id_article='.$article->getId(), 'r');
  434.                 $message_maj = [];
  435.                 //$articleMarketPlaceService = $this->get('dtc.articlemarketplace');
  436.                 //$message_maj = $articleMarketPlaceService->majStockAnnonce($article->getId());
  437.                 if (is_array($message_maj)) {
  438.                     if (array_key_exists('notice'$message_maj) && $message_maj["notice"] != "") {
  439.                         $this->addFlash('notice'$message_maj["notice"]);
  440.                     }
  441.                     if (array_key_exists('warning'$message_maj) && $message_maj["warning"] != "") {
  442.                         $this->addFlash('warning'$message_maj["warning"]);
  443.                     }
  444.                 }
  445.                 //print_r($message_maj);
  446.                 $id_prestashop $article->getIdPrestahop();
  447.                 $id_combination_prestashop $article->getIdCombinationPrestahop();
  448.                 if((!is_null($id_combination_prestashop) or !is_null($id_prestashop) or $article->getStatut()) ) {
  449.                     $conn $em->getConnection();
  450.                     $this->addFlash('notice','Création / Mise à jour de l\'article sur le prestashop..');
  451.                     $dateAPublier = new \Datetime();
  452.                     $tableau_donnee_a_publier=array("a_publier"=>1,'date_a_publier'=>$dateAPublier->format("Y-m-d H:i:s"));
  453.                     $conn->update('article__article'$tableau_donnee_a_publier, array('id' => $article->getId()));
  454.                 }
  455.                 $this->addFlash('notice'$translator->trans('Produit modifié avec succès !'));
  456.                 $message_historique            = [];
  457.                 $message_historique["titre"]   = "Modification de l'article";
  458.                 $message_historique["message"] = "";
  459.                 $articleService->creerHistorique($article'defaut'$message_historique);
  460.                 return $this->redirectToRoute('dtc_article_modifier', ["id" => $article->getId()]);
  461.             } else {
  462.                 $errors $validator->validate($article);
  463.                 //\Doctrine\Common\Util\Debug::dump($errors);
  464.             }
  465.         }
  466.         $ralClient $repoArticleCommande->getRalClient($article);
  467.         $this->datatableApplications($article$datatable$translator);
  468.         // $this->datatableVentes($article);
  469.         $total_devise $repoArticleCommande->getDevisArticle($article);
  470.         return $this->render(
  471.             'Articles/Article/ajouter.html.twig',
  472.             [
  473.                 'compteMarketPlace'           => $compteMarketPlace,
  474.                 'tabMarketPlace'              => $marketPlace,
  475.                 'total_devise'                => $total_devise,
  476.                 'form'                        => $form->createView(),
  477.                 'errors'                      => $errors,
  478.                 'article'                     => $article,
  479.                 'photos'                      => $photosExistantes,
  480.                 'tokenPicture'                => $tokenPicture,
  481.                 'refsEquiActives'             => $refsEquiActives,
  482.                 'refsEquivalentes'            => $refsEquivalentes,
  483.                 'ralClient'                   => $ralClient,
  484.                 'refsEquivalentesConcurrence' => $refsEquivalentesConcurrence,
  485.             ]
  486.         );
  487.     }
  488.     /**
  489.      * @Route("/article/nouveau", name="dtc_article_ajouter")
  490.      */
  491.     public function ajouterAction(Request             $requestEntityManagerInterface $emValidatorInterface $validatorArticleMarketPlaceService $articleMarketPlaceService,
  492.                                   ImageArticleService $imageArticleServiceDocumentArticle $documentArticle
  493.     ) {
  494.         $article = new Article;
  495.         $user    $this->getUser();
  496.         $article->setUtilisateur($user);
  497.         //$marque_kallles = $em->getRepository('DTCArticlesBundle:Marque')->find(1);
  498.         //$article->setMarque($marque_kallles);
  499.         $tokenPicture sprintf('%09d'mt_rand(01999999999));
  500.         $photosArray  = [];
  501.         $form   $this->createForm(ArticleType::class, $article);
  502.         $errors "";
  503.         $form->handleRequest($request);
  504.         if ($form->isSubmitted()) {
  505.             $tokenP $request->request->get('tokenPicture');
  506.             $tokenD $request->request->get('tokenDocument');
  507.             //echo $tokenP;
  508.             if ($form->isValid()) {
  509.                 $statutArticleMarketPlace $em->getRepository(StatutArticle::class)->find(1);
  510.                 $post                     $request->request->all();
  511.                 $repo_categorie           $em->getRepository(Categorie::class);
  512.                 $repo_article_categorie   $em->getRepository(ArticleCategorie::class);
  513.                 //Remplissage auto des champs web
  514.                 if ($article->getNomWeb() == '') {
  515.                     $article->setNomWeb($article->getLibelle().' '.$article->getLibelleSecondaire());
  516.                 }
  517.                 if ($article->getReferenceWeb() == '') {
  518.                     $article->setReferenceWeb($article->getReference());
  519.                 }
  520.                 if ($article->getReferenceFournisseurWeb() == '') {
  521.                     $article->setReferenceFournisseurWeb($article->getReferenceFournisseur());
  522.                 }
  523.                 if ($article->getDescriptionWeb() == '') {
  524.                     $article->setDescriptionWeb($article->getDescription());
  525.                 }
  526.                 if ($article->getResumeWeb() == '') {
  527.                     $article->setResumeWeb($article->getDescriptionCourte());
  528.                 }
  529.                 if ($article->getColis() == '') {
  530.                     $article->setColis(1);
  531.                 }
  532.                 $ref11      $article->getReference();
  533.                 $delimiteur = ["-"" ""_"];
  534.                 $test       str_replace($delimiteur""$ref11);
  535.                 $article->setReferenceAppel11($test);
  536.                 $article->setDateMaj(new \Datetime());
  537.                 if ($article->getStatut()) {
  538.                     $article->setSurPrestashop(1);
  539.                 }
  540.                 $em->persist($article);
  541.                 $em->flush();
  542.                 $imageArticleService->sauvegarder($article'images'$tokenP);
  543.                 $documentArticle->sauvegarder($article'documents'$tokenD);
  544.                 if (array_key_exists('categories'$post) && count($post["categories"] > 0)) {
  545.                     foreach ($post["categories"] as $ca) {
  546.                         $ca_obj $repo_categorie->find($ca);
  547.                         if (is_object($ca_obj)) {
  548.                             $articleCategorie = new ArticleCategorie();
  549.                             $articleCategorie->setCategorie($ca_obj);
  550.                             $articleCategorie->setArticle($article);
  551.                             $em->persist($articleCategorie);
  552.                         }
  553.                     }
  554.                 }
  555.                 $em->flush();
  556.                 $em->refresh($article);
  557.                 if (count($article->getImages()) > 0) {
  558.                     foreach ($article->getImages() as $imgArt) {
  559.                         $imgArt->setAffichageWeb(true);
  560.                         $em->persist($imgArt);
  561.                         break;
  562.                     }
  563.                 }
  564.                 $notice  "Produit ajouté avec succès !";
  565.                 $warning "";
  566.                 $stock_valide true;
  567.                 if ($article->getStock() <= 0) {
  568.                     $stock_valide false;
  569.                 }
  570.                 $image_valide true;
  571.                 if (count($article->getImages()) <= 0) {
  572.                     $image_valide false;
  573.                 }
  574.                 $repo_article_market_place $em->getRepository(ArticleMarketPlace::class);
  575.                 $repo_compte_market_place  $em->getRepository(CompteMarketPlace::class);
  576.                 $compteMarketPlaces $repo_compte_market_place->findBy(["statut" => "1"]);
  577.                 $warning "";
  578.                 foreach ($compteMarketPlaces as $compteMarketPlace) {
  579.                     $articleMarketPlace $repo_article_market_place->findOneBy(["article" => $article"compteMarketPlace" => $compteMarketPlace]);
  580.                     if ( ! is_object($articleMarketPlace)) {
  581.                         $categorie_valide false;
  582.                         $prix_valide      false;
  583.                         $articleMarketPlace = new ArticleMarketPlace();
  584.                         $articleMarketPlace->setArticle($article);
  585.                         //$skuGen = "AMA".$compteMarketPlace->getId().str_replace(" ","",$article->getUnspsc());
  586.                         $skuGen $article->getReference();
  587.                         $articleMarketPlace->setVisible(true);
  588.                         $articleMarketPlace->setSku($skuGen);
  589.                         $articleMarketPlace->setEan($article->getUnspsc());
  590.                         $articleMarketPlace->setEan($article->getUnspsc());
  591.                         if (is_object($article->getRegletaxe())) {
  592.                             $articleMarketPlace->setRegleTaxe($article->getRegletaxe());
  593.                         }
  594.                         $articleMarketPlace->setLibelle($article->getLibelle());
  595.                         $articleMarketPlace->setTitreDescription($article->getLibelle());
  596.                         $articleMarketPlace->setDescription($article->getDescription());
  597.                         $articleMarketPlace->setResume($article->getDescriptionCourte());
  598.                         $articleMarketPlace->setRenouvellementAuto(true);
  599.                         $prixVente $article->getPrixVente() * ($article->getRegleTaxe()->getTauxDefaut() / 100);
  600.                         $articleMarketPlace->setPrixVente($prixVente);
  601.                         if ($article->getPrixVente() > 0) {
  602.                             $prix_valide true;
  603.                         }
  604.                         //$articleMarketPlace->setStatut(false);
  605.                         $articleMarketPlace->setCompteMarketPlace($compteMarketPlace);
  606.                         $articleMarketPlace->setStock($article->getStock());
  607.                         //echo "(".$compteMarketPlace->getMarketPlace()->getId().")|";
  608.                         $em->persist($articleMarketPlace);
  609.                         $em->flush();
  610.                         $em->refresh($articleMarketPlace);
  611.                         $categorieMarket $repo_article_categorie->findBy(["article" => $article"marketPlace" => $compteMarketPlace->getMarketPlace()]);
  612.                         //echo "TOTO".count($categorieMarket);
  613.                         if (count($categorieMarket) > 0) {
  614.                             foreach ($categorieMarket as $cm) {
  615.                                 $articleCategorie = new ArticleCategorie;
  616.                                 $articleCategorie->setArticleMarketPlace($articleMarketPlace);
  617.                                 $articleCategorie->setCategorie($cm->getCategorie());
  618.                                 $em->persist($articleCategorie);
  619.                                 $categorie_valide true;
  620.                             }
  621.                             $em->flush();
  622.                         } else {
  623.                             if (is_object($articleMarketPlace->getCompteMarketPlace()) && is_object($articleMarketPlace->getCompteMarketPlace()->getMarketPlace())) {
  624.                                 $catErp $repo_article_categorie->getCategorieErpArticle($article);
  625.                                 $continuer_recherche_cat true;
  626.                                 if (count($catErp) > 0) {
  627.                                     foreach ($catErp as $ce) {
  628.                                         if ($continuer_recherche_cat) {
  629.                                             if (is_object($ce->getCategorie())) {
  630.                                                 //echo "<div>CAT ".$ce->getCategorie()."</div>";
  631.                                                 $repo_CategorieErpCategorieMarketPlace $em->getRepository(CategorieErpCategorieMarketPlace::class);
  632.                                                 $cateCorrespondance                    $repo_CategorieErpCategorieMarketPlace->findOneBy(
  633.                                                     ["categorieErp" => $ce->getCategorie(), "compteMarketPlace" => $articleMarketPlace->getCompteMarketPlace()]
  634.                                                 );
  635.                                                 if (is_object($cateCorrespondance) && is_object($cateCorrespondance->getCategorieMarketPlace())) {
  636.                                                     $articleCategorie = new ArticleCategorie;
  637.                                                     $articleCategorie->setArticleMarketPlace($articleMarketPlace);
  638.                                                     $articleCategorie->setCategorie($cateCorrespondance->getCategorieMarketPlace());
  639.                                                     $em->persist($articleCategorie);
  640.                                                     $continuer_recherche_cat false;
  641.                                                     $categorie_valide        true;
  642.                                                 }
  643.                                             }
  644.                                         }
  645.                                     }
  646.                                     $em->flush();
  647.                                 }
  648.                             }
  649.                         }
  650.                     }
  651.                     $em->refresh($article);
  652.                     if (count($article->getImages()) > 0) {
  653.                         //echo "AAAAA";
  654.                         foreach ($article->getImages() as $img) {
  655.                             //    echo "BBBB ".$img->getId()." ".$articleMarketPlace->getId();
  656.                             $articleMarketPlaceImage = new ArticleMarketPlaceImage();
  657.                             $articleMarketPlaceImage->setImage($img);
  658.                             //$articleMarketPlaceImage->setOrdre();
  659.                             $articleMarketPlaceImage->setArticleMarketPlace($articleMarketPlace);
  660.                             $articleMarketPlaceImage->setDate($article->getDate());
  661.                             $em->persist($articleMarketPlaceImage);
  662.                         }
  663.                     } else {
  664.                         //echo "erreur ";
  665.                         //exit;
  666.                     }
  667.                     //$categorie_valide;
  668.                     //$prix_valide;
  669.                     //$stock_valide;
  670.                     //$image_valide;
  671.                     $message_historique                         = [];
  672.                     $message_historique["message"]              = "";
  673.                     $message_historique["en_cours_publication"] = false;
  674.                     if ( ! $image_valide or ! $prix_valide or ! $categorie_valide) {
  675.                         $erreur_detail "";
  676.                         //if(!$stock_valide) $erreur_detail .= " (Stock insuffisant)";
  677.                         if ( ! $image_valide) {
  678.                             $erreur_detail .= " (Image obligatoire)";
  679.                         }
  680.                         if ( ! $prix_valide) {
  681.                             $erreur_detail .= " (Prix obligatoire)";
  682.                         }
  683.                         if ( ! $categorie_valide) {
  684.                             $erreur_detail .= " (Catégorie obligatoire)";
  685.                         }
  686.                         //$erreur_chaine = "Lancement de la publication de l'offre : ".$articleMarketPlace->getSku()." sur le marketplace ".$articleMarketPlace->getCompteMarketPlace()->getLibelle()." impossible : ".$erreur_detail."<br/>";
  687.                         //$warning .= $erreur_chaine;
  688.                     } else {
  689.                         //$articleMarketPlace->setDateDemandePublicationMarketPlace(new \Datetime());
  690.                         //$articleMarketPlace->setStatutArticleMarketPlace($statutArticleMarketPlace);
  691.                         //$notice .= "<br/>Lancement de la publication de l'offre : ".$articleMarketPlace->getSku()." sur le marketplace ".$articleMarketPlace->getCompteMarketPlace()->getLibelle()." réalisé avec succès";
  692.                     }
  693.                     $em->flush();
  694.                     $em->refresh($articleMarketPlace);
  695.                     $message_maj null;
  696.                     //$message_maj = $articleMarketPlaceService->majStockAnnonce($article->getId(),$articleMarketPlace->getId());
  697.                     if (is_array($message_maj)) {
  698.                         if (array_key_exists('notice'$message_maj) && $message_maj["notice"] != "") {
  699.                             $this->addFlash('notice'$message_maj["notice"]);
  700.                             $message_historique["en_cours_publication"] = true;
  701.                         }
  702.                         if (array_key_exists('warning'$message_maj) && $message_maj["warning"] != "") {
  703.                             $this->addFlash('warning'$message_maj["warning"]);
  704.                         }
  705.                         $articleMarketPlaceService->creerHistorique($articleMarketPlace10$message_historique);
  706.                     } else {
  707.                         $articleMarketPlaceService->creerHistorique($articleMarketPlace10$message_historique);
  708.                     }
  709.                 }
  710.                 if ($article->getStock() > 0) {
  711.                     $repo_mouvement_stock        $em->getRepository(MouvementStock::class);
  712.                     $repo_raison_mouvement_stock $em->getRepository(RaisonMouvementStock::class);
  713.                     $raison $repo_raison_mouvement_stock->find(13);
  714.                     $mvmt = new MouvementStock();
  715.                     $mvmt->setArticle($article);
  716.                     $mvmt->setQuantite($article->getStock());
  717.                     $mvmt->setStock($article->getStock());
  718.                     $mvmt->setUtilisateur($user);
  719.                     $mvmt->setCommentaire("Création produit avec stock initial");
  720.                     $mvmt->setRaisonMouvementStock($raison);
  721.                     $mvmt->setAFacturer(false);
  722.                     $em->persist($mvmt);
  723.                 }
  724.                 $this->addFlash('notice'$notice);
  725.                 if ($warning != "") {
  726.                     $this->addFlash('warning'$warning);
  727.                 }
  728.                 //return $this->redirectToRoute('dtc_article_liste');
  729.                 return $this->redirectToRoute('dtc_article_modifier', ['id' => $article->getId()]);
  730.             } else {
  731.                 $errors $validator->validate($article);
  732.                 //\Doctrine\Common\Util\Debug::dump($errors);
  733.             }
  734.         }
  735.         return $this->render('Articles/Article/ajouter.html.twig', [
  736.             'form'         => $form->createView(),
  737.             'errors'       => $errors,
  738.             'photos'       => $photosArray,
  739.             'tokenPicture' => $tokenPicture,
  740.         ]);
  741.     }
  742.     /**
  743.      * @Route("/article", name="dtc_article_liste")
  744.      */
  745.     public function listerAction(Request $requestEntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatable,
  746.                                  TranslatorInterface $translator$parent ''
  747.     ) {
  748.         //\Doctrine\Common\Util\Debug::dump($filters);
  749.         $tableau_class_cellule[] = ["searchable" => true"className" => " colonne_id""targets" => [0], "visible" => false"orderable" => false];
  750.         $tableau_class_cellule[] = [
  751.             "searchable" => true,
  752.             "className"  => "visible_export colonne_id",
  753.             "targets"    => [1],
  754.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "id"),
  755.         ];
  756.         /*
  757.         $tableau_class_cellule[] = [
  758.             "searchable" => true,
  759.             "className"  => "visible_export colonne_image",
  760.             "targets"    => [2],
  761.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "image"),
  762.         ];
  763.         */
  764.         $tableau_class_cellule[] = [
  765.             "searchable" => true,
  766.             "className"  => "visible_export colonne_reference",
  767.             "targets"    => [2],
  768.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "reference"),
  769.         ];
  770.         $tableau_class_cellule[] = [
  771.             "searchable" => false,
  772.             "className"  => "visible_export colonne_libelle",
  773.             "targets"    => [3],
  774.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "libelle"),
  775.         ];
  776.         /*
  777.         $tableau_class_cellule[] = [
  778.             "searchable" => false,
  779.             "className"  => "visible_export colonne_libelle",
  780.             "targets"    => [5],
  781.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "marque"),
  782.         ];
  783.         $tableau_class_cellule[] = [
  784.             "searchable" => false,
  785.             "className"  => "visible_export colonne_descriptionCourte",
  786.             "targets"    => [6],
  787.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "descriptionCourte"),
  788.         ];
  789.         $tableau_class_cellule[] = [
  790.             "searchable" => false,
  791.             "className"  => "visible_export colonne_prixBase text-center",
  792.             "targets"    => [7],
  793.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "prixHT"),
  794.         ];
  795.         $tableau_class_cellule[] = [
  796.             "searchable" => false,
  797.             "className"  => "visible_export colonne_prixBase text-center",
  798.             "targets"    => [8],
  799.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "prixHT"),
  800.         ];
  801.         $tableau_class_cellule[] = [
  802.             "searchable" => false,
  803.             "className"  => "visible_export colonne_prixBase text-center",
  804.             "targets"    => [9],
  805.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "prixTTC"),
  806.         ];
  807.         $tableau_class_cellule[] = [
  808.             "searchable" => false,
  809.             "className"  => "visible_export colonne_prixBase text-center",
  810.             "targets"    => [10],
  811.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "marge"),
  812.         ];
  813.         $tableau_class_cellule[] = [
  814.             "searchable" => false,
  815.             "className"  => "visible_export colonne_prixBase text-right",
  816.             "targets"    => [11],
  817.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "pump"),
  818.         ];
  819.         $tableau_class_cellule[] = [
  820.             "searchable" => true,
  821.             "className"  => "visible_export colonne_prixBase text-center",
  822.             "targets"    => [12],
  823.             "visible"    => $serviceColonneTableau->getColonneUtilisateur(Article::class, "stock"),
  824.         ];
  825.         $tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_prixBase", "targets" => [13], "visible" => true];
  826.         //$tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_prixBase","targets"=>array(13),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Article::class,"type"));
  827.         */
  828.         $tableau_class_cellule[] = ["searchable" => false"orderable" => false"className" => "colonne_id""targets" => [4], "visible" => true];
  829.         $categorie_enfants         = [];
  830.         $categorie_enfants_enfants = [];
  831.         $repo_categorie_article    $em->getRepository(Categorie::class);
  832.         $categorie_article_racine  $repo_categorie_article->findBy(["categorieParent" => 1]);
  833.         $repo_marque_article $em->getRepository(Marque::class);
  834.         $marque_article      $repo_marque_article->findBy([], ['libelle' => 'ASC']);
  835.         $repo_type_article $em->getRepository(Type::class);
  836.         $type_article      $repo_type_article->findBy([], ['libelle' => 'ASC']);
  837.         $param $request->query->all();
  838.         //if(count($param) == 0) $param['mouvemente'] = '0';
  839.         if (array_key_exists('categorie_article'$param) and $param["categorie_article"] > 0) {
  840.             $parentTmp $repo_categorie_article->find($param["categorie_article"]);
  841.             if (is_object($parentTmp)) {
  842.                 $categorie_enfants $repo_categorie_article->findBy(["categorieParent" => $parentTmp]);
  843.             }
  844.         }
  845.         if (array_key_exists('sous_categorie_article'$param) and $param["sous_categorie_article"] > 0) {
  846.             $parent2 $repo_categorie_article->find($param["sous_categorie_article"]);
  847.             if (is_object($parent2)) {
  848.                 $categorie_enfants_enfants $repo_categorie_article->findBy(["categorieParent" => $parent]);
  849.             }
  850.         }
  851.         //\Doctrine\Common\Util\Debug::dump($param);
  852.         //    $param["mouvemente"]=1;
  853.         $this->datatable($datatable$request$em$translator);
  854.         //$parent =  $request->query->get('parent');
  855.         if ($parent == '' or array_key_exists('marque'$param)) {
  856.             return $this->render('Articles/Article/lister.html.twig', [
  857.                 'name'                        => 'article',
  858.                 'tableauClassColonne'         => $tableau_class_cellule,
  859.                 'parametres'                  => $param,
  860.                 "categorie_article"           => $categorie_article_racine,
  861.                 "sous_categorie_article"      => $categorie_enfants,
  862.                 "sous_sous_categorie_article" => $categorie_enfants_enfants,
  863.                 "marque"                      => $marque_article,
  864.                 "type"                        => $type_article,
  865.                 "parent"                      => $parent,
  866.                 //'mouvemente' => $mouvemente
  867.             ]);
  868.         } else {
  869.             return $this->render('Articles/Article/lister-datatable.html.twig', [
  870.                 'name'                        => 'article',
  871.                 'tableauClassColonne'         => $tableau_class_cellule,
  872.                 'parametres'                  => $param,
  873.                 "categorie_article"           => $categorie_article_racine,
  874.                 "sous_categorie_article"      => $categorie_enfants,
  875.                 "sous_sous_categorie_article" => $categorie_enfants_enfants,
  876.                 "marque"                      => $marque_article,
  877.                 "type"                        => $type_article,
  878.                 "parent"                      => $parent,
  879.                 //'mouvemente' => $mouvemente
  880.             ]);
  881.         }
  882.     }
  883.     /**
  884.      * set datatable configs
  885.      *
  886.      * @return \App\Library\Datatable\Util\Datatable
  887.      */
  888.     private function datatable(Datatable $datatableRequest $requestEntityManagerInterface $emTranslatorInterface $translator)
  889.     {
  890.         $param      $request->query->all();
  891.         $parametres = [];
  892.         $parent     $request->query->get('parent');
  893.         if ($parent == '') {
  894.             $where " AND x.parent is null";
  895.         } else {
  896.             $where                " AND x.parent = :parent";
  897.             $parametres['parent'] = $parent;
  898.         }
  899.         if ( ! array_key_exists('parametres'$param)) {
  900.             $param["parametres"] = $param;
  901.         }
  902.         //$reference     = $request->query->get('reference');
  903.         $conn $em->getConnection();
  904.         $conn->getConfiguration()->setSQLLogger(null);
  905.         $qb $em->createQueryBuilder();
  906.         $qb->select(
  907.             "
  908.                     x.id as x_id,
  909.                     x.libelle as x_libelle,
  910.                     x.reference as x_reference"/*.","
  911.                     ."x.descriptionCourte as x_descriptionCourte,
  912.                     x.prixVente as x_prixVente,
  913.                     x.prixBase as x_prixBase,
  914.                     x.tauxMarge as x_tauxMarge,"
  915.             //."x.cpump as x_cpump,"
  916.             ."x.pump as x_pump,"
  917.             ."x.stock as x_stock,
  918.                     x.statut as x_statut,
  919.                     m.libelle as m_libelle,
  920.                     m.id as m_id,
  921.                     t.libelle as t_libelle,
  922.                     t.id as t_id,
  923.                     r.id as r_id,
  924.                     r.tauxDefaut as r_tauxDefaut,
  925.                     x.referenceAppel10 as x_referenceAppel10
  926.                     "
  927.             */
  928.         )
  929.            ->orderBy('x.libelle''ASC')
  930.            ->from(Article::class, "x")
  931.            ->leftJoin('x.marque''m')
  932.            ->leftJoin('x.type''t')
  933.            ->leftJoin('x.regleTaxe''r'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  934.         if (array_key_exists('reference'$param['parametres']) and $param['parametres']['reference'] != "") {
  935.             $where " AND (x.reference is null or x.reference='')";
  936.         }
  937.         else if (array_key_exists('oqton'$param['parametres']) and $param['parametres']['oqton'] != "") {
  938.             $where " AND (x.oqtonUrn is null or x.oqtonUrn = '' or x.oqtonMaterialUrn is null or x.oqtonMaterialUrn = '') AND x.type = 1";
  939.         }
  940.         if (array_key_exists('categorie_article'$param['parametres']) and $param['parametres']['categorie_article'] != "") {
  941.             $qb->join('x.articleCategorie''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  942.             $qb->join('ac.categorie''cat'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  943.             $where                   .= " AND cat.id = :categorie";
  944.             $parametres['categorie'] = $param['parametres']['categorie_article'];
  945.             if (array_key_exists('sous_categorie_article'$param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
  946.                 $qb->join('x.articleCategorie''ac2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  947.                 $qb->join('ac2.categorie''cat2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  948.                 $where                    .= " AND cat2.id = :categorie2";
  949.                 $parametres['categorie2'] = $param['parametres']['sous_categorie_article'];
  950.             }
  951.             if (array_key_exists('sous_sous_categorie_article'$param['parametres']) and $param['parametres']['sous_sous_categorie_article'] != "") {
  952.                 $qb->join('x.articleCategorie''ac3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  953.                 $qb->join('ac3.categorie''cat3'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  954.                 $where                    .= " AND cat3.id = :categorie3";
  955.                 $parametres['categorie3'] = $param['parametres']['sous_sous_categorie_article'];
  956.             }
  957.         }
  958.         if (array_key_exists('marque'$param['parametres']) and $param['parametres']['marque'] != "") {
  959.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  960.             $where                .= " AND x.marque = :marque";
  961.             $parametres['marque'] = $param['parametres']['marque'];
  962.         }
  963.         if (array_key_exists('type'$param['parametres']) and $param['parametres']['type'] != "") {
  964.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  965.             $where              .= " AND x.type = :type";
  966.             $parametres['type'] = $param['parametres']['type'];
  967.         }
  968.         if (array_key_exists('mouvemente'$param['parametres']) and $param['parametres']['mouvemente'] != "") {
  969.             //$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  970.             $where                    .= " AND x.mouvemente = :mouvemente";
  971.             $parametres['mouvemente'] = $param['parametres']['mouvemente'];
  972.         }
  973.         if (array_key_exists('archive'$param['parametres']) and $param['parametres']['archive'] == "1") {
  974.             //$qb->leftJoin('x.articleMarketPlace', 'amp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  975.             $where .= " AND (x.archive = 1 )";
  976.         } else {
  977.             if (array_key_exists('arret'$param['parametres']) and $param['parametres']['arret'] == "1") {
  978.             } else {
  979.                 $where .= " AND (x.archive = 0 or x.archive is null )";
  980.             }
  981.         }
  982.         if (count($param['parametres']) == 0) {
  983.             $where .= "AND (x.mouvemente = :mouvemente)";
  984.             $parametres['mouvemente'] = 0;
  985.         }
  986.         //$qb->where('x.temporaire is null and (x.archive = 0 or x.archive is null)'.$where);
  987.         $qb->where('x.temporaire is null '.$where);
  988.         //echo $where;
  989.         if (count($parametres) > 0) {
  990.             $qb->setParameters($parametres);
  991.         }
  992.         //$qb->orderBy("x.id", "desc");
  993.         //$qb->OrderBy('x.id', 'DESC');
  994.         $datatable $datatable
  995.             ->setFields(
  996.                 [
  997.                     $translator->trans("ID")          => 'x.id',
  998.                     //$translator->trans("Img")         => 'x.reference',
  999.                     $translator->trans("Réf")         => 'x.reference',
  1000.                     $translator->trans("Libellé")     => 'x.libelle',
  1001.                     /*
  1002.                     $translator->trans("Marque")      => 'm.libelle',
  1003.                     $translator->trans("Desc courte") => 'x.descriptionCourte',
  1004.                     $translator->trans("Prix base") => 'x.prixBase',
  1005.                     $translator->trans("Prix HT")   => 'x.prixVente',
  1006.                     $translator->trans("Prix TTC")  => 'x.prixVente',
  1007.                     $translator->trans("Marge")     => 'x.tauxMarge',
  1008.                     $translator->trans("PUMP")      => 'x.pump',
  1009.                     $translator->trans("Stock")     => 'x.stock',
  1010.                     $translator->trans("Ref appel") => 'x.referenceAppel10',
  1011.                     //$translator->trans("Type") =>  't.libelle',
  1012.                     */
  1013.                     $translator->trans("Actions")   => 'x.id',
  1014.                     "_identifier_"                  => 'x.id'
  1015.                     /*
  1016.                  $translator->trans("AA") =>  'x.id',
  1017.                  $translator->trans("BB") =>  'x.libelle',
  1018.                   "cc" => 'x.libelle',
  1019.                   "dd" => 'x.libelle',
  1020.                   "ee" => 'x.libelle',
  1021.                   "ff" => 'x.libelle',
  1022.                   "gg" => 'x.libelle',
  1023.                   "hh" => 'x.libelle',
  1024.                   "ii" => 'x.libelle',
  1025.                   "jj" => 'x.libelle',
  1026.                   "kk" => 'x.libelle',
  1027.                   "ll" => 'x.libelle',
  1028.                   "_identifier_" => 'x.id'
  1029.                   */
  1030.                 ]
  1031.             )
  1032.             ->setRenderers(
  1033.                 [
  1034.                     => [
  1035.                         'view'   => 'FO/DataTable/article_id.html.twig',
  1036.                         'params' => [
  1037.                             'edit_route' => 'dtc_article_modifier',
  1038.                         ],
  1039.                     ],
  1040.                     /*
  1041.                     1 => [
  1042.                         'view'   => 'FO/DataTable/article_image.html.twig',
  1043.                         'params' => [
  1044.                             'edit_route' => 'dtc_article_modifier',
  1045.                         ],
  1046.                     ],
  1047.                     */
  1048.                     => [
  1049.                         'view'   => 'FO/DataTable/article_id.html.twig',
  1050.                         'params' => [
  1051.                             'edit_route' => 'dtc_article_modifier',
  1052.                         ],
  1053.                     ],
  1054.                     => [
  1055.                         'view'   => 'FO/DataTable/article_id.html.twig',
  1056.                         'params' => [
  1057.                             'edit_route'   => 'dtc_article_modifier',
  1058.                             'typeDocument' => 'article',
  1059.                         ],
  1060.                     ],
  1061.                     /*
  1062.                     4 => [
  1063.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1064.                         'params' => [
  1065.                             'edit_route'   => 'dtc_marque_modifier',
  1066.                             'typeDocument' => 'marque_article',
  1067.                         ],
  1068.                     ],
  1069.                     6  => [
  1070.                         'view'   => 'FO/DataTable/prix.html.twig',
  1071.                         'params' => [
  1072.                             'surveillance'   => false,
  1073.                             'afficher_total' => false,
  1074.                         ],
  1075.                     ],
  1076.                     7  => [
  1077.                         'view'   => 'FO/DataTable/article_prixSuivi.html.twig',
  1078.                         'params' => [
  1079.                             'surveillance' => false,
  1080.                         ],
  1081.                     ],
  1082.                     8  => [
  1083.                         'view' => 'FO/DataTable/article_prix_article_ttc.html.twig',
  1084.                     ],
  1085.                     /*
  1086.                   8 => array(
  1087.                       'view' => 'FO/DataTable/pourcentage.html.twig',
  1088.                   ),
  1089.                    *
  1090.                    */
  1091.                     /*
  1092.                     9  => [
  1093.                         'view' => 'FO/DataTable/taux-marge-article.html.twig',
  1094.                     ],
  1095.                     10 => [
  1096.                         'view' => 'FO/DataTable/prix.html.twig',
  1097.                     ],
  1098.                     */
  1099.                     => [
  1100.                         'view'   => 'FO/DataTable/article_actions.html.twig',
  1101.                         'params' => [
  1102.                             'edit_route'      => 'dtc_article_modifier',
  1103.                             //'dupliquer_route' => 'dtc_article_dupliquer_formulaire',
  1104.                             'objet'           => Article::class,
  1105.                         ],
  1106.                     ],
  1107.                 ]
  1108.             )
  1109.             ->setSearch(true)
  1110.             ->setGlobalSearch(1)
  1111.             //->setFilteringType([2 => 'e', 3 => 'e'])
  1112.             ->setSearchFields([1,2])
  1113.             ->setMultiple(
  1114.                 [
  1115.                     'delete' => [
  1116.                         'title' => 'Non disponible',
  1117.                         'route' => 'dtc_client_liste_supprimer',
  1118.                     ],
  1119.                 ]
  1120.             )
  1121.             ->setOrder("x.id""desc");
  1122.         $datatable->getQueryBuilder()->setDoctrineQueryBuilder($qb);
  1123.         return $datatable;
  1124.     }
  1125.     /**
  1126.      * @Route("/articles/grid", name="dtc_article_liste_grid")
  1127.      */
  1128.     public function gridAction(Request $requestDatatable $datatableEntityManagerInterface $entityManagerTranslatorInterface $translator)
  1129.     {
  1130.         return $this->datatable($datatable$request$entityManager$translator)->execute();
  1131.     }
  1132.     /**
  1133.      * @Route("/article/statut/{id}", name="dtc_article_changer_statut")
  1134.      */
  1135.     public function changeStatutAction(Article $articleEntityManagerInterface $em)
  1136.     {
  1137.         if ($article->getStatut() == 1) {
  1138.             $article->setStatut(0);
  1139.         } else {
  1140.             $article->setStatut(1);
  1141.         }
  1142.         $em->persist($article);
  1143.         $em->flush();
  1144.         $headers = [
  1145.             'Content-Type'                 => 'application/json',
  1146.             'Access-Control-Allow-Origin'  => '*',
  1147.             'Access-Control-Allow-Methods' => 'POST',
  1148.         ];
  1149.         return new JsonResponse(['data' => '1'], 200$headers);
  1150.     }
  1151.     /**
  1152.      * @Route("/article/recherche", name="dtc_article_recherche")
  1153.      */
  1154.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginatorArticleService $articleService)
  1155.     {
  1156.         //exit;
  1157.         $user           $this->getUser();
  1158.         $q              $request->query->get('q');
  1159.         $produitInterne $request->query->get('interne');
  1160.         $articleAExclure  $request->query->get('article');
  1161.         $articlesAExclure = [];
  1162.         if ($articleAExclure !== null && $articleAExclure != '') {
  1163.             $article $em->getRepository(Article::class)->find($articleAExclure);
  1164.             $articlesAExclure[] = $articleAExclure;
  1165.             if (is_object($article)) {
  1166.                 foreach ($article->getArticlesComposants() as $articleComposant) {
  1167.                     $articlesAExclure[] = $articleComposant->getArticle()->getId();
  1168.                 }
  1169.             }
  1170.         }
  1171.         $page $request->query->getInt('page'1);
  1172.         $repo $em->getRepository(Article::class);
  1173.         $tri_reference $request->query->get('tri_reference');
  1174.         $tri_libelle   $request->query->get('tri_libelle');
  1175.         $tri_prix      $request->query->get('tri_prix');
  1176.         $tri_stock     $request->query->get('tri_stock');
  1177.         if ($tri_reference == "" and $tri_libelle == "" and $tri_prix == "" and $tri_stock == "" and $user->getTriRechercheArticle() != "") {
  1178.             //if($user->getTriRechercheArticle() == "tri_reference") $tri_reference = $user->getOrdreTriRechercheArticle();
  1179.             //else if($user->getTriRechercheArticle() == "tri_libelle") $tri_libelle = $user->getOrdreTriRechercheArticle();
  1180.             //else if($user->getTriRechercheArticle() == "tri_prix") $tri_prix = $user->getOrdreTriRechercheArticle();
  1181.             //else if($user->getTriRechercheArticle() == "tri_stock") $tri_stock = $user->getOrdreTriRechercheArticle();
  1182.         }
  1183.         if ($request->query->get('fournisseur') != '') {
  1184.             $results $repo->getRechercheArticleSelect2(
  1185.                 $q,
  1186.                 $produitInterne,
  1187.                 $request->query->get('fournisseur'),
  1188.                 $articlesAExclure,
  1189.                 $request->query->get('stock'),
  1190.                 $request->query->get('reference_search'),
  1191.                 $request->query->get('libelle_search'),
  1192.                 $request->query->get('prix_search'),
  1193.                 $tri_reference,
  1194.                 $tri_libelle,
  1195.                 $tri_prix,
  1196.                 $tri_stock,
  1197.                 $request->query->get('categorie'),
  1198.                 $request->query->get('mouvemente'),
  1199.                 $request->query->get('inventaire')
  1200.             );
  1201.         } elseif ($request->query->get('ff') == 'true') {//FactureFournisseur
  1202.             $results $repo->getRechercheArticleSelect3(
  1203.                 $q,
  1204.                 $produitInterne,
  1205.                 $request->query->get('fournisseur'),
  1206.                 $articlesAExclure,
  1207.                 $request->query->get('stock'),
  1208.                 $request->query->get('reference_search'),
  1209.                 $request->query->get('libelle_search'),
  1210.                 $request->query->get('prix_search'),
  1211.                 $tri_reference,
  1212.                 $tri_libelle,
  1213.                 $tri_prix,
  1214.                 $tri_stock,
  1215.                 $request->query->get('categorie'),
  1216.                 $request->query->get('mouvemente'),
  1217.                 $request->query->get('inventaire')
  1218.             );
  1219.         } else {
  1220.             $results $repo->getRechercheArticleSelect(
  1221.                 $q,
  1222.                 $produitInterne,
  1223.                 $request->query->get('fournisseur'),
  1224.                 $articlesAExclure,
  1225.                 $request->query->get('stock'),
  1226.                 $request->query->get('reference_search'),
  1227.                 $request->query->get('libelle_search'),
  1228.                 $request->query->get('prix_search'),
  1229.                 $tri_reference,
  1230.                 $tri_libelle,
  1231.                 $tri_prix,
  1232.                 $tri_stock,
  1233.                 $request->query->get('categorie'),
  1234.                 $request->query->get('mouvemente'),
  1235.                 $request->query->get('inventaire'),
  1236.                 $request->query->get('declinaisons')
  1237.             );
  1238.         }
  1239.         $triRechercheArticle      "";
  1240.         $ordreTriRechercheArticle "";
  1241.         $majTri                   false;
  1242.         if ($request->query->get('mouvemente') != "") {
  1243.             if ($request->query->get('mouvemente') == "1" && ( ! $user->getMouvementeRechercheArticle() or is_null($user->getMouvementeRechercheArticle()))) {
  1244.                 $user->setMouvementeRechercheArticle(true);
  1245.                 $em->persist($user);
  1246.                 $em->flush();
  1247.             } elseif ($request->query->get('mouvemente') == "0" && ($user->getMouvementeRechercheArticle() or is_null($user->getMouvementeRechercheArticle()))) {
  1248.                 $user->setMouvementeRechercheArticle(false);
  1249.                 $em->persist($user);
  1250.                 $em->flush();
  1251.             }
  1252.         }
  1253.         if ($request->query->get('tri_reference') != "") {
  1254.             $triRechercheArticle      "tri_reference";
  1255.             $ordreTriRechercheArticle $request->query->get('tri_reference');
  1256.             $majTri                   true;
  1257.         } elseif ($request->query->get('tri_libelle') != "") {
  1258.             $triRechercheArticle      "tri_libelle";
  1259.             $ordreTriRechercheArticle $request->query->get('tri_libelle');
  1260.             $majTri                   true;
  1261.         } elseif ($request->query->get('tri_prix') != "") {
  1262.             $triRechercheArticle      "tri_prix";
  1263.             $ordreTriRechercheArticle $request->query->get('tri_prix');
  1264.             $majTri                   true;
  1265.         } elseif ($request->query->get('tri_stock') != "") {
  1266.             $triRechercheArticle      "tri_stock";
  1267.             $ordreTriRechercheArticle $request->query->get('tri_stock');
  1268.             $majTri                   true;
  1269.         }
  1270.         //echo $user->getEmail();
  1271.         if ($majTri) {
  1272.             $user->setTriRechercheArticle($triRechercheArticle);
  1273.             $user->setOrdreTriRechercheArticle($ordreTriRechercheArticle);
  1274.             $em->persist($user);
  1275.             $em->flush();
  1276.         }
  1277.         $pagination $paginator->paginate(
  1278.             $results/* query NOT result */
  1279.             $request->query->getInt('page'$page)/*page number*/,
  1280.             20/*limit per page*/
  1281.         );
  1282.         $pagination_results $pagination->getItems();
  1283.         $tabPremiereLigne = [
  1284.             "reference_appel_1"     => "",
  1285.             "reference_appel_2"     => "",
  1286.             "reference_appel_3"     => "",
  1287.             "reference_appel_4"     => "",
  1288.             "reference_appel_5"     => "",
  1289.             "reference_appel_6"     => "",
  1290.             "reference_appel_7"     => "",
  1291.             "reference_appel_8"     => "",
  1292.             "reference_appel_9"     => "",
  1293.             "reference_appel_10"    => "",
  1294.             "reference_appel_11"    => "",
  1295.             "arret_gamme"           => "",
  1296.             "virtuel"               => "",
  1297.             "libelle"               => "Sélectionnez",
  1298.             "libelle_construit"     => "Sélectionnez",
  1299.             "id"                    => "",
  1300.             "reference_fournisseur" => "",
  1301.             "prixVente"             => "",
  1302.             "prixAchat"             => "",
  1303.             "poids"                 => "",
  1304.             "stock"                 => 0,
  1305.             "stock_reserve"         => 0,
  1306.             "cpump"                 => "",
  1307.             "reference"             => "",
  1308.             "dispo"                 => "",
  1309.         ];
  1310.         //$option_placeholde = array("libelle"=>"Sélectionnez","id"=>"","stock"=>"","stock_reserve"=>"");
  1311.         $option_placeholde $tabPremiereLigne;
  1312.         if ($request->query->getInt('page'1) == 1) {
  1313.             array_unshift($pagination_results$option_placeholde);
  1314.         }
  1315.         $pagination->setItems($pagination_results);
  1316.         /*if($q == "" && $page < 2) {
  1317.              $option_placeholde = array("libelle"=>"Recherche à partir du libellé ou de la référence article","id"=>"","reference"=>"Réf","prixVente"=>"Prix","stock"=>"Stock");
  1318.             array_unshift($pagination_results, $option_placeholde);
  1319.             $pagination->setItems($pagination_results);
  1320.         }
  1321.         */
  1322.         $option_placeholde = [
  1323.             "libelle"             => "Sélectionnez",
  1324.             "id"                  => "",
  1325.             "reference"           => "",
  1326.             "prixVente"           => "",
  1327.             "stock"               => 0,
  1328.             "prixAchat"           => "",
  1329.             "dispo"               => "d",
  1330.             "nbArticleInventaire" => "",
  1331.         ];
  1332.         if ($request->query->getInt('page'1) == 1) {
  1333.             array_unshift($pagination_results$option_placeholde);
  1334.         }
  1335.         //print_r($pagination_results);
  1336.         $tabFinal = [];
  1337.         //foreach($pagination as $p) {
  1338.         for ($i 1$i count($pagination_results); $i++) {
  1339.             //print_r($pagination_results[$i]);
  1340.             $tabTemp = [];
  1341.             $continuer true;
  1342.             if ($request->query->get('declinaisons') == true) {
  1343.                 $enfants $repo->findBy(["articleDeclinaisonParent" => $pagination_results[$i]["id"]]);
  1344.                 if (count($enfants) > 0) {
  1345.                     //echo "TEST ".$pagination_results[$i]["id"];
  1346.                     $continuer false;
  1347.                 }
  1348.             }
  1349.             if ($continuer) {
  1350.                 $tabTemp $pagination_results[$i];
  1351.                 if ( ! array_key_exists('virtuel'$tabTemp) or $tabTemp["virtuel"] == "") {
  1352.                     $tabTemp["virtuel"] = 0;
  1353.                 }
  1354.                 $tabTemp["dispo"] = 0;
  1355.                 /*
  1356.                 {% if a.article.virtuel == 0 %}
  1357.                 {% set dispo = a.article.stock - a.article.stockReserve  %}
  1358.                 {% else %}
  1359.                     {% set dispo = dtc_article.getStock(a.article)  %}
  1360.                 {% endif %}
  1361.                 {% if a.commande.typeDocumentCommercial.id is defined and a.commande.typeDocumentCommercial.id in [2,3,4,11] %}
  1362.                     {% set dispo = dispo + a.quantite  %}
  1363.                 {% endif %}
  1364.                 */
  1365.                 if ($tabTemp["virtuel"] === 0) {
  1366.                     $tabTemp["dispo"] = $tabTemp["stock"] - $tabTemp["stock_reserve"];
  1367.                 } else {
  1368.                     //echo "HHHH";
  1369.                     //{% set dispo = dtc_article.getStock(a.article)  %}
  1370.                     $objArticle       $em->getRepository(Article::class)->find($tabTemp["id"]);
  1371.                     $tabTemp["dispo"] = $articleService->getStock($objArticle);
  1372.                 }
  1373.                 $tabTemp["dispo"] = max(0$tabTemp["dispo"]);
  1374.                 $tabFinal[] = $tabTemp;
  1375.             }
  1376.         }
  1377.         //print_r($tabFinal);
  1378.         //print_r($tabFinal);
  1379.         //$pagination->setItems($pagination_results);
  1380.         $pagination->setItems($tabFinal);
  1381.         //print_r($pagination);
  1382.         //$em->getConnection()->close();
  1383.         $serializer SerializerBuilder::create()->build();
  1384.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  1385.     }
  1386.     /**
  1387.      * @Route("/article/search", name="dtc_article_search")
  1388.      */
  1389.     public function searchAction(Request $requestEntityManagerInterface $em)
  1390.     {
  1391.         $query   $request->query->get('q');
  1392.         $results $em->getRepository(Article::class)->findByRefOrName($query);
  1393.         $datas = [];
  1394.         foreach ($results as $result) {
  1395.             $article $em->getRepository(Article::class)->find($result['id']);
  1396.             if (is_object($article)) {
  1397.                 $result['cpump'] = $article->getCpump();
  1398.             }
  1399.             $datas[] = $result;
  1400.         }
  1401.         $response = new JsonResponse();
  1402.         $response->setData([
  1403.                                'items' => $datas,
  1404.                            ]);
  1405.         return $response;
  1406.     }
  1407.     /**
  1408.      * @Route("/article/toolbar/commande", name="dtc_article_ajax_toolbar_commande")
  1409.      */
  1410.     public function ajaxToolbarCommandeAction(Request $requestEntityManagerInterface $emArticleService $articleService)
  1411.     {
  1412.         $query               $request->query->get('article');
  1413.         $repoArticle         $em->getRepository(Article::class);
  1414.         $repoArticleCommande $em->getRepository(ArticleCommande::class);
  1415.         $article             $repoArticle->find($query);
  1416.         $retour              = [];
  1417.         if (is_object($article)) {
  1418.             $retour['ref']          = $article->getReference();
  1419.             $retour['equivalentes'] = [];
  1420.             foreach ($article->getRefsEquivalentes() as $refEquivalente) {
  1421.                 $ref                        = [];
  1422.                 $ref['id']                  = $refEquivalente->getId();
  1423.                 $ref['codeArticle']         = $refEquivalente->getReference();
  1424.                 $ref['libelle']             = $refEquivalente->getLibelle();
  1425.                 $ref['besoin']              = '';
  1426.                 $ref['remise']              = '0';
  1427.                 $ref['remiseSuplementaire'] = '0';
  1428.                 $ref['prixVente']           = $refEquivalente->getPrixVente();
  1429.                 $ref['prix_NET']            = 0;
  1430.                 $etat                       true;
  1431.                 foreach ($refEquivalente->getConditionsAchat() as $cond) {
  1432.                     if ($cond->getDefaut() == 1) {
  1433.                         if ($cond->getRemise() != null) {
  1434.                             $ref['remise'] = $cond->getRemise();
  1435.                         }
  1436.                         if ($cond->getRemiseSupplementaire() != null) {
  1437.                             $ref['remiseSuplementaire '] = $cond->getRemiseSupplementaire();
  1438.                         }
  1439.                         if ($cond->getPrixAchatNet() != null) {
  1440.                             $ref['prix_NET'] = $cond->getPrixAchatNet();
  1441.                         }
  1442.                         $etat false;
  1443.                     }
  1444.                 }
  1445.                 if ($etat) {
  1446.                     $ref['remise']               = 0;
  1447.                     $ref['remiseSuplementaire '] = 0;
  1448.                     $ref['prix_NET']             = 0;
  1449.                 }
  1450.                 //$ref['dispo'] = $refEquivalente->getStock() - $refEquivalente->getStockReserve();
  1451.                 $ref['dispo']             = $refEquivalente->getDispo();
  1452.                 $retour['equivalentes'][] = $ref;
  1453.             }
  1454.             //tri des équivalences par dispo DESC
  1455.             if (count($retour['equivalentes'])) {
  1456.                 foreach ($retour['equivalentes'] as $key => $row) {
  1457.                     $dispo[$key] = $row['dispo'];
  1458.                 }
  1459.                 array_multisort($dispoSORT_DESC$retour['equivalentes']);
  1460.             }
  1461.             $retour['stock']   = $article->getStock();
  1462.             $retour['qteMini'] = $article->getSeuilMiniCommandeFournisseur();
  1463.             //$retour['emplacement'] = $article->getNiveauUn().'-'.$article->getNiveauDeux().'-'.$article->getNiveauTrois().'-'.$article->getNiveauQuatre();
  1464.             $retour['emplacement'] = "";
  1465.             foreach ($article->getEmplacements() as $e) {
  1466.                 $libelleEmplacement "";
  1467.                 if (is_object($e->getNiveauUn())) {
  1468.                     $libelleEmplacement .= "-".$e->getNiveauUn()->getLibelle();
  1469.                 }
  1470.                 if (is_object($e->getNiveauDeux())) {
  1471.                     $libelleEmplacement .= "-".$e->getNiveauDeux()->getLibelle();
  1472.                 }
  1473.                 if (is_object($e->getNiveauTrois())) {
  1474.                     $libelleEmplacement .= "-".$e->getNiveauTrois()->getLibelle();
  1475.                 }
  1476.                 if (is_object($e->getNiveauQuatre())) {
  1477.                     $libelleEmplacement .= "-".$e->getNiveauQuatre()->getLibelle();
  1478.                 }
  1479.                 $libelleEmplacement $e->getLibelle();
  1480.                 //$libelleEmplacement .= "<span style='font-size:10px;'>(S".$e->getStock().") (R".$e->getStockReserve().")</span>";
  1481.                 $retour['emplacement'] = $retour['emplacement']."<div>".$libelleEmplacement."</div>";
  1482.             }
  1483.             /*
  1484.                         {% set rals = dtc_article.ralClientPositifNegatif(article.id) %}
  1485.                         {{rals.ralClient}}{% if rals.ralClientNegatif != 0 %} ({{rals.ralClientPositif}} {{rals.ralClientNegatif}}){% endif %}
  1486.                         */
  1487.             $rals_calcul $articleService->ralClientPositifNegatif($article->getId());
  1488.             $chaine_ral  $rals_calcul["ralClientPositif"]." | ".$rals_calcul["ralClientNegatif"];
  1489.             $rals_calcul_f $articleService->ralFournisseurPositifNegatif($article->getId());
  1490.             $chaine_ral_f  $rals_calcul_f["ralFournisseurPositif"]." | ".$rals_calcul_f["ralFournisseurNegatif"];
  1491.             //$retour['ralClient'] = $repoArticleCommande->getRalClient($article);
  1492.             //$retour['ralClient'] = $article->getStockReserve();
  1493.             $retour['ralClient']       = $chaine_ral;
  1494.             $retour['prixBase']        = $article->getPrixBase();
  1495.             $retour['detailRalClient'] = $repoArticleCommande->getRalClientEtCmdAssociees($article);
  1496.             //$retour['ralFournisseur'] = $repoArticleCommande->getRalFournisseur($article);
  1497.             $retour['ralFournisseur'] = $chaine_ral_f;
  1498.         }
  1499.         $response = new JsonResponse();
  1500.         $response->setData([
  1501.                                'retour' => $retour,
  1502.                            ]);
  1503.         return $response;
  1504.     }
  1505.     /**
  1506.      * @Route("", name="")
  1507.      */
  1508.     public function historiqueVenteAction(Article $articleEntityManagerInterface $em)
  1509.     {
  1510.         $historique    $em->getRepository(Article::class)->gethistoriqueVente($article->getId());
  1511.         $nbVentesMois  $em->getRepository(Article::class)->getNbArticlesVendus($article->getId(), 30);
  1512.         $nbVentesAnnee $em->getRepository(Article::class)->getNbArticlesVendus($article->getId(), 365);
  1513.         return $this->render('Articles/Article/historique.html.twig', [
  1514.             'historique'    => $historique,
  1515.             'nbVentesMois'  => $nbVentesMois,
  1516.             'nbVentesAnnee' => $nbVentesAnnee,
  1517.         ]);
  1518.     }
  1519.     /*
  1520.      * set datatable configs
  1521.      *
  1522.      * @return \App\Library\Datatable\Util\Datatable
  1523.      */
  1524.     private function datatableApplications($articleDatatable $datatableTranslatorInterface $translator)
  1525.     {
  1526.         $datatable->setDatatableId('dta-applications')
  1527.                   ->setEntity(Application::class, "x")
  1528.                   ->setFields(
  1529.                       [
  1530.                           $translator->trans("Marque")  => 'm.libelle',
  1531.                           $translator->trans("Modele")  => 'mo.libelle',
  1532.                           $translator->trans("Type")    => 't.libelle',
  1533.                           $translator->trans("Actions") => 'x.id',
  1534.                           "_identifier_"                => 'x.id',
  1535.                       ]
  1536.                   )
  1537.                   ->setWhere(
  1538.                       'x.article = :article',
  1539.                       ['article' => $article]
  1540.                   )
  1541.                   ->addJoin('x.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1542.                   ->addJoin('x.modele''mo'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1543.                   ->addJoin('x.type''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1544.                   ->setRenderers(
  1545.                       [
  1546.                           => [
  1547.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  1548.                               'params' => [
  1549.                                   'supprimer_route' => 'dtc_application_supprimer',
  1550.                                   'id'              => $article->getId(),
  1551.                                   'type'            => "article",
  1552.                                   'entite'          => 'application',
  1553.                                   'objet'           => Application::class,
  1554.                               ],
  1555.                           ],
  1556.                       ]
  1557.                   )
  1558.                   ->setOrder("x.id""desc")
  1559.                   ->setSearch(true)
  1560.                   ->setSearchFields([012]);
  1561.         return $datatable;
  1562.     }
  1563.     /*
  1564.      * Grid action
  1565.      * @return Response
  1566.      */
  1567.     /**
  1568.      * @Route("/article/application/grid/{id}", name="dtc_article_application_liste_grid")
  1569.      */
  1570.     public function gridApplicationsAction(Article $articleDatatable $datatableTranslatorInterface $translator)
  1571.     {
  1572.         return $this->datatableApplications($article$datatable$translator)->execute();
  1573.     }
  1574.     /**
  1575.      * @Route("", name="")
  1576.      */
  1577.     public function listerPrixVentesAction(Article $articleDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1578.     {
  1579.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => true"orderable" => true];
  1580.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [1], "visible" => true"orderable" => true];
  1581.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [2], "visible" => true"orderable" => true];
  1582.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [3], "visible" => true"orderable" => true];
  1583.         $tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id""targets" => [4], "visible" => true"orderable" => true];
  1584.         $tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id""targets" => [5], "visible" => true"orderable" => true];
  1585.         $tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id""targets" => [6], "visible" => true"orderable" => true];
  1586.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [7], "visible" => true"orderable" => true];
  1587.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(8),"visible"=>true,"orderable"=>true);
  1588.         $this->datatableVentesOngletStats($article$datatable$em$translator);
  1589.         return $this->render('Articles/Article/lister-prix-ventes.html.twig', ['article' => $article'tableauClassColonne' => $tableau_class_cellule]);
  1590.     }
  1591.     /*
  1592.      * set datatable configs
  1593.      *
  1594.      * @return \App\Library\Datatable\Util\Datatable
  1595.      */
  1596.     private function datatableVentes($articleRequest $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1597.     {
  1598.         //dump($request);
  1599.         $columns $request->query->get('columns');
  1600. //        dd($columns);
  1601.         $where '((ac.article = :article and statut.ordre != :ordreStatutDoc) or (x.typeDocumentCommercial IN (:typeDoc) and acbl.article = :article and statut.ordre != :ordreStatutDoc))';
  1602.         if (empty($columns[9]['search']['value'])) {
  1603.             $where .= ' AND x.typeDocumentCommercial = 6';
  1604.         }
  1605.         $qb $em->createQueryBuilder();
  1606.         /*
  1607.         $qb->select("
  1608.                     x.id as x_id,
  1609.                     x.reference as x_reference
  1610.                     "
  1611.                     )
  1612.         ->from(Commande::class, 'x')
  1613.         ->leftJoin('x.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1614.         ->leftJoin('x.statutCommande', 'statut', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1615.         ->leftJoin(Commande::class, 'bl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN, 'with', 'bl.facture = x.id')
  1616.         ->leftJoin('bl.articleCommande', 'acbl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1617.         ->where('(ac.article = :article and statut.ordre != :ordreStatutDoc) or (c.typeDocumentCommercial IN (:typeDoc) and acbl.article = :article and statut.ordre != :ordreStatutDoc)')
  1618.         ;
  1619.         */
  1620.         $qb->select(
  1621.             "
  1622.                     x.id as x_id,
  1623.                     x.date as x_date,
  1624.                     x.reference as x_reference,
  1625.                     ac.totalHt as ac_totalHt,
  1626.                     cl.prenom as cl_prenom,
  1627.                     cl.nom as cl_nom,
  1628.                     ac.quantite as ac_quantite,
  1629.                     acbl.quantite as acbl_quantite,
  1630.                     ac.remise as ac_remise,
  1631.                     acbl.remise as acbl_remise,
  1632.                     x.referenceClient as x_referenceClient,
  1633.                     x.typeDocumentCommercial as type_id,
  1634.                     ac.prixBase as ac_prixBase,
  1635.                     acbl.prixBase as acbl_prixBase,
  1636.                     acbl.totalHt as acbl_totalHt
  1637.                     "
  1638.         )
  1639.            ->from(Commande::class, 'x')
  1640.            ->leftJoin('x.articleCommande''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1641.            ->leftJoin('x.statutCommande''statut'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1642.            ->leftJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1643.            //->leftJoin('x.typeDocumentCommercial', 'type', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1644.            ->leftJoin(Commande::class, 'bl''with''bl.facture = x.id')
  1645.            ->leftJoin('bl.articleCommande''acbl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1646.            ->where($where)
  1647.            ->orderBy('x.id''DESC');;
  1648.         $parametres = ["article" => $article"ordreStatutDoc" => 0"typeDoc" => [67]];
  1649.         $qb->setParameters($parametres);
  1650.         /*
  1651.         select c.id,c.reference,c.statut_commande_id,c.type_document_commercial_id,c.date,ac.commande_id
  1652.         from  commerciale__commande as c
  1653.         LEFT JOIN commerciale__article_commande as ac ON c.id = ac.commande_id
  1654.         LEFT JOIN commerciale__statut_commande as statut ON statut.id = c.statut_commande_id
  1655.         LEFT JOIN commerciale__commande as bl ON bl.facture_id = c.id
  1656.         LEFT JOIN commerciale__article_commande as acbl ON acbl.commande_id = bl.id
  1657.         where
  1658.         (ac.article_id = 1509827 and statut.ordre != 0) or (c.type_document_commercial_id IN ('.TypeDocumentCommercial::FACTURE.','.TypeDocumentCommercial::AVOIR.') and acbl.article_id = 1509827 and statut.ordre != 0)
  1659.         order by date desc
  1660.         */
  1661.         $datatable->setDatatableId('dta-ventes')
  1662.                   ->setFields(
  1663.                       [
  1664.                           $translator->trans("Date")            => 'x.date',
  1665.                           $translator->trans("Réf commande")    => 'x.reference',
  1666.                           $translator->trans("Réf cmde client") => 'x.referenceClient',
  1667.                           //$translator->trans("Date") =>  'x.date',
  1668.                           $translator->trans("Qté")             => 'ac.quantite',
  1669.                           $translator->trans("PU HT")           => 'ac.prixBase',
  1670.                           $translator->trans("Remise")          => 'ac.remise',
  1671.                           $translator->trans("Total HT")        => 'ac.totalHt',
  1672.                           $translator->trans("Nom client")      => 'cl.prenom',
  1673.                           $translator->trans("Prénom client")   => 'cl.nom',
  1674. //                          $translator->trans("Type")            => 'x.typeDocumentCommercial',
  1675.                           "_identifier_"                        => 'x.id',
  1676.                       ]
  1677.                   )
  1678.                   ->setRenderers(
  1679.                       [
  1680.                           => [
  1681.                               'view'   => 'FO/DataTable/avec_lien_edit_route_vente.html.twig',
  1682.                               'params' => [
  1683.                                   'edit_route'   => 'dtc_commande_modifier',
  1684.                                   'typeDocument' => 'true',
  1685.                               ],
  1686.                           ],
  1687.                           => [
  1688.                               'view' => 'FO/DataTable/heure.html.twig',
  1689.                           ],
  1690.                           => [
  1691.                               'view'   => 'FO/DataTable/prix_vente.html.twig',
  1692.                               'params' => [
  1693.                                   'champCible' => 'quantite',
  1694.                               ],
  1695.                           ],
  1696.                           => [
  1697.                               'view'   => 'FO/DataTable/prix_vente.html.twig',
  1698.                               'params' => [
  1699.                                   'champCible' => 'prixBase',
  1700.                               ],
  1701.                           ],
  1702.                           => [
  1703.                               'view'   => 'FO/DataTable/prix_vente.html.twig',
  1704.                               'params' => [
  1705.                                   'champCible' => 'totalHt',
  1706.                               ],
  1707.                           ],
  1708.                           /*3 => array(
  1709.                                     'view' => 'FO/DataTable/actions_modal.html.twig',
  1710.                                     'params' => array(
  1711.                                             'supprimer_route'  => 'dtc_application_supprimer',
  1712.                                             'id'    => $article->getId(),
  1713.                                             'type'    => "article",
  1714.                                             'entite'    => 'application',
  1715.                                             'objet' => "DTCVehiculesBundle:Application"
  1716.                                         ),
  1717.                                 )
  1718.                                 */
  1719.                       ]
  1720.                   )
  1721.                   ->setOrder("x.date""desc")
  1722.                   ->setSearch(true)
  1723.                   ->setSearchFields([129]);
  1724.         $datatable->getQueryBuilder()->setDoctrineQueryBuilder($qb);
  1725.         return $datatable;
  1726.     }
  1727.     private function olddatatableVentes($articleRequest $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1728.     {
  1729.         /*
  1730.         select c.id,c.reference,c.statut_commande_id,c.type_document_commercial_id,c.date,ac.commande_id
  1731.         from  commerciale__commande as c
  1732.         LEFT JOIN commerciale__article_commande as ac ON c.id = ac.commande_id
  1733.         LEFT JOIN commerciale__statut_commande as statut ON statut.id = c.statut_commande_id
  1734.         LEFT JOIN commerciale__commande as bl ON bl.facture_id = c.id
  1735.         LEFT JOIN commerciale__article_commande as acbl ON acbl.commande_id = bl.id
  1736.         where
  1737.         (ac.article_id = 1509827 and statut.ordre != 0) or (c.type_document_commercial_id IN ('.TypeDocumentCommercial::FACTURE.','.TypeDocumentCommercial::AVOIR.') and acbl.article_id = 1509827 and statut.ordre != 0)
  1738.         order by date desc
  1739.         */
  1740.         $datatable->setDatatableId('dta-ventes')
  1741.                   ->setEntity(ArticleCommande::class, "x")
  1742.                   ->setFields(
  1743.                       [
  1744.                           $translator->trans("Date")             => 'c.date',
  1745.                           $translator->trans("Réf commande")     => 'c.reference',
  1746.                           $translator->trans("Réf cmde clientY") => 'c.referenceClient',
  1747.                           //$translator->trans("Date") =>  'c.date',
  1748.                           $translator->trans("Qté")              => 'x.quantite',
  1749.                           $translator->trans("PU HT")            => 'x.prixBase',
  1750.                           $translator->trans("Remise")           => 'x.remise',
  1751.                           $translator->trans("Total HT")         => 'x.totalHt',
  1752.                           $translator->trans("Nom client")       => 'clt.prenom',
  1753.                           $translator->trans("Prénom client")    => 'clt.nom',
  1754.                           $translator->trans("Type")             => 't.libelle',
  1755.                           "_identifier_"                         => 'x.id',
  1756.                       ]
  1757.                   )
  1758.                   ->setWhere(
  1759.                       'x.article = :article and x.rar is NULL AND s.ordre != :ordreStatutDoc',
  1760.                       ['article' => $article'ordreStatutDoc' => "0"]
  1761.                   )
  1762.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  1763.                   ->addJoin('c.client''clt'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  1764.                   //->addJoin('c.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1765.                   ->addJoin('c.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1766.                   ->setRenderers(
  1767.                       [
  1768.                           => [
  1769.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1770.                               'params' => [
  1771.                                   'edit_route'   => 'dtc_commande_modifier',
  1772.                                   'typeDocument' => 'true',
  1773.                               ],
  1774.                           ],
  1775.                           => [
  1776.                               'view' => 'FO/DataTable/heure.html.twig',
  1777.                           ],
  1778.                           => [
  1779.                               'view' => 'FO/DataTable/prix.html.twig',
  1780.                           ],
  1781.                           => [
  1782.                               'view' => 'FO/DataTable/prix.html.twig',
  1783.                           ],
  1784.                           /*3 => array(
  1785.                                     'view' => 'FO/DataTable/actions_modal.html.twig',
  1786.                                     'params' => array(
  1787.                                             'supprimer_route'  => 'dtc_application_supprimer',
  1788.                                             'id'    => $article->getId(),
  1789.                                             'type'    => "article",
  1790.                                             'entite'    => 'application',
  1791.                                             'objet' => "DTCVehiculesBundle:Application"
  1792.                                         ),
  1793.                                 )
  1794.                                 */
  1795.                       ]
  1796.                   )
  1797.                   ->setOrder("x.id""desc")
  1798.                   ->setSearch(true)
  1799.                   ->setSearchFields([129]);
  1800.         return $datatable;
  1801.     }
  1802.     /**
  1803.      * @Route("/article/ventes/grid/{id}", name="dtc_article_vente_liste_grid")
  1804.      */
  1805.     public function gridVentesAction(Article $articleRequest $requestDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1806.     {
  1807.         return $this->datatableVentes($article$request$datatable$em$translator)->execute();
  1808.     }
  1809.     /**
  1810.      * set datatable configs
  1811.      *
  1812.      * @return \App\Library\Datatable\Util\Datatable
  1813.      */
  1814.     private function datatableVentesOngletStats($articleDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1815.     {
  1816.         $repo_statut_document $em->getRepository(StatutCommande::class);
  1817.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => [23], "ordre" => [0]]);
  1818.         $datatable->setDatatableId('dta-ventes-onglet-stats')
  1819.                   ->setEntity(ArticleCommande::class, "x")
  1820.                   ->setFields(
  1821.                       [
  1822.                           $translator->trans("Réf commande")    => 'c.reference',
  1823.                           $translator->trans("Réf cmde client") => 'c.referenceClient',
  1824.                           $translator->trans("Date")            => 'c.date',
  1825.                           $translator->trans("Qté")             => 'x.quantite',
  1826.                           $translator->trans("PU HT")           => 'x.prixBase',
  1827.                           $translator->trans("Remise")          => 'x.remise',
  1828.                           $translator->trans("Total HT")        => 'x.totalHt',
  1829.                           $translator->trans("Client")          => 'clt.nom',
  1830.                           "_identifier_" => 'x.id',
  1831.                       ]
  1832.                   )
  1833.                   ->setWhere(
  1834.                       'x.article = :article and (c.typeDocumentCommercial = '.TypeDocumentCommercial::COMMANDE.' or c.typeDocumentCommercial = '.TypeDocumentCommercial::ORDREREPARATION.') AND c.statutCommande NOT IN (:statutCommande) ',
  1835.                       ['article' => $article'statutCommande' => $liste_statut]
  1836.                   )
  1837.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  1838.                   ->addJoin('c.client''clt'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  1839.                   ->setRenderers(
  1840.                       [
  1841.                           => [
  1842.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1843.                               'params' => [
  1844.                                   'edit_route'   => 'dtc_commande_modifier',
  1845.                                   'typeDocument' => 'commande',
  1846.                               ],
  1847.                           ],
  1848.                           => [
  1849.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1850.                               'params' => [
  1851.                                   'edit_route'   => 'dtc_client_modifier',
  1852.                                   'typeDocument' => 'client_article_commande',
  1853.                               ],
  1854.                           ],
  1855.                           => [
  1856.                               'view' => 'FO/DataTable/date.html.twig',
  1857.                           ],
  1858.                           => [
  1859.                               'view'   => 'FO/DataTable/prix.html.twig',
  1860.                               'params' => [
  1861.                                   'afficher_total' => false,
  1862.                               ],
  1863.                           ],
  1864.                           => [
  1865.                               'view'   => 'FO/DataTable/prix.html.twig',
  1866.                               'params' => [
  1867.                                   'afficher_total' => false,
  1868.                               ],
  1869.                           ],
  1870.                           => [
  1871.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1872.                               'params' => [
  1873.                                   'edit_route'   => 'dtc_client_modifier',
  1874.                                   'typeDocument' => 'client_article_commande_nom_prenom',
  1875.                               ],
  1876.                           ],
  1877.                           /*3 => array(
  1878.                                     'view' => 'FO/DataTable/actions_modal.html.twig',
  1879.                                     'params' => array(
  1880.                                             'supprimer_route'  => 'dtc_application_supprimer',
  1881.                                             'id'    => $article->getId(),
  1882.                                             'type'    => "article",
  1883.                                             'entite'    => 'application',
  1884.                                             'objet' => "DTCVehiculesBundle:Application"
  1885.                                         ),
  1886.                                 )
  1887.                                 */
  1888.                       ]
  1889.                   )
  1890.                   ->setOrder("x.id""desc")
  1891.                   ->setSearch(true)
  1892.                   ->setSearchFields([0]);
  1893.         return $datatable;
  1894.     }
  1895.     /**
  1896.      * @Route("/article/ventes/stats/grid/{id}", name="dtc_article_vente_onglet_stats_liste_grid")
  1897.      */
  1898.     public function gridVentesOngletStatsAction(Article $articleDatatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  1899.     {
  1900.         return $this->datatableVentesOngletStats($article$datatable$em$translator)->execute();
  1901.     }
  1902.     /**
  1903.      * @Route("", name="")
  1904.      */
  1905.     public function statsAction(Article $articleEntityManagerInterface $em)
  1906.     {
  1907.         /*
  1908.         $historique = $em->getRepository(Article::class)->gethistoriqueVente($article->getId());
  1909.         $nbVentesMois = $em->getRepository(Article::class)->getNbArticlesVendus($article->getId(), 30);
  1910.         $nbVentesAnnee = $em->getRepository(Article::class)->getNbArticlesVendus($article->getId(), 365);
  1911.          *
  1912.          */
  1913.         $nbVentesParMois $em->getRepository(Article::class)->getNbArticlesVendusParMois($article->getId(), 12);
  1914.         $prixAchatVente  $em->getRepository(Article::class)->getPrixAchatVenteParMois($article->getId(), 12);
  1915.         return $this->render('Articles/Article/stats.html.twig', [
  1916.             'article'         => $article,
  1917.             'nbVentesParMois' => $nbVentesParMois,
  1918.             'prixAchatVente'  => $prixAchatVente,
  1919.         ]);
  1920.     }
  1921.     /**
  1922.      * @Route("/article/refs/json", name="dtc_article_ref_liste_json")
  1923.      */
  1924.     public function FindAllJsonAction(Request $requestEntityManagerInterface $em)
  1925.     {
  1926.         if ($request->getMethod() == 'GET') {
  1927.             $query     $request->query->get('query');
  1928.             $articleId $request->query->get('articleId');
  1929.         }
  1930.         $results $em->getRepository(Article::class)->findLibelleOrRefLike($query$articleId);
  1931.         $response = new JsonResponse();
  1932.         $response->setData($results);
  1933.         return $response;
  1934.     }
  1935.     /**
  1936.      * @Route("/article/consignes/json", name="dtc_article_consigne_liste_json")
  1937.      */
  1938.     public function FindConsignesJsonAction(Request $requestEntityManagerInterface $em)
  1939.     {
  1940.         $query     $request->query->get('query');
  1941.         $articleId $request->query->get('articleId');
  1942.         $results   $em->getRepository(Article::class)->findLibelleOrRefLikeInConsigne($query$articleId);
  1943.         $response = new JsonResponse();
  1944.         $response->setData($results);
  1945.         return $response;
  1946.     }
  1947.     /**
  1948.      * @Route("/article/{id}/quantite/{quantite}/couleur/achat", name="dtc_article_get_couleur_achat")
  1949.      */
  1950.     public function getCouleurQteAchatAction(Request $requestArticle $article$quantiteArticleService $articleService)
  1951.     {
  1952.         $fournisseur $request->query->get('fournisseur');
  1953.         if ($fournisseur != '') {
  1954.             $retour $articleService->getCouleurQteF($article$quantite$fournisseur);
  1955.         } else {
  1956.             $retour $articleService->getCouleurQteF($article$quantite);
  1957.         }
  1958.         $response = new JsonResponse();
  1959.         $response->setData(['couleur' => $retour]);
  1960.         return $response;
  1961.     }
  1962.     /**
  1963.      * @Route("/article/consigne/ajouter", name="dtc_article_article_en_consigne_ajouter")
  1964.      */
  1965.     public function ajouterConsigneAction(Request $requestEntityManagerInterface $em)
  1966.     {
  1967.         if ($request->getMethod() == 'GET') {
  1968.             $text      $request->query->get('text');
  1969.             $value     $request->query->get('value');
  1970.             $articleId $request->query->get('article');
  1971.         }
  1972.         $article  $em->getRepository(Article::class)->find($articleId);
  1973.         $consigne $em->getRepository(Article::class)->find($value);
  1974.         $article->setArticleEnconsigne($consigne);
  1975.         $em->persist($article);
  1976.         $em->flush();
  1977.         $value  $consigne->getReference();
  1978.         $valide 1;
  1979.         $response = new JsonResponse();
  1980.         $response->setData([
  1981.                                'data'   => 'Reférence ajoutée',
  1982.                                'valide' => $valide,
  1983.                                'value'  => $value,
  1984.                            ]);
  1985.         return $response;
  1986.     }
  1987.     /**
  1988.      * @Route("/article/consigne/supprimer", name="dtc_article_article_en_consigne_supprimer")
  1989.      */
  1990.     public function supprimerConsigneAction(Request $requestEntityManagerInterface $em)
  1991.     {
  1992.         if ($request->getMethod() == 'GET') {
  1993.             $value     $request->query->get('value');
  1994.             $articleId $request->query->get('article');
  1995.         }
  1996.         $article  $em->getRepository(Article::class)->find($articleId);
  1997.         $consigne $em->getRepository(Article::class)->find($value);
  1998.         $article->setArticleEnconsigne(null);
  1999.         $em->persist($article);
  2000.         $em->flush();
  2001.         $value  $consigne->getReference();
  2002.         $valide 1;
  2003.         $response = new JsonResponse();
  2004.         $response->setData([
  2005.                                'data'   => 'Reférence supprimée',
  2006.                                'valide' => $valide,
  2007.                            ]);
  2008.         return $response;
  2009.     }
  2010.     /**
  2011.      * @Route("/article/a-consigner/ajouter", name="dtc_article_articles_a_consigner_ajouter")
  2012.      */
  2013.     public function ajouterAConsignerAction(Request $requestEntityManagerInterface $em)
  2014.     {
  2015.         if ($request->getMethod() == 'GET') {
  2016.             $text      $request->query->get('text');
  2017.             $value     $request->query->get('value');
  2018.             $articleId $request->query->get('article');
  2019.         }
  2020.         $consigne   $em->getRepository(Article::class)->find($articleId);
  2021.         $aConsigner $em->getRepository(Article::class)->find($value);
  2022.         $consigne->addArticlesAconsigner($aConsigner);
  2023.         $em->persist($consigne);
  2024.         $em->flush();
  2025.         $value  $aConsigner->getReference();
  2026.         $valide 1;
  2027.         $response = new JsonResponse();
  2028.         $response->setData([
  2029.                                'data'   => 'Reférence ajoutée',
  2030.                                'valide' => $valide,
  2031.                                'value'  => $value,
  2032.                            ]);
  2033.         return $response;
  2034.     }
  2035.     /**
  2036.      * @Route("/article/a-consigner/supprimer", name="dtc_article_articles_a_consigner_supprimer")
  2037.      */
  2038.     public function supprimerAConsignerAction(Request $requestEntityManagerInterface $em)
  2039.     {
  2040.         if ($request->getMethod() == 'GET') {
  2041.             $value     $request->query->get('value');
  2042.             $articleId $request->query->get('article');
  2043.         }
  2044.         $consigne   $em->getRepository(Article::class)->find($articleId);
  2045.         $aConsigner $em->getRepository(Article::class)->find($value);
  2046.         $consigne->removeArticlesAconsigner($aConsigner);
  2047.         $em->persist($consigne);
  2048.         $em->flush();
  2049.         $value  $aConsigner->getReference();
  2050.         $valide 1;
  2051.         $response = new JsonResponse();
  2052.         $response->setData([
  2053.                                'data'   => 'Reférence supprimée',
  2054.                                'valide' => $valide,
  2055.                            ]);
  2056.         return $response;
  2057.     }
  2058.     /**
  2059.      * @Route("", name="")
  2060.      */
  2061.     public function historiquePrixAction(Article $articleEntityManagerInterface $em)
  2062.     {
  2063.         //$this->datatableArticle($article);
  2064.         $repoArticle $em->getRepository(Article::class);
  2065.         //$prix = $repoArticle->historiquePrix($article);
  2066.         //return $this->render('Articles/Article/historique-prix.html.twig', array('article' => $article,'prix'=>$prix));
  2067.         return $this->render('Articles/HistoriquePrix/lister.html.twig', ['article' => $article]);
  2068.     }
  2069.     /**
  2070.      * @Route("/article/minimaxi", name="dtc_article_mini_maxi")
  2071.      */
  2072.     public function saisieRapideMiniMaxiAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  2073.     {
  2074.         if ($request->isMethod('POST') and $request->query->get('formulaire') == 1) {
  2075.             $miniMaxi $request->get('miniMaxi');
  2076.             $em->getRepository(Article::class)->setMiniMaxi($miniMaxi["ids"], $request->request->all());
  2077.             //print_r($miniMaxi);
  2078.             $this->addFlash(
  2079.                 'notice',
  2080.                 $translator->trans('Mini/Maxi mis à jour avec succès !')
  2081.             );
  2082.             $url $this->generateUrl('dtc_article_liste', []);
  2083.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  2084.         } else {
  2085.             $data        $request->get('dataTables');
  2086.             $ids         $data['actions'];
  2087.             $titre_modal $translator->trans("Saisie multiple Mini/Maxi");
  2088.             $rendu       $this->renderView('Articles/Article/saisie-mini-maxi.html.twig', ['ids' => $ids]);
  2089.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2090.         }
  2091.     }
  2092.     /**
  2093.      * @Route("/article/{article}/categorie/{categorie}/statut/{statut}", name="dtc_article_associer_categorie_ajax")
  2094.      */
  2095.     public function associerArticleCategorieAction(Request $request$articleCategorie $categorie$statutEntityManagerInterface $emArticleMarketPlaceService $articleMarketPlaceService
  2096.     ) {
  2097.         $article_obj               "";
  2098.         $repo_articlesCategories   $em->getRepository(ArticleCategorie::class);
  2099.         $repo_market_place         $em->getRepository(MarketPlace::class);
  2100.         $repo_compte_market_place  $em->getRepository(CompteMarketPlace::class);
  2101.         $repo_article              $em->getRepository(Article::class);
  2102.         $repo_article_market_place $em->getRepository(ArticleMarketPlace::class);
  2103.         $caracteristiques          "";
  2104.         $notice_publication  "";
  2105.         $warning_publication "";
  2106.         $compteMarketPlace   "";
  2107.         $compteMarketPlaceId $request->query->get('compteMarketPlace');
  2108.         $marketPlaceId       $request->query->get('marketPlace');
  2109.         $marketPlaceObj "";
  2110.         if ($marketPlaceId != "") {
  2111.             $marketPlaceObj $repo_market_place->find($marketPlaceId);
  2112.         }
  2113.         $idAnnonce "";
  2114.         $idArticle "";
  2115.         $articleMarketPlaceId $request->query->get('articleMarketPlace');
  2116.         //echo "<div>".$compteMarketPlaceId."</div>";
  2117.         if ($compteMarketPlaceId != "") {
  2118.             $repo_compte_market_place $em->getRepository(CompteMarketPlace::class);
  2119.             $compteMarketPlace        $repo_compte_market_place->find($compteMarketPlaceId);
  2120.             $repo_market_place $em->getRepository(MarketPlace::class);
  2121.             $marketPlace       $compteMarketPlace->getMarketPlace();
  2122.         }
  2123.         /*
  2124.         if($articleMarketPlaceId != "") {
  2125.             $repo_article_market_place = $em->getRepository('DTCMarketPlaceBundle:CompteMarketPlace');
  2126.             $articleMarketPlace = $repo_article_market_place->find($articleMarketPlaceId);
  2127.         }
  2128.         */
  2129.         //echo "HHH ".$compteMarketPlace->getLibelle();
  2130.         if (is_object($compteMarketPlace)) {
  2131.             //$articleMarketPlace = $repo_article_market_place->findOneBy(array("article"=>$article,"compteMarketPlace"=>$compteMarketPlace));
  2132.             $article     $repo_article_market_place->find($article);
  2133.             $article_obj $article->getArticle();
  2134.             $idAnnonce $article->getId();
  2135.             $articleCategorie $repo_articlesCategories->findOneBy(['articleMarketPlace' => $article'categorie' => $categorie]);
  2136.             if ($compteMarketPlace->getMarketPlace()->getId() == "3"
  2137.                 or $compteMarketPlace->getMarketPlace()->getId() == "6"
  2138.                 or $compteMarketPlace->getMarketPlace()->getId() == "10"
  2139.                 or $compteMarketPlace->getMarketPlace()->getId() == "11"
  2140.                 or $compteMarketPlace->getMarketPlace()->getId() == "12"
  2141.                 or $compteMarketPlace->getMarketPlace()->getId() == "13"
  2142.             ) {
  2143.                 $conn $em->getConnection();
  2144.                 $sql  'DELETE FROM article__article_categorie WHERE article_market_place_id="'.$article->getId().'"';
  2145.                 $stmt $conn->executeQuery($sql);
  2146.                 $conn $em->getConnection();
  2147.                 $sql  'DELETE FROM market_place__article_market_place_caracteristique WHERE article_market_place_id="'.$article->getId().'"';
  2148.                 //echo $sql;
  2149.                 $stmt $conn->executeQuery($sql);
  2150.                 $articleCategorie null;
  2151.             }
  2152.             if ($compteMarketPlace->getMarketPlace()->getId() == "1"
  2153.                 or $compteMarketPlace->getMarketPlace()->getId() == "3"
  2154.                 or $compteMarketPlace->getMarketPlace()->getId() == "6"
  2155.                 or $compteMarketPlace->getMarketPlace()->getId() == "10"
  2156.                 or $compteMarketPlace->getMarketPlace()->getId() == "11"
  2157.                 or $compteMarketPlace->getMarketPlace()->getId() == "12"
  2158.                 or $compteMarketPlace->getMarketPlace()->getId() == "13"
  2159.             ) {
  2160.                 $conn $em->getConnection();
  2161.                 if (is_object($articleCategorie)) {
  2162.                     $sql 'DELETE FROM article__article_categorie WHERE article_market_place_id="'.$article->getId().'" and id != "'.$articleCategorie->getId().'"';
  2163.                 } else {
  2164.                     $sql 'DELETE FROM article__article_categorie WHERE article_market_place_id="'.$article->getId().'"';
  2165.                 }
  2166.                 $stmt $conn->executeQuery($sql);
  2167.             }
  2168.             //echo $articleMarketPlace->getId();
  2169.         } else {
  2170.             $article     $repo_article->find($article);
  2171.             $article_obj $repo_article->find($article);
  2172.             $idArticle   $article->getId();
  2173.             if (is_object($marketPlaceObj)) {
  2174.                 $conn $em->getConnection();
  2175.                 if ($marketPlaceId == "4"
  2176.                     or $marketPlaceId == "6"
  2177.                     or $marketPlaceId == "10"
  2178.                     or $marketPlaceId == "11"
  2179.                     or $marketPlaceId == "12"
  2180.                     or $marketPlaceId == "13"
  2181.                 ) {
  2182.                     $conn $em->getConnection();
  2183.                     $sql  'DELETE FROM market_place__article_market_place_caracteristique WHERE article_id="'.$article->getId().'"';
  2184.                     $stmt $conn->executeQuery($sql);
  2185.                 }
  2186.                 if (
  2187.                     ($marketPlaceId == "6"
  2188.                      or $marketPlaceId == "4"
  2189.                      or $marketPlaceId == "3"
  2190.                      or $marketPlaceId == "1"
  2191.                      or $marketPlaceId == "6"
  2192.                      or $marketPlaceId == "10"
  2193.                      or $marketPlaceId == "11"
  2194.                      or $marketPlaceId == "12"
  2195.                      or $marketPlaceId == "13"
  2196.                     )
  2197.                     and is_object($article)
  2198.                 ) {
  2199.                     $sql  'DELETE FROM article__article_categorie WHERE market_place_id = "'.$marketPlaceId.'" and article_id="'.$article->getId().'"';
  2200.                     $stmt $conn->executeQuery($sql);
  2201.                 }
  2202.             }
  2203.             $articleCategorie $repo_articlesCategories->findOneBy(['article' => $article'categorie' => $categorie]);
  2204.         }
  2205.         if ($statut == 'add') {
  2206.             //echo "<div>ADD</div>";
  2207.             if ( ! is_object($articleCategorie)) {
  2208.                 $articleCategorie = new ArticleCategorie;
  2209.                 //echo "<div>ADDVIDE</div>";
  2210.                 if (is_object($compteMarketPlace)) {
  2211.                     $articleCategorie->setArticleMarketPlace($article);
  2212.                 } else {
  2213.                     $articleCategorie->setArticle($article);
  2214.                 }
  2215.                 $articleCategorie->setCategorie($categorie);
  2216.             }
  2217.             if (is_object($marketPlaceObj)) {
  2218.                 $articleCategorie->setMarketPlace($marketPlaceObj);
  2219.             }
  2220.             $em->persist($articleCategorie);
  2221.             $em->flush();
  2222.             if (is_object($compteMarketPlace) or is_object($marketPlaceObj)) {
  2223.                 if ((is_object($compteMarketPlace)
  2224.                      and
  2225.                      ($compteMarketPlace->getMarketPlace()->getId() == "4"
  2226.                       or $compteMarketPlace->getMarketPlace()->getId() == "6"
  2227.                       or $compteMarketPlace->getMarketPlace()->getId() == "3"
  2228.                       or $compteMarketPlace->getMarketPlace()->getId() == "10"
  2229.                       or $compteMarketPlace->getMarketPlace()->getId() == "11"
  2230.                       or $compteMarketPlace->getMarketPlace()->getId() == "12"
  2231.                       or $compteMarketPlace->getMarketPlace()->getId() == "13"
  2232.                      )
  2233.                     )
  2234.                     or is_object($marketPlaceObj)
  2235.                 ) {
  2236.                     $caracteristiques $this->renderView(
  2237.                         'Articles/Categorie/template_caracteristiques.html.twig',
  2238.                         ["idArticle" => $idArticle"idAnnonce" => $idAnnonce"categorie" => $categorie]
  2239.                     );
  2240.                 }
  2241.             }
  2242.         } else {
  2243.             if (is_object($articleCategorie)) {
  2244.                 $em->remove($articleCategorie);
  2245.             }
  2246.         }
  2247.         $em->persist($article);
  2248.         $em->flush();
  2249.         if (is_object($marketPlaceObj)) {
  2250.             //echo "AAA ".$marketPlaceObj->getId();
  2251.             $compteMarketPlace $repo_compte_market_place->findBy(["marketPlace" => $marketPlaceObj]);
  2252.             if (count($compteMarketPlace) > 0) {
  2253.                 $tabBoucle = [];
  2254.                 foreach ($compteMarketPlace as $compte) {
  2255.                     $annonces   $repo_article_market_place->findBy(["article" => $article"compteMarketPlace" => $compte]);
  2256.                     $categories $repo_articlesCategories->findBy(["article" => $article"marketPlace" => $marketPlaceObj]);
  2257.                     if (count($annonces) > 0) {
  2258.                         foreach ($annonces as $an) {
  2259.                             //echo "<div>ANID ".$an->getId()."</div>";
  2260.                             if (($compte->getMarketPlace()->getId() == "8") and != 1) {
  2261.                                 $conn $em->getConnection();
  2262.                                 if ($compte->getId() == $an->getCompteMarketPlace()->getId()) {
  2263.                                     $sql  'DELETE FROM article__article_categorie WHERE article_market_place_id="'.$an->getId().'"';
  2264.                                     $stmt $conn->executeQuery($sql);
  2265.                                     //echo "sql ".$sql;
  2266.                                     //echo "<div>SQL ".$sql." ==> ".$compte->getMarketPlace()->getLibelle()."</div>";
  2267.                                     $conn $em->getConnection();
  2268.                                     $sql  'DELETE FROM market_place__article_market_place_caracteristique WHERE article_market_place_id="'.$an->getId().'"';
  2269.                                     $stmt $conn->executeQuery($sql);
  2270.                                     //echo "<div>SQL ".$sql."</div>";
  2271.                                     //exit;
  2272.                                     //$em->refresh($an);
  2273.                                 }
  2274.                             }
  2275.                             if (count($an->getarticleCategorie()) == 0) {
  2276.                                 foreach ($categories as $cat) {
  2277.                                     $articleCategorieAnnonce = new ArticleCategorie;
  2278.                                     $articleCategorieAnnonce->setArticleMarketPlace($an);
  2279.                                     $articleCategorieAnnonce->setCategorie($cat->getCategorie());
  2280.                                     //echo "CAT:".$cat->getCategorie()->getId()." ANN:".$an->getId();
  2281.                                     $em->persist($articleCategorieAnnonce);
  2282.                                     // $em->flush();
  2283.                                     // exit;
  2284.                                 }
  2285.                             }
  2286.                         }
  2287.                         $message_maj $articleMarketPlaceService->majStockAnnonce($article->getId());
  2288.                     }
  2289.                 }
  2290.                 $em->flush();
  2291.             }
  2292.         } else {
  2293.             $compteMarketPlace $repo_compte_market_place->findBy(["statut" => true]);
  2294.             if (count($compteMarketPlace) > 0) {
  2295.                 $conn      $em->getConnection();
  2296.                 $tabBoucle = [];
  2297.                 foreach ($compteMarketPlace as $compte) {
  2298.                     $annonces $repo_article_market_place->findBy(["article" => $article"compteMarketPlace" => $compte]);
  2299.                     if (count($annonces) > 0) {
  2300.                         foreach ($annonces as $an) {
  2301.                             /*
  2302.                             if($compte->getMarketPlace()->getId() == "9" or $compte->getMarketPlace()->getId() == "5" )
  2303.                             {
  2304.                                 $sql = 'DELETE FROM article__article_categorie WHERE article_market_place_id="'.$an->getId().'"';
  2305.                                 $stmt = $conn->query($sql);
  2306.                                 $stmt->execute();
  2307.                             }
  2308.                             */
  2309.                             if (!= and count($article->getArticleCategorie()) > 0) {
  2310.                                 foreach ($article->getArticleCategorie() as $ca2) {
  2311.                                     if ($compte->getMarketPlace()->getId() == "9" && is_object($ca2->getCategorie()->getCategorieWordpressWoo())) {
  2312.                                         $articleCategorie = new ArticleCategorie();
  2313.                                         $articleCategorie->setCategorie($ca2->getCategorie()->getCategorieWordpressWoo());
  2314.                                         $articleCategorie->setArticleMarketPlace($an);
  2315.                                         $em->persist($articleCategorie);
  2316.                                         $categorie_valide true;
  2317.                                     }
  2318.                                     if ($compte->getMarketPlace()->getId() == "5" && is_object($ca2->getCategorie()->getCategoriePrestahop())) {
  2319.                                         $articleCategorie = new ArticleCategorie();
  2320.                                         $articleCategorie->setCategorie($ca2->getCategorie()->getCategoriePrestahop());
  2321.                                         $articleCategorie->setArticleMarketPlace($an);
  2322.                                         $em->persist($articleCategorie);
  2323.                                         $categorie_valide true;
  2324.                                     }
  2325.                                 }
  2326.                             }
  2327.                         }
  2328.                         $em->flush();
  2329.                     }
  2330.                 }
  2331.             }
  2332.             $message_maj $articleMarketPlaceService->majStockAnnonce($article_obj->getId());
  2333.             $notice_publication  $message_maj["notice"];
  2334.             $warning_publication $message_maj["warning"];
  2335.         }
  2336.         $response = new JsonResponse;
  2337.         $response->setData([
  2338.                                'article'             => $article->getId(),
  2339.                                'categorie'           => $categorie->getId(),
  2340.                                'statut'              => $statut,
  2341.                                'caracteristiques'    => $caracteristiques,
  2342.                                'notice_publication'  => $notice_publication,
  2343.                                'warning_publication' => $warning_publication,
  2344.                            ]);
  2345.         return $response;
  2346.     }
  2347.     /**
  2348.      * @Route("", name="")
  2349.      */
  2350.     public function ___associerArticleCategorieAction(Article $articleCategorie $categorie$statutEntityManagerInterface $em)
  2351.     {
  2352.         $repo_articlesCategories $em->getRepository(ArticleCategorie::class);
  2353.         $articleCategorie        $repo_articlesCategories->findOneBy(['article' => $article'categorie' => $categorie]);
  2354.         if ($statut == 'add') {
  2355.             if ( ! is_object($articleCategorie)) {
  2356.                 $articleCategorie = new ArticleCategorie;
  2357.                 $articleCategorie->setArticle($article);
  2358.                 $articleCategorie->setCategorie($categorie);
  2359.             }
  2360.             $em->persist($articleCategorie);
  2361.         } else {
  2362.             if (is_object($articleCategorie)) {
  2363.                 $em->remove($articleCategorie);
  2364.             }
  2365.         }
  2366.         $em->persist($article);
  2367.         $em->flush();
  2368.         $response = new JsonResponse;
  2369.         $response->setData([
  2370.                                'article'   => $article->getId(),
  2371.                                'categorie' => $categorie->getId(),
  2372.                                'statut'    => $statut,
  2373.                            ]);
  2374.         return $response;
  2375.     }
  2376.     /**
  2377.      * @Route("/article/{article}/marque/{marque}/statut/{statut}", name="dtc_article_associer_marque_vehicule_ajax")
  2378.      */
  2379.     public function associerArticleMarqueVehiculeAction(Article $articleMarque $marque$statutEntityManagerInterface $em)
  2380.     {
  2381.         //$repo_articlesCategories = $em->getRepository('DTCArticlesBundle:ArticleCategorie');
  2382.         //$articleCategorie = $repo_articlesCategories->findOneBy(array('article'=>$article, 'categorie'=>$categorie));
  2383.         $repo_applications $em->getRepository(Application::class);
  2384.         $application       $repo_applications->findOneBy(['article' => $article'marque' => $marque'modele' => null'type' => null]);
  2385.         if ($statut == 'add') {
  2386.             if ( ! is_object($application)) {
  2387.                 $application = new Application;
  2388.                 $application->setArticle($article);
  2389.                 $application->setMarque($marque);
  2390.             }
  2391.             $em->persist($application);
  2392.         } else {
  2393.             if (is_object($application)) {
  2394.                 $em->remove($application);
  2395.             }
  2396.         }
  2397.         $em->persist($article);
  2398.         $em->flush();
  2399.         $response = new JsonResponse;
  2400.         $response->setData([
  2401.                                'article' => $article->getId(),
  2402.                                'marque'  => $marque->getId(),
  2403.                                'statut'  => $statut,
  2404.                            ]);
  2405.         return $response;
  2406.     }
  2407.     /**
  2408.      * @Route("/article/{article}/modele/{modele}/statut/{statut}", name="dtc_article_associer_modele_vehicule_ajax")
  2409.      */
  2410.     public function associerArticleModeleVehiculeAction(Article $articleModele $modele$statutEntityManagerInterface $em)
  2411.     {
  2412.         //$repo_articlesCategories = $em->getRepository('DTCArticlesBundle:ArticleCategorie');
  2413.         //$articleCategorie = $repo_articlesCategories->findOneBy(array('article'=>$article, 'categorie'=>$categorie));
  2414.         $repo_applications $em->getRepository(Application::class);
  2415.         $application       $repo_applications->findOneBy(['article' => $article'marque' => $modele->getMarque(), 'modele' => $modele'type' => null]);
  2416.         if ($statut == 'add') {
  2417.             if ( ! is_object($application)) {
  2418.                 $application = new Application;
  2419.                 $application->setArticle($article);
  2420.                 $application->setModele($modele);
  2421.                 $application->setMarque($modele->getMarque());
  2422.             }
  2423.             $em->persist($application);
  2424.         } else {
  2425.             if (is_object($application)) {
  2426.                 $em->remove($application);
  2427.             }
  2428.         }
  2429.         $em->persist($article);
  2430.         $em->flush();
  2431.         $response = new JsonResponse;
  2432.         $response->setData([
  2433.                                'article' => $article->getId(),
  2434.                                'modele'  => $modele->getId(),
  2435.                                'statut'  => $statut,
  2436.                            ]);
  2437.         return $response;
  2438.     }
  2439.     /**
  2440.      * @Route("/article/{article}/type/{type}/statut/{statut}", name="dtc_article_associer_type_vehicule_ajax")
  2441.      */
  2442.     public function associerArticleTypeVehiculeAction(Article $articleVehiculesType $type$statutEntityManagerInterface $em)
  2443.     {
  2444.         //$repo_articlesCategories = $em->getRepository('DTCArticlesBundle:ArticleCategorie');
  2445.         //$articleCategorie = $repo_articlesCategories->findOneBy(array('article'=>$article, 'categorie'=>$categorie));
  2446.         $repo_applications $em->getRepository(Application::class);
  2447.         $application       $repo_applications->findOneBy(['article' => $article'marque' => $type->getModele()->getMarque(), 'modele' => $type->getModele(), 'type' => $type]);
  2448.         if ($statut == 'add') {
  2449.             if ( ! is_object($application)) {
  2450.                 $application = new Application;
  2451.                 $application->setArticle($article);
  2452.                 $application->setType($type);
  2453.                 $application->setModele($type->getModele());
  2454.                 $application->setMarque($type->getModele()->getMarque());
  2455.             }
  2456.             $em->persist($application);
  2457.         } else {
  2458.             if (is_object($application)) {
  2459.                 $em->remove($application);
  2460.             }
  2461.         }
  2462.         $em->persist($article);
  2463.         $em->flush();
  2464.         $response = new JsonResponse;
  2465.         $response->setData([
  2466.                                'article' => $article->getId(),
  2467.                                'type'    => $type->getId(),
  2468.                                'statut'  => $statut,
  2469.                            ]);
  2470.         return $response;
  2471.     }
  2472.     /**
  2473.      * @Route("/article/modifier/chaine/resultats/ajax", name="dtc_article_modif_chaine_resultats_ajax")
  2474.      */
  2475.     public function modifsChaineResultatsAjaxAction(Request $requestArticleService $articleServiceEntityManagerInterface $emPaginatorInterface $paginator)
  2476.     {
  2477.         $param            $request->query->all();
  2478.         $retour_recherche = [];
  2479.         //print_r($param);
  2480.         $retour["draw"] = $param["draw"];
  2481.         $page           $param["start"] / 10 1;
  2482.         //$retour["recordsTotal"]="100";
  2483.         //print_r($request->query->all());
  2484.         $retour_recherche       $articleService->rechercheArticleChaine($param["param"], "afficher");
  2485.         $resultats_recherche    $retour_recherche["resultats"];
  2486.         $nb_resultats_recherche $retour_recherche["nbResultats"];
  2487.         $pagination $paginator->paginate(
  2488.             $resultats_recherche/* query NOT result */
  2489.             $page/*page number*/,
  2490.             $param["length"]/*limit per page*/
  2491.         );
  2492.         $pagination_results $pagination->getItems();
  2493.         //print_r($pagination_results);
  2494.         for ($i 0$i count($pagination_results); $i++) {
  2495.             $url                       $this->generateUrl('dtc_article_modifier', ["id" => $pagination_results[$i][0]]);
  2496.             $pagination_results[$i][1] = "<a target='_blank' href='".$url."'>".$pagination_results[$i][1]."</a>";
  2497.             $pagination_results[$i][2] = "<a target='_blank' href='".$url."'>".$pagination_results[$i][2]."</a>";
  2498.             $pagination_results[$i][5] = "<input type='checkbox' value='".$pagination_results[$i][0]."'name='".$pagination_results[$i][0]."' checked='true' >";
  2499.         }
  2500.         $retour["recordsFiltered"] = $nb_resultats_recherche;
  2501.         //$retour["data"]=$resultats_recherche;
  2502.         $retour["data"]         = $pagination_results;
  2503.         $retour["recordsTotal"] = $nb_resultats_recherche;
  2504.         return new Response(json_encode($retour));
  2505.         //return new JsonResponse(array('rendu'=>$retour), 200, array('Content-Type'=>'application/json'));
  2506.     }
  2507.     /**
  2508.      * @Route("/article/modifier/chaine/resultats", name="dtc_article_modif_chaine_resultats")
  2509.      */
  2510.     public function modifsChaineResultatsAction(Request $requestTranslatorInterface $translator)
  2511.     {
  2512.         $titre_modal            $translator->trans("Résultats recherche");
  2513.         $nb_resultats_recherche "0";
  2514.         $resultats_recherche    = [];
  2515.         $param                  $request->query->all();
  2516.         //var_dump($param["param"]);
  2517.         //$retour = $articleService->rechercheArticleChaine($param["param"]);
  2518.         //$resultats_recherche = $retour["resultats"];
  2519.         //$nb_resultats_recherche = $retour["nbResultats"];
  2520.         $urlDatatAble $this->generateUrl('dtc_article_modif_chaine_resultats_ajax', ["param" => $param["param"]]);
  2521.         $rendu $this->renderView(
  2522.             'Articles/Article/resultats_recherche_chaine.html.twig',
  2523.             [
  2524.                 "urlDatatAble"           => $urlDatatAble,
  2525.                 "param"                  => $param,
  2526.                 "nb_resultats_recherche" => $nb_resultats_recherche,
  2527.                 "resultats_recherche"    => $resultats_recherche,
  2528.             ]
  2529.         );
  2530.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  2531.     }
  2532.     /**
  2533.      * @Route("/article/modifier/chaine", name="dtc_article_modif_chaine")
  2534.      */
  2535.     public function modifsChaineAction(Request $requestEntityManagerInterface $emArticleService $articleService)
  2536.     {
  2537.         $article                = new Article;
  2538.         $resultats_recherche    = [];
  2539.         $nb_resultats_recherche 0;
  2540. //        $article->setReference(null);
  2541.         $article->setCoefficientPrixBaseVente(null);
  2542.         $article->setTauxMarge(null);
  2543.         $article->setSeuilMiniCommandeFournisseur(null);
  2544.         $article->setPoids(null);
  2545.         $article->setLargeur(null);
  2546.         $article->setHauteur(null);
  2547.         $article->setProfondeur(null);
  2548.         $article->setTypeRemiseMax(null);
  2549.         $article->setConsigne(null);
  2550.         $article->setVirtuel(null);
  2551.         $article->setProduitInterne(null);
  2552.         $article->setPrixBase(null);
  2553.         $article->setPrixVente(null);
  2554.         $form      $this->createForm(ArticleRechercheType::class, $article);
  2555.         $recherche "";
  2556.         //$form->handleRequest($request);
  2557.         $action_form "recherche";
  2558.         $params      = [];
  2559.         $param $request->query->all();
  2560.         //print_r($param);
  2561.         if ($request->isMethod('POST')) {
  2562.             //echo "<div>modifier a</div>";
  2563.             $param_valeur $request->request->all();
  2564.             $param_recherche $request->query->all();
  2565.             $retour $articleService->modifierArticleChaine($param_recherche$param_valeur);
  2566.             /*
  2567.                         $builder = new ProcessBuilder();
  2568.                         //$builder->setArguments(array('php', '../app/console', 'modifier:articleChaine', $param_recherche, $param_valeur));
  2569.                         $builder->setArguments(array('php', '../app/console', 'modifier:articleChaine'));
  2570.                         $builder->setInput(array('param_recherche'=>$param_recherche, 'param_valeur'=>$param_valeur));
  2571.                         $builder->getProcess()->start();
  2572.                          *
  2573.                          */
  2574.             $this->addFlash(
  2575.                 'notice',
  2576.                 'Articles mis à jour avec succès ! '.$retour.' articles mis à jour'
  2577.             //'La modification en chaîne a été lancée. Vous receverez une note dès que celle-ci sera terminée.'
  2578.             );
  2579.             return $this->redirectToRoute('dtc_article_liste', []);
  2580.         } elseif (array_key_exists('dtc_articlesbundle_article'$param)) {
  2581.             //echo "<div>RECHERCHER a</div>";
  2582.             $recherche $article;
  2583.             $article   = new Article;
  2584.             //print_r($param);
  2585.             $retour                 $articleService->rechercheArticleChaine($param);
  2586.             $resultats_recherche    $retour["resultats"];
  2587.             $nb_resultats_recherche $retour["nbResultats"];
  2588. //            $article->setReference(null);
  2589.             $article->setCoefficientPrixBaseVente(null);
  2590.             $article->setTauxMarge(null);
  2591.             $article->setSeuilMiniCommandeFournisseur(null);
  2592.             $article->setPoids(null);
  2593.             $article->setLargeur(null);
  2594.             $article->setHauteur(null);
  2595.             $article->setProfondeur(null);
  2596.             $article->setTypeRemiseMax(null);
  2597.             $article->setConsigne(null);
  2598.             $article->setVirtuel(null);
  2599.             $article->setProduitInterne(null);
  2600.             $article->setPrixBase(null);
  2601.             $article->setPrixVente(null);
  2602.             $form        $this->createForm(ArticleRechercheType::class, $article);
  2603.             $action_form "modifier";
  2604.         }
  2605.         return $this->render(
  2606.             'Articles/Article/modifier_chaine.html.twig',
  2607.             [
  2608.                 "nb_resultats_recherche" => $nb_resultats_recherche,
  2609.                 "resultats_recherche"    => $resultats_recherche,
  2610.                 "param"                  => $request->query->all(),
  2611.                 "action_form"            => $action_form,
  2612.                 "form"                   => $form->createView(),
  2613.             ]
  2614.         );
  2615.     }
  2616.     /**
  2617.      * @Route("/article/modifier/multiple", name="dtc_article_multi_modif")
  2618.      */
  2619.     public function modifsMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorArticleService $articleService)
  2620.     {
  2621.         $titre_modal $translator->trans("Modification en chaine");
  2622.         $repo_categorie_article   $em->getRepository(Categorie::class);
  2623.         $categorie_article_racine $repo_categorie_article->findBy(["categorieParent" => 1]);
  2624.         $sous_categorie_article   = [];
  2625.         $type_article      = [];
  2626.         $repo_type_article $em->getRepository(Type::class);
  2627.         $type_article      $repo_type_article->findBy([], ["libelle" => "ASC"]);
  2628.         $famille_compta      = [];
  2629.         $repo_famille_compta $em->getRepository(FamilleCompta::class);
  2630.         $famille_compta      $repo_famille_compta->findBy([], ["libelle" => "ASC"]);
  2631.         if ($request->isMethod('POST')) {
  2632.             $url     "";
  2633.             $type    "";
  2634.             $rendu   "";
  2635.             $suffixe "";
  2636.             $param   $request->request->all();
  2637.             $nbEdited $articleService->majEnChaine($param);
  2638.             //$rendu = $this->renderView('Articles/Article/modifier_multiple.html.twig', array("categorie_article"=>$categorie_article_racine,"sous_categorie_article"=>$sous_categorie_article));
  2639.             $this->addFlash(
  2640.                 'notice',
  2641.                 'Articles mis à jour avec succès ! '.$nbEdited.' articles mis à jour'
  2642.             );
  2643.             //$this->pdfValorisationAction($suffixe,$param,false);
  2644.             $url $this->generateUrl('dtc_article_liste', []);
  2645.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  2646.         } else {
  2647.             $type "";
  2648.             $url  "";
  2649.             $rendu $this->renderView(
  2650.                 'Articles/Article/modifier_multiple.html.twig',
  2651.                 [
  2652.                     "categorie_article"      => $categorie_article_racine,
  2653.                     "sous_categorie_article" => $sous_categorie_article,
  2654.                     "type_article"           => $type_article,
  2655.                     "famille_compta"         => $famille_compta,
  2656.                 ]
  2657.             );
  2658.         }
  2659.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => $url'titre' => $titre_modal"type" => $type]
  2660.         );
  2661.     }
  2662.     /**
  2663.      * @Route("/article-divers-compose/ajouter/{id}", name="dtc_article_divers_compose_ajouter")
  2664.      */
  2665.     public function diversComposeAjouterAction(Article $articleTranslatorInterface $translator)
  2666.     {
  2667.         $titre_modal $translator->trans('Ajouter un article divers composé :');
  2668.         $errors      '';
  2669.         $errorsSup   = [];
  2670.         $rendu $this->renderView('Articles/Article/divers-compose-ajouter.html.twig', ['errors' => $errors'article' => $article]);
  2671.         return new JsonResponse(
  2672.             [
  2673.                 'rendu'  => $rendu,
  2674.                 'valide' => '0',
  2675.                 'url'    => '',
  2676.                 'titre'  => $titre_modal,
  2677.             ],
  2678.             200,
  2679.             ['Content-Type' => 'application/json']
  2680.         );
  2681.     }
  2682.     /**
  2683.      * @Route("/article-divers/ajouter/{id}", name="dtc_article_divers_ajouter")
  2684.      */
  2685.     public function diversAjouterAction(Request $requestArticle $articleEntityManagerInterface $emValidatorInterface $validatorTranslatorInterface $translatorArticleService $articleService)
  2686.     {
  2687.         /*
  2688.         $url = $this->generateUrl('dtc_article_modifier', array("id"=>$article->getId()));
  2689.     $titre_modal = "<a target='_blank' href='".$url."'>".$article->getLibelle()."</a>";
  2690.          *
  2691.          */
  2692.         $conn                 $em->getConnection();
  2693.         $repo_condition_achat $em->getRepository(ConditionAchat::class);
  2694.         $repo_fournisseur     $em->getRepository(Fournisseur::class);
  2695.         $titre_modal          $translator->trans('Ajouter un article divers :');
  2696.         $errors               '';
  2697.         $errorsSup            = [];
  2698.         $repoFournisseur $em->getRepository(Fournisseur::class);
  2699.         $typeCommande    "vente";
  2700.         $fournisseur     '';
  2701.         if ($request->query->get('fournisseur') != "") {
  2702.             $fournisseur  $repoFournisseur->find($request->query->get('fournisseur'));
  2703.             $typeCommande "achat";
  2704.         }
  2705.         $fournisseurId $request->query->get('fournisseur');
  2706.         $conditionAchat $repo_condition_achat->findOneBy(['article' => $article->getId()]);
  2707.         if ( ! is_object($conditionAchat)) {
  2708.             $conditionAchat = new ConditionAchat;
  2709.             $conditionAchat->setArticle($article);
  2710.             $conditionAchat->setDefaut(true);
  2711.             $conditionAchat->setPrixAchatBrut(0);
  2712.             $conditionAchat->setQuantite(0);
  2713.             //$conditionAchat->setConditionnement(1);
  2714.         }
  2715.         $user $this->getUser();
  2716.         $conditionAchat->setUtilisateur($user);
  2717.         $article->setUtilisateur($user);
  2718.         $fournisseurId '';
  2719.         $modificationFormulaire $request->request->get('modificationFormulaire');
  2720.         if(!is_null($request->request->get('dtc_articlesbundle_conditionachat'))) $fournisseurId          $request->request->get('dtc_articlesbundle_conditionachat')['fournisseur'];
  2721.         if ($fournisseurId != '') {
  2722.             //echo "tatatat";
  2723.             $fournisseur $repo_fournisseur->find($fournisseurId);
  2724.         }
  2725.         if ($fournisseurId == "") {
  2726.             $fournisseurId $request->query->get('fournisseur');
  2727.         }
  2728.         //echo "HHH ".$fournisseurId;
  2729.         if ($fournisseurId != '' && ($modificationFormulaire == 'true' or $request->query->get('fournisseur') != "")) {
  2730.             // echo "A";
  2731.             if (is_object($fournisseur)) {
  2732.                 //   echo "B";
  2733.                 $conditionAchat->setFournisseur($fournisseur);
  2734.             }
  2735.         }
  2736.         $form $this->createForm(ArticleDiversType::class, $conditionAchat);
  2737.         /*
  2738.         dump($modificationFormulaire);
  2739.         if(is_object($fournisseur)) dump($fournisseur->getId()); else dump('non defini');
  2740.         if(is_object($conditionAchat->getFournisseur())) dump($conditionAchat->getFournisseur()->getId()); else dump('non defini');
  2741.          *
  2742.          */
  2743.         if ($modificationFormulaire != 'true') {
  2744.             $form->handleRequest($request);
  2745.             if ($form->isSubmitted()) {
  2746.                 /*
  2747.                 $this->addFlash(
  2748.                         'notice',
  2749.                         $fournisseurId. ' / ' .$conditionAchat->getFournisseur()->getDivers(). ' ' .$conditionAchat->getFournisseur()->getId()
  2750.                     );
  2751.                  *
  2752.                  */
  2753.                 //echo 'test';
  2754.                 if ($form->isValid()) {
  2755.                     if (is_object($fournisseur)) {
  2756.                         $query $repoFournisseur->createQueryBuilder('p')
  2757.                                                  ->select(
  2758.                                                      'p.id as id,p.libelle as libelle,p.tva,c.id as compta, p.reference as reference, p.divers as divers, p.codeComptable as code_comptable'
  2759.                                                  )
  2760.                                                  ->join('p.compta''c')
  2761.                                                  ->where('p.id = :id')
  2762.                                                  ->setParameters(['id' => $conditionAchat->getFournisseur()->getId()])
  2763.                                                  ->setMaxResults(1)
  2764.                                                  ->orderBy('p.id''ASC');
  2765.                         $fournisseur_bdd $query->getQuery()->getOneOrNullResult();
  2766.                     }
  2767.                     //Calcul du prix achat net
  2768.                     $prixAchatNet $conditionAchat->getPrixAchatBrut() * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  2769.                     $coefficient  $conditionAchat->getCoefficient();
  2770.                     if ($coefficient != 0) {
  2771.                         $prixAchatNet $prixAchatNet $coefficient;
  2772.                     }
  2773.                     $prixAchatNet += $conditionAchat->getFraisAnnexes();
  2774.                     $conditionAchat->setPrixAchatNet($prixAchatNet);
  2775.                     //Calcul du coefficient
  2776.                     /*
  2777.                     if($prixAchatNet > 0){
  2778.                         $coefficient = $conditionAchat->getPrixAchatBrut() / $prixAchatNet;
  2779.                         $conditionAchat->setCoefficient($coefficient);
  2780.                     }
  2781.                      *
  2782.                      */
  2783.                     $fourn_est_divers false;
  2784.                     if (isset($fournisseur) && is_object($fournisseur) && $fournisseur->getDivers() === true && ! is_object($fournisseur->getParent())) {
  2785.                         $fourn_est_divers true;
  2786.                         $fournisseurPlus  $conditionAchat->getFournisseurPlus();
  2787.                         //dump($fournisseur->getDivers());
  2788.                         /*
  2789.                         if(is_object($fournisseur)) {
  2790.                             \Doctrine\Common\Util\Debug::dump($fournisseur->getId());
  2791.                             \Doctrine\Common\Util\Debug::dump($fournisseurPlus->getId());
  2792.                             \Doctrine\Common\Util\Debug::dump($request->request->get('dtc_articlesbundle_conditionachat'));
  2793.                         }
  2794.                         */
  2795.                         $newFournisseur = clone $fournisseurPlus;
  2796.                         $newFournisseur->setParent($fournisseur);
  2797.                         //$em->remove($fournisseurPlus);
  2798.                         $newFournisseur->setUtilisateur($user);
  2799.                         $dernierrepoFournisseur $repo_fournisseur->getDernierFournisseur();
  2800.                         $derfournisseur         intval($dernierrepoFournisseur[0][1]) + 1;
  2801.                         $newFournisseur->setReference($derfournisseur);
  2802.                         $codeCompta "401{$derfournisseur}";
  2803.                         $newFournisseur->setCodeComptable($codeCompta);
  2804.                         $date = new \DateTime;
  2805.                         $newFournisseur->setDate($date);
  2806.                         //$newFournisseur->setLibelle('test');
  2807.                         //$em->persist($newFournisseur);
  2808.                         //if(is_object($conditionAchat->getFournisseur())) dump('fournisseur de la cond HA '.$conditionAchat->getFournisseur()->getId()); else dump('pas de fournisseur sur la cond HA ');
  2809.                         $conditionAchat->setFournisseur(null);
  2810.                         $conditionAchat->setFournisseurPlus(null);
  2811.                         //unset($fournisseur);
  2812.                         unset($fournisseurPlus);
  2813.                         //if(is_object($conditionAchat->getFournisseur())) dump('fournisseur de la cond HA '.$conditionAchat->getFournisseur()->getId()); else dump('pas de fournisseur sur la cond HA ');
  2814.                         //dump($fournisseur->getLibelle());
  2815.                         $conditionAchat->setFournisseur($newFournisseur);
  2816.                         //$em->flush();
  2817.                     }
  2818.                     $em->persist($conditionAchat);
  2819.                     $em->persist($article);
  2820.                     $em->flush();
  2821.                     $articleService->majEnFonctionDuPrixAchat($article$conditionAchat->getPrixAchatBrut());
  2822.                     if ($fourn_est_divers && $fournisseur_bdd['id'] != "") {
  2823.                         //dump('maj donnee fournisseur '.$fournisseur_bdd['id'].' -> '.$fournisseur_bdd['libelle']);
  2824.                         $tableau_donnee                   = [];
  2825.                         $tableau_donnee["reference"]      = $fournisseur_bdd['reference'];
  2826.                         $tableau_donnee["code_comptable"] = $fournisseur_bdd['code_comptable'];
  2827.                         $tableau_donnee["divers"]         = $fournisseur_bdd['divers'];
  2828.                         $tableau_donnee["libelle"]        = $fournisseur_bdd['libelle'];
  2829.                         if ($fournisseur_bdd['compta'] > 0) {
  2830.                             $tableau_donnee["compta_id"] = $fournisseur_bdd['compta'];
  2831.                         }
  2832.                         $tableau_donnee["tva"] = $fournisseur_bdd['tva'];
  2833.                         $conn->update('fournisseur__fournisseur'$tableau_donnee, ['id' => $fournisseur_bdd['id']]);
  2834.                     }
  2835.                     $articleService->setFournisseurDefaut($article);
  2836.                     $this->addFlash(
  2837.                         'notice',
  2838.                         $translator->trans('Article divers modifié avec succès !')
  2839.                     );
  2840.                     $rendu $this->renderView('FO/FO/modal-close.html.twig', ['errors' => $errors]);
  2841.                     return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '']));
  2842.                 } else {
  2843.                     //$errors = $validator->validate($conditionAchat);
  2844.                     //if ($conditionAchat->getLibelle() == '') $errorsSup[] = 'Libellé obligatoire!';
  2845.                     $errors $validator->validate($conditionAchatnull, ['articleDivers']);
  2846.                 }
  2847.             }
  2848.         }
  2849.         $rendu  $this->renderView('Articles/Article/divers-ajouter.html.twig', [
  2850.             'typeCommande'   => $typeCommande,
  2851.             'article'        => $article,
  2852.             'conditionAchat' => $conditionAchat,
  2853.             'form'           => $form->createView(),
  2854.             'errors'         => $errors,
  2855.             'fournisseurId'  => $fournisseurId,
  2856.             'errorsSup'      => $errorsSup,
  2857.         ]);
  2858.         $divers '';
  2859.         $tva    '';
  2860.         if (is_object($conditionAchat->getFournisseur())) {
  2861.             $divers $conditionAchat->getFournisseur()->getDivers();
  2862.             $tva    $conditionAchat->getFournisseur()->getTva();
  2863.         }
  2864.         return new Response(
  2865.             json_encode([
  2866.                             'rendu'  => $rendu,
  2867.                             'valide' => '0',
  2868.                             'url'    => '',
  2869.                             'titre'  => $titre_modal,
  2870.                             'divers' => $divers,
  2871.                             'tva'    => $tva,
  2872.                         ]),
  2873.             200,
  2874.             ['Content-Type' => 'application/json']
  2875.         );
  2876.     }
  2877.     /**
  2878.      * @Route("/article/universel/{id}", name="dtc_article_universel")
  2879.      */
  2880.     public function changeUniverselAction(Article $articleEntityManagerInterface $em)
  2881.     {
  2882.         if ($article->getUniversel() == 1) {
  2883.             $article->setUniversel(0);
  2884.         } else {
  2885.             $article->setUniversel(1);
  2886.         }
  2887.         $em->persist($article);
  2888.         $em->flush();
  2889.         $headers = [
  2890.             'Content-Type'                 => 'application/json',
  2891.             'Access-Control-Allow-Origin'  => '*',
  2892.             'Access-Control-Allow-Methods' => 'POST',
  2893.         ];
  2894.         return new JsonResponse(['data' => $article->getUniversel()], 200$headers);
  2895.     }
  2896.     /**
  2897.      * @Route("/article/tableau-vente/charger-tableau/{article}", name="dtc_article_vente_charger_tableau")
  2898.      * @Route("/article/tableau-vente/charger-tableau/{id}", name="dtc_vente_article_charger_tableau_vente")
  2899.      */
  2900.     public function chargerTableauVenteAction(Article $article)
  2901.     {
  2902.         $rendu $this->renderView('Articles/Vente/charger_tableau.html.twig', ["article" => $article]);
  2903.         return new JsonResponse(['rendu' => $rendu]);
  2904.     }
  2905.     /**
  2906.      * @Route("/application/charger-tableau/{id}/", name="dtc_application_article_charger_tableau")
  2907.      */
  2908.     public function chargerTableauApplicationAction(Article $article)
  2909.     {
  2910.         $rendu $this->renderView('Articles/Article/charger_application_tableau.html.twig', ["article" => $article]);
  2911.         return new JsonResponse(['rendu' => $rendu]);
  2912.     }
  2913.     /**
  2914.      * @Route("/article/pdf/{id}", name="dtc_article_pdf")
  2915.      */
  2916.     public function pdfArticleAction(Request $requestArticle $article$retour trueEntityManagerInterface $emPdf $snappy)
  2917.     {
  2918.         $param   $request->query->all();
  2919.         $societe $em->getRepository(Societe::class)->find(1);
  2920.         $chemin_pdf 'PDF/ARTICLE/article_'.$article->getId().'.pdf';
  2921.         if (file_exists($chemin_pdf)) {
  2922.             //return $this->render('FO/PDF/conteneur_pdf.html.twig', array('chemin_pdf' =>'/'.$chemin_pdf));
  2923.             unlink($chemin_pdf);
  2924.         }
  2925.         //$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', array('societe'  => $societe));
  2926.         //$header = $this->renderView('FO/PDF/header_bl_pdf.html.twig', array('societe'  => $societe,'commande'  => $bonPreparation));
  2927.         $header "";
  2928.         //$snappy->setOption('header-html',$header);
  2929.         //$snappy->setOption('footer-html',$footer);
  2930.         //$snappy->setOption('margin-bottom',"10");
  2931.         $snappy->generateFromHtml(
  2932.             $this->renderView(
  2933.             //'GestionComerciale/BonLivraison/template_pdf.html.twig',
  2934.                 'Articles/Article/template_pdf.html.twig',
  2935.                 [
  2936.                     'societe' => $societe,
  2937.                     'article' => $article,
  2938.                 ]
  2939.             ),
  2940.             $chemin_pdf
  2941.         );
  2942.         if ($retour == true) {
  2943.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  2944.         }
  2945.     }
  2946.     /**
  2947.      * @Route("/article/quantite-conseille/{article}/{fournisseur}", name="dtc_article_quantite_conseillee")
  2948.      */
  2949.     public function quantiteConseilleeAction(Article $articleFournisseur $fournisseurArticleService $articleService)
  2950.     {
  2951.         $qteConseillee $articleService->getQteConseillee($articlenull$fournisseur);
  2952.         $retour        = [
  2953.             'qteConseillee' => $qteConseillee['qteConseillee'],
  2954.             'qteMini'       => $qteConseillee['qteMini'],
  2955.             'qteMaxi'       => $qteConseillee['qteMaxi'],
  2956.         ];
  2957.         if (is_object($qteConseillee['condition'])) {
  2958.             $retour['prixAchatNet']         = $qteConseillee['condition']->getPrixAchatNet();
  2959.             $retour['referenceFournisseur'] = $qteConseillee['condition']->getReferenceFournisseur();
  2960.             $retour['delai']                = $qteConseillee['condition']->getDelai();
  2961.             $retour['conditionnement']      = $qteConseillee['condition']->getConditionnement();
  2962.             $retour['conditionAchatId']     = $qteConseillee['condition']->getId();
  2963.         }
  2964.         return new JsonResponse($retour);
  2965.     }
  2966.     /**
  2967.      * @Route("/article/associer/caracteritiques", name="dtc_article_associer_caracteristiques_ajax")
  2968.      */
  2969.     public function associerCaracteristiquesCategorieAction(Request $requestEntityManagerInterface $em)
  2970.     {
  2971.         //echo "TEST";
  2972.         $repo_articlesCategories            $em->getRepository(ArticleCategorie::class);
  2973.         $repo_caracteristiques_market_place $em->getRepository(ArticleMarketPlaceCaracteristique::class);
  2974.         $repo_caracteristiques              $em->getRepository(Caracteristiques::class);
  2975.         $repo_article_market_place          $em->getRepository(ArticleMarketPlace::class);
  2976.         $repo_article                       $em->getRepository(Article::class);
  2977.         $repo_compte_market_place           $em->getRepository(CompteMarketPlace::class);
  2978.         $get                               $request->query->all();
  2979.         $articleMarketPlaceCaracteristique "";
  2980.         $article                           "";
  2981.         $annonce                           "";
  2982.         $objetTrouve                       false;
  2983.         $caracteristique $repo_caracteristiques->find($get["idCarac"]);
  2984.         if ($get["dataAnnonce"] != "") {
  2985.             $article $repo_article_market_place->find($get["dataAnnonce"]);
  2986.             if (is_object($article)) {
  2987.                 $articleMarketPlaceCaracteristique $repo_caracteristiques_market_place->findOneBy(["articleMarketPlace" => $article"caracteristique" => $caracteristique]);
  2988.                 if ( ! is_object($articleMarketPlaceCaracteristique)) {
  2989.                     $articleMarketPlaceCaracteristique = new ArticleMarketPlaceCaracteristique();
  2990.                     $articleMarketPlaceCaracteristique->setCaracteristique($caracteristique);
  2991.                 }
  2992.                 $articleMarketPlaceCaracteristique->setArticleMarketPlace($article);
  2993.                 $articleMarketPlaceCaracteristique->setValeur($get["valeur"]);
  2994.                 $em->persist($articleMarketPlaceCaracteristique);
  2995.                 $em->flush();
  2996.             }
  2997.         } elseif ($get["dataArticle"] != "") {
  2998.             $article $repo_article->find($get["dataArticle"]);
  2999.             if (is_object($article)) {
  3000.                 $articleMarketPlaceCaracteristique $repo_caracteristiques_market_place->findOneBy(["article" => $article"caracteristique" => $caracteristique]);
  3001.                 if ( ! is_object($articleMarketPlaceCaracteristique)) {
  3002.                     $articleMarketPlaceCaracteristique = new ArticleMarketPlaceCaracteristique();
  3003.                     $articleMarketPlaceCaracteristique->setCaracteristique($caracteristique);
  3004.                 }
  3005.                 $articleMarketPlaceCaracteristique->setArticle($article);
  3006.                 $articleMarketPlaceCaracteristique->setValeur($get["valeur"]);
  3007.                 $em->persist($articleMarketPlaceCaracteristique);
  3008.                 $em->flush();
  3009.                 $compteMarketPlace $repo_compte_market_place->findBy(["marketPlace" => ["4""6"]]);
  3010.                 //$compteMarketPlace = $repo_compte_market_place->findBy(array("marketPlace"=>"4"));
  3011.                 if (count($compteMarketPlace) > 0) {
  3012.                     foreach ($compteMarketPlace as $compte) {
  3013.                         $annonces $repo_article_market_place->findBy(["article" => $article"compteMarketPlace" => $compte]);
  3014.                         if (count($annonces) > 0) {
  3015.                             foreach ($annonces as $an) {
  3016.                                 //if($an->getCompteMarketPlace()->getMarketPlace()->getId() == "4" or $an->getCompteMarketPlace()->getMarketPlace()->getId() == "4" && $an->getIdImport() == NULL) {
  3017.                                 if ($an->getCompteMarketPlace()->getMarketPlace()->getId() == "4" or $an->getCompteMarketPlace()->getMarketPlace()->getId() == "6") {
  3018.                                     $articleMarketPlaceCaracteristiqueAnnonce $repo_caracteristiques_market_place->findOneBy(
  3019.                                         ["articleMarketPlace" => $an"caracteristique" => $caracteristique]
  3020.                                     );
  3021.                                     if ( ! is_object($articleMarketPlaceCaracteristiqueAnnonce)) {
  3022.                                         //echo "RRRRR ".$an->getId();
  3023.                                         $articleMarketPlaceCaracteristiqueAnnonce = new ArticleMarketPlaceCaracteristique();
  3024.                                         $articleMarketPlaceCaracteristiqueAnnonce->setCaracteristique($caracteristique);
  3025.                                         $articleMarketPlaceCaracteristiqueAnnonce->setArticleMarketPlace($an);
  3026.                                     }
  3027.                                     $articleMarketPlaceCaracteristiqueAnnonce->setValeur($articleMarketPlaceCaracteristique->getValeur());
  3028.                                     $em->persist($articleMarketPlaceCaracteristiqueAnnonce);
  3029.                                 }
  3030.                             }
  3031.                         }
  3032.                     }
  3033.                     $em->flush();
  3034.                 }
  3035.             }
  3036.         }
  3037.         //print_r($get);
  3038.         $response = new JsonResponse;
  3039.         $response->setData([
  3040.                                'rendu' => "1",
  3041.                            ]);
  3042.         return $response;
  3043.     }
  3044.     /**
  3045.      * @Route("/article/historique/{article}", name="dtc_article_historique")
  3046.      */
  3047.     public function historiqueAction(Article $articleEntityManagerInterface $emTranslatorInterface $translator)
  3048.     {
  3049.         $titre_modal $translator->trans("Historique de l'article");
  3050.         $articles   = [];
  3051.         $articles[] = $article;
  3052.         //dump($commandes);
  3053.         $historiques $em->getRepository(HistoriqueArticle::class)->findBy(['article' => $articles], ['date' => 'DESC']);
  3054.         $rendu $this->renderView('Articles/Article/historique_article.html.twig', ['historiques' => $historiques]);
  3055.         return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal'width' => 900]));
  3056.     }
  3057. }