src/Controller/GestionComerciale/BonPreparationController.php line 1104

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Clients\Client;
  5. use App\Entity\FO\Societe;
  6. use App\Entity\GestionComerciale\ArticleCommande;
  7. use App\Entity\GestionComerciale\BonPreparation;
  8. use App\Entity\GestionComerciale\Commande;
  9. use App\Entity\GestionComerciale\CommandeFournisseur;
  10. use App\Entity\GestionComerciale\StatutCommande;
  11. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  12. use App\Form\GestionComerciale\BonPreparationType;
  13. use App\Form\GestionComerciale\CommandeType;
  14. use App\Library\Datatable\Util\Datatable;
  15. use App\Security\Voter\EntityVoter;
  16. use App\Service\GestionComerciale\AcompteService;
  17. use App\Service\GestionComerciale\BonLivraisonService;
  18. use App\Service\GestionComerciale\BonPreparationService;
  19. use App\Service\GestionComerciale\CommandeService;
  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\Validator\Validator\ValidatorInterface;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. class BonPreparationController extends AbstractController
  31. {
  32.     /**
  33.      * @Route("/vente/bons-preparations/nouveau/{id}/{type}", name="dtc_bon_preparation_ajouter")
  34.      */
  35.     public function ajouterAction(Request            $request$id$type ""EntityManagerInterface $emBonPreparationService $bonPreparationServiceTranslatorInterface $translator,
  36.                                   ValidatorInterface $validator
  37.     ) {
  38.         $titre_modal   $translator->trans("Nouveau bon de préparation");
  39.         $forceQteDispo $request->query->get('forceQteDispo');
  40.         $repo_objet    $em->getRepository(Commande::class);
  41.         $objet         $repo_objet->find($id);
  42.         $bonPrepa = clone $objet;
  43.         $bonPrepa->setDateBon(new \Datetime);
  44.         $bonPrepa->setDate(new \Datetime);
  45.         $user $this->getUser();
  46.         //$bonPrepa->setUtilisateur($user);
  47.         if (is_object($bonPrepa->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bonPrepa->getUtilisateur()->getId(
  48.             ) == $this->getParameter('utilisateur_site_internet')) {
  49.         } else {
  50.             //$bonPrepa->setUtilisateur($user);
  51.         }
  52.         $bonPrepa->setModifiable(false);
  53.         $form   $this->createForm(BonPreparationType::class, $bonPrepa);
  54.         $errors "";
  55.         $form->handleRequest($request);
  56.         $idsArticleCommande $request->query->get('choixArticles');
  57.         $repo_objet         $em->getRepository(Commande::class);
  58.         $objet              $repo_objet->find($id);
  59.         $bonPrepa->setCommande($objet);
  60.         $link $this->generateUrl('dtc_bon_preparation_ajouter', ['id' => $objet->getId(), 'type' => 'commande']);
  61.         //$articleCommande = $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
  62.         $articleCommande $objet->getArticleCommande();
  63.         if ($form->isSubmitted()) {
  64.             if ($form->isValid()) {
  65.                 /*$articles = array('idArticleCommande'=>$request->request->get('idArticleCommande'),'quantiteInit'=>$request->request->get('quantiteInit'),'quantite'=>$request->request->get('quantite'));
  66.                 $valeurs = array("articles"=>$articles);
  67.                 $bonPreparationService->sauvegarder($bonPrepa,$valeurs);
  68.                 */
  69.                 $em->persist($bonPrepa);
  70.                 $em->flush();
  71.                 $em->refresh($bonPrepa);
  72.                 $operation $request->request->get('operation');
  73.                 $articles  = [
  74.                     'valider'                  => $request->request->get('valider'),
  75.                     'ids'                      => $request->request->get('ids'),
  76.                     'idArticleCommande'        => $request->request->get('idArticleCommande'),
  77.                     'idArticleCommandeOrigine' => $request->request->get('idArticleCommandeOrigine'),
  78.                     'montantRemise'            => $request->request->get('montantRemise'),
  79.                     'remiseCalcule'            => $request->request->get('remiseCalcule'),
  80.                     'remise'                   => $request->request->get('remise'),
  81.                     'commentaire'              => $request->request->get('commentaire'),
  82.                     'commentairePrive'         => $request->request->get('commentairePrive'),
  83.                     'remiseSuppl'              => $request->request->get('remiseSuppl'),
  84.                     'ecocontribution'          => $request->request->get('ecocontribution'),
  85.                     'prix'                     => $request->request->get('prix'),
  86.                     //'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
  87.                     'libellesSecondaires'      => $request->request->get('libellesSecondaires'),
  88.                     'libelles'                 => $request->request->get('libelles'),
  89.                     'tva'                      => $request->request->get('tva'),
  90.                     'qte'                      => $request->request->get('qte'),
  91.                     'force'                    => $request->request->get('force'),
  92.                     'commentaireSuppl'         => $request->request->get('commentaireSuppl'),
  93.                     'emplacement'              => $request->request->get('emplacement'),
  94.                     'nbEmplacement'            => $request->request->get('nbEmplacement'),
  95.                     'position'                 => $request->request->get('position'),
  96.                     'articlesCommandeRepris'   => $request->request->get('articlesCommandeRepris'),
  97.                     'qteDispo'                 => $request->request->get('qteDispo'),
  98.                     'transporteurs'            => $request->request->get('transporteurs'),
  99.                     'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
  100.                 ];
  101.                 $valeurs = ["articles" => $articles'typeDocument' => 'commande''operation' => 'commande''action' => 'nouveau'];
  102.                 $bonPreparationService->sauvegarderBon($bonPrepa$valeurs);
  103.                 //print_r($valeurs);
  104.                 $url $this->generateUrl('dtc_bon_preparation_modifier', ['id' => $bonPrepa->getId(), 'tab' => '''forceQteDispo' => true]);
  105.                 $this->addFlash(
  106.                     'notice',
  107.                     $translator->trans('Bon de préparation ajouté avec succès !')
  108.                 );
  109.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  110.             } else {
  111.                 $errors $validator->validate($bonPrepa);
  112.                 $rendu  $this->renderView(
  113.                     'GestionComerciale/BonPreparation/ajouter.html.twig',
  114.                     [
  115.                         'form'               => $form->createView(),
  116.                         'errors'             => $errors,
  117.                         'id'                 => $id,
  118.                         'type'               => $type,
  119.                         'articleCommande'    => $articleCommande,
  120.                         'commande'           => $objet,
  121.                         'idsArticleCommande' => $idsArticleCommande,
  122.                     ]
  123.                 );
  124.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  125.             }
  126.         }
  127.         $rendu $this->renderView(
  128.             'GestionComerciale/BonPreparation/ajouter.html.twig',
  129.             [
  130.                 'form'               => $form->createView(),
  131.                 'errors'             => $errors,
  132.                 'id'                 => $id,
  133.                 'type'               => $type,
  134.                 'articleCommande'    => $articleCommande,
  135.                 'commande'           => $objet,
  136.                 'idsArticleCommande' => $idsArticleCommande,
  137.                 'forceQteDispo'      => $forceQteDispo,
  138.             ]
  139.         );
  140.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''link' => $link'titre' => $titre_modal]);
  141.     }
  142.     /**
  143.      * @Route("/vente/bons-preparations/modifier/{id}", name="dtc_bon_preparation_modifier")
  144.      */
  145.     public function modifierAction(Request         $requestCommande $bonEntityManagerInterface $emBonPreparationService $bonService,
  146.                                    CommandeService $commandeServiceAcompteService $serviceAcompteTranslatorInterface $translatorValidatorInterface $validator
  147.     ) {
  148.         $user $this->getUser();
  149.         //$bon->setUtilisateur($user);
  150.         if (is_object($bon->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bon->getUtilisateur()->getId() == $this->getParameter(
  151.                 'utilisateur_site_internet'
  152.             )) {
  153.         } else {
  154.             $bon->setUtilisateur($user);
  155.         }
  156.         $forceQteDispo $request->query->get('forceQteDispo');
  157.         //print_r($request->request->get('ids'));
  158.         $annuler     $request->request->get('annuler');
  159.         $sauvegarder true;
  160.         $statutCommande $bon->getStatutCommande();
  161.         if (is_object($statutCommande) && ! in_array($statutCommande->getOrdre(), [1])) {
  162.             //à préparer
  163.             $annuler     '';
  164.             $sauvegarder false;
  165.         }
  166.         if ($annuler == "annuler" /*|| $annuler == "annuler_devis" || $annuler == "annuler_cmde"*/) {
  167.             $remboursement 0;
  168.             $bonService->annuler($bon$annuler);
  169.             if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
  170.                 $remboursement $serviceAcompte->proposerRemboursement($bon->getClient());
  171.             }
  172.             $this->addFlash('notice'$translator->trans('Bon de préparation annulé avec succès !'));
  173.             return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getCommande()->getId(), "r" => $remboursement"c" => $bon->getClient()->getId()]);
  174.             //return $this->redirectToRoute('dtc_bon_preparation_liste',array("r"=>$remboursement,"c"=>$bon->getClient()->getId()));
  175.             exit;
  176.         }
  177.         //if($annuler == "annuler_devis" && $bon->getdevis() != NULL) {
  178.         if ($annuler == "annuler_devis") {
  179.             $remboursement 0;
  180.             $bonService->annuler($bon$annuler);
  181.             if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
  182.                 $remboursement $serviceAcompte->proposerRemboursement($bon->getClient());
  183.             }
  184.             $this->addFlash('notice'$translator->trans('Bon de préparation annulé avec succès !'));
  185.             if (count($bon->getCommande()->getArticleCommande()) > 0) {
  186.                 return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getCommande()->getId(), "r" => $remboursement"c" => $bon->getClient()->getId()]);
  187.             } else {
  188.                 //return $this->redirectToRoute('dtc_devis_modifier',array("id"=>$bon->getdevis()->getId(),"r"=>$remboursement,"c"=>$bon->getClient()->getId()));
  189.                 return $this->redirectToRoute('dtc_commande_liste', ["r" => $remboursement"c" => $bon->getClient()->getId()]);
  190.             }
  191.         }
  192.         if ($annuler == "annuler_cmde") {
  193.             $remboursement 0;
  194.             $bonService->annuler($bon$annuler);
  195.             if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
  196.                 $remboursement $serviceAcompte->proposerRemboursement($bon->getClient());
  197.             }
  198.             $this->addFlash('notice'$translator->trans('Bon de préparation annulé avec succès !'));
  199.             $donnees = ["id" => $bon->getCommande()->getId(), "r" => $remboursement];
  200.             if (is_object($bon->getClient())) {
  201.                 $donnees['c'] = $bon->getClient()->getId();
  202.             }
  203.             return $this->redirectToRoute('dtc_commande_modifier'$donnees);
  204.         }
  205.         $form $this->createForm(CommandeType::class, $bon);
  206.         $articles = ['ids' => $request->request->get('ids'), 'prix' => $request->request->get('prix'), 'qte' => $request->request->get('qte')];
  207.         $valeurs  = ["articles" => $articles];
  208.         $errors "";
  209.         $form->handleRequest($request);
  210.         if ($form->isSubmitted() and $annuler != "annuler" and $annuler != "annuler_devis" and $annuler != "annuler_cmde") {
  211.             if ( ! $sauvegarder) {
  212.                 $this->addFlash('warning'$translator->trans('Le statut de commande actuel ne permet pas cette action!'));
  213.                 return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getId()]);
  214.             } elseif ($commandeService->estEditable($bon)) {
  215.                 // TODO CHANGE THIS
  216.                 $droit $this->isGranted(EntityVoter::UPDATEBonPreparation::class);
  217.                 if ( ! $droit) {
  218.                     return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $bon->getId()]);
  219.                 }
  220.                 if ($form->isValid()) {
  221.                     /*
  222.                     if($request->request->get('annuler') != '') {
  223.                         $bonService->annulerCommande($bon);
  224.                         $this->addFlash(
  225.                              'notice',
  226.                             $translator->trans('Bon de préparation annulée avec succès !')
  227.                          );
  228.                         return $this->redirectToRoute('dtc_bon_preparation_liste',array());
  229.                     }
  230.                     */
  231.                     //echo "<div>CC ".$bon->getClient()->getNom()."</div>";
  232.                     $em->persist($bon);
  233.                     $em->flush();
  234.                     $operation $request->request->get('operation');
  235.                     $articles  = [
  236.                         'valider'                  => $request->request->get('valider'),
  237.                         'ids'                      => $request->request->get('ids'),
  238.                         'idArticleCommande'        => $request->request->get('idArticleCommande'),
  239.                         'idArticleCommandeOrigine' => $request->request->get('idArticleCommandeOrigine'),
  240.                         'montantRemise'            => $request->request->get('montantRemise'),
  241.                         'remiseCalcule'            => $request->request->get('remiseCalcule'),
  242.                         'remise'                   => $request->request->get('remise'),
  243.                         'commentaire'              => $request->request->get('commentaire'),
  244.                         'commentairePrive'         => $request->request->get('commentairePrive'),
  245.                         'remiseSuppl'              => $request->request->get('remiseSuppl'),
  246.                         'ecocontribution'          => $request->request->get('ecocontribution'),
  247.                         'prix'                     => $request->request->get('prix'),
  248.                         //'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
  249.                         'libellesSecondaires'      => $request->request->get('libellesSecondaires'),
  250.                         'libelles'                 => $request->request->get('libelles'),
  251.                         'tva'                      => $request->request->get('tva'),
  252.                         'qte'                      => $request->request->get('qte'),
  253.                         'force'                    => $request->request->get('force'),
  254.                         'commentaireSuppl'         => $request->request->get('commentaireSuppl'),
  255.                         'emplacement'              => $request->request->get('emplacement'),
  256.                         'emplacement_nouveau'      => $request->request->get('emplacement_nouveau'),
  257.                         'nbEmplacement'            => $request->request->get('nbEmplacement'),
  258.                         'numero_serie'             => $request->request->get('numero_serie'),
  259.                         'duree_garantie'           => $request->request->get('duree_garantie'),
  260.                         'position'                 => $request->request->get('position'),
  261.                         'articlesCommandeRepris'   => $request->request->get('articlesCommandeRepris'),
  262.                         'qteDispo'                 => $request->request->get('qteDispo'),
  263.                         'transporteurs'            => $request->request->get('transporteurs'),
  264.                         'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
  265.                         'societe_livraison_txt'     => $request->request->get('societe_livraison_txt'),
  266.                         'numero_livraison_txt'      => $request->request->get('numero_livraison_txt'),
  267.                         'rue_livraison_txt'         => $request->request->get('rue_livraison_txt'),
  268.                         'complement_livraison_txt'  => $request->request->get('complement_livraison_txt'),
  269.                         'complement2_livraison_txt' => $request->request->get('complement2_livraison_txt'),
  270.                         'cp_livraison_txt'          => $request->request->get('cp_livraison_txt'),
  271.                         'ville_livraison_txt'       => $request->request->get('ville_livraison_txt'),
  272.                         'pays_livraison_txt'        => $request->request->get('pays_livraison_txt'),
  273.                         'societe_facturation_txt'     => $request->request->get('societe_facturation_txt'),
  274.                         'numero_facturation_txt'      => $request->request->get('numero_facturation_txt'),
  275.                         'rue_facturation_txt'         => $request->request->get('rue_facturation_txt'),
  276.                         'complement_facturation_txt'  => $request->request->get('complement_facturation_txt'),
  277.                         'complement2_facturation_txt' => $request->request->get('complement2_facturation_txt'),
  278.                         'cp_facturation_txt'          => $request->request->get('cp_facturation_txt'),
  279.                         'ville_facturation_txt'       => $request->request->get('ville_facturation_txt'),
  280.                         'pays_facturation_txt'        => $request->request->get('pays_facturation_txt'),
  281.                     ];
  282.                     $valeurs = ["articles" => $articles'typeDocument' => 'commande''operation' => $operation'action' => 'modifier'];
  283.                     $bonService->sauvegarderBon($bon$valeurs);
  284.                     //$donnees = array("numeros"=>$request->request->get('numero_serie'),"duree"=>$request->request->get('duree_garantie'));
  285.                     //$bonService->sauvegarderNumeroSerie($bon,$donnees);
  286.                     if ($operation == "facture") {
  287.                         $this->addFlash('notice'$translator->trans('Facture sauvegardée avec succès !'));
  288.                         $repo_statut_document $em->getRepository(StatutCommande::class);
  289.                         //$liste_statut = $repo_statut_document->findOneBy(array("documentCommercial"=>6,"ordre"=>array(1)));
  290.                         $liste_statut $repo_statut_document->findById([192122]);
  291.                         //$typesFac = $em->getRepository(TypeDocumentCommercial::class)->findById([6, 7]);
  292.                         $typesFac = [TypeDocumentCommercial::FACTURE,TypeDocumentCommercial::AVOIR];
  293.                         $repo_fac $em->getRepository(Commande::class);
  294.                         $facture $repo_fac->findBy(["bp" => $bon"typeDocumentCommercial" => $typesFac"visible" => 1], ['id' => 'DESC'], 10);
  295.                         $temp_type_document_commercial "";
  296.                         foreach ($facture as $f) {
  297.                             $temp_id_fac                   $f->getId();
  298.                             $temp_type_document_commercial $f->getTypeDocumentCommercial();
  299.                         }
  300.                         if (is_object($temp_type_document_commercial) && $temp_type_document_commercial->getId() == 6) {
  301.                             return $this->redirectToRoute('dtc_facture_afficher', ["id" => $temp_id_fac]);
  302.                         } else {
  303.                             return $this->redirectToRoute('dtc_avoir_modifier', ["id" => $temp_id_fac]);
  304.                         }
  305.                     } else {
  306.                         $this->addFlash('notice'$translator->trans('Bon de préparation sauvegardé avec succès !'));
  307.                         $commandeService->creerHistorique($bon2);
  308.                         return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $bon->getId(), 'forceQteDispo' => true]);
  309.                     }
  310.                 } else {
  311.                     $errors $validator->validate($bon);
  312.                     //\Doctrine\Common\Util\Debug::dump($errors);
  313.                 }
  314.             } else {
  315.                 $paiement $bon->getStatutPaiement();
  316.                 $em->refresh($bon);
  317.                 $bon->setStatutPaiement($paiement);
  318.                 $em->persist($bon);
  319.                 $em->flush();
  320.                 $this->addFlash('notice'$translator->trans('Statut du paiement de la commande modifié avec succès !'));
  321.                 /*
  322.                 $this->addFlash(
  323.                     'warning',
  324.                     "La commande n'est plus éditable ! "
  325.                 );
  326.                 */
  327.                 return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getId()]);
  328.             }
  329.         }
  330.         return $this->render(
  331.             'GestionComerciale/BonPreparation/modifier2.html.twig',
  332.             ['form' => $form->createView(), 'errors' => $errors'commande' => $bon'forceQteDispo' => $forceQteDispo]
  333.         );
  334.     }
  335.     /*
  336.     public function modifierAction(Request $request, Commande $bon, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator) {
  337.         $request = $request;
  338.         $bon->setDateExpedition(new \Datetime);
  339.         $form = $this->createForm(new BonPreparationModifierType($em), $bon);
  340.         $validator = $validator;
  341.         $errors = "";
  342.         $form->handleRequest($request);
  343.         if ($form->isSubmitted()) {
  344.             if ($form->isValid()) {
  345.                 $bonPreparationService = $this->container->get('dtc.bonpreparation');
  346.                 $donnees = array("numeros"=>$request->request->get('numero_serie'),"duree"=>$request->request->get('duree_garantie'));
  347.                 $bonPreparationService->sauvegarderNumeroSerie($bon,$donnees);
  348.                 $statutService = $this->container->get('dtc.statutcommande');
  349.                 $mvmtStockService = $this->container->get('dtc.mvtstock');
  350.                 $statutService->actionSurCommande($bon,$bon->getStatutCommande());
  351.                 $mvmtStockService->destockerArticleExpedie($bon,$bon->getStatutCommande());
  352.                 $this->addFlash(
  353.                         'notice',
  354.                        $translator->trans('Bon de préparation modifié avec succès !')
  355.                 );
  356.             }
  357.             else {
  358.                 $this->addFlash(
  359.                     'warning',
  360.                    $translator->trans("Une erreur est survenue !")
  361.                 );
  362.             }
  363.         }
  364.         return $this->render('GestionComerciale/BonPreparation/modifier2.html.twig', array('form' => $form->createView(),'errors'=>$errors,'bon'=>$bon));
  365.     }
  366.     */
  367.     /**
  368.      * @Route("/vente/bons-preparations", name="dtc_bon_preparation_liste")
  369.      */
  370.     public function listerAction(Request               $request$id "0"$type "a"EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator,
  371.                                  ColonneTableauService $serviceColonneTableau
  372.     ) {
  373.         $param $request->query->all();
  374.         $repo_objet $em->getRepository(Commande::class);
  375.         $objet      $repo_objet->find($id);
  376.         if ($type == "commandeFournisseurBp") {
  377.             $repo_objet $em->getRepository(CommandeFournisseur::class);
  378.             $objet      $repo_objet->find($id);
  379.             $this->datatableCommandeFournisseurBp($objet""$em$datatable$translator);
  380.             return $this->render('GestionComerciale/BonPreparation/lister_commande_fournisseur_bp.html.twig', ["id" => $id]);
  381.         } elseif ($type == "commandeFournisseur") {
  382.             $repo_objet $em->getRepository(CommandeFournisseur::class);
  383.             $objet      $repo_objet->find($id);
  384.             $this->datatableCommandeFournisseur($objet""$em$datatable$translator);
  385.             return $this->render('GestionComerciale/BonPreparation/lister_commande_fournisseur.html.twig', ["id" => $id]);
  386.         } elseif (is_object($objet)) {
  387.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [0], "visible" => true];
  388.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [1], "visible" => true];
  389.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [2], "visible" => true];
  390.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [3], "visible" => true];
  391.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [4], "visible" => true];
  392.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [5], "visible" => true];
  393.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id ""targets" => [6], "visible" => true];
  394.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [7], "visible" => true];
  395.             $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [8], "visible" => true];
  396.             $repo_objet $em->getRepository(Commande::class);
  397.             $objet      $repo_objet->find($id);
  398.             $this->datatableCommande($objet$type$em$datatable$translator);
  399.             return $this->render(
  400.                 'GestionComerciale/BonPreparation/lister_commande.html.twig',
  401.                 ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type'parametres' => $param,]
  402.             );
  403.         } else {
  404.             $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => false"orderable" => false];
  405.             $tableau_class_cellule[] = [
  406.                 "className" => "visible_export colonne_id",
  407.                 "targets"   => [1],
  408.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "id"),
  409.             ];
  410.             $tableau_class_cellule[] = [
  411.                 "className" => "visible_export colonne_id text-center",
  412.                 "targets"   => [2],
  413.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "date"),
  414.             ];
  415.             $tableau_class_cellule[] = [
  416.                 "className" => "visible_export colonne_id",
  417.                 "targets"   => [3],
  418.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "reference"),
  419.             ];
  420.             $tableau_class_cellule[] = [
  421.                 "className" => "visible_export colonne_id",
  422.                 "targets"   => [4],
  423.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "refclient"),
  424.             ];
  425.             $tableau_class_cellule[] = [
  426.                 "className" => "visible_export colonne_id",
  427.                 "targets"   => [5],
  428.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "client"),
  429.             ];
  430.             $tableau_class_cellule[] = [
  431.                 "className" => "visible_export colonne_id",
  432.                 "targets"   => [6],
  433.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "equipier"),
  434.             ];
  435.             $tableau_class_cellule[] = [
  436.                 "className" => "visible_export colonne_id",
  437.                 "targets"   => [7],
  438.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "commentaire"),
  439.             ];
  440.             $tableau_class_cellule[] = [
  441.                 "className" => "visible_export colonne_id",
  442.                 "targets"   => [8],
  443.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "refCli"),
  444.             ];
  445.             $tableau_class_cellule[] = [
  446.                 "className" => "visible_export colonne_id text-center",
  447.                 "targets"   => [9],
  448.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "dateBon"),
  449.             ];
  450.             $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [10], "visible" => true];
  451.             $this->datatable($request$em$datatable$translator);
  452.             return $this->render(
  453.                 'GestionComerciale/BonPreparation/lister.html.twig',
  454.                 ["id" => $id"type" => $type'tableauClassColonne' => $tableau_class_cellule'parametres' => $param]
  455.             );
  456.         }
  457.     }
  458.     /**
  459.      * set datatable configs
  460.      *
  461.      * @return \App\Library\Datatable\Util\Datatable
  462.      */
  463.     private function datatable(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  464.     {
  465.         $param $request->query->all();
  466.         $repo_statut_document $em->getRepository(StatutCommande::class);
  467.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 4"ordre" => [0]]);
  468.         $date = new \Datetime();
  469.         $datatable->setDatatableId('dta-bonpreparations')
  470.                   ->setEntity(Commande::class, "x")
  471.                   ->setFields(
  472.                       [
  473.                           $translator->trans("ID")              => 'x.id',
  474.                           $translator->trans("Date")            => 'x.date',
  475.                           $translator->trans("Réf")             => 'x.reference',
  476.                           $translator->trans("Réf client")      => 'cl.reference',
  477.                           $translator->trans("Client")          => 'cl.nom',
  478.                           $translator->trans("Équipier")        => 'u.reference',
  479.                           $translator->trans("Comm")            => 'x.commentaire',
  480.                           $translator->trans("Réf cmde cli")    => 'x.referenceClient',
  481.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  482.                           $translator->trans("Statut")          => 's.libelle',
  483.                           $translator->trans("Actions")         => 'x.id',
  484.                           "_identifier_"                        => 'x.id',
  485.                       ]
  486.                   )
  487.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  488.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  489.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  490.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  491.             /*->setWhere(
  492.                     $type_jointure.' = :objet',
  493.                     array('objet' => $objet)
  494.                )
  495.               */
  496.                   ->setRenderers(
  497.                 [
  498.                     0  => [
  499.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  500.                         'params' => [
  501.                             'edit_route' => 'dtc_bon_preparation_modifier',
  502.                         ],
  503.                     ],
  504.                     1  => [
  505.                         'view'   => 'FO/DataTable/heure.html.twig',
  506.                         'params' => [],
  507.                     ],
  508.                     2  => [
  509.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  510.                         'params' => [
  511.                             'edit_route' => 'dtc_bon_preparation_modifier',
  512.                         ],
  513.                     ],
  514.                     3  => [
  515.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  516.                         'params' => [
  517.                             'edit_route'   => 'dtc_client_modifier',
  518.                             'typeDocument' => 'client',
  519.                         ],
  520.                     ],
  521.                     4  => [
  522.                         'view'   => 'FO/DataTable/client.html.twig',
  523.                         'params' => [],
  524.                     ],
  525.                     5  => [
  526.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  527.                         'params' => [
  528.                             'edit_route'   => 'dtc_utilisateur_modifier',
  529.                             'typeDocument' => 'equipier',
  530.                         ],
  531.                     ],
  532.                     8  => [
  533.                         'view'   => 'FO/DataTable/heure.html.twig',
  534.                         'params' => [],
  535.                     ],
  536.                     10 => [
  537.                         'view'   => 'FO/DataTable/actions.html.twig',
  538.                         'params' => [
  539.                             'edit_route' => 'dtc_bon_preparation_modifier',
  540.                             //'supprimer_route'  => 'dtc_bon_preparation_supprimer',
  541.                             'pdf_route'  => 'dtc_bon_preparation_pdf',
  542.                             'entite'     => 'bonPreparation',
  543.                             'objet'      => Commande::class,
  544.                             'deplier'    => true,
  545.                         ],
  546.                     ],
  547.                 ]
  548.             )
  549.                   ->setMultiple(
  550.                       [
  551.                           'print' => [
  552.                               'title' => 'Imprimer',
  553.                               'route' => 'dtc_bon_preparation_pdf_multiple',
  554.                           ],
  555.                       ]
  556.                   )
  557.                   ->setOrder("x.id""desc")
  558.                   ->setSearch(true)
  559.                   ->setSearchFields([23457]);
  560.         $where      'x.typeDocumentCommercial = :typeDocumentCommercial AND (x.dateBon IS NULL or x.dateBon <= :dateBon) AND x.visible = :visible AND x.statutCommande NOT IN (:statutCommande)';
  561.         $parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::BP'dateBon' => $date->format("Y-m-d H:i:s"), 'visible' => true'statutCommande' => $liste_statut];
  562.         if (array_key_exists('parametres'$param)) {
  563.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  564.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  565.                 $parameters["client"] = $param["parametres"]["client"];
  566.                 if ($where != "") {
  567.                     $where .= " AND ";
  568.                 }
  569.                 $where .= "cl.id = :client";
  570.             }
  571.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  572.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  573.                 $param["parametres"]["date_debut"]->setTime(000000);
  574.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  575.                 if ($where != "") {
  576.                     $where .= " AND ";
  577.                 }
  578.                 $where .= "x.date >= :date_debut";
  579.             }
  580.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  581.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  582.                 $param["parametres"]["date_fin"]->setTime(235959);
  583.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  584.                 if ($where != "") {
  585.                     $where .= " AND ";
  586.                 }
  587.                 $where .= "x.date <= :date_fin";
  588.             }
  589.         }
  590.         if ($where != '') {
  591.             $datatable->setWhere($where$parameters);
  592.         }
  593.         // echo $where;
  594.         return $datatable;
  595.     }
  596.     /**
  597.      * set datatable configs
  598.      *
  599.      * @return \App\Library\Datatable\Util\Datatable
  600.      */
  601.     private function datatableCommande($objet$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  602.     {
  603.         $repo_statut_document $em->getRepository(StatutCommande::class);
  604.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 4"ordre" => [0]]);
  605.         $type_jointure 'x.'.$type;
  606.         $datatable->setDatatableId('dta-bonpreparations')
  607.                   ->setEntity(Commande::class, "x")
  608.                   ->setFields(
  609.                       [
  610.                           $translator->trans("Date")            => 'x.date',
  611.                           $translator->trans("Réf")             => 'x.reference',
  612.                           $translator->trans("Ref client")      => 'cl.reference',
  613.                           $translator->trans("Client")          => 'cl.nom',
  614.                           $translator->trans("Équipier")        => 'u.reference',
  615.                           $translator->trans("Comm")            => 'x.commentaire',
  616.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  617.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  618.                           $translator->trans("Actions")         => 'x.id',
  619.                           "_identifier_"                        => 'x.id',
  620.                       ]
  621.                   )
  622.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  623.             /*->setWhere(
  624.                     $type_jointure.' = :objet',
  625.                     array('objet' => $objet)
  626.                )
  627.               */
  628.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  629.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  630.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  631.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  632.                   ->setWhere(
  633.                       'x.commande = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
  634.                       ['objet' => $objet'typeDocumentCommercial' => TypeDocumentCommercial::BP'statutCommande' => $liste_statut]
  635.                   )
  636.                   ->setRenderers(
  637.                       [
  638.                           => [
  639.                               'view'   => 'FO/DataTable/heure.html.twig',
  640.                               'params' => [],
  641.                           ],
  642.                           => [
  643.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  644.                               'params' => [
  645.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  646.                               ],
  647.                           ],
  648.                           => [
  649.                               'view'   => 'FO/DataTable/heure.html.twig',
  650.                               'params' => [],
  651.                           ],
  652.                           => [
  653.                               'view'   => 'FO/DataTable/actions.html.twig',
  654.                               'params' => [
  655.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  656.                                   //'supprimer_route'  => 'dtc_bon_preparation_supprimer',
  657.                                   'pdf_route'  => 'dtc_bon_preparation_pdf',
  658.                                   'entite'     => 'bonPreparation',
  659.                                   'objet'      => Commande::class,
  660.                                   'deplier'    => true,
  661.                               ],
  662.                           ],
  663.                       ]
  664.                   )
  665.                   ->setOrder("x.date""desc")
  666.                   ->setSearch(true)//->setSearchFields(array(1,2))
  667.         ;
  668.         return $datatable;
  669.     }
  670.     /**
  671.      * @Route("/vente/bons-preparations/grid/{id}/{type}", name="dtc_bon_preparation_liste_grid")
  672.      */
  673.     public function gridAction(Request $request$id ""$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  674.     {
  675.         $repo_objet $em->getRepository(Commande::class);
  676.         $objet      $repo_objet->find($id);
  677.         if (is_object($objet)) {
  678.             return $this->datatableCommande($objet$type$em$datatable$translator)->execute();
  679.         } else {
  680.             return $this->datatable($request$em$datatable$translator)->execute();
  681.         }
  682.     }
  683.     /**
  684.      * @Route("", name="")
  685.      */
  686.     public function listerCommandeClientAction(Request $requestClient $client)
  687.     {
  688.         $options '';
  689.         $cpt     0;
  690.         foreach ($client->getCommandes() as $bonPrepa) {
  691.             $selected "";
  692.             //if($cpt == 0) $selected = 'selected="selected"';
  693.             $options .= '<option '.$selected.' value="'.$bonPrepa->getId().'">'.$bonPrepa->getLibelle().'</option>';
  694.             $cpt++;
  695.         }
  696.         $referenceCommandeClientObligatoire $client->getReferenceClientObligatoire();
  697.         return new JsonResponse(
  698.             ['options' => $options'valide' => '0''referenceClientObligatoire' => $referenceCommandeClientObligatoire]
  699.         );
  700.     }
  701.     /**
  702.      * @Route("/bons-preparations-or/pdf/{id}", name="dtc_bon_preparation_or_pdf")
  703.      */
  704.     public function pdfBonPreparationOrAction(Request $requestCommande $bonPreparation$retour trueEntityManagerInterface $emPdf $snappy)
  705.     {
  706.         $societe    $em->getRepository(Societe::class)->find(1);
  707.         $date_Y     date("Y");
  708.         $date_M     date("m");
  709.         $date_D     date("d");
  710.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  711.         $chemin_pdf 'PDF/BONSPREPA/'.$date.'/BONPREPA-'.$bonPreparation->getReference().'.pdf';
  712.         if (file_exists($chemin_pdf)) {
  713.             unlink($chemin_pdf);
  714.         }
  715.         $footer $this->renderView('FO/PDF/footer_pagination_bp_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  716.         $header $this->renderView('FO/PDF/header_bpa_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  717.         $snappy->setOption('header-html'$header);
  718.         $snappy->setOption('footer-html'$footer);
  719.         $snappy->setOption('header-spacing'"4");
  720.         $snappy->setOption('footer-spacing'"3");
  721.         $snappy->setOption('disable-smart-shrinking'true);
  722.         //$snappy->setOption('print-media-type', false );
  723.         $snappy->setOption('page-height'"297");
  724.         $snappy->setOption('page-width'"210");
  725.         $snappy->generateFromHtml(
  726.             $this->renderView(
  727.                 'GestionComerciale/BonPreparationAtelier/template_pdf_2.html.twig',
  728.                 [
  729.                     'commande' => $bonPreparation,
  730.                     'societe'  => $societe,
  731.                 ]
  732.             ),
  733.             $chemin_pdf
  734.         );
  735.         if ($retour == true) {
  736.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['objet' => $bonPreparation'chemin_pdf' => '/'.$chemin_pdf]);
  737.         }
  738.     }
  739.     /**
  740.      * @Route("/bons-preparations/pdf/{id}", name="dtc_bon_preparation_pdf")
  741.      */
  742.     public function pdfBonPreparationAction(Request $requestCommande $bonPreparation$retour trueEntityManagerInterface $emPdf $snappy)
  743.     {
  744.         $societe $em->getRepository(Societe::class)->find(1);
  745.         $date_Y  date("Y");
  746.         $date_M  date("m");
  747.         $date_D  date("d");
  748.         $date    $date_Y.'/'.$date_M.'/'.$date_D;
  749.         $chemin_pdf 'PDF/BONSPREPA/'.$date.'/BONPREPA-'.$bonPreparation->getReference().'.pdf';
  750.         if (file_exists($chemin_pdf)) {
  751.             unlink($chemin_pdf);
  752.         }
  753.         //return $this->render('GestionComerciale/BonPreparation/template_pdf.html.twig',array('commande'  => $bonPreparation,'societe'  => $societe));
  754.         $footer $this->renderView('FO/PDF/footer_bp_pagination_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  755.         $header $this->renderView('FO/PDF/header_bp_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  756.         //$snappy->setOption('page-size', 'A4');
  757.         $snappy->setOption('header-html'$header);
  758.         $snappy->setOption('footer-html'$footer);
  759.         //$snappy->setOption('header-html',$footer);
  760.         $snappy->setOption('header-spacing'"4");
  761.         $snappy->setOption('footer-spacing'"3");
  762.         $snappy->setOption('disable-smart-shrinking'true);
  763.         //$snappy->setOption('print-media-type', false );
  764.         $snappy->setOption('page-height'"297");
  765.         $snappy->setOption('page-width'"210");
  766.         $snappy->generateFromHtml(
  767.             $this->renderView(
  768.                 'GestionComerciale/BonPreparation/template_pdf.html.twig',
  769.                 [
  770.                     'commande' => $bonPreparation,
  771.                     'societe'  => $societe,
  772.                 ]
  773.             ),
  774.             $chemin_pdf
  775.         );
  776.         if ($retour == true) {
  777.             return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  778.                 'objet'      => $bonPreparation,
  779.                 'chemin_pdf' => '/'.$chemin_pdf,
  780.                 'visualiser' => $request->query->get('visualiser'),
  781.             ]);
  782.             //return new RedirectResponse("/".$chemin_pdf);
  783.         }
  784.     }
  785.     /**
  786.      * @Route("/vente/bons-preparations/imprimer/multiple", name="dtc_bon_preparation_pdf_multiple")
  787.      */
  788.     public function imprimerMultipleAction(Request $requestEntityManagerInterface $em)
  789.     {
  790.         $data       $request->get('dataTables');
  791.         $ids        $data['actions'];
  792.         $tableauPdf = [];
  793.         $pdfRelier  'PDF/BONSPREPA/BONPREPA-'.date('d-m-Y').'.pdf';
  794.         $date_Y     date("Y");
  795.         $date_M     date("m");
  796.         $date_D     date("d");
  797.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  798.         //$ids = array("118","101","93");
  799.         for ($i 0$i count($ids); $i++) {
  800.             $repo $em->getRepository(Commande::class);
  801.             $bon  $repo->find($ids[$i]);
  802.             if (is_object($bon)) {
  803.                 $this->pdfBonPreparationAction($bonfalse);
  804.                 $tableauPdf[] = $chemin_pdf 'PDF/BONSPREPA/'.$date.'/BONPREPA-'.$bon->getReference().'.pdf';
  805.             }
  806.         }
  807.         $cmd "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
  808.         foreach ($tableauPdf as $file) {
  809.             $cmd .= $file." ";
  810.         }
  811.         $result shell_exec($cmd);
  812.         return new JsonResponse(['target' => '_blank''url' => '/'.$pdfRelier'valide' => '1']);
  813.     }
  814.     /**
  815.      * set datatable configs
  816.      *
  817.      * @return \App\Library\Datatable\Util\Datatable
  818.      */
  819.     private function datatableCommandeFournisseurBp($objet$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  820.     {
  821.         $articlesCommande $objet->getArticleCommande();
  822.         $articles         = [];
  823.         if (count($articlesCommande) > 0) {
  824.             foreach ($articlesCommande as $articleCommande) {
  825.                 $articles[] = $articleCommande->getArticle();
  826.             }
  827.         }
  828.         $repo_article $em->getRepository(Article::class);
  829.         //$commandesId = $repo_article->getBpPourCommandeFournisseur($articles,$this->getParameter('article_commentaire'));
  830.         $commandesId $em->getRepository(ArticleCommande::class)->getBpPourCommandeFournisseur($articles$this->getParameter('article_commentaire'));
  831.         $commandes   = [];
  832.         foreach ($commandesId as $commandeId) {
  833.             $commandes[] = $commandeId['id'];
  834.         }
  835.         //$commandes = array(1668, 1670);
  836.         //$commandes=array();
  837.         $repo_statut_document $em->getRepository(StatutCommande::class);
  838.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 4"ordre" => [0]]);
  839.         $type_jointure 'x.'.$type;
  840.         $datatable->setDatatableId('dta-bonpreparations')
  841.                   ->setEntity(Commande::class, "x")
  842.                   ->setFields(
  843.                       [
  844.                           //$translator->trans("ID") =>  'x.id',
  845.                           $translator->trans("Date")            => 'x.date',
  846.                           $translator->trans("Réf")             => 'x.reference',
  847.                           $translator->trans("Ref client")      => 'cl.reference',
  848.                           $translator->trans("Client")          => 'cl.nom',
  849.                           $translator->trans("Équipier")        => 'u.reference',
  850.                           $translator->trans("Comm")            => 'x.commentaire',
  851.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  852.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  853.                           $translator->trans("Actions")         => 'x.id',
  854.                           "_identifier_"                        => 'x.id',
  855.                       ]
  856.                   )
  857.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  858.             /*->setWhere(
  859.                     $type_jointure.' = :objet',
  860.                     array('objet' => $objet)
  861.                )
  862.               */
  863.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  864.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  865.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  866.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  867.                   ->setWhere(
  868.                       'x.id IN (:commandes) AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
  869.                       ['commandes' => $commandes'typeDocumentCommercial' => TypeDocumentCommercial::BP'statutCommande' => $liste_statut]
  870.                   )
  871.                   ->setRenderers(
  872.                       [
  873.                           => [
  874.                               'view'   => 'FO/DataTable/heure.html.twig',
  875.                               'params' => [],
  876.                           ],
  877.                           => [
  878.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  879.                               'params' => [
  880.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  881.                               ],
  882.                           ],
  883.                           => [
  884.                               'view'   => 'FO/DataTable/heure.html.twig',
  885.                               'params' => [],
  886.                           ],
  887.                           => [
  888.                               'view'   => 'FO/DataTable/actions.html.twig',
  889.                               'params' => [
  890.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  891.                                   //'supprimer_route'  => 'dtc_bon_preparation_supprimer',
  892.                                   'pdf_route'  => 'dtc_bon_preparation_pdf',
  893.                                   'entite'     => 'bonPreparation',
  894.                                   'objet'      => Commande::class,
  895.                                   'deplier'    => true,
  896.                               ],
  897.                           ],
  898.                       ]
  899.                   )
  900.                   ->setOrder("x.date""desc")
  901.                   ->setSearch(true)//->setSearchFields(array(1,2))
  902.         ;
  903.         return $datatable;
  904.     }
  905.     /**
  906.      * set datatable configs
  907.      *
  908.      * @return \App\Library\Datatable\Util\Datatable
  909.      */
  910.     private function datatableCommandeFournisseur($objet$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  911.     {
  912.         $articlesCommande $objet->getArticleCommande();
  913.         $articles         = [];
  914.         if (count($articlesCommande) > 0) {
  915.             foreach ($articlesCommande as $articleCommande) {
  916.                 if ($articleCommande->getArticle()->getEstCommentaire() != 1) {
  917.                     $articles[] = $articleCommande->getArticle();
  918.                 }
  919.             }
  920.         }
  921.         $repo_article $em->getRepository(Article::class);
  922.         $commandesId $repo_article->getCommandes($articles);
  923.         $commandes   = [];
  924.         foreach ($commandesId as $commandeId) {
  925.             $commandes[] = $commandeId['id'];
  926.         }
  927.         //$commandes = array(1668, 1670);
  928.         $repo_statut_document $em->getRepository(StatutCommande::class);
  929.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 4"ordre" => [0]]);
  930.         $type_jointure 'x.'.$type;
  931.         $datatable->setDatatableId('dta-bonpreparations')
  932.                   ->setEntity(Commande::class, "x")
  933.                   ->setFields(
  934.                       [
  935.                           //$translator->trans("ID") =>  'x.id',
  936.                           $translator->trans("Date")            => 'x.date',
  937.                           $translator->trans("Réf")             => 'x.reference',
  938.                           $translator->trans("Ref client")      => 'cl.reference',
  939.                           $translator->trans("Client")          => 'cl.nom',
  940.                           $translator->trans("Équipier")        => 'u.reference',
  941.                           $translator->trans("Comm")            => 'x.commentaire',
  942.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  943.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  944.                           $translator->trans("Actions")         => 'x.id',
  945.                           "_identifier_"                        => 'x.id',
  946.                       ]
  947.                   )
  948.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  949.             /*->setWhere(
  950.                     $type_jointure.' = :objet',
  951.                     array('objet' => $objet)
  952.                )
  953.               */
  954.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  955.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  956.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  957.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  958.                   ->setWhere(
  959.                       'x.commande IN (:commandes) AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
  960.                       ['commandes' => $commandes'typeDocumentCommercial' => TypeDocumentCommercial::BP'statutCommande' => $liste_statut]
  961.                   )
  962.                   ->setRenderers(
  963.                       [
  964.                           => [
  965.                               'view'   => 'FO/DataTable/heure.html.twig',
  966.                               'params' => [],
  967.                           ],
  968.                           => [
  969.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  970.                               'params' => [
  971.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  972.                               ],
  973.                           ],
  974.                           => [
  975.                               'view'   => 'FO/DataTable/heure.html.twig',
  976.                               'params' => [],
  977.                           ],
  978.                           => [
  979.                               'view'   => 'FO/DataTable/actions.html.twig',
  980.                               'params' => [
  981.                                   'edit_route' => 'dtc_bon_preparation_modifier',
  982.                                   //'supprimer_route'  => 'dtc_bon_preparation_supprimer',
  983.                                   'pdf_route'  => 'dtc_bon_preparation_pdf',
  984.                                   'entite'     => 'bonPreparation',
  985.                                   'objet'      => Commande::class,
  986.                               ],
  987.                           ],
  988.                       ]
  989.                   )
  990.                   ->setOrder("x.date""desc")
  991.                   ->setSearch(true)//->setSearchFields(array(1,2))
  992.         ;
  993.         return $datatable;
  994.     }
  995.     /**
  996.      * Grid action
  997.      * @return Response
  998.      */
  999.     /**
  1000.      * @Route("/vente/bons-preparations/commande-fournisseur/grid/{id}", name="dtc_bon_preparation_commande_fournisseur_liste_grid")
  1001.      */
  1002.     public function gridCommandeFournisseurAction(Request $request$id ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1003.     {
  1004.         $repo_objet $em->getRepository(CommandeFournisseur::class);
  1005.         $objet      $repo_objet->find($id);
  1006.         if (is_object($objet)) {
  1007.             return $this->datatableCommandeFournisseur($objet""$em$datatable$translator)->execute();
  1008.         }
  1009.     }
  1010.     /**
  1011.      * Grid action
  1012.      * @return Response
  1013.      */
  1014.     /**
  1015.      * @Route("/vente/bons-preparations/commande-fournisseur/bp/grid/{id}", name="dtc_bon_preparation_commande_fournisseur_bp_liste_grid")
  1016.      */
  1017.     public function gridCommandeFournisseurBpAction(Request $request$id ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  1018.     {
  1019.         $repo_objet $em->getRepository(CommandeFournisseur::class);
  1020.         $objet      $repo_objet->find($id);
  1021.         if (is_object($objet)) {
  1022.             return $this->datatableCommandeFournisseurBp($objet''$em$datatable$translator)->execute();
  1023.         }
  1024.     }
  1025.     /**
  1026.      * @Route("/vente/bons-preparation/retour-commande/{id}", name="dtc_bon_preparation_retour_commande")
  1027.      */
  1028.     public function retourCommandeAction(Request             $requestCommande $bonEntityManagerInterface $emBonPreparationService $bonPreparationService,
  1029.                                          TranslatorInterface $translator
  1030.     ) {
  1031.         $titre_modal $translator->trans("Retour en commande");
  1032.         $user   $this->getUser();
  1033.         $errors "";
  1034.         $idsArticleCommande $request->query->get('choixArticles');
  1035.         $link            $this->generateUrl('dtc_bon_preparation_retour_commande', ['id' => $bon->getId()]);
  1036.         $articleCommande $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
  1037.         if ($request->isMethod('POST')) {
  1038.             $articles = [
  1039.                 'idArticleCommande' => $request->request->get('idArticleCommande'),
  1040.                 'qte'               => $request->request->get('qte'),
  1041.             ];
  1042.             $bonPreparationService->retourCommande($articles$bon);
  1043.             $url $this->generateUrl('dtc_commande_modifier', ['id' => $bon->getCommande()->getId()]);
  1044.             $this->addFlash(
  1045.                 'notice',
  1046.                 $translator->trans('Retour des articles sur la commande réalisé avec succès !')
  1047.             );
  1048.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1049.         }
  1050.         $rendu $this->renderView('GestionComerciale/BonPreparation/retour-commande.html.twig', ['errors' => $errors'articleCommande' => $articleCommande'commande' => $bon]);
  1051.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''link' => $link'titre' => $titre_modal]);
  1052.     }
  1053.     /**
  1054.      * @Route("/vente/bons-preparations/nouveau-v2/{id}/{type}", name="dtc_bon_preparation_ajouter_v2")
  1055.      */
  1056.     public function ajouterV2Action(Request             $request$id$type ""EntityManagerInterface $emBonPreparationService $bonPreparationServiceCommandeService $commandeService,
  1057.                                     TranslatorInterface $translator
  1058.     ) {
  1059.         $user               $this->getUser();
  1060.         $idsArticleCommande $request->request->get('choixArticles');
  1061.         //$idsArticleCommande = $request->request->all();
  1062.         //$qtesArticleCommande = $request->request->get('qteDispo');
  1063.         if (count($idsArticleCommande) > 0) {
  1064.             $repo_objet $em->getRepository(Commande::class);
  1065.             $errors "";
  1066.             //$articleCommande = $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
  1067.             $objet $repo_objet->find($id);
  1068.             //date de préparation ultérieure
  1069.             $now = new \Datetime;
  1070.             if (is_object($objet->getDateBon()) && $objet->getDateBon() > $now) {
  1071.                 $url $this->generateUrl('dtc_commande_modifier', ['id' => $id'forceQteDispo' => false]);
  1072.                 $this->addFlash('warning''Cette commande ne peut être passée en BP/BL/Facture/Avoir car elle a une date de préparation au '.$objet->getDateBon()->format('d/m/Y').' !');
  1073.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1074.             }
  1075.             if ($objet->getOrigine() == 'prestashop' && $objet->getValideManuellement() != 1) {
  1076.                 $url $this->generateUrl('dtc_commande_modifier', ['id' => $id'forceQteDispo' => false]);
  1077.                 $this->addFlash(
  1078.                     'warning',
  1079.                     $translator->trans('Cette commande internet doit être validée avant le passage en BP !')
  1080.                 );
  1081.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1082.             }
  1083.             if ($commandeService->estPreparable($objet)) {
  1084.                 $bon = clone $objet;
  1085.                 $bon->setCreateur($user);
  1086.                 $bon->setDateBon(new \DateTime());
  1087.                 $bon->setDate(new \DateTime());
  1088.                 $bon->setCommande($objet);
  1089.                 //$bon->setUtilisateur($user);
  1090.                 if (is_object($bon->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bon->getUtilisateur()->getId(
  1091.                     ) == $this->getParameter('utilisateur_site_internet')) {
  1092.                 } else {
  1093.                     $bon->setUtilisateur($user);
  1094.                 }
  1095.                 $bon->setModifiable(false);
  1096.                 $em->persist($bon);
  1097.                 $em->flush();
  1098.                 $em->refresh($bon);
  1099.                 //$operation = "commande";
  1100.                 $operation "";
  1101.                 //$operation = $request->request->get('operation');
  1102.                 $articles = [
  1103.                     'valider'                  => $request->request->get('valider'),
  1104.                     'ids'                      => $request->request->get('ids'),
  1105.                     'idArticleCommande'        => $request->request->get('idArticleCommande'),
  1106.                     //'idArticleCommandeOrigine'=>$request->request->get('idArticleCommandeOrigine'),
  1107.                     'idArticleCommandeOrigine' => [],
  1108.                     'idArticleCommandeParent'  => $request->request->get('idArticleCommandeOrigine'),
  1109.                     'montantRemise'            => $request->request->get('montantRemise'),
  1110.                     'remiseCalcule'            => $request->request->get('remiseCalcule'),
  1111.                     'remise'                   => $request->request->get('remise'),
  1112.                     'commentaire'              => $request->request->get('commentaire'),
  1113.                     'commentairePrive'         => $request->request->get('commentairePrive'),
  1114.                     'remiseSuppl'              => $request->request->get('remiseSuppl'),
  1115.                     'ecocontribution'          => $request->request->get('ecocontribution'),
  1116.                     'prix'                     => $request->request->get('prix'),
  1117.                     //'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
  1118.                     'libellesSecondaires'      => $request->request->get('libellesSecondaires'),
  1119.                     'libelles'                 => $request->request->get('libelles'),
  1120.                     'tva'                      => $request->request->get('tva'),
  1121.                     'qte'                      => $request->request->get('qte'),
  1122.                     //'qte'=>$request->request->get('qteDispo'),
  1123.                     'commentaireSuppl'         => $request->request->get('commentaireSuppl'),
  1124.                     'emplacement'              => $request->request->get('emplacement'),
  1125.                     'nbEmplacement'            => $request->request->get('nbEmplacement'),
  1126.                     'position'                 => $request->request->get('position'),
  1127.                     'articlesCommandeRepris'   => $request->request->get('articlesCommandeRepris'),
  1128.                     'qteDispo'                 => $request->request->get('qteDispo'),
  1129.                     'transporteurs'            => $request->request->get('transporteurs'),
  1130.                     'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
  1131.                     'tabPrixAchatNetEuros'     => $request->request->get('tabPrixAchatNetEuros'),
  1132.                     'societe_livraison_txt'     => $request->request->get('societe_livraison_txt'),
  1133.                     'numero_livraison_txt'      => $request->request->get('numero_livraison_txt'),
  1134.                     'rue_livraison_txt'         => $request->request->get('rue_livraison_txt'),
  1135.                     'complement_livraison_txt'  => $request->request->get('complement_livraison_txt'),
  1136.                     'complement2_livraison_txt' => $request->request->get('complement2_livraison_txt'),
  1137.                     'cp_livraison_txt'          => $request->request->get('cp_livraison_txt'),
  1138.                     'ville_livraison_txt'       => $request->request->get('ville_livraison_txt'),
  1139.                     'societe_facturation_txt'     => $request->request->get('societe_facturation_txt'),
  1140.                     'numero_facturation_txt'      => $request->request->get('numero_facturation_txt'),
  1141.                     'rue_facturation_txt'         => $request->request->get('rue_facturation_txt'),
  1142.                     'complement_facturation_txt'  => $request->request->get('complement_facturation_txt'),
  1143.                     'complement2_facturation_txt' => $request->request->get('complement2_facturation_txt'),
  1144.                     'cp_facturation_txt'          => $request->request->get('cp_facturation_txt'),
  1145.                     'ville_facturation_txt'       => $request->request->get('ville_facturation_txt'),
  1146.                 ];
  1147.                 $valeurs = ["articles" => $articles'typeDocument' => 'commande''operation' => 'commande''action' => 'nouveau'];
  1148.                 $bonPreparationService->sauvegarderBon($bon$valeurs);
  1149.                 $url $this->generateUrl('dtc_bon_preparation_modifier', ['id' => $bon->getId(), 'forceQteDispo' => true]);
  1150.                 $this->addFlash(
  1151.                     'notice',
  1152.                     $translator->trans('Bon de préparation ajouté avec succès !')
  1153.                 );
  1154.                 $commandeService->creerHistorique($bon1);
  1155.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1156.             } else {
  1157.                 $url $this->generateUrl('dtc_commande_modifier', ['id' => $id'forceQteDispo' => false]);
  1158.                 $this->addFlash(
  1159.                     'warning',
  1160.                     $translator->trans('Cette commande est déjà préparée !')
  1161.                 );
  1162.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  1163.             }
  1164.         } else {
  1165.             return new JsonResponse(
  1166.                 [
  1167.                     'rendu'              => '',
  1168.                     'valide'             => '0',
  1169.                     'url'                => '',
  1170.                     'idsArticleCommande' => $idsArticleCommande,
  1171.                 ]
  1172.             );
  1173.         }
  1174.     }
  1175.     /**
  1176.      * @Route("/bp/charger-tableau/{id}/{type}", name="dtc_bp_charger_tableau")
  1177.      */
  1178.     public function chargerTableauAction(Request $request$id$type 'commande')
  1179.     {
  1180.         $rendu $this->renderView('GestionComerciale/BonPreparation/charger_tableau.html.twig', ["id" => $id"type" => $type]);
  1181.         return new JsonResponse(['rendu' => $rendu]);
  1182.     }
  1183. }