src/Controller/GestionComerciale/FactureController.php line 877

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Clients\Client;
  4. use App\Entity\FO\Societe;
  5. use App\Entity\GestionComerciale\ArticleCommande;
  6. use App\Entity\GestionComerciale\Avoir;
  7. use App\Entity\GestionComerciale\Commande;
  8. use App\Entity\GestionComerciale\Facture;
  9. use App\Entity\GestionComerciale\StatutCommande;
  10. use App\Entity\GestionComerciale\StatutPaiement;
  11. use App\Form\GestionComerciale\CommandeType;
  12. use App\Form\GestionComerciale\FactureType;
  13. use App\Kernel;
  14. use App\Library\Datatable\Util\Datatable;
  15. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  16. use App\Service\GestionComerciale\AcompteService;
  17. use App\Service\GestionComerciale\BonLivraisonService;
  18. use App\Service\GestionComerciale\CommandeService;
  19. use App\Service\GestionComerciale\FactureService;
  20. use App\Service\Utilisateur\ColonneTableauService;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Knp\Snappy\Pdf;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  29. use Symfony\Component\Validator\Validator\ValidatorInterface;
  30. use Symfony\Contracts\Translation\TranslatorInterface;
  31. class FactureController extends AbstractController
  32. {
  33.     /**
  34.      * @Route("/vente/facture/{id}", name="dtc_facture_afficher")
  35.      */
  36.     public function afficherAction(Request        $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorFactureService $factureService,
  37.                                    AcompteService $serviceAcompte Datatable $datatable
  38.     ) {
  39.         if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::AVOIR) {
  40.             return $this->redirectToRoute('dtc_avoir_modifier', ["id" => $commande->getId()]);
  41.         }
  42.         $repo_objet $em->getRepository(Commande::class)->find($commande);
  43.         $reglements $repo_objet->getAcomptes();
  44.         $user       $this->getUser();
  45.         $operation $request->query->get('operation');
  46.         $errors    "";
  47.         $annuler   $request->request->get('annuler');
  48.         $form      $this->createForm(CommandeType::class, $commande);
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted()) {
  51.             if ($form->isValid()) {
  52.                 $em->persist($commande);
  53.                 //Modification du client sur les autres documents
  54.                 $repo_commande $em->getRepository(Commande::class);
  55.                 $documents $repo_commande->getDocumentClientAmodifier($commande)->getQuery()->getResult();
  56.                 if (count($documents) > 0) {
  57.                     foreach ($documents as $doc) {
  58.                         if ($commande->getClient()->getId() != $doc->getClient()->getId()) {
  59.                             $doc->setClient($commande->getClient());
  60.                             $doc->setAdresseLivraison($commande->getAdresseLivraison());
  61.                             $doc->setAdresseFacturation($commande->getAdresseFacturation());
  62.                             $em->persist($doc);
  63.                         }
  64.                     }
  65.                     $em->flush();
  66.                 }
  67.                 if (is_object($commande->getAdresseLivraison())) {
  68.                     $adrLiv $commande->getAdresseLivraison();
  69.                     if (is_object($adrLiv->getCodePostal())) {
  70.                         $commande->setCodePostalLivraison($adrLiv->getCodePostal());
  71.                     }
  72.                     if (is_object($adrLiv->getCodePostal())) {
  73.                         $commande->setCodePostalLivraisonTxt($adrLiv->getCodePostal()->getCodePostal());
  74.                     }
  75.                     if (is_object($adrLiv->getVille())) {
  76.                         $commande->setVilleLivraison($adrLiv->getVille());
  77.                     }
  78.                     if (is_object($adrLiv->getVille())) {
  79.                         $commande->setVilleLivraisonTxt($adrLiv->getVille()->getTitre());
  80.                     }
  81.                     if (is_object($adrLiv->getPays())) {
  82.                         $commande->setPaysLivraison($adrLiv->getPays());
  83.                     }
  84.                     $commande->setLibelleLivraison($adrLiv->getSociete());
  85.                     $commande->setNumeroLivraison($adrLiv->getNumero());
  86.                     $commande->setRueLivraison($adrLiv->getRue());
  87.                     $commande->setComplementLivraison($adrLiv->getComplement());
  88.                     $commande->setComplementLivraison2($adrLiv->getComplement2());
  89.                 }
  90.                 if (is_object($commande->getAdresseFacturation())) {
  91.                     $adrFac $commande->getAdresseFacturation();
  92.                     if (is_object($adrFac->getCodePostal())) {
  93.                         $commande->setCodePostalFacturation($adrFac->getCodePostal());
  94.                     }
  95.                     if (is_object($adrFac->getCodePostal())) {
  96.                         $commande->setCodePostalFacturationTxt($adrFac->getCodePostal()->getCodePostal());
  97.                     }
  98.                     if (is_object($adrFac->getVille())) {
  99.                         $commande->setVilleFacturation($adrFac->getVille());
  100.                     }
  101.                     if (is_object($adrFac->getVille())) {
  102.                         $commande->setVilleFacturationTxt($adrFac->getVille()->getTitre());
  103.                     }
  104.                     if (is_object($adrFac->getPays())) {
  105.                         $commande->setPaysFacturation($adrFac->getPays());
  106.                     }
  107.                     $commande->setLibelleFacturation($adrFac->getSociete());
  108.                     $commande->setNumeroFacturation($adrFac->getNumero());
  109.                     $commande->setRueFacturation($adrFac->getRue());
  110.                     $commande->setComplementFacturation($adrFac->getComplement());
  111.                     $commande->setComplementFacturation2($adrFac->getComplement2());
  112.                 }
  113.                 $em->flush();
  114.                 if ($annuler != "annuler" && $annuler != "annuler_devis" && $annuler != "annuler_bp") {
  115.                     $this->addFlash(
  116.                         'notice',
  117.                         $translator->trans('Facture modifiée avec succés  !')
  118.                     );
  119.                     return $this->redirectToRoute('dtc_facture_afficher', ["id" => $commande->getId()]);
  120.                 }
  121.             }
  122.         }
  123.         //echo "AA ".$annuler;
  124.         if ($annuler == "annuler" && is_object($commande->getBL()) == true && $commande->getMultiBL() == 0/*|| $annuler == "annuler_devis" || $annuler == "annuler_bp"*/) {
  125.             $factureService->annuler($commande$annuler);
  126.             $remboursement 0;
  127.             if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
  128.                 $remboursement $serviceAcompte->proposerRemboursement($commande->getClient());
  129.             }
  130.             $this->addFlash(
  131.                 'notice',
  132.                 $translator->trans('Facture annulée avec succès !')
  133.             );
  134.             //exit;
  135.             return $this->redirectToRoute('dtc_bon_livraison_modifier', ["id" => $commande->getBL()->getId(), "r" => $remboursement"c" => $commande->getClient()->getId()]);
  136.         } elseif ($annuler == "annuler" && $commande->getCommande()->getTypeDocumentCommercial() == TypeDocumentCommercial::ORDREREPARATION) {
  137.             //echo "okokokokokok";
  138.             //exit;
  139.             $factureService->annuler($commande$annuler);
  140.             $remboursement 0;
  141.             if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::ORDREREPARATION) {
  142.                 $remboursement $serviceAcompte->proposerRemboursement($commande->getClient());
  143.             }
  144.             $this->addFlash(
  145.                 'notice',
  146.                 $translator->trans('Facture annulée avec succès !')
  147.             );
  148.             //exit;
  149.             return $this->redirectToRoute('dtc_ordre_reparation_modifier', ["id" => $commande->getCommande()->getId(), "r" => $remboursement"c" => $commande->getClient()->getId()]);
  150.         } elseif ($annuler == "annuler" && is_object($commande->getBL()) == false) {
  151.             //echo "okokokokokok";
  152.             //exit;
  153.             $factureService->annuler($commande$annuler);
  154.             $remboursement 0;
  155.             if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
  156.                 $remboursement $serviceAcompte->proposerRemboursement($commande->getClient());
  157.             }
  158.             $this->addFlash(
  159.                 'notice',
  160.                 $translator->trans('Facture annulée avec succès !')
  161.             );
  162.             //exit;
  163.             return $this->redirectToRoute('dtc_facture_liste', ["r" => $remboursement"c" => $commande->getClient()->getId()]);
  164.         }
  165.         if ($annuler == "annuler_bp" && $commande->getBP() != null) {
  166.             $factureService->annuler($commande$annuler);
  167.             $remboursement 0;
  168.             if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
  169.                 $remboursement $serviceAcompte->proposerRemboursement($commande->getClient());
  170.             }
  171.             $this->addFlash(
  172.                 'notice',
  173.                 $translator->trans('Facture annulée avec succès !')
  174.             );
  175.             //exit;
  176.             return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $commande->getBP()->getId(), "r" => $remboursement"c" => $commande->getClient()->getId()]);
  177.         }
  178.         if ($annuler == "annuler_devis") {
  179.             $factureService->annuler($commande$annuler);
  180.             $remboursement 0;
  181.             if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
  182.                 $remboursement $serviceAcompte->proposerRemboursement($commande->getClient());
  183.             }
  184.             $this->addFlash(
  185.                 'notice',
  186.                 $translator->trans('Facture annulée avec succès !')
  187.             );
  188.             //exit;
  189.             return $this->redirectToRoute('dtc_facture_liste', ["r" => $remboursement"c" => $commande->getClient()->getId()]);
  190.         }
  191.         $this->datatableAvoir($commande$datatable$translator);
  192.         $modal $request->query->get('modal');
  193.         if ($modal == 1) {
  194.             if ($commande->getMultiBL() == true) {
  195.                 $repo_commande $em->getRepository(Commande::class);
  196.                 $bls           $repo_commande->findByFacture($commande->getId());
  197.                 $rendu         $this->renderView(
  198.                     'GestionComerciale/Facture/afficher-traite-modal.html.twig',
  199.                     ['form' => $form->createView(), 'commande' => $commande'errors' => $errors'bls' => $bls]
  200.                 );
  201.             } else {
  202.                 $rendu $this->renderView(
  203.                     'GestionComerciale/Facture/afficher-modal.html.twig',
  204.                     ['form' => $form->createView(), 'commande' => $commande'errors' => $errors'reglements' => $reglements'operation' => $operation]
  205.                 );
  206.             }
  207.             $titre_modal $commande->getReference();
  208.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  209.         } else {
  210.             if ($commande->getMultiBL() == true) {
  211.                 $repo_commande $em->getRepository(Commande::class);
  212.                 $bls           $repo_commande->findByFacture($commande->getId());
  213.                 return $this->render(
  214.                     'GestionComerciale/Facture/afficher-traite.html.twig',
  215.                     ['form' => $form->createView(), 'commande' => $commande'errors' => $errors'bls' => $bls'reliquats' => $request->query->get('reliquats')]
  216.                 );
  217.             } else {
  218.                 return $this->render(
  219.                     'GestionComerciale/Facture/afficher.html.twig',
  220.                     [
  221.                         'form'       => $form->createView(),
  222.                         'commande'   => $commande,
  223.                         'errors'     => $errors,
  224.                         'reglements' => $reglements,
  225.                         'operation'  => $operation,
  226.                         'reliquats'  => $request->query->get('reliquats'),
  227.                     ]
  228.                 );
  229.             }
  230.         }
  231.     }
  232.     /**
  233.      * @Route("/vente/facture/nouveau/{id}/{type}", name="dtc_facture_ajouter")
  234.      */
  235.     public function ajouterAction(Request $request$id$type ""EntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validatorFactureService $factureService)
  236.     {
  237.         $titre_modal $translator->trans("Nouvelle facture");
  238.         $repo_objet  $em->getRepository(Commande::class);
  239.         $objet       $repo_objet->find($id);
  240.         $bonPrepa = clone $objet;
  241.         $bonPrepa->setDateBon(new \DateTime());
  242.         $user $this->getUser();
  243.         $bonPrepa->setUtilisateur($user);
  244.         if (is_object($bonPrepa->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bonPrepa->getUtilisateur()->getId(
  245.             ) == $this->getParameter('utilisateur_site_internet')) {
  246.         } else {
  247.             //$bonPrepa->setUtilisateur($user);
  248.         }
  249.         $form      $this->createForm(FactureType::class, $bonPrepa);
  250.         $errors    "";
  251.         $form->handleRequest($request);
  252.         $idsArticleCommande $request->query->get('choixArticles');
  253.         $repo_objet         $em->getRepository(Commande::class);
  254.         $objet              $repo_objet->find($id);
  255.         $bonPrepa->setCommande($objet);
  256.         $link            $this->generateUrl('dtc_facture_ajouter', ['id' => $objet->getId(), 'type' => 'commande''operation' => $request->query->get('operation')]);
  257.         $articleCommande $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
  258.         if ($form->isSubmitted()) {
  259.             if ($form->isValid()) {
  260.                 if ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
  261.                     $url $this->generateUrl('dtc_bon_preparation_modifier', ['id' => $objet->getId(), 'tab' => 'factures']);
  262.                 } else {
  263.                     $url $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $objet->getId(), 'tab' => 'factures']);
  264.                 }
  265.                 if ($request->query->get('operation') == "or") {
  266.                     $objet->setFacture($bonPrepa);
  267.                     $bonPrepa->setCommande($objet);
  268.                 }
  269.                 //print_r($request->request->get('emplacement'));
  270.                 //echo "<div>POPOPOPOPOPOP</div>";
  271.                 $articles = [
  272.                     'emplacement'       => $request->request->get('emplacement'),
  273.                     'idArticleCommande' => $request->request->get('idArticleCommande'),
  274.                     'quantiteInit'      => $request->request->get('quantiteInit'),
  275.                     'quantite'          => $request->request->get('quantite'),
  276.                     'position'          => $request->request->get('position'),
  277.                 ];
  278.                 $valeurs  = ["articles" => $articles'operation' => $request->query->get('operation')];
  279.                 $factureService->sauvegarder($bonPrepa$valeurs);
  280.                 if ($request->query->get('operation') == "or") {
  281.                     //if($factureService->resteDesArticlesSansFacture($objet)) {
  282.                     if ($factureService->resteDesArticlesSansFactureOuAvoir($objet)) {
  283.                         //echo "<div>RESTE</div>";
  284.                         $statutCommande $em->getRepository(StatutCommande::class)->findOneBy(
  285.                             ["documentCommercial" => $objet->getTypeDocumentCommercial(), "ordre" => "3"]
  286.                         );
  287.                     } else {
  288.                         // echo "<div>RESTE PAS</div>";
  289.                         $statutCommande $em->getRepository(StatutCommande::class)->findOneBy(
  290.                             ["documentCommercial" => $objet->getTypeDocumentCommercial(), "ordre" => "4"]
  291.                         );
  292.                     }
  293.                     $objet->setStatutCommande($statutCommande);
  294.                     $em->persist($objet);
  295.                     $em->flush();
  296.                 }
  297.                 $url $this->generateUrl('dtc_facture_afficher', ["id" => $bonPrepa->getId()]);
  298.                 $this->addFlash(
  299.                     'notice',
  300.                     $translator->trans('Facture ajoutée avec succès !')
  301.                 );
  302.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  303.             } else {
  304.                 $errors $validator->validate($bonPrepa);
  305.                 $rendu  $this->renderView(
  306.                     'GestionComerciale/Facture/ajouter.html.twig',
  307.                     [
  308.                         'form'            => $form->createView(),
  309.                         'errors'          => $errors,
  310.                         'id'              => $id,
  311.                         'type'            => $type,
  312.                         'articleCommande' => $articleCommande,
  313.                         'commande'        => $objet,
  314.                     ]
  315.                 );
  316.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  317.             }
  318.         }
  319.         $rendu $this->renderView(
  320.             'GestionComerciale/Facture/ajouter.html.twig',
  321.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'articleCommande' => $articleCommande'commande' => $objet]
  322.         );
  323.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''link' => $link'titre' => $titre_modal]);
  324.     }
  325.     /**
  326.      * @Route("/vente/factures", name="dtc_facture_liste")
  327.      */
  328.     public function listerAction(Request $request$id "0"$type "a"EntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  329.     {
  330.         $repo_objet $em->getRepository(Commande::class);
  331.         $objet      $repo_objet->find($id);
  332.         $param   $request->query->all();
  333.         if (is_object($objet)) {
  334.             $tableau_class_cellule   = [];
  335.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [0], "visible" => true"orderable" => true];
  336.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [1], "visible" => true"orderable" => true];
  337.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right""targets" => [2], "visible" => true"orderable" => true];
  338.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right""targets" => [3], "visible" => true"orderable" => true];
  339.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right""targets" => [4], "visible" => true"orderable" => true];
  340.             $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [5], "visible" => true];
  341.             $this->datatableCommande($objet$type$em$datatable$translator);
  342.             return $this->render(
  343.                 'GestionComerciale/Facture/lister_commande.html.twig',
  344.                 ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type'parametres' => $param]
  345.             );
  346.         } else {
  347.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => false];
  348.             $tableau_class_cellule[] = [
  349.                 "className" => "visible_export colonne_id",
  350.                 "targets"   => [1],
  351.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "id"),
  352.             ];
  353.             $tableau_class_cellule[] = [
  354.                 "className" => "visible_export colonne_id text-center",
  355.                 "targets"   => [2],
  356.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "date"),
  357.             ];
  358.             $tableau_class_cellule[] = [
  359.                 "className" => "visible_export colonne_id",
  360.                 "targets"   => [3],
  361.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "reference"),
  362.             ];
  363.             $tableau_class_cellule[] = [
  364.                 "className" => "visible_export colonne_id",
  365.                 "targets"   => [4],
  366.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "refCli"),
  367.             ];
  368.             $tableau_class_cellule[] = [
  369.                 "className" => "visible_export colonne_id",
  370.                 "targets"   => [5],
  371.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "client"),
  372.             ];
  373.             $tableau_class_cellule[] = [
  374.                 "className" => "visible_export colonne_id",
  375.                 "targets"   => [6],
  376.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "libelleLivraison"),
  377.             ];
  378.             $tableau_class_cellule[] = [
  379.                 "className" => "visible_export totalHT colonne_id text-right",
  380.                 "targets"   => [7],
  381.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "totalHT"),
  382.             ];
  383.             $tableau_class_cellule[] = [
  384.                 "className" => "visible_export tva colonne_id text-right",
  385.                 "targets"   => [8],
  386.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "tva"),
  387.             ];
  388.             $tableau_class_cellule[] = [
  389.                 "className" => "visible_export TotalTTC colonne_id text-right",
  390.                 "targets"   => [9],
  391.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "totalTTC"),
  392.             ];
  393.             $tableau_class_cellule[] = [
  394.                 "className" => "visible_export",
  395.                 "targets"   => [10],
  396.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "paye"),
  397.             ];
  398.             $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [11], "visible" => true];
  399.             $this->datatable($request$datatable$translator);
  400.             return $this->render('GestionComerciale/Facture/lister.html.twig', [
  401.                 "id"                  => $id,
  402.                 "type"                => $type,
  403.                 'tableauClassColonne' => $tableau_class_cellule,
  404.                 'parametres'          => $param,
  405.                 'statutsPaiement'     => $em->getRepository(StatutPaiement::class)->findAll()//->findBy(array('id'=>array(1,2)))
  406.             ]);
  407.         }
  408.     }
  409.     /**
  410.      * set datatable configs
  411.      *
  412.      * @return \App\Library\Datatable\Util\Datatable
  413.      */
  414.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  415.     {
  416.         $param     $request->query->all();
  417.         $datatable->setDatatableId('dta-factures')
  418.                   ->setEntity(Commande::class, "x")
  419.                   ->setFields(
  420.                       [
  421.                           $translator->trans("ID")                 => 'x.id',
  422.                           $translator->trans("Date")               => 'x.date',
  423.                           $translator->trans("Réf")                => 'x.reference',
  424.                           $translator->trans("Réf client")         => 'cl.reference',
  425.                           $translator->trans("Client")             => 'cl.nom',
  426.                           $translator->trans("Société / Nom")      => 'x.libelleLivraison',
  427.                           $translator->trans("Total HT")           => 'x.total',
  428.                           $translator->trans("TVA")                => 'x.totalTva',
  429.                           $translator->trans("Total TTC")          => 'x.totalTtc',
  430.                           //$translator->trans("Payée") =>  'sp.id',
  431.                           $translator->trans("Statut de paiement") => 'sp.libelle',
  432.                           $translator->trans("Actions")            => 'x.id',
  433.                           "_identifier_"                           => 'x.id',
  434.                       ]
  435.                   )
  436.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  437.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  438.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  439.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  440.                   ->addJoin('x.statutPaiement''sp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  441.             /*->setWhere(
  442.                     $type_jointure.' = :objet',
  443.                     array('objet' => $objet)
  444.                )
  445.               */
  446.                   ->setRenderers(
  447.                 [
  448.                     0  => [
  449.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  450.                         'params' => [
  451.                             'edit_route' => 'dtc_facture_afficher',
  452.                         ],
  453.                     ],
  454.                     1  => [
  455.                         'view'   => 'FO/DataTable/heure.html.twig',
  456.                         'params' => [],
  457.                     ],
  458.                     2  => [
  459.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  460.                         'params' => [
  461.                             'edit_route' => 'dtc_facture_afficher',
  462.                         ],
  463.                     ],
  464.                     3  => [
  465.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  466.                         'params' => [
  467.                             'edit_route'   => 'dtc_client_modifier',
  468.                             'typeDocument' => 'client',
  469.                         ],
  470.                     ],
  471.                     4  => [
  472.                         'view'   => 'FO/DataTable/client.html.twig',
  473.                         'params' => [],
  474.                     ],
  475.                     6  => [
  476.                         'view'   => 'FO/DataTable/prix_total_ht.html.twig',
  477.                         'params' => [],
  478.                     ],
  479.                     7  => [
  480.                         'view'   => 'FO/DataTable/tva-prix.html.twig',
  481.                         'params' => [],
  482.                     ],
  483.                     8  => [
  484.                         'view'   => 'FO/DataTable/prix.html.twig',
  485.                         'params' => [],
  486.                     ],
  487.                     /*
  488.                     9 => array(
  489.                         'view' => 'FO/DataTable/facture_est_paye_solde.html.twig'
  490.                     ),
  491.                     */
  492.                     10 => [
  493.                         'view'   => 'FO/DataTable/actions_facture_avoir.html.twig',
  494.                         'params' => [
  495.                             'afficher_route_facture' => 'dtc_facture_afficher',
  496.                             'pdf_route_facture'      => 'dtc_facture_pdf',
  497.                             'edit_route_avoir'       => 'dtc_avoir_modifier',
  498.                             'pdf_route_avoir'        => 'dtc_avoir_pdf',
  499.                             'objet_facture'          => Facture::class,
  500.                             'objet_avoir'            => Avoir::class,
  501.                             'deplier'                => true,
  502.                         ],
  503.                     ],
  504.                 ]
  505.             )
  506.                   ->setMultiple(
  507.                       [
  508.                           'print' => [
  509.                               'title' => 'Imprimer',
  510.                               'route' => 'dtc_bon_preparation_pdf_multiple',
  511.                           ],
  512.                       ]
  513.                   )
  514.                   ->setOrder("x.id""desc")
  515.                   ->setSearch(true)
  516.                   ->setSearchFields([23459]);
  517.         $where      'x.typeDocumentCommercial IN (:typeDocumentCommercial) and x.visible = :visible ';
  518.         $parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURETypeDocumentCommercial::AVOIR], 'visible' => '1'];
  519.         if (array_key_exists('parametres'$param)) {
  520.             if ( ! empty($param["parametres"]["statutPaiement"])) {
  521.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  522.                 $parameters["statutPaiement"] = $param["parametres"]["statutPaiement"];
  523.                 if ($where != "") {
  524.                     $where .= " AND ";
  525.                 }
  526.                 $where .= "sp.id = :statutPaiement";
  527.             }
  528.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  529.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  530.                 $parameters["client"] = $param["parametres"]["client"];
  531.                 if ($where != "") {
  532.                     $where .= " AND ";
  533.                 }
  534.                 $where .= "cl.id = :client";
  535.             }
  536.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  537.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  538.                 $param["parametres"]["date_debut"]->setTime(000000);
  539.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  540.                 if ($where != "") {
  541.                     $where .= " AND ";
  542.                 }
  543.                 $where .= "x.date >= :date_debut";
  544.             }
  545.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  546.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  547.                 $param["parametres"]["date_fin"]->setTime(235959);
  548.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  549.                 if ($where != "") {
  550.                     $where .= " AND ";
  551.                 }
  552.                 $where .= "x.date <= :date_fin";
  553.             }
  554.             if (array_key_exists('categorie_client'$param["parametres"]) and $param["parametres"]["categorie_client"] > 0) {
  555.                 //echo "AZERTYUI";
  556.                 $datatable->addJoin('cl.clientCategorie''cc'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  557.                 $datatable->addJoin('cc.categorie''catC'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  558.                 $parameters["categorie"] = $param["parametres"]["categorie_client"];
  559.                 $where                   .= "and catC = :categorie";
  560.                 if (array_key_exists('sous_categorie_client'$param["parametres"]) and $param["parametres"]["sous_categorie_client"] > 0) {
  561.                     $datatable->addJoin('cl.clientCategorie''cc2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  562.                     $datatable->addJoin('cc2.categorie''catC2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  563.                     $parameters["sous_categorie"] = $param["parametres"]["sous_categorie_client"];
  564.                     $where                        .= " and catC2 = :sous_categorie";
  565.                 }
  566.             }
  567.         }
  568.         //echo $where;
  569.         if ($where != '') {
  570.             //echo $where;
  571.             $datatable->setWhere($where$parameters);
  572.         }
  573.         return $datatable;
  574.         /*
  575.         $datatable  ->setDatatableId('dta-factures')
  576.                     ->setEntity("DTCGestionComercialeBundle:Commande", "x")
  577.                     ->setFields(
  578.                             array(
  579.                                $translator->trans("ID") =>  'x.id',
  580.                                $translator->trans("Client") =>  'cl.nom',
  581.                                $translator->trans("Réf") =>  'x.reference',
  582.                                $translator->trans("Date") =>  'x.dateBon',
  583.                                $translator->trans("Actions") =>  'x.id',
  584.                                    "_identifier_" => 'x.id'
  585.                                    )
  586.                             )
  587.                     ->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  588.                     ->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  589.                      ->setWhere(
  590.                              'x.typeDocumentCommercial IN (:typeDocumentCommercial)',
  591.                              array('typeDocumentCommercial' => array(TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR))
  592.                         )
  593.                     ->setRenderers(
  594.                             array(
  595.                                 0 => array(
  596.                                 'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  597.                                  'params' => array(
  598.                                             'edit_route'    => 'dtc_facture_afficher'
  599.                                         ),
  600.                                 ),
  601.                                 2 => array(
  602.                                 'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  603.                                  'params' => array(
  604.                                             'edit_route'    => 'dtc_facture_afficher'
  605.                                         ),
  606.                                 ),
  607.                                 3 => array(
  608.                                     'view' => 'FO/DataTable/date.html.twig',
  609.                                     'params' => array(
  610.                                         ),
  611.                                 ),
  612.                                 4 => array(
  613.                                     'view' => 'FO/DataTable/actions_facture_avoir.html.twig',
  614.                                     'params' => array(
  615.                                             'afficher_route_facture'  => 'dtc_facture_afficher',
  616.                                             'pdf_route_facture'  => 'dtc_facture_pdf',
  617.                                             'edit_route_avoir'  => 'dtc_avoir_modifier',
  618.                                             'pdf_route_avoir'  => 'dtc_avoir_pdf',
  619.                                             'objet_facture' => Facture::class,
  620.                                             'objet_avoir' => "DTCGestionComercialeBundle:Avoir"
  621.                                         ),
  622.                                 ),
  623.                             )
  624.                     )
  625.                      ->setMultiple(
  626.                         array(
  627.                             'print' => array(
  628.                                 'title' => 'Imprimer',
  629.                                 'route' => 'dtc_facture_pdf_multiple'                            ),
  630.                         )
  631.                     )
  632.                     ->setOrder("x.id", "desc")
  633.                     ->setSearch(true)
  634.                     //->setSearchFields(array(1,2))
  635.                     ;
  636.         return $datatable;
  637.         */
  638.     }
  639.     /**
  640.      * set datatable configs
  641.      *
  642.      * @return \App\Library\Datatable\Util\Datatable
  643.      */
  644.     private function datatableCommande($objet$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  645.     {
  646.         //$type_jointure = 'x.'.$type;
  647.         $datatable->setDatatableId('dta-factures')
  648.                   ->setEntity(Commande::class, "x");
  649.         $repo_statut_document $em->getRepository(StatutCommande::class);
  650.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 6"ordre" => [0]]);
  651.         $parameters = ['objet' => $objet'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE'statutCommande' => $liste_statut];
  652.         $where      "x.commande = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial  AND x.statutCommande NOT IN (:statutCommande) OR x.commande = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR."  AND x.statutCommande NOT IN (:statutCommande) ";
  653.         if ($type == "bp") {
  654.             $where "x.bp = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande) OR x.bp = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR." AND x.statutCommande NOT IN (:statutCommande)";
  655.         } elseif ($type == "bl") {
  656.             //echo "OK";
  657.             $datatable->addJoin('x.bls''bl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  658.             $where               "bl.id = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande) OR bl.id = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR." AND x.statutCommande NOT IN (:statutCommande)";
  659.             $parameters['objet'] = $objet->getId();
  660.             //$where = "x.bl = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)";
  661.         }
  662.         $datatable
  663.             ->setFields(
  664.                 [
  665.                     //$translator->trans("ID") =>  'x.id',
  666.                     $translator->trans("Date")      => 'x.date',
  667.                     $translator->trans("Réf")       => 'x.reference',
  668.                     $translator->trans("Total HT")  => 'x.total',
  669.                     $translator->trans("TVA")       => 'x.totalTva',
  670.                     $translator->trans("Total TTC") => 'x.totalTtc',
  671.                     $translator->trans("Actions")   => 'x.id',
  672.                     "_identifier_"                  => 'x.id',
  673.                 ]
  674.             )
  675.             ->setWhere(
  676.                 $where,
  677.                 $parameters
  678.             )
  679.             ->setRenderers(
  680.                 [
  681.                     => [
  682.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  683.                         'params' => [
  684.                             'edit_route' => 'dtc_facture_afficher',
  685.                         ],
  686.                     ],
  687.                     => [
  688.                         'view'   => 'FO/DataTable/heure.html.twig',
  689.                         'params' => [],
  690.                     ],
  691.                     => [
  692.                         'view'   => 'FO/DataTable/prix.html.twig',
  693.                         'params' => [],
  694.                     ],
  695.                     => [
  696.                         'view'   => 'FO/DataTable/tva-prix.html.twig',
  697.                         'params' => [],
  698.                     ],
  699.                     => [
  700.                         'view'   => 'FO/DataTable/prix.html.twig',
  701.                         'params' => [],
  702.                     ],
  703.                     => [
  704.                         //'view' => 'FO/DataTable/actions_modal.html.twig',
  705.                         'view'   => 'FO/DataTable/actions.html.twig',
  706.                         'params' => [
  707.                             //'edit_route'  => 'dtc_facture_modifier',
  708.                             //'supprimer_route'  => 'dtc_facture_supprimer',
  709.                             'pdf_route' => 'dtc_facture_pdf',
  710.                             'id'        => $objet->getId(),
  711.                             'type'      => $type,
  712.                             'entite'    => 'bonPreparation',
  713.                             'objet'     => Commande::class,
  714.                             'deplier'   => true,
  715.                         ],
  716.                     ],
  717.                 ]
  718.             )
  719.             ->setOrder("x.id""desc")
  720.             ->setSearch(true)//->setSearchFields(array(1,2))
  721.         ;
  722.         return $datatable;
  723.     }
  724.     /**
  725.      * @Route("/vente/facture/grid/{id}/{type}", name="dtc_facture_liste_grid")
  726.      */
  727.     public function gridAction(Request $request$id ""$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  728.     {
  729.         $repo_objet $em->getRepository(Commande::class);
  730.         $objet      $repo_objet->find($id);
  731.         if (is_object($objet)) {
  732.             return $this->datatableCommande($objet$type$em$datatable$translator)->execute();
  733.         } else {
  734.             return $this->datatable($request$datatable$translator)->execute();
  735.         }
  736.     }
  737.     /**
  738.      * @Route("/facture/pdf2/{id}", name="dtc_facture_prestashop_pdf")
  739.      */
  740.     public function pdfFacturePrestashopAction(Request $requestCommande $objetEntityManagerInterface $emPdf $snappyCommandeService $service)
  741.     {
  742.         $param   $request->query->all();
  743.         $cle_xml $this->getParameter('cle_xml');
  744.         //$id_client = $this->getParameter('id');
  745.         $md5Get $param["id"];
  746.         if ( ! array_key_exists("cle"$param) or $param["cle"] != $cle_xml) {
  747.             //echo "erreur";
  748.             throw new AccessDeniedException('This user does not have access to this section.');
  749.         }
  750.         $facture_ok false;
  751.         $md5        md5($objet->getClient()->getId());
  752.         if ($md5 == $md5Get) {
  753.             //echo "<div>FACOKOKO </div>";
  754.         } else {
  755.             throw new AccessDeniedException('This user does not have access to this section.');
  756.         }
  757.         if ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::DEVIS) {
  758.             $societe    $em->getRepository(Societe::class)->find(1);
  759.             $date_Y     date("Y");
  760.             $date_M     date("m");
  761.             $date_D     date("d");
  762.             $date       $date_Y.'/'.$date_M.'/'.$date_D;
  763.             $chemin_pdf 'PDF/DEVIS/'.$date.'/DEVIS-'.$objet->getReference().'.pdf';
  764.             if (file_exists($chemin_pdf)) {
  765.                 unlink($chemin_pdf);
  766.             }
  767.             $footer $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.html.twig', ['societe' => $societe'commande' => $objet]);
  768.             $header $this->renderView('FO/PDF/header_devis_pdf.html.twig', ['societe' => $societe'commande' => $objet]);
  769.             //$snappy->setOption('page-size', 'A4');
  770.             $snappy->setOption('footer-html'$footer);
  771.             $snappy->setOption('header-html'$header);
  772.             $snappy->setOption('header-spacing'"4");
  773.             $snappy->setOption('footer-spacing'"3");
  774.             $snappy->setOption('disable-smart-shrinking'true);
  775.             //$snappy->setOption('print-media-type', false );
  776.             $snappy->setOption('page-height'"297");
  777.             $snappy->setOption('page-width'"210");
  778.             $reference     $request->query->get('reference');
  779.             $mode          $request->query->get('mode');
  780.             $forceQteDispo $request->query->get('forceQteDispo');
  781.             $snappy->generateFromHtml(
  782.                 $this->renderView(
  783.                     'GestionComerciale/Devis/template_pdf.html.twig',
  784.                     [
  785.                         'commande'      => $objet,
  786.                         'societe'       => $societe,
  787.                         'reference'     => $reference,
  788.                         'mode'          => $mode,
  789.                         'forceQteDispo' => $forceQteDispo,
  790.                     ]
  791.                 ),
  792.                 $chemin_pdf
  793.             );
  794.         } elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
  795.             $retour     $service->pdf($objet, [], 'true');
  796.             $chemin_pdf $retour['chemin'];
  797.         } elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::BL) {
  798.             $societe    $em->getRepository(Societe::class)->find(1);
  799.             $date_Y     date("Y");
  800.             $date_M     date("m");
  801.             $date_D     date("d");
  802.             $date       $date_Y.'/'.$date_M.'/'.$date_D;
  803.             $chemin_pdf 'PDF/BONSLIV/'.$date.'/BONLIV-'.$objet->getReference().'.pdf';
  804.             if (file_exists($chemin_pdf)) {
  805.                 unlink($chemin_pdf);
  806.             }
  807.             $footer $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', ['societe' => $societe'commande' => $objet]);
  808.             $header $this->renderView('FO/PDF/header_bl_pdf.html.twig', ['societe' => $societe'commande' => $objet]);
  809.             $snappy->setOption('header-html'$header);
  810.             $snappy->setOption('footer-html'$footer);
  811.             $snappy->setOption('header-spacing'"4");
  812.             $snappy->setOption('footer-spacing'"3");
  813.             $snappy->setOption('disable-smart-shrinking'true);
  814.             //$snappy->setOption('print-media-type', false );
  815.             $snappy->setOption('page-height'"297");
  816.             $snappy->setOption('page-width'"210");
  817.             $snappy->generateFromHtml(
  818.                 $this->renderView(
  819.                 //'GestionComerciale/BonLivraison/template_pdf.html.twig',
  820.                     'GestionComerciale/BonLivraison/template_pdf.html.twig',
  821.                     [
  822.                         'commande' => $objet,
  823.                         'societe'  => $societe,
  824.                     ]
  825.                 ),
  826.                 $chemin_pdf
  827.             );
  828.         } elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {
  829.             $societe    $em->getRepository(Societe::class)->find(1);
  830.             $date_Y     date("Y");
  831.             $date_M     date("m");
  832.             $date_D     date("d");
  833.             $date       $date_Y.'/'.$date_M.'/'.$date_D;
  834.             $chemin_pdf 'PDF/FACTURES/'.$date.'/FAC-'.$objet->getReference().'.pdf';
  835.             if (file_exists($chemin_pdf)) {
  836.                 unlink($chemin_pdf);
  837.             }
  838.             $restant $request->query->get('restant');
  839.             $footer $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', ['societe' => $societe]);
  840.             $header $this->renderView('FO/PDF/header_facture_pdf.html.twig', ['societe' => $societe'commande' => $objet]);
  841.             $snappy->setOption('header-html'$header);
  842.             $snappy->setOption('footer-html'$footer);
  843.             $snappy->setOption('header-spacing'"4");
  844.             $snappy->setOption('footer-spacing'"3");
  845.             $snappy->setOption('disable-smart-shrinking'true);
  846.             //$snappy->setOption('print-media-type', false );
  847.             $snappy->setOption('page-height'"297");
  848.             $snappy->setOption('page-width'"210");
  849.             $donnees = [
  850.                 'commande' => $objet,
  851.                 'societe'  => $societe,
  852.             ];
  853.             if ($objet->getMultiBL() == true) {
  854.                 $template      'GestionComerciale/Facture/template_pdf_traite.html.twig';
  855.                 $repo_commande $em->getRepository(Commande::class);
  856.                 $donnees['bls']              = $repo_commande->findByFacture($objet->getId());
  857.                 $donnees['afficher_restant'] = 0;
  858.             } else {
  859.                 $template                    'GestionComerciale/Facture/template_pdf.html.twig';
  860.                 $donnees['afficher_restant'] = $restant;
  861.             }
  862.             $snappy->generateFromHtml(
  863.                 $this->renderView(
  864.                     $template,
  865.                     $donnees
  866.                 ),
  867.                 $chemin_pdf
  868.             );
  869.         }
  870.         $xml      "<chemin><pdf>".$chemin_pdf."</pdf></chemin>";
  871.         $response = new Response($xml);
  872.         $response->headers->add(['Content-Type' => 'application/xml']);
  873.         return $response;
  874.         return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  875.             'objet'      => $facture,
  876.             'chemin_pdf' => '/'.$chemin_pdf,
  877.             'visualiser' => $request->query->get('visualiser'),
  878.         ]);
  879.     }
  880.     /**
  881.      * @Route("/facture/pdf/{id}", name="dtc_facture_pdf")
  882.      */
  883.     public function pdfFactureAction(Request $requestCommande $factureEntityManagerInterface $emPdf $snappyKernel $kernel)
  884.     {
  885.         $societe    $em->getRepository(Societe::class)->find(1);
  886.         $date_Y     date("Y");
  887.         $date_M     date("m");
  888.         $date_D     date("d");
  889.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  890.         $chemin_pdf 'PDF/FACTURES/'.$date.'/FAC-'.$facture->getReference().'.pdf';
  891.         if (file_exists($chemin_pdf)) {
  892.             unlink($chemin_pdf);
  893.         }
  894.         //return $this->render('GestionComerciale/Facture/template_pdf.html.twig',array('commande'  => $facture,'societe'  => $societe));
  895.         $restant $request->query->get('restant');
  896.         $footer $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', array('societe'  => $societe,'commande'  => $facture));
  897.         //$footer = '';
  898.         $header $this->renderView('FO/PDF/header_facture_pdf.html.twig', ['societe' => $societe'commande' => $facture'dev' => $kernel->isDebug()]);
  899.         //$snappy->setOption('page-size', 'A4');
  900.         //$snappy->setOption('header-html', $header);
  901.         $snappy->setOption('footer-html'$footer);
  902.         //$snappy->setOption('header-html',$footer);
  903.         $snappy->setOption('margin-left'0);
  904.         $snappy->setOption('margin-right'0);
  905.         $snappy->setOption('header-spacing'"4");
  906.         $snappy->setOption('footer-spacing'"5");
  907.         //print_r($_SERVER);
  908.         if ( ! empty($_SERVER["HTTP_HOST"]) && in_array($_SERVER["HTTP_HOST"], ["cazin.local.tl""cazin.home.mww"])) {
  909.             $snappy->setOption('disable-smart-shrinking'false);
  910.         } else {
  911.             $snappy->setOption('disable-smart-shrinking'true);
  912.         }
  913.         //$snappy->setOption('print-media-type', false );
  914.         $snappy->setOption('page-height'"297");
  915.         $snappy->setOption('page-width'"210");
  916.         $snappy->setOption('enable-local-file-access'true);
  917.         $donnees = [
  918.             'commande' => $facture,
  919.             'societe'  => $societe,
  920.         ];
  921.         if ($facture->getMultiBL() == true) {
  922.             $template      'GestionComerciale/Facture/template_pdf_traite.html.twig';
  923.             $repo_commande $em->getRepository(Commande::class);
  924.             $donnees['bls']              = $repo_commande->findByFacture($facture->getId());
  925.             $donnees['afficher_restant'] = 0;
  926.         } else {
  927.             $template                    'GestionComerciale/Facture/template_pdf.html.twig';
  928.             $donnees['afficher_restant'] = $restant;
  929.         }
  930.         $snappy->generateFromHtml(
  931.             $this->renderView(
  932.                 $template,
  933.                 $donnees
  934.             ),
  935.             $chemin_pdf
  936.         );
  937.         return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  938.             'objet'      => $facture,
  939.             'chemin_pdf' => '/'.$chemin_pdf,
  940.             'visualiser' => $request->query->get('visualiser'),
  941.         ]);
  942.         //return new RedirectResponse("/".$chemin_pdf);
  943.     }
  944.     /**
  945.      * @Route("/vente/facture/imprimer/multiple", name="dtc_facture_pdf_multiple")
  946.      */
  947.     public function imprimerMultipleAction(Request $requestEntityManagerInterface $em)
  948.     {
  949.         $data       $request->get('dataTables');
  950.         $ids        $data['actions'];
  951.         $tableauPdf = [];
  952.         $pdfRelier  'PDF/FACTURES/FAC-'.date('d-m-Y').'.pdf';
  953.         //$ids = array("118","101","93");
  954.         for ($i 0$i count($ids); $i++) {
  955.             $repo $em->getRepository(Commande::class);
  956.             $bon  $repo->find($ids[$i]);
  957.             if (is_object($bon)) {
  958.                 $this->pdfFactureAction($bonfalse);
  959.                 $tableauPdf[] = $chemin_pdf 'PDF/FACTURES/FAC-'.$bon->getReference().'.pdf';
  960.             }
  961.         }
  962.         $cmd "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
  963.         foreach ($tableauPdf as $file) {
  964.             $cmd .= $file." ";
  965.         }
  966.         $result shell_exec($cmd);
  967.         return new JsonResponse(['target' => '_blank''url' => '/'.$pdfRelier'valide' => '1'], 200, ['Content-Type' => 'application/json']);
  968.     }
  969.     private function datatableAvoir($factureDatatable $datatableTranslatorInterface $translator)
  970.     {
  971.         $datatable->setDatatableId('dta-avoirs')
  972.                   ->setEntity(Commande::class, "x")
  973.                   ->setFields(
  974.                       [
  975.                           $translator->trans("ID")       => 'x.id',
  976.                           $translator->trans("Réf")      => 'x.reference',
  977.                           $translator->trans("Client")   => 'clt.nom',
  978.                           $translator->trans("Total HT") => 'x.total',
  979.                           $translator->trans("Utilise")  => 'x.avoirUtilise',
  980.                           $translator->trans("Date")     => 'x.date',
  981.                           $translator->trans("Actions")  => 'x.id',
  982.                           "_identifier_"                 => 'x.id',
  983.                       ]
  984.                   )
  985.                   ->setWhere(
  986.                       'x.facture = :facture AND x.typeDocumentCommercial = :typeDocumentCommercial',
  987.                       ['facture' => $facture'typeDocumentCommercial' => TypeDocumentCommercial::AVOIR]
  988.                   )
  989.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  990.                   ->addJoin('c.client''clt'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  991.                   ->setRenderers(
  992.                       [
  993.                           => [
  994.                               'view' => 'FO/DataTable/prix.html.twig',
  995.                           ],
  996.                           => [
  997.                               'view'   => 'FO/DataTable/booleen.html.twig',
  998.                               'params' => [],
  999.                           ],
  1000.                           => [
  1001.                               'view'   => 'FO/DataTable/date.html.twig',
  1002.                               'params' => [],
  1003.                           ],
  1004.                           => [
  1005.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  1006.                               'params' => [
  1007.                                   'edit_route'  => 'dtc_avoir_modifier_modal',
  1008.                                   'width_modal' => '1200',
  1009.                                   //'supprimer_route'  => 'dtc_facture_supprimer',
  1010.                                   'pdf_route'   => 'dtc_avoir_pdf',
  1011.                                   'id'          => $facture->getId(),
  1012.                                   'type'        => 'avoir',
  1013.                                   'entite'      => 'avoir',
  1014.                                   'objet'       => Commande::class,
  1015.                               ],
  1016.                           ],
  1017.                           /*3 => array(
  1018.                               'view' => 'FO/DataTable/actions_modal.html.twig',
  1019.                               'params' => array(
  1020.                                       'supprimer_route'  => 'dtc_application_supprimer',
  1021.                                       'id'    => $article->getId(),
  1022.                                       'type'    => "article",
  1023.                                       'entite'    => 'application',
  1024.                                       'objet' => "DTCVehiculesBundle:Application"
  1025.                                   ),
  1026.                           )
  1027.                           */
  1028.                       ]
  1029.                   )
  1030.                   ->setOrder("x.id""desc")
  1031.                   ->setSearch(true)
  1032.                   ->setSearchFields([0]);
  1033.         return $datatable;
  1034.     }
  1035.     /**
  1036.      * @Route("/vente/facture/avoirs/grid/{id}", name="dtc_facture_avoir_liste_grid")
  1037.      */
  1038.     public function gridAvoirsAction(Request $requestCommande $factureDatatable $datatableTranslatorInterface $translator)
  1039.     {
  1040.         return $this->datatableAvoir($facture$datatable$translator)->execute();
  1041.     }
  1042.     /**
  1043.      * @Route("/vente/facture-traite", name="dtc_facture_traite")
  1044.      */
  1045.     public function traiteAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1046.     {
  1047.         $repo_commande $em->getRepository(Commande::class);
  1048.         $errors        '';
  1049.         $dateDebut = new \DateTime();
  1050.         $interval  = new \DateInterval('P7D');
  1051.         $dateDebut->sub($interval);
  1052.         $dateFin       = new \DateTime('yesterday');
  1053.         $dateFinPlusUn = new \DateTime();
  1054.         $dateFacturation = new \DateTime();
  1055.         if ($request->getMethod() == 'POST') {
  1056.             $dateDebutRequest $request->request->get('dateDebut');
  1057.             $dateFinRequest   $request->request->get('dateFin');
  1058.             $ids              $request->request->get('ids');
  1059.             $dateDebut     date_create_from_format('d/m/Y'$dateDebutRequest);
  1060.             $dateFin       date_create_from_format('d/m/Y'$dateFinRequest);
  1061.             $dateFinPlusUn date_create_from_format('d/m/Y'$dateFinRequest);
  1062.             $interval = new \DateInterval('P1D');
  1063.             $dateFinPlusUn->add($interval);
  1064.             if (count($ids) > 0) {
  1065.                 foreach ($ids as $id) {
  1066.                     $bl $repo_commande->find($id);
  1067.                     if (is_object($bl)) {
  1068.                         $bl->setAFacturer(true);
  1069.                         $em->persist($bl);
  1070.                     }
  1071.                 }
  1072.                 $em->flush();
  1073.             }
  1074.         }
  1075.         $tableau_class_cellule[] = [];
  1076.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false,"searchable"=> false);
  1077.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => true];
  1078.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id colonnefacturer ""targets" => [1], "visible" => true"orderable" => false];
  1079.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id colonnefacturerseparement""targets" => [2], "visible" => true"orderable" => false];
  1080.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id colonneattente ""targets" => [3], "visible" => true"orderable" => false];
  1081.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [4], "visible" => true"orderable" => true];
  1082.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true"orderable" => true];
  1083.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [6], "visible" => true"orderable" => true];
  1084.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [7], "visible" => true"orderable" => true];
  1085.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [8], "visible" => true"orderable" => true];
  1086.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [9], "visible" => true"orderable" => true];
  1087.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right""targets" => [10], "visible" => true"orderable" => true];
  1088.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right""targets" => [11], "visible" => true"orderable" => true];
  1089.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [12], "visible" => true];
  1090.         /*
  1091.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","id"));
  1092.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","logo"));
  1093.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(3),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","reference"));
  1094.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(4),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","nom"));
  1095.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","prenom"));
  1096.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(6),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","ville"));
  1097.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(7),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","codePostal"));
  1098.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(8),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","pays"));
  1099.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(9),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","telephone"));
  1100.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(10),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","telephone2"));
  1101.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(11),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","email"));
  1102.     $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","tva"));
  1103.     */
  1104.         $this->datatableTraite($dateDebut->format('Y-m-d'), $dateFinPlusUn->format('Y-m-d'), $em$datatable$translator);
  1105.         return $this->render('GestionComerciale/Traite/lister.html.twig', [
  1106.             'tableauClassColonne' => $tableau_class_cellule,
  1107.             'dateDebut'           => $dateDebut,
  1108.             'dateFin'             => $dateFin,
  1109.             'dateFinPlusUn'       => $dateFinPlusUn,
  1110.             'errors'              => $errors,
  1111.             'dateFacturation'     => $dateFacturation,
  1112.         ]);
  1113.     }
  1114.     private function datatableTraite_old($dateDebut$dateFinDatatable $datatableTranslatorInterface $translator)
  1115.     {
  1116.         $datatable->setEntity(Client::class, "x")
  1117.                   ->setFields(
  1118.                       [
  1119.                           $translator->trans("ID")          => 'x.id',
  1120.                           $translator->trans("Réf")         => 'x.reference',
  1121.                           $translator->trans("Nom")         => 'x.nom',
  1122.                           $translator->trans("Prénom")      => 'x.prenom',
  1123.                           $translator->trans("Téléphone")   => 'x.telephone',
  1124.                           $translator->trans("Téléphone 2") => 'x.telephone2',
  1125.                           $translator->trans("Email")       => 'x.email',
  1126.                           $translator->trans("TVA")         => 'x.numTva',
  1127.                           $translator->trans("Actions")     => 'x.id',
  1128.                           "_identifier_"                    => 'x.id',
  1129.                       ]
  1130.                   )
  1131.             //->addJoin('x.modereglement', 'mr', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1132.             //->addJoin('x.ville', 'v', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1133.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1134.             //->addJoin('x.codePostal', 'cp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1135.             //->addJoin('x.typeClient', 'tp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1136.                   ->addJoin(Commande::class, 'c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN'with''c.client = x.id')
  1137.             //->setWhere('mr.id = :modeReglement '
  1138.                   ->setWhere(
  1139.                 'x.facturationMultiBL = :facturationMultiBL '
  1140.                 .'and c.typeDocumentCommercial = :typeDocumentCommercial '
  1141.                 .'and c.visible = :visible '
  1142.                 .'AND c.date <= :dateFin '
  1143.                 .'AND c.date >= :dateDebut '
  1144.                 .'AND c.dejaFacture = false',
  1145.                 //array('modeReglement'=>6,'typeDocumentCommercial' => TypeDocumentCommercial::BL,'visible'=>1, 'dateFin'=>$dateFin, 'dateDebut'=>$dateDebut))
  1146.                 ['facturationMultiBL' => true'typeDocumentCommercial' => TypeDocumentCommercial::BL'visible' => 1'dateFin' => $dateFin'dateDebut' => $dateDebut]
  1147.             )
  1148.                   ->setRenderers(
  1149.                       [
  1150.                           => [
  1151.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1152.                               'params' => [
  1153.                                   'edit_route' => 'dtc_client_modifier',
  1154.                               ],
  1155.                           ],
  1156.                           => [
  1157.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1158.                               'params' => [
  1159.                                   'edit_route' => 'dtc_client_modifier',
  1160.                               ],
  1161.                           ],
  1162.                           => [
  1163.                               'view'   => 'FO/DataTable/traite_modal.html.twig',
  1164.                               'params' => [
  1165.                                   'edit_route' => 'dtc_bon_livraison_liste_by_client',
  1166.                                   'dateDebut'  => $dateDebut,
  1167.                                   'dateFin'    => $dateFin,
  1168.                               ],
  1169.                           ],
  1170.                           /*
  1171.                           12 => array(
  1172.                               'view' => 'FO/DataTable/actions.html.twig',
  1173.                               'params' => array(
  1174.                                       'edit_route'    => 'dtc_client_modifier',
  1175.                                       'dupliquer_route'    => 'dtc_client_dupliquer',
  1176.                                       //'supprimer_route'    => 'dtc_client_supprimer',
  1177.                                       'objet'    => 'DTCClientsBundle:Client'
  1178.                                   ),
  1179.                           ),
  1180.                            *
  1181.                            */
  1182.                       ]
  1183.                   )
  1184.                   ->setMultiple(
  1185.                       [
  1186.                           /*'delete' => array(
  1187.                               'title' => 'Non disponible',
  1188.                               'route' => 'dtc_client_liste_supprimer'     ),
  1189.                            *
  1190.                            */
  1191.                           'facturer' => [
  1192.                               'title' => 'Facturer',
  1193.                               'route' => 'dtc_client_multi_bl_facturer',
  1194.                           ],
  1195.                       ]
  1196.                   )
  1197.                   ->setOrder("x.id""desc")
  1198.                   ->setGroupBy("x.id")
  1199.                   ->setSearch(true)
  1200.                   ->setSearchFields([1236]);
  1201.         //$datatable->setSearchFields(array(0,2));
  1202.         return $datatable;
  1203.     }
  1204.     private function datatableTraite($dateDebut$dateFinEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1205.     {
  1206.         $repo_statut_document $em->getRepository(StatutCommande::class);
  1207.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 5"ordre" => [0]]);
  1208.         $datatable->setDatatableId('dta-bonlivraisons')
  1209.                   ->setEntity(Commande::class, "x")
  1210.                   ->setFields(
  1211.                       [
  1212.                           $translator->trans("ID")                    => 'x.id',
  1213.                           $translator->trans("A facturer")            => 'x.id',
  1214.                           $translator->trans("A facturer séparément") => 'x.id',
  1215.                           $translator->trans("En attente")            => 'x.id',
  1216.                           $translator->trans("Email") => 'cl.emailFactureAuto',
  1217.                           $translator->trans("Date")         => 'x.date',
  1218.                           $translator->trans("Réf")          => 'x.reference',
  1219.                           $translator->trans("Réf client")   => 'cl.reference',
  1220.                           $translator->trans("Client")       => 'cl.nom',
  1221.                           $translator->trans("Réf cmde cli") => 'x.referenceClient',
  1222.                           $translator->trans("Total HT")     => 'x.total',
  1223.                           $translator->trans("Total TTC")    => 'x.totalTtc',
  1224.                           $translator->trans("Actions")      => 'x.id',
  1225.                           "_identifier_"                     => 'x.id',
  1226.                       ]
  1227.                   )
  1228.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1229.             /*->setWhere(
  1230.                     $type_jointure.' = :objet',
  1231.                     array('objet' => $objet)
  1232.                )
  1233.               */
  1234.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1235.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1236.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1237.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1238.                   ->setWhere(
  1239.                   //'x.aFacturer = :aFacturer '
  1240.                   //'x.dejaFacture = :dejaFacture '
  1241.                       'x.facture is null '
  1242.                       .'AND cl.facturationMultiBL = :facturationMultiBL '
  1243.                       .'AND x.typeDocumentCommercial = :typeDocumentCommercial '
  1244.                       .'AND x.statutCommande NOT IN (:statutCommande) '
  1245.                       .'AND x.date <= :dateFin '
  1246.                       .'AND x.date >= :dateDebut',
  1247.                       [
  1248.                           'facturationMultiBL'     => true,
  1249.                           //'aFacturer'=>true,
  1250.                           //'dejaFacture' =>false,
  1251.                           'typeDocumentCommercial' => TypeDocumentCommercial::BL,
  1252.                           'statutCommande'         => $liste_statut,
  1253.                           'dateFin'                => $dateFin,
  1254.                           'dateDebut'              => $dateDebut,
  1255.                       ]
  1256.                   )
  1257.                   ->setRenderers(
  1258.                       [
  1259.                           => [
  1260.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1261.                               'params' => [
  1262.                                   'edit_route' => 'dtc_bon_livraison_modifier',
  1263.                               ],
  1264.                           ],
  1265.                           => [
  1266.                               'view'   => 'FO/DataTable/choix-radio.html.twig',
  1267.                               'params' => [
  1268.                                   'name'  => 'facturation',
  1269.                                   'value' => 1,
  1270.                               ],
  1271.                           ],
  1272.                           => [
  1273.                               'view'   => 'FO/DataTable/choix-radio.html.twig',
  1274.                               'params' => [
  1275.                                   'name'  => 'facturation',
  1276.                                   'value' => 2,
  1277.                               ],
  1278.                           ],
  1279.                           => [
  1280.                               'view'   => 'FO/DataTable/choix-radio.html.twig',
  1281.                               'params' => [
  1282.                                   'name'  => 'facturation',
  1283.                                   'value' => 3,
  1284.                               ],
  1285.                           ],
  1286.                           => [
  1287.                               'view'   => 'FO/DataTable/booleen_mail_facture.html.twig',
  1288.                               'params' => [],
  1289.                           ],
  1290.                           5  => [
  1291.                               'view'   => 'FO/DataTable/heure.html.twig',
  1292.                               'params' => [],
  1293.                           ],
  1294.                           6  => [
  1295.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1296.                               'params' => [
  1297.                                   'edit_route' => 'dtc_bon_livraison_modifier',
  1298.                               ],
  1299.                           ],
  1300.                           10 => [
  1301.                               'view'   => 'FO/DataTable/total_ht_commande.html.twig',
  1302.                               'params' => [],
  1303.                           ],
  1304.                           11 => [
  1305.                               'view'   => 'FO/DataTable/prix.html.twig',
  1306.                               'params' => [],
  1307.                           ],
  1308.                           12 => [
  1309.                               'view'   => 'FO/DataTable/actions.html.twig',
  1310.                               'params' => [
  1311.                                   'edit_route' => 'dtc_bon_livraison_modifier',
  1312.                                   //'supprimer_route'  => 'dtc_bon_livraison_supprimer',
  1313.                                   'pdf_route'  => 'dtc_bon_livraison_pdf',
  1314.                                   'entite'     => 'bonPreparation',
  1315.                                   'objet'      => Commande::class,
  1316.                               ],
  1317.                           ],
  1318.                       ]
  1319.                   )
  1320.                   ->setOrder("x.id""desc")
  1321.                   ->setSearch(true)
  1322.                   ->setSearchFields([5678])/*
  1323.                     ->setMultiple(
  1324.                         array(
  1325.                             'facturer' => array(
  1326.                                 'title' => 'Facturer',
  1327.                                 'route' => 'dtc_client_multi_bl_facturer'
  1328.                             ),
  1329.                         )
  1330.                     )
  1331.                      *
  1332.                      */
  1333.         ;
  1334.         return $datatable;
  1335.     }
  1336.     /**
  1337.      * @Route("/vente/facture-traite/grid", name="dtc_traite_liste_grid")
  1338.      */
  1339.     public function gridTraiteAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1340.     {
  1341.         if ( ! empty($request->query->get('dateDebut'))) {
  1342.             //var_dump($request->query->get('dateDebut'));
  1343.             //var_dump($request->query->get('dateFin'));
  1344.             //$dateDebut = $request->query->get('dateDebut');
  1345.             //$dateFin = $request->query->get('dateFin');
  1346.             $dateDebut \DateTime::createFromFormat('Y-m-d'$request->query->get('dateDebut'))->setTime(000);
  1347.             $dateFin   \DateTime::createFromFormat('Y-m-d'$request->query->get('dateFin'))->setTime(235959);
  1348.         } else {
  1349.             $parametres $request->query->get('parametres');
  1350.             $dateDebut \DateTime::createFromFormat('d/m/Y'$parametres['dateDebut'])->setTime(000);
  1351.             $dateFin   \DateTime::createFromFormat('d/m/Y'$parametres['dateFin'])->setTime(235959);
  1352.         }
  1353.         //var_dump($dateDebut);
  1354.         return $this->datatableTraite($dateDebut$dateFin$em$datatable$translator)->execute();
  1355.     }
  1356.     /**
  1357.      * @Route("/vente/facture-multi-bl/facturer", name="dtc_client_multi_bl_facturer")
  1358.      */
  1359.     public function facturerMultiBLAction(Request $requestEntityManagerInterface $emFactureService $factureServiceBonLivraisonService $bonService)
  1360.     {
  1361.         set_time_limit(300);
  1362.         $repo_commande  $em->getRepository(Commande::class);
  1363.         $clientsAFacturer       = [];
  1364.         $blsAFacturerSeparement = [];
  1365.         $blsEnAttente           = [];
  1366.         $compteur               0;
  1367.         $bls                    $request->request->get('facturation');
  1368.         $dateFacturationRequest $request->request->get('dateFacturation');
  1369.         $dateFacturation date_create_from_format('d/m/Y'$dateFacturationRequest);
  1370.         //\Doctrine\Common\Util\Debug::dump($bls);
  1371.         if (count($bls) > 0) {
  1372.             foreach ($bls as $key => $action) {
  1373.                 //Recuperer le bl
  1374.                 $bl $repo_commande->find($key);
  1375.                 if (is_object($bl)) {
  1376.                     if (is_object($bl->getFacture())) {
  1377.                         $this->addFlash('warning''le BL '.$bl->getReference().' est déjà facturé!');
  1378.                     } else {
  1379.                         switch ($action) {
  1380.                             case 1://Facturation multi-bl
  1381.                                 $clientId                    $bl->getClient()->getId();
  1382.                                 $clientsAFacturer[$clientId] = $clientId;
  1383.                                 $bl->setAFacturer(true);
  1384.                                 $bl->setAttenteFacturation(false);
  1385.                                 $em->persist($bl);
  1386.                                 break;
  1387.                             case 2://Facturation separee
  1388.                                 $bonService->transformerBLenFacture($bl$dateFacturation);
  1389.                                 $compteur++;
  1390.                                 break;
  1391.                             case 3://En attente
  1392.                                 $bl->setAttenteFacturation(true);
  1393.                                 $em->persist($bl);
  1394.                                 break;
  1395.                         }
  1396.                     }
  1397.                 }
  1398.             }
  1399.             $em->flush();
  1400.         }
  1401.         if (count($clientsAFacturer) > 0) {
  1402.             foreach ($clientsAFacturer as $clientId) {
  1403.                 $compteur++;
  1404.                 $facture $factureService->creerFactureMultiBL($clientId$dateFacturation);
  1405.             }
  1406.         }
  1407.         if ($compteur == 1) {
  1408.             $message $compteur.' facture ajoutée avec succès !';
  1409.         } elseif ($compteur 1) {
  1410.             $message $compteur.' factures ajoutées avec succès !';
  1411.         } else {
  1412.             $message 'Aucune facture ajoutée';
  1413.             $this->addFlash('notice'$message);
  1414.             return $this->redirectToRoute('dtc_facture_traite');
  1415.         }
  1416.         $this->addFlash('notice'$message);
  1417.         /*
  1418.     //$clientsIds = $request->request->get('dataTables[actions]');
  1419.     $data = $request->get('dataTables');
  1420. $clientsIds  = $data['actions'];
  1421.     $x = count($clientsIds);
  1422.     if ($x > 0)
  1423.         foreach($clientsIds as $clientId){
  1424.     $factureService->creerFactureMultiBL($clientId);
  1425.         }
  1426.     if($x == 1)
  1427.         $message = $x.' facture ajoutée avec succès !';
  1428.     else if ($x > 1)
  1429.         $message = $x.' factures ajoutées avec succès !';
  1430.     else
  1431.         $message = '';
  1432.     $this->addFlash(
  1433.                 'notice',
  1434.                 $message
  1435.           );
  1436.     $url = $this->generateUrl('dtc_facture_liste');
  1437. return new JsonResponse(array('url'=>$url,'valide'=>'1'), 200, array('Content-Type'=>'application/json'));
  1438.          *
  1439.          */
  1440.         return $this->redirectToRoute('dtc_facture_liste');
  1441.     }
  1442.     /**
  1443.      * @Route("/facture/charger-tableau/{id}/{type}", name="dtc_facture_charger_tableau")
  1444.      */
  1445.     public function chargerTableauAction(Request $requestCommande $commande$type "")
  1446.     {
  1447.         $rendu $this->renderView('GestionComerciale/Facture/charger_tableau.html.twig', ["commande" => $commande'type' => $type]);
  1448.         return new JsonResponse(['rendu' => $rendu]);
  1449.     }
  1450. }