src/Controller/GestionComerciale/DevisOrController.php line 680

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\FO\Societe;
  4. use App\Entity\GestionComerciale\Activite;
  5. use App\Entity\GestionComerciale\Alerte;
  6. use App\Entity\GestionComerciale\Commande;
  7. use App\Entity\GestionComerciale\DevisOR;
  8. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  9. use App\Form\GestionComerciale\OrdreReparationType;
  10. use App\Form\GestionComerciale\SupprimerDevisType;
  11. use App\Library\Datatable\Util\Datatable;
  12. use App\Security\Voter\EntityVoter;
  13. use App\Service\GestionComerciale\CommandeService;
  14. use App\Service\Utilisateur\ColonneTableauService;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Knp\Snappy\Pdf;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Validator\Validator\ValidatorInterface;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. class DevisOrController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/ordre-reparation/devis-or/modifier/{id}", name="dtc_devis_or_modifier")
  28.      */
  29.     public function modifierAction(Request            $requestCommande $commandeCommandeService $commandeServiceTranslatorInterface $translator,
  30.                                    ValidatorInterface $validator
  31.     ) {
  32.         return $this->redirectToRoute('dtc_ordre_reparation_modifier', ["id" => $commande->getId(), "operation" => "devis"]);
  33.         $user $this->getUser();
  34.         $commande->setUtilisateur($user);
  35.         $form $this->createForm(OrdreReparationType::class, $commande);
  36.         $articles = [
  37.             'ids'    => $request->request->get('ids'),
  38.             'tva'    => $request->request->get('tva'),
  39.             'qte'    => $request->request->get('qte'),
  40.             'remise' => $request->request->get('remise'),
  41.             'force'  => $request->request->get('force'),
  42.         ];
  43.         $valeurs  = ["articles" => $articles'typeDocument' => 'devis''operation' => 'devis'];
  44.         $errors "";
  45.         $form->handleRequest($request);
  46.         if ($form->isSubmitted()) {
  47.             $droit $this->isGranted(EntityVoter::UPDATECommande::class);
  48.             if ( ! $droit) {
  49.                 return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId()]);
  50.             }
  51.             if ($form->isValid()) {
  52.                 $em->persist($commande);
  53.                 $em->flush();
  54.                 //$articles = array('ids'=>$request->request->get('ids'),'commentaire'=>$request->request->get('commentaire'),'prix'=>$request->request->get('prix'),'libelles'=>$request->request->get('libelles'),'tva'=>$request->request->get('tva'),'prix'=>$request->request->get('prix'),'qte'=>$request->request->get('qte'),'remiseSuppl'=>$request->request->get('remiseSuppl'));
  55.                 //$articles = array('ids'=>$request->request->get('ids'),'remise'=>$request->request->get('remise'),'montantRemise'=>$request->request->get('montantRemise'),'commentaire'=>$request->request->get('commentaire'),'libelles'=>$request->request->get('libelles'),'tva'=>$request->request->get('tva'),'remiseSuppl'=>$request->request->get('remiseSuppl'),'prix'=>$request->request->get('prix'),'qte'=>$request->request->get('qte'));
  56.                 $articles = [
  57.                     'ids'                    => $request->request->get('ids'),
  58.                     'remise'                 => $request->request->get('remise'),
  59.                     'remiseCalcule'          => $request->request->get('remiseCalcule'),
  60.                     'montantRemise'          => $request->request->get('montantRemise'),
  61.                     'commentaire'            => $request->request->get('commentaire'),
  62.                     'libellesSecondaires'    => $request->request->get('libellesSecondaires'),
  63.                     'libelles'               => $request->request->get('libelles'),
  64.                     'tva'                    => $request->request->get('tva'),
  65.                     'remiseSuppl'            => $request->request->get('remiseSuppl'),
  66.                     'prix'                   => $request->request->get('prix'),
  67.                     'qte'                    => $request->request->get('qte'),
  68.                     'force'                  => $request->request->get('force'),
  69.                     'commentaireSuppl'       => $request->request->get('commentaireSuppl'),
  70.                     'emplacement'            => $request->request->get('emplacement'),
  71.                     'nbEmplacement'          => $request->request->get('nbEmplacement'),
  72.                     'articlesCommandeRepris' => $request->request->get('articlesCommandeRepris'),
  73.                 ];
  74.                 $valeurs = ["articles" => $articles'typeDocument' => 'devis''operation' => 'devis'];
  75.                 if ($request->request->get('annuler') == 'annuler') {
  76.                     $commande->setVisible(false);
  77.                     $this->addFlash(
  78.                         'notice',
  79.                         $translator->trans('Devis OR supprimé avec succès!')
  80.                     );
  81.                     $em->persist($commande);
  82.                     $em->flush();
  83.                     return $this->redirectToRoute('dtc_devis_or_liste');
  84.                 }
  85.                 if ($request->request->get('commander') != '') {
  86.                     $idCommande $commandeService->transformerCommandeEnDevis($commande$valeurs);
  87.                     $this->addFlash(
  88.                         'notice',
  89.                         $translator->trans('Commande créée avec succès!')
  90.                     );
  91.                     return $this->redirectToRoute('dtc_commande_modifier', ["id" => $idCommande]);
  92.                 } else {
  93.                     $commandeService->sauvegarder($commande$valeurs);
  94.                     $this->addFlash(
  95.                         'notice',
  96.                         $translator->trans('Devis sauvegardé avec succès!')
  97.                     );
  98.                     return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId()]);
  99.                 }
  100.             } else {
  101.                 $errors $validator->validate($commande);
  102.                 //\Doctrine\Common\Util\Debug::dump($errors);
  103.             }
  104.         }
  105.         return $this->render('GestionComerciale/OrdreRep/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'commande' => $commande]);
  106.     }
  107.     /**
  108.      * @Route("", name="")
  109.      */
  110.     public function alerteAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  111.     {
  112.         $user          $this->getUser();
  113.         $currentRoute  dirname($_SERVER['SERVER_PROTOCOL'])."://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  114.         $repo_activite $em->getRepository(Activite::class);
  115.         $acti          $repo_activite->findOneBy([
  116.                                                        'url' => $currentRoute,
  117.                                                    ]);
  118.         $repo_alerte   $em->getRepository(Alerte::class);
  119.         $aler          $repo_alerte->findOneBy([
  120.                                                      'url' => $currentRoute,
  121.                                                  ]);
  122.         if (is_object($aler)) {
  123.             $lu $aler->getLu();
  124.         } else {
  125.             $lu true;
  126.         }
  127.         if (is_object($acti)) {
  128.             $timestampactivite $acti->getTimestamp();
  129.             $timestampactuelle = new \DateTime();
  130.             $time              $timestampactuelle->diff($timestampactivite);
  131.             if ($time->format('%s') >= && $acti->getUtilisateur() == $user) {
  132.                 $acti->setTimestamp(new \DateTime());
  133.                 $em->persist($acti);
  134.                 $em->flush();
  135.                 if ($lu == false) {
  136.                     $aler->setLu(true);
  137.                     $em->persist($aler);
  138.                     $em->flush();
  139.                     $lock 3;
  140.                     return new JsonResponse(['valide' => '0''url' => $currentRoute'lu' => $lu'lock' => $lock]);
  141.                 } else {
  142.                     $lock 3;
  143.                     return new JsonResponse(['valide' => '0''url' => $currentRoute'lu' => $lu'lock' => $lock]);
  144.                 }
  145.             }
  146.             if ($time->format('%s') >= && $acti->getUtilisateur() != $user) {
  147.                 $acti->setTimestamp(new \DateTime());
  148.                 $acti->setUtilisateur($user);
  149.                 $em->persist($acti);
  150.                 $em->flush();
  151.                 if (is_object($aler)) {
  152.                     if ($aler->getEmetteur() == $user) {
  153.                         $em->remove($aler);
  154.                         $em->flush();
  155.                         $lock 2;
  156.                         return new JsonResponse(['valide' => '0''url' => $currentRoute'lock' => $lock'titre' => 'Un utilisateur est dejà sur cette page ']);
  157.                     } else {
  158.                         $lock 3;
  159.                         return new JsonResponse(['valide' => '0''url' => $currentRoute'lu' => $lu'lock' => $lock]);
  160.                     }
  161.                 } else {
  162.                     $lock 3;
  163.                     return new JsonResponse(['valide' => '0''url' => $currentRoute'lu' => $lu'lock' => $lock]);
  164.                 }
  165.             } else {
  166.                 if ($acti->getUtilisateur() != $user) {
  167.                     if (is_object($aler)) {
  168.                         $aler->setTimestamp(new \DateTime());
  169.                         $aler->setEmetteur($user);
  170.                         $aler->setRecepteur($acti->getUtilisateur());
  171.                         $aler->setURL($currentRoute);
  172.                         $em->persist($aler);
  173.                         $em->flush();
  174.                         $lock 1;
  175.                         return new JsonResponse(['valide' => '0''url' => $currentRoute'lock' => $lock]);
  176.                     } else {
  177.                         $aler = new Alerte;
  178.                         $aler->setEmetteur($user);
  179.                         $aler->setRecepteur($acti->getUtilisateur());
  180.                         $aler->setLu(false);
  181.                         $aler->setURL($currentRoute);
  182.                         $em->persist($aler);
  183.                         $em->flush();
  184.                         $lock 1;
  185.                         return new JsonResponse(['valide' => '0''url' => $currentRoute'lock' => $lock]);
  186.                     }
  187.                 } else {
  188.                     $lock 3;
  189.                     return new JsonResponse(['valide' => '0''url' => $currentRoute'lock' => $lock]);
  190.                 }
  191.             }
  192.         } else {
  193.             $acti = new Activite;
  194.             $acti->setUtilisateur($user);
  195.             $acti->setURL($currentRoute);
  196.             $em->persist($acti);
  197.             $em->flush();
  198.             $lock 3;
  199.             return new JsonResponse(['valide' => '0''url' => $currentRoute'lu' => $lu'lock' => $lock]);
  200.         }
  201.     }
  202.     /**
  203.      * @Route("/ordre-reparation/devis-or/supprimer/multiple", name="dtc_devis_or_liste_supprimer")
  204.      */
  205.     public function supprimerMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  206.     {
  207.         $url $this->generateUrl('dtc_devis_liste', []);
  208.         return new JsonResponse(['url' => $url'valide' => '1']);
  209.         $data $request->get('dataTables');
  210.         $ids  $data['actions'];
  211.         $repo $em->getRepository(Commande::class);
  212.         for ($i 0$i count($ids); $i++) {
  213.             $v $repo->find($ids[$i]);
  214.             if (is_object($v)) {
  215.                 $em->remove($v);
  216.             }
  217.         }
  218.         $em->flush();
  219.         $this->addFlash(
  220.             'notice',
  221.             $translator->trans('Devis supprimé avec succès !')
  222.         );
  223.         $url $this->generateUrl('dtc_devis_liste', []);
  224.         return new JsonResponse(['url' => $url'valide' => '1']);
  225.     }
  226.     /**
  227.      * @Route("/ordre-reparation/devis-or/supprimer/{id}", name="dtc_devis_or_supprimer")
  228.      */
  229.     public function supprimerAction(Request $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  230.     {
  231.         $titre_modal $translator->trans("Demande de confirmation");
  232.         $user        $this->getUser();
  233.         $form   $this->createForm(SupprimerDevisType::class, $commande);
  234.         $errors "";
  235.         $form->handleRequest($request);
  236.         if ($form->isSubmitted()) {
  237.             if ($form->isValid()) {
  238.                 $em->remove($commande);
  239.                 $em->flush();
  240.                 $this->addFlash(
  241.                     'notice',
  242.                     $translator->trans('Devis supprimé avec succès !')
  243.                 );
  244.                 $url $this->generateUrl('dtc_devis_liste', []);
  245.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  246.             } else {
  247.                 $errors $validator->validate($commande);
  248.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $commande->getId(), 'type' => '']);
  249.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  250.             }
  251.         }
  252.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $commande->getId(), 'type' => '''errors' => $errors]);
  253.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  254.     }
  255.     /**
  256.      * @Route("/ordre-reparation/devis-or", name="dtc_devis_or_liste")
  257.      */
  258.     public function listerAction(Request $requestColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  259.     {
  260.         $param                   $request->query->all();
  261.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  262.         $tableau_class_cellule[] = [
  263.             "className" => "visible_export colonne_id",
  264.             "targets"   => [1],
  265.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "id"),
  266.         ];
  267.         $tableau_class_cellule[] = [
  268.             "className" => "visible_export colonne_id",
  269.             "targets"   => [2],
  270.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "reference"),
  271.         ];
  272.         $tableau_class_cellule[] = [
  273.             "className" => "visible_export colonne_id",
  274.             "targets"   => [3],
  275.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "date"),
  276.         ];
  277.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [4], "visible" => false];
  278.         $tableau_class_cellule[] = [
  279.             "className" => "visible_export colonne_id",
  280.             "targets"   => [5],
  281.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "refclient"),
  282.         ];
  283.         $tableau_class_cellule[] = [
  284.             "className" => "visible_export colonne_id",
  285.             "targets"   => [6],
  286.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "client"),
  287.         ];
  288.         $tableau_class_cellule[] = [
  289.             "className" => "visible_export colonne_id",
  290.             "targets"   => [7],
  291.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "rdv"),
  292.         ];
  293.         $tableau_class_cellule[] = [
  294.             "className" => "visible_export colonne_id",
  295.             "targets"   => [8],
  296.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "equipier"),
  297.         ];
  298.         $tableau_class_cellule[] = [
  299.             "className" => "visible_export colonne_id",
  300.             "targets"   => [9],
  301.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "immat"),
  302.         ];
  303.         $tableau_class_cellule[] = [
  304.             "className" => "visible_export colonne_id",
  305.             "targets"   => [10],
  306.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "marque"),
  307.         ];
  308.         $tableau_class_cellule[] = [
  309.             "className" => "visible_export colonne_id",
  310.             "targets"   => [11],
  311.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "modele"),
  312.         ];
  313.         $tableau_class_cellule[] = [
  314.             "className" => "visible_export colonne_id",
  315.             "targets"   => [12],
  316.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "km"),
  317.         ];
  318.         $tableau_class_cellule[] = [
  319.             "className" => "visible_export colonne_id",
  320.             "targets"   => [13],
  321.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "serie"),
  322.         ];
  323.         $tableau_class_cellule[] = [
  324.             "className" => "visible_export colonne_id",
  325.             "targets"   => [14],
  326.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "commentaire"),
  327.         ];
  328.         $tableau_class_cellule[] = [
  329.             "className" => "visible_export colonne_id",
  330.             "targets"   => [15],
  331.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(DevisOR::class, "refCli"),
  332.         ];
  333.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [16], "visible" => true];
  334.         $this->datatable($request$datatable$translator);
  335.         return $this->render('GestionComerciale/DevisOr/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule'parametres' => $param]);
  336.     }
  337.     /**
  338.      * set datatable configs
  339.      *
  340.      * @return \App\Library\Datatable\Util\Datatable
  341.      */
  342.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  343.     {
  344.         $param $request->query->all();
  345.         $datatable->setEntity(Commande::class, "x")
  346.                   ->setFields(
  347.                       [
  348.                           $translator->trans("ID")           => 'x.id',
  349.                           $translator->trans("Réf")          => 'x.reference',
  350.                           $translator->trans("Date")         => 'x.date',
  351.                           $translator->trans("Statut")       => 'sc.id',
  352.                           $translator->trans("Réf client")   => 'c.reference',
  353.                           $translator->trans("Client")       => 'c.nom',
  354.                           $translator->trans("RDV ")         => 'x.dateBon',
  355.                           $translator->trans("Équipier")     => 'u.reference',
  356.                           $translator->trans("Immat")        => 'v.immatriculation',
  357.                           $translator->trans("Marque")       => 'm.libelle',
  358.                           $translator->trans("Modèle")       => 'mo.libelle',
  359.                           $translator->trans("Km")           => 'v.kilometrage',
  360.                           $translator->trans("Num serie")    => 'v.numSerie',
  361.                           $translator->trans("Comm")         => 'x.commentaire',
  362.                           $translator->trans("Réf cmde cli") => 'x.referenceClient',
  363.                           $translator->trans("Actions")      => 'x.id',
  364.                           "_identifier_"                     => 'x.id',
  365.                       ]
  366.                   )
  367.                   ->addJoin('x.vehiculesClient''v'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  368.                   ->addJoin('v.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  369.                   ->addJoin('x.statutCommande''sc'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  370.                   ->addJoin('v.modele''mo'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  371.                   ->addJoin('x.etatCommande''ec'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  372.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  373.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  374.                   ->setRenderers(
  375.                       [
  376.                           => [
  377.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  378.                               'params' => [
  379.                                   'edit_route' => 'dtc_devis_or_modifier',
  380.                               ],
  381.                           ],
  382.                           => [
  383.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  384.                               'params' => [
  385.                                   'edit_route' => 'dtc_devis_or_modifier',
  386.                               ],
  387.                           ],
  388.                           => [
  389.                               'view' => 'FO/DataTable/heure.html.twig',
  390.                           ],
  391.                           => [
  392.                               'view' => 'FO/DataTable/statut-commande-fournisseur.html.twig',
  393.                           ],
  394.                           => [
  395.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  396.                               'params' => [
  397.                                   'edit_route'   => 'dtc_client_modifier',
  398.                                   'typeDocument' => 'client',
  399.                               ],
  400.                           ],
  401.                           5  => [
  402.                               'view'   => 'FO/DataTable/client.html.twig',
  403.                               'params' => [],
  404.                           ],
  405.                           6  => [
  406.                               'view' => 'FO/DataTable/heure.html.twig',
  407.                           ],
  408.                           7  => [
  409.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  410.                               'params' => [
  411.                                   'edit_route'   => 'dtc_utilisateur_modifier',
  412.                                   'typeDocument' => 'equipier',
  413.                               ],
  414.                           ],
  415.                           9  => [
  416.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  417.                               'params' => [
  418.                                   'edit_route'   => 'dtc_vehicule_marque_modifier',
  419.                                   'typeDocument' => 'marqueVehiculeOr',
  420.                               ],
  421.                           ],
  422.                           10 => [
  423.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  424.                               'params' => [
  425.                                   'edit_route'   => 'dtc_vehicule_modele_modifier',
  426.                                   'typeDocument' => 'modeleVehiculeOr',
  427.                               ],
  428.                           ],
  429.                           13 => [
  430.                               'view' => 'FO/DataTable/commentaire.html.twig',
  431.                           ],
  432.                           15 => [
  433.                               'view'   => 'FO/DataTable/actions.html.twig',
  434.                               'params' => [
  435.                                   'edit_route' => 'dtc_devis_or_modifier',
  436.                                   //'supprimer_route'    => 'dtc_commande_supprimer',
  437.                                   'objet'      => Commande::class,
  438.                                   'deplier'    => true,
  439.                               ],
  440.                           ],
  441.                       ]
  442.                   )->setMultiple(
  443.                 [
  444.                     'delete' => [
  445.                         'title' => 'Non disponible',
  446.                         'route' => 'dtc_devis_liste_supprimer',
  447.                     ],
  448.                 ]
  449.             )
  450.             //->setOrder("ec.ordre", "desc")
  451.                   ->setOrder("x.date""desc")
  452.                   ->setSearch(true)
  453.                   ->setSearchFields([1345910]);
  454.         $where      'x.typeDocumentCommercial = :typeDocumentCommercial and x.visible= :visible';
  455.         $parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::DEVISOR'visible' => 1];
  456.         if (array_key_exists('parametres'$param)) {
  457.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  458.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  459.                 $parameters["client"] = $param["parametres"]["client"];
  460.                 if ($where != "") {
  461.                     $where .= " AND ";
  462.                 }
  463.                 $where .= "c.id = :client";
  464.             }
  465.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  466.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  467.                 $param["parametres"]["date_debut"]->setTime(000000);
  468.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  469.                 if ($where != "") {
  470.                     $where .= " AND ";
  471.                 }
  472.                 $where .= "x.date >= :date_debut";
  473.             }
  474.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  475.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  476.                 $param["parametres"]["date_fin"]->setTime(235959);
  477.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  478.                 if ($where != "") {
  479.                     $where .= " AND ";
  480.                 }
  481.                 $where .= "x.date <= :date_fin";
  482.             }
  483.         }
  484.         //echo $where;           
  485.         if ($where != '') {
  486.             //echo $where;
  487.             $datatable->setWhere($where$parameters);
  488.         }
  489.         return $datatable;
  490.     }
  491.     /**
  492.      * @Route("/ordre-reparation/devis-or/recuperer/{id}", name="dtc_devis_or_recuperer")
  493.      */
  494.     public function recupererDevisAction(Request $requestCommande $orEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  495.     {
  496.         $client $or->getClient();
  497.         if ($request->getMethod() == 'POST') {
  498.             $devis $request->request->get('devis');
  499.             $em         $em;
  500.             $repo_devis $em->getRepository(Commande::class);
  501.             if ($devis != '') {
  502.                 $devis $repo_devis->find($devis);
  503.             }
  504.             if (is_object($devis) and != 1) {
  505.                 $repo_articleCommande $em->getRepository(ArticleCommande::class);
  506.                 foreach ($devis->getArticleCommande() as $ac) {
  507.                     //echo $ac->getId().' / ';
  508.                     $articleCommandeOr $repo_articleCommande->findOneBy(['commande' => $or->getId(), 'article' => $ac->getArticle()->getId()]);
  509.                     if (is_object($articleCommandeOr)) {
  510.                         $quantite $ac->getQuantite() + $articleCommandeOr->getQuantite();
  511.                         $articleCommandeOr->setQuantite($quantite);
  512.                         $ralClient $ac->getRalClient() + $articleCommandeOr->getQuantite();
  513.                         $articleCommandeOr->setRalClient($ralClient);
  514.                         if (floatval($ac->getQuantite()) > 0) {
  515.                             $ac->getArticle()->setStockReserve(floatval($ac->getArticle()->getStockReserve()) + floatval($ac->getQuantite()));
  516.                         }
  517.                         $em->persist($ac->getArticle());
  518.                         //echo 'q:'.$quantite.' / ';
  519.                     } else {
  520.                         $articleCommandeOr = clone $ac;
  521.                         $articleCommandeOr->setCommande($or);
  522.                         $articleCommandeOr->setRalClient(floatval($ac->getQuantite()));
  523.                         if (floatval($ac->getQuantite()) > 0) {
  524.                             $ac->getArticle()->setStockReserve(floatval($ac->getArticle()->getStockReserve()) + floatval($ac->getQuantite()));
  525.                         }
  526.                     }
  527.                     $em->persist($articleCommandeOr);
  528.                 }
  529.                 $em->flush();
  530.                 $this->addFlash(
  531.                     'notice',
  532.                     $translator->trans('Devis ajouté avec succès !')
  533.                 );
  534.             }
  535.             $url $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $or->getId(), 'operation' => '']);
  536.             return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  537.         } else {
  538.             $titre_modal "Liste des devis de ".$client->getPrenom()." ".$client->getNom();
  539.             $this->datatableDevis($or$datatable$translator);
  540.             $rendu $this->renderView('GestionComerciale/DevisOr/recuperer.html.twig', ['commande' => $or]);
  541.             return new JsonResponse(['rendu' => $rendu'valide' => '1''url' => '''titre' => $titre_modal]);
  542.         }
  543.     }
  544.     /**
  545.      * @Route("/ordre-reparation/devis-or/recuperer/grid/{id}", name="dtc_client_devis_or_liste_grid")
  546.      */
  547.     public function gridDevisAction(Request $requestCommande $commandeDatatable $datatableTranslatorInterface $translator)
  548.     {
  549.         return $this->datatableDevis($commande$datatable$translator)->execute();
  550.     }
  551.     /**
  552.      * @Route("/ordre-reparation/devis-or/grid", name="dtc_devis_or_liste_grid")
  553.      */
  554.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  555.     {
  556.         return $this->datatable($request$datatable$translator)->execute();
  557.     }
  558.     /**
  559.      * set datatable configs
  560.      *
  561.      * @return \App\Library\Datatable\Util\Datatable
  562.      */
  563.     private function datatableDevis($commande ""Datatable $datatableTranslatorInterface $translator)
  564.     {
  565.         $datatable  //->setDatatableId('dta-devis')
  566.         ->setEntity(Commande::class, "x")
  567.         ->setFields(
  568.             [
  569.                 //$translator->trans("ID") =>  'x.id',
  570.                 $translator->trans("Réf")      => 'x.reference',
  571.                 //$translator->trans("Statut") =>  's.libelle',
  572.                 //$translator->trans("Type") =>  't.libelle',
  573.                 $translator->trans("Total HT") => 'x.total',
  574.                 $translator->trans("Actions")  => 'x.id',
  575.                 "_identifier_"                 => 'x.id',
  576.             ]
  577.         )
  578.         ->setWhere(
  579.             'x.client = :client and t.id IN (:typeDocumentCommercial)',
  580.             ['client' => $commande->getClient(), 'typeDocumentCommercial' => [TypeDocumentCommercial::DEVISTypeDocumentCommercial::DEVISOR]]
  581.         )
  582.         ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  583.         //->addJoin('x.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  584.         ->setRenderers(
  585.             [
  586.                 => [
  587.                     'view'   => 'FO/DataTable/lien.html.twig',
  588.                     'params' => [
  589.                         'edit_route' => 'dtc_commande_modifier',
  590.                         'objet'      => Commande::class,
  591.                     ],
  592.                 ],
  593.                 => [
  594.                     'view' => 'FO/DataTable/prix.html.twig',
  595.                 ],
  596.                 => [
  597.                     'view'   => 'FO/DataTable/action_ajouter.html.twig',
  598.                     'params' => [
  599.                         'edit_route' => 'dtc_devis_or_recuperer',
  600.                         'id'         => $commande->getId(),
  601.                     ],
  602.                 ],
  603.             ]
  604.         )
  605.         ->setOrder("x.id""desc")
  606.         ->setSearch(true)
  607.         ->setSearchFields([0]);
  608.         return $datatable;
  609.     }
  610.     /**
  611.      * @Route("/ordre-reparation/devis-or/pdf/{id}", name="dtc_devis_or_pdf")
  612.      */
  613.     public function pdfDevisAction(Request $requestCommande $commandeEntityManagerInterface $emPdf $snappy)
  614.     {
  615.         $societe    $em->getRepository(Societe::class)->find(1);
  616.         $date_Y     date("Y");
  617.         $date_M     date("m");
  618.         $date_D     date("d");
  619.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  620.         $chemin_pdf 'PDF/DEVIS/'.$date.'/DEVIS-'.$commande->getReference().'.pdf';
  621.         if (file_exists($chemin_pdf)) {
  622.             unlink($chemin_pdf);
  623.         }
  624.         //return $this->render('GestionComerciale/Facture/template_pdf.html.twig',array('commande'  => $commande,'societe'  => $societe));
  625.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  626.         $header $this->renderView('FO/PDF/header_devis_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  627.         //$snappy->setOption('page-size', 'A4');
  628.         $snappy->setOption('footer-html'$footer);
  629.         $snappy->setOption('header-html'$header);
  630.         $snappy->setOption('margin-bottom'"10");
  631.         //$snappy->setOption('margin-top',"10");
  632.         //$snappy->setOption('zoom', 1 );
  633.         //$snappy->setOption('dpi', 300 );
  634.         $reference $request->query->get('reference');
  635.         $prix      $request->query->get('prix');
  636.         $snappy->generateFromHtml(
  637.             $this->renderView(
  638.                 'GestionComerciale/DevisOr/template_pdf.html.twig',
  639.                 [
  640.                     'commande'  => $commande,
  641.                     'societe'   => $societe,
  642.                     'reference' => $reference,
  643.                     'prix'      => $prix,
  644.                 ]
  645.             ),
  646.             $chemin_pdf
  647.         );
  648.         return $this->render('FO/PDF/conteneur_pdf.html.twig', ['chemin_pdf' => '/'.$chemin_pdf]);
  649.         //return new RedirectResponse("/".$chemin_pdf);
  650.     }
  651.     /**
  652.      * @Route("/vente/devis/toggle-devis-or/{id}", name="dtc_devis_toggle_devis_or")
  653.      */
  654.     public function toggleDevisDevisOrAction(Request $requestCommande $commandeEntityManagerInterface $em)
  655.     {
  656.         if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::DEVIS) {
  657.             $idTypeDocumentCommercial 10;
  658.         }  //Devis -> Devis Or
  659.         else {
  660.             $idTypeDocumentCommercial 1;
  661.         } //Devis Or -> Devis
  662.         $typeDocumentCommercial $em->getRepository(TypeDocumentCommercial::class)->find($idTypeDocumentCommercial);//devis
  663.         $commande->setTypeDocumentCommercial($typeDocumentCommercial);
  664.         $em->persist($commande);
  665.         $em->flush();
  666.         return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId()]);
  667.     }
  668. }