src/Controller/GestionComerciale/BonPreparationAtelierController.php line 606

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\BonPreparation;
  7. use App\Entity\GestionComerciale\Commande;
  8. use App\Entity\GestionComerciale\CommandeFournisseur;
  9. use App\Entity\GestionComerciale\StatutCommande;
  10. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  11. use App\Form\GestionComerciale\AnnulerBPAType;
  12. use App\Form\GestionComerciale\CommandeType;
  13. use App\Library\Datatable\Util\Datatable;
  14. use App\Security\Voter\EntityVoter;
  15. use App\Service\GestionComerciale\AcompteService;
  16. use App\Service\GestionComerciale\BonPreparationService;
  17. use App\Service\GestionComerciale\CommandeService;
  18. use App\Service\Utilisateur\ColonneTableauService;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Knp\Snappy\Pdf;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Validator\Validator\ValidatorInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. class BonPreparationAtelierController extends AbstractController
  29. {
  30.     /**
  31.      * @Route("/vente/bons-preparations-atelier/modifier/{id}", name="dtc_bon_preparation_atelier_modifier")
  32.      */
  33.     public function modifierAction(Request         $requestCommande $bonEntityManagerInterface $emBonPreparationService $bonService
  34.                                    CommandeService $commandeServiceTranslatorInterface $translatorValidatorInterface $validator
  35.     ) {
  36.         $user $this->getUser();
  37.         $bon->setUtilisateur($user);
  38.         $annuler $request->request->get('annuler');
  39.         //echo "AA ".$annuler;
  40.         if ($annuler == "annuler" || $annuler == "annuler_devis" || $annuler == "annuler_cmde") {
  41.             $bonService->annuler($bon$annuler);
  42.             $this->addFlash(
  43.                 'notice',
  44.                 $translator->trans('Bon de préparation annulé avec succès !')
  45.             );
  46.             return $this->redirectToRoute('dtc_bon_preparation_atelier_liste');
  47.             //exit;
  48.         }
  49.         $form $this->createForm(CommandeType::class, $bon);
  50.         $articles = ['ids' => $request->request->get('ids'), 'prix' => $request->request->get('prix'), 'qte' => $request->request->get('qte')];
  51.         $valeurs  = ["articles" => $articles];
  52.         $errors "";
  53.         $form->handleRequest($request);
  54.         if ($form->isSubmitted() and $annuler != "annuler" and $annuler != "annuler_devis" and $annuler != "annuler_cmde") {
  55.             if ($commandeService->estEditable($bon)) {
  56.                 //TODO Change this
  57.                 $droit $this->isGranted(EntityVoter::UPDATEBonPreparation::class);
  58.                 if ( ! $droit) {
  59.                     return $this->redirectToRoute('dtc_bon_preparation_atelier_modifier', ["id" => $bon->getId()]);
  60.                 }
  61.                 if ($form->isValid()) {
  62.                     /*
  63.                     if($request->request->get('annuler') != '') {
  64.                         $bonService->annulerCommande($bon);
  65.                         $this->addFlash(
  66.                              'notice',
  67.                             $translator->trans('Bon de préparation annulée avec succès !')
  68.                          );
  69.                         return $this->redirectToRoute('dtc_bon_preparation_atelier_liste',array());
  70.                     }
  71.                     */
  72.                     //echo "<div>CC ".$bon->getClient()->getNom()."</div>";
  73.                     $em->persist($bon);
  74.                     $em->flush();
  75.                     $operation $request->request->get('operation');
  76.                     $articles  = [
  77.                         'valider'             => $request->request->get('valider'),
  78.                         'ids'                 => $request->request->get('ids'),
  79.                         'montantRemise'       => $request->request->get('montantRemise'),
  80.                         'remiseCalcule'       => $request->request->get('remiseCalcule'),
  81.                         'remise'              => $request->request->get('remise'),
  82.                         'commentaire'         => $request->request->get('commentaire'),
  83.                         'remiseSuppl'         => $request->request->get('remiseSuppl'),
  84.                         'prix'                => $request->request->get('prix'),
  85.                         'libellesSecondaires' => $request->request->get('libellesSecondaires'),
  86.                         'libelles'            => $request->request->get('libelles'),
  87.                         'tva'                 => $request->request->get('tva'),
  88.                         'qte'                 => $request->request->get('qte'),
  89.                         'force'               => $request->request->get('force'),
  90.                     ];
  91.                     $valeurs = ["articles" => $articles'typeDocument' => 'commande''operation' => $operation];
  92.                     $bonService->sauvegarderBon($bon$valeurs);
  93.                     if ($operation == "facture") {
  94.                         $this->addFlash(
  95.                             'notice',
  96.                             $translator->trans('Facture sauvegardée avec succès !')
  97.                         );
  98.                         $repo_statut_document $em->getRepository(StatutCommande::class);
  99.                         $liste_statut         $repo_statut_document->findOneBy(["documentCommercial" => 6"ordre" => [1]]);
  100.                         $typeFac  TypeDocumentCommercial::FACTURE;
  101.                         $repo_fac $em->getRepository(Commande::class);
  102.                         $facture  $repo_fac->findOneBy(["bp" => $bon"typeDocumentCommercial" => $typeFac"visible" => 1"statutCommande" => $liste_statut]);
  103.                         return $this->redirectToRoute('dtc_facture_afficher', ["id" => $facture->getId()]);
  104.                     } else {
  105.                         $this->addFlash(
  106.                             'notice',
  107.                             $translator->trans('Bon de préparation sauvegardée avec succès !')
  108.                         );
  109.                         return $this->redirectToRoute('dtc_bon_preparation_atelier_modifier', ["id" => $bon->getId()]);
  110.                     }
  111.                 } else {
  112.                     $errors $validator->validate($bon);
  113.                     //\Doctrine\Common\Util\Debug::dump($errors);
  114.                 }
  115.             } else {
  116.                 $paiement $bon->getStatutPaiement();
  117.                 $em->refresh($bon);
  118.                 $bon->setStatutPaiement($paiement);
  119.                 $em->persist($bon);
  120.                 $em->flush();
  121.                 $this->addFlash(
  122.                     'notice',
  123.                     $translator->trans('Statut du paiement de la commande modifié avec succès !')
  124.                 );
  125.                 /*
  126.                 $this->addFlash(
  127.                     'warning',
  128.                     "La commande n'est plus éditable ! "
  129.                 );
  130.                 */
  131.                 return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getId()]);
  132.             }
  133.         }
  134.         return $this->render('GestionComerciale/BonPreparationAtelier/modifier2.html.twig', ['form' => $form->createView(), 'errors' => $errors'commande' => $bon]);
  135.     }
  136.     /**
  137.      * @Route("/vente/bons-preparations-atelier", name="dtc_bon_preparation_atelier_liste")
  138.      */
  139.     public function listerAction(Request             $request$id "0"$type "a"EntityManagerInterface $emDatatable $datatableColonneTableauService $serviceColonneTableau,
  140.                                  TranslatorInterface $translator
  141.     ) {
  142.         $repo_objet $em->getRepository(Commande::class);
  143.         $objet      $repo_objet->find($id);
  144.         if ($type == "commandeFournisseur") {
  145.             $repo_objet $em->getRepository(CommandeFournisseur::class);
  146.             $objet      $repo_objet->find($id);
  147.             $this->datatableCommandeFournisseur($objet""$em$datatable$translator);
  148.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => true"orderable" => true];
  149.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [1], "visible" => true"orderable" => true];
  150.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [2], "visible" => true"orderable" => true];
  151.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [3], "visible" => true"orderable" => true];
  152.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [4], "visible" => true"orderable" => true];
  153.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [5], "visible" => true"orderable" => true];
  154.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [6], "visible" => true"orderable" => true];
  155.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [7], "visible" => true"orderable" => true];
  156.             return $this->render('GestionComerciale/BonPreparationAtelier/lister_commande_fournisseur.html.twig', ["id" => $id'tableauClassColonne' => $tableau_class_cellule]);
  157.         } elseif (is_object($objet)) {
  158.             $repo_objet $em->getRepository(Commande::class);
  159.             $objet      $repo_objet->find($id);
  160.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => true"orderable" => true];
  161.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [1], "visible" => true"orderable" => true];
  162.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [2], "visible" => true"orderable" => true];
  163.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [3], "visible" => true"orderable" => true];
  164.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [4], "visible" => true"orderable" => true];
  165.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [5], "visible" => true"orderable" => true];
  166.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [6], "visible" => true"orderable" => true];
  167.             $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [7], "visible" => true"orderable" => true];
  168.             $this->datatableCommande($objet$type$datatable$em$translator);
  169.             return $this->render('GestionComerciale/BonPreparationAtelier/lister_commande.html.twig', ["id" => $id"type" => $type'tableauClassColonne' => $tableau_class_cellule]);
  170.         } else {
  171.             $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  172.             $tableau_class_cellule[] = [
  173.                 "className" => "colonne_id",
  174.                 "targets"   => [1],
  175.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "id"),
  176.             ];
  177.             $tableau_class_cellule[] = [
  178.                 "className" => "colonne_id",
  179.                 "targets"   => [2],
  180.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "client"),
  181.             ];
  182.             $tableau_class_cellule[] = [
  183.                 "className" => "colonne_id",
  184.                 "targets"   => [3],
  185.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "reference"),
  186.             ];
  187.             $tableau_class_cellule[] = [
  188.                 "className" => "colonne_id",
  189.                 "targets"   => [4],
  190.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "statut"),
  191.             ];
  192.             $tableau_class_cellule[] = [
  193.                 "className" => "colonne_id",
  194.                 "targets"   => [5],
  195.                 "visible"   => $serviceColonneTableau->getColonneUtilisateur(BonPreparation::class, "dateBon"),
  196.             ];
  197.             $this->datatable($em$datatable$translator);
  198.             return $this->render('GestionComerciale/BonPreparationAtelier/lister.html.twig', ["id" => $id"type" => $type'tableauClassColonne' => $tableau_class_cellule]);
  199.         }
  200.     }
  201.     /**
  202.      * set datatable configs
  203.      *
  204.      * @return \App\Library\Datatable\Util\Datatable
  205.      */
  206.     private function datatable(EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  207.     {
  208.         $repo_statut_document $em->getRepository(StatutCommande::class);
  209.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 11"ordre" => [0]]);
  210.         $date = new \Datetime();
  211.         $datatable->setDatatableId('dta-bonpreparations')
  212.                   ->setEntity(Commande::class, "x")
  213.                   ->setFields(
  214.                       [
  215.                           $translator->trans("ID")              => 'x.id',
  216.                           $translator->trans("Date")            => 'x.date',
  217.                           $translator->trans("Réf")             => 'x.reference',
  218.                           $translator->trans("Ref client")      => 'cl.reference',
  219.                           $translator->trans("Client")          => 'cl.nom',
  220.                           $translator->trans("Équipier")        => 'u.reference',
  221.                           $translator->trans("Comm")            => 'x.commentaire',
  222.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  223.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  224.                           $translator->trans("Actions")         => 'x.id',
  225.                           "_identifier_"                        => 'x.id',
  226.                       ]
  227.                   )
  228.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  229.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  230.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  231.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  232.             /*->setWhere(
  233.                     $type_jointure.' = :objet',
  234.                     array('objet' => $objet)
  235.                )
  236.               */
  237.                   ->setWhere(
  238.                 'c.typeDocumentCommercial = :typeDocumentCommercialCommande AND x.typeDocumentCommercial = :typeDocumentCommercial AND (x.dateBon IS NULL or x.dateBon <= :dateBon) AND x.visible = :visible AND x.statutCommande NOT IN (:statutCommande)',
  239.                 [
  240.                     'typeDocumentCommercialCommande' => '2',
  241.                     'typeDocumentCommercial'         => '11',
  242.                     'dateBon'                        => $date->format("Y-m-d H:i:s"),
  243.                     'visible'                        => true,
  244.                     'statutCommande'                 => $liste_statut,
  245.                 ]
  246.             )
  247.                   ->setRenderers(
  248.                       [
  249.                           => [
  250.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  251.                               'params' => [
  252.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  253.                               ],
  254.                           ],
  255.                           => [
  256.                               'view'   => 'FO/DataTable/heure.html.twig',
  257.                               'params' => [],
  258.                           ],
  259.                           => [
  260.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  261.                               'params' => [
  262.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  263.                               ],
  264.                           ],
  265.                           => [
  266.                               'view'   => 'FO/DataTable/heure.html.twig',
  267.                               'params' => [],
  268.                           ],
  269.                           => [
  270.                               'view'   => 'FO/DataTable/actions.html.twig',
  271.                               'params' => [
  272.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  273.                                   //'supprimer_route'  => 'dtc_bon_preparation_atelier_supprimer',
  274.                                   'pdf_route'  => 'dtc_bon_preparation_atelier_pdf',
  275.                                   'entite'     => 'bonPreparation',
  276.                                   'objet'      => Commande::class,
  277.                               ],
  278.                           ],
  279.                       ]
  280.                   )
  281.                   ->setMultiple(
  282.                       [
  283.                           'print' => [
  284.                               'title' => 'Imprimer',
  285.                               'route' => 'dtc_bon_preparation_atelier_pdf_multiple',
  286.                           ],
  287.                       ]
  288.                   )
  289.                   ->setOrder("x.id""desc")
  290.                   ->setSearch(true)
  291.                   ->setSearchFields([14]);
  292.         return $datatable;
  293.     }
  294.     /**
  295.      * set datatable configs
  296.      *
  297.      * @return \App\Library\Datatable\Util\Datatable
  298.      */
  299.     private function datatableCommande($objet$type ""Datatable $datatableEntityManagerInterface $emTranslatorInterface $translator)
  300.     {
  301.         $repo_statut_document $em->getRepository(StatutCommande::class);
  302.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 11"ordre" => [0]]);
  303.         $type_jointure 'x.'.$type;
  304.         $datatable->setDatatableId('dta-bonpreparations')
  305.                   ->setEntity(Commande::class, "x")
  306.                   ->setFields(
  307.                       [
  308.                           //$translator->trans("ID") =>  'x.id',
  309.                           $translator->trans("Date")            => 'x.date',
  310.                           $translator->trans("Réf")             => 'x.reference',
  311.                           $translator->trans("Réf client")      => 'cl.reference',
  312.                           $translator->trans("Client")          => 'cl.nom',
  313.                           $translator->trans("Équipier")        => 'u.reference',
  314.                           $translator->trans("Comm")            => 'x.commentaire',
  315.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  316.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  317.                           $translator->trans("Actions")         => 'x.id',
  318.                           "_identifier_"                        => 'x.id',
  319.                       ]
  320.                   )
  321.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  322.             /*->setWhere(
  323.                     $type_jointure.' = :objet',
  324.                     array('objet' => $objet)
  325.                )
  326.               */
  327.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  328.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  329.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  330.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  331.                   ->setWhere(
  332.                       'x.commande = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
  333.                       ['objet' => $objet'typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER'statutCommande' => $liste_statut]
  334.                   )
  335.                   ->setRenderers(
  336.                       [
  337.                           /*
  338.                           0 => array(
  339.                               'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  340.                               'params' => array(
  341.                                           'edit_route'    => 'dtc_bon_preparation_atelier_modifier'
  342.                               ),
  343.                           ),
  344.                           */
  345.                           => [
  346.                               'view'   => 'FO/DataTable/heure.html.twig',
  347.                               'params' => [],
  348.                           ],
  349.                           => [
  350.                               'view'   => 'FO/DataTable/avec_lien_pdf_route.html.twig',
  351.                               'params' => [
  352.                                   'edit_route' => 'dtc_bon_preparation_atelier_pdf',
  353.                               ],
  354.                           ],
  355.                           => [
  356.                               'view'   => 'FO/DataTable/heure.html.twig',
  357.                               'params' => [],
  358.                           ],
  359.                           => [
  360.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  361.                               'params' => [
  362.                                   //'edit_route'  => 'dtc_bon_preparation_atelier_modifier',
  363.                                   //'supprimer_route'  => 'dtc_bon_preparation_atelier_annuler',
  364.                                   'pdf_route' => 'dtc_bon_preparation_atelier_pdf',
  365.                                   'entite'    => 'bonPreparation',
  366.                                   'objet'     => Commande::class,
  367.                                   'id'        => $objet->getId(),
  368.                                   'type'      => 'or',
  369.                                   'deplier'   => true,
  370.                               ],
  371.                           ],
  372.                       ]
  373.                   )
  374.                   ->setOrder("x.date""desc")
  375.                   ->setSearch(true)//->setSearchFields(array(1,2))
  376.         ;
  377.         return $datatable;
  378.     }
  379.     /**
  380.      * @Route("/vente/bons-preparations-atelier/grid/{id}/{type}", name="dtc_bon_preparation_atelier_liste_grid")
  381.      */
  382.     public function gridAction(Request $request$id ""$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  383.     {
  384.         $repo_objet $em->getRepository(Commande::class);
  385.         $objet      $repo_objet->find($id);
  386.         if (is_object($objet)) {
  387.             return $this->datatableCommande($objet$type$datatable$em$translator)->execute();
  388.         } else {
  389.             return $this->datatable($em$datatable$translator)->execute();
  390.         }
  391.     }
  392.     /**
  393.      * @Route("", name="")
  394.      */
  395.     public function listerCommandeClientAction(Request $requestClient $client)
  396.     {
  397.         $options '';
  398.         $cpt     0;
  399.         foreach ($client->getCommandes() as $bonPrepa) {
  400.             $selected "";
  401.             //if($cpt == 0) $selected = 'selected="selected"';
  402.             $options .= '<option '.$selected.' value="'.$bonPrepa->getId().'">'.$bonPrepa->getLibelle().'</option>';
  403.             $cpt++;
  404.         }
  405.         $referenceCommandeClientObligatoire $client->getReferenceClientObligatoire();
  406.         return new JsonResponse(
  407.             ['options' => $options'valide' => '0''referenceClientObligatoire' => $referenceCommandeClientObligatoire]
  408.         );
  409.     }
  410.     /**
  411.      * @Route("", name="")
  412.      */
  413.     public function pdfBonPreparationOrAction(Request $requestCommande $bonPreparation$retour trueEntityManagerInterface $emPdf $snappy)
  414.     {
  415.         $societe    $em->getRepository(Societe::class)->find(1);
  416.         $chemin_pdf 'PDF/BONSPREPA/BONPREPA-'.$bonPreparation->getReference().'.pdf';
  417.         if (file_exists($chemin_pdf)) {
  418.             unlink($chemin_pdf);
  419.         }
  420.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  421.         $header $this->renderView('FO/PDF/header_bp_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  422.         $snappy->setOption('header-html'$header);
  423.         $snappy->setOption('footer-html'$footer);
  424.         $snappy->setOption('margin-bottom'"10");
  425.         $snappy->generateFromHtml(
  426.             $this->renderView(
  427.                 'GestionComerciale/BonPreparationAtelier/template_pdf.html.twig',
  428.                 [
  429.                     'commande' => $bonPreparation,
  430.                     'societe'  => $societe,
  431.                 ]
  432.             ),
  433.             $chemin_pdf
  434.         );
  435.         if ($retour == true) {
  436.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['objet' => $bonPreparation'chemin_pdf' => '/'.$chemin_pdf]);
  437.         }
  438.     }
  439.     /**
  440.      * @Route("/bons-preparations-atelier/pdf/{id}", name="dtc_bon_preparation_atelier_pdf")
  441.      */
  442.     public function pdfBonPreparationAction(Request $requestCommande $bonPreparation$retour trueEntityManagerInterface $emPdf $snappy)
  443.     {
  444.         $societe    $em->getRepository(Societe::class)->find(1);
  445.         $chemin_pdf 'PDF/BONSPREPA/BONPREPA-'.$bonPreparation->getReference().'.pdf';
  446.         if (file_exists($chemin_pdf)) {
  447.             unlink($chemin_pdf);
  448.         }
  449.         //return $this->render('GestionComerciale/BonPreparationAtelier/template_pdf.html.twig',array('commande'  => $bonPreparation,'societe'  => $societe));
  450.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  451.         $header $this->renderView('FO/PDF/header_bpa_pdf.html.twig', ['societe' => $societe'commande' => $bonPreparation]);
  452.         //$snappy->setOption('page-size', 'A4');
  453.         $snappy->setOption('header-html'$header);
  454.         $snappy->setOption('footer-html'$footer);
  455.         //$snappy->setOption('header-html',$footer);
  456.         $snappy->setOption('margin-bottom'"10");
  457.         //$snappy->setOption('margin-top',"5");
  458.         //$snappy->setOption('zoom', 1 );
  459.         //$snappy->setOption('dpi', 300 );
  460.         $snappy->generateFromHtml(
  461.             $this->renderView(
  462.                 'GestionComerciale/BonPreparationAtelier/template_pdf.html.twig',
  463.                 [
  464.                     'commande' => $bonPreparation,
  465.                     'societe'  => $societe,
  466.                 ]
  467.             ),
  468.             $chemin_pdf
  469.         );
  470.         if ($retour == true) {
  471.             return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  472.             //return new RedirectResponse("/".$chemin_pdf);
  473.         }
  474.     }
  475.     /**
  476.      * @Route("/vente/bons-preparations-atelier/imprimer/multiple", name="dtc_bon_preparation_atelier_pdf_multiple")
  477.      */
  478.     public function imprimerMultipleAction(Request $requestEntityManagerInterface $em)
  479.     {
  480.         $data       $request->get('dataTables');
  481.         $ids        $data['actions'];
  482.         $tableauPdf = [];
  483.         $pdfRelier  'PDF/BONSPREPA/BONPREPA-'.date('d-m-Y').'.pdf';
  484.         //$ids = array("118","101","93");
  485.         for ($i 0$i count($ids); $i++) {
  486.             $repo $em->getRepository(Commande::class);
  487.             $bon  $repo->find($ids[$i]);
  488.             if (is_object($bon)) {
  489.                 $this->pdfBonPreparationAction($bonfalse);
  490.                 $tableauPdf[] = $chemin_pdf 'PDF/BONSPREPA/BONPREPA-'.$bon->getReference().'.pdf';
  491.             }
  492.         }
  493.         $cmd "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
  494.         foreach ($tableauPdf as $file) {
  495.             $cmd .= $file." ";
  496.         }
  497.         $result shell_exec($cmd);
  498.         return new JsonResponse(['target' => '_blank''url' => '/'.$pdfRelier'valide' => '1'], 200, ['Content-Type' => 'application/json']);
  499.     }
  500.     /**
  501.      * set datatable configs
  502.      *
  503.      * @return \App\Library\Datatable\Util\Datatable
  504.      */
  505.     private function datatableCommandeFournisseur($objet$type ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  506.     {
  507.         $articlesCommande $objet->getArticleCommande();
  508.         $articles         = [];
  509.         if (count($articlesCommande) > 0) {
  510.             foreach ($articlesCommande as $articleCommande) {
  511.                 $articles[] = $articleCommande->getArticle();
  512.             }
  513.         }
  514.         $repo_article $em->getRepository(Article::class);
  515.         $commandesId $repo_article->getCommandes($articles);
  516.         $commandes   = [];
  517.         foreach ($commandesId as $commandeId) {
  518.             $commandes[] = $commandeId['id'];
  519.         }
  520.         //$commandes = array(1668, 1670);
  521.         $repo_statut_document $em->getRepository(StatutCommande::class);
  522.         $liste_statut         $repo_statut_document->findBy(["documentCommercial" => 11"ordre" => [0]]);
  523.         $type_jointure 'x.'.$type;
  524.         $datatable->setDatatableId('dta-bonpreparations')
  525.                   ->setEntity(Commande::class, "x")
  526.                   ->setFields(
  527.                       [
  528.                           $translator->trans("ID")              => 'x.id',
  529.                           $translator->trans("Date")            => 'x.date',
  530.                           $translator->trans("Réf")             => 'x.reference',
  531.                           $translator->trans("Ref client")      => 'cl.reference',
  532.                           $translator->trans("Client")          => 'cl.nom',
  533.                           $translator->trans("Équipier")        => 'u.reference',
  534.                           $translator->trans("Comm")            => 'x.commentaire',
  535.                           $translator->trans("Ref cmde cli")    => 'x.referenceClient',
  536.                           $translator->trans("A réaliser pour") => 'x.dateBon',
  537.                           $translator->trans("Actions")         => 'x.id',
  538.                           "_identifier_"                        => 'x.id',
  539.                       ]
  540.                   )
  541.             //->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  542.             /*->setWhere(
  543.                     $type_jointure.' = :objet',
  544.                     array('objet' => $objet)
  545.                )
  546.               */
  547.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  548.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  549.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  550.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  551.                   ->setWhere(
  552.                       'x.commande IN (:commandes) AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
  553.                       ['commandes' => $commandes'typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER'statutCommande' => $liste_statut]
  554.                   )
  555.                   ->setRenderers(
  556.                       [
  557.                           => [
  558.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  559.                               'params' => [
  560.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  561.                               ],
  562.                           ],
  563.                           => [
  564.                               'view'   => 'FO/DataTable/heure.html.twig',
  565.                               'params' => [],
  566.                           ],
  567.                           => [
  568.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  569.                               'params' => [
  570.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  571.                               ],
  572.                           ],
  573.                           => [
  574.                               'view'   => 'FO/DataTable/heure.html.twig',
  575.                               'params' => [],
  576.                           ],
  577.                           => [
  578.                               'view'   => 'FO/DataTable/actions.html.twig',
  579.                               'params' => [
  580.                                   'edit_route' => 'dtc_bon_preparation_atelier_modifier',
  581.                                   //'supprimer_route'  => 'dtc_bon_preparation_atelier_supprimer',
  582.                                   'pdf_route'  => 'dtc_bon_preparation_atelier_pdf',
  583.                                   'entite'     => 'bonPreparation',
  584.                                   'objet'      => Commande::class,
  585.                               ],
  586.                           ],
  587.                       ]
  588.                   )
  589.                   ->setOrder("x.date""desc")
  590.                   ->setSearch(true)//->setSearchFields(array(1,2))
  591.         ;
  592.         return $datatable;
  593.     }
  594.     /**
  595.      * @Route("/vente/bons-preparations-atelier/commande-fournisseur/grid/{id}", name="dtc_bon_preparation_atelier_commande_fournisseur_liste_grid")
  596.      */
  597.     public function gridCommandeFournisseurAction(Request $request$id ""EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  598.     {
  599.         $repo_objet $em->getRepository(CommandeFournisseur::class);
  600.         $objet      $repo_objet->find($id);
  601.         if (is_object($objet)) {
  602.             return $this->datatableCommandeFournisseur($objet""$em$datatable$translator)->execute();
  603.         }
  604.     }
  605.     /**
  606.      * @Route("/vente/bons-preparations-atelier/annuler/{objet}/{type}/{id}", name="dtc_bon_preparation_atelier_annuler")
  607.      */
  608.     public function annulerAction(Request $requestCommande $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  609.     {
  610.         $bpa         $objet;
  611.         $titre_modal $translator->trans("Demande de confirmation");
  612.         $user        $this->getUser();
  613.         $form   $this->createForm(AnnulerBPAType::class, $bpa);
  614.         $errors "";
  615.         $form->handleRequest($request);
  616.         if ($form->isSubmitted()) {
  617.             if ($form->isValid()) {
  618.                 //$em->remove($conditionAchat);
  619.                 //$em->flush();
  620.                 $repo_objet     $em->getRepository(StatutCommande::class);
  621.                 $statutCommande $repo_objet->findOneBy([
  622.                                                              'documentCommercial' => 11,
  623.                                                              'ordre'              => 0,
  624.                                                          ]);
  625.                 $bpa->setStatutCommande($statutCommande);
  626.                 $em->persist($bpa);
  627.                 $em->flush();
  628.                 $this->addFlash(
  629.                     'notice',
  630.                     $translator->trans('Bon de préparation supprimé avec succès !')
  631.                 );
  632.                 if ($type == 'or') {
  633.                     $url $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $id'tab' => 'bonpreparations']);
  634.                 }
  635.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  636.             } else {
  637.                 $errors $validator->validate($bpa);
  638.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  639.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  640.             }
  641.         }
  642.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  643.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  644.     }
  645. }