src/Controller/GestionComerciale/DevisController.php line 823

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GestionComerciale;
  3. use App\Entity\Clients\Client;
  4. use App\Entity\FO\MessagePredefini;
  5. use App\Entity\FO\Societe;
  6. use App\Entity\Ged\Fichier;
  7. use App\Entity\GestionComerciale\Commande;
  8. use App\Entity\GestionComerciale\Devis;
  9. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  10. use App\Entity\Notes\Categorie;
  11. use App\Entity\Notes\Note;
  12. use App\Entity\Notes\Statut;
  13. use App\Entity\Utilisateur\Droit;
  14. use App\Form\GestionComerciale\DevisType;
  15. use App\Form\GestionComerciale\PerduDevisType;
  16. use App\Form\GestionComerciale\ReouvrirDevisType;
  17. use App\Form\GestionComerciale\SupprimerDevisType;
  18. use App\Library\Datatable\Util\Datatable;
  19. use App\Security\Voter\EntityVoter;
  20. use App\Service\GestionComerciale\CommandeService;
  21. use App\Service\Notes\NoteService;
  22. use App\Service\Utilisateur\ColonneTableauService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Knp\Snappy\Pdf;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\HttpFoundation\Request;
  27. use Symfony\Component\HttpFoundation\JsonResponse;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Component\Validator\Validator\ValidatorInterface;
  31. use Symfony\Contracts\Translation\TranslatorInterface;
  32. use Twig\Environment;
  33. class DevisController extends AbstractController
  34. {
  35.     /**
  36.      * @Route("/vente/devis/nouveau", name="dtc_devis_ajouter")
  37.      */
  38.     public function ajouterAction(Request $requestEntityManagerInterface $emCommandeService $commandeServiceTranslatorInterface $translatorValidatorInterface $validator)
  39.     {
  40.         $commande = new Commande;
  41.         $user     $this->getUser();
  42.         $commande->setUtilisateur($user);
  43.         $form   $this->createForm(DevisType::class, $commande);
  44.         $errors "";
  45.         $form->handleRequest($request);
  46.         if ($form->isSubmitted()) {
  47.             if ($form->isValid()) {
  48.                 $articles = [
  49.                     'ids'                      => $request->request->get('ids'),
  50.                     'remise'                   => $request->request->get('remise'),
  51.                     'montantRemise'            => $request->request->get('montantRemise'),
  52.                     'commentaire'              => $request->request->get('commentaire'),
  53.                     'libellesSecondaires'      => $request->request->get('libellesSecondaires'),
  54.                     'libelles'                 => $request->request->get('libelles'),
  55.                     'tva'                      => $request->request->get('tva'),
  56.                     'idsTva'                   => $request->request->get('idsTva'),
  57.                     'remiseSuppl'              => $request->request->get('remiseSuppl'),
  58.                     'ecocontribution'          => $request->request->get('ecocontribution'),
  59.                     'prix'                     => $request->request->get('prix'),
  60.                     //'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
  61.                     'qte'                      => $request->request->get('qte'),
  62.                     'force'                    => $request->request->get('force'),
  63.                     'transporteurs'            => $request->request->get('transporteurs'),
  64.                     'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
  65.                     'tabPrixAchatNetEuros'     => $request->request->get('tabPrixAchatNetEuros'),
  66.                 ];
  67.                 $valeurs  = ["articles" => $articles'typeDocument' => 'devis''operation' => 'devis'];
  68.                 $em->persist($commande);
  69.                 $em->flush();
  70.                 $this->addFlash('notice'$translator->trans('Devis ajouté avec succès !'));
  71.                 $commandeService->sauvegarder($commande$valeurs);
  72.                 $commandeService->changeDateLivraisonTheoriqueCommandeProcess($commande);
  73.                 //\Doctrine\Common\Util\Debug::dump($idsArticle);
  74.                 return $this->redirectToRoute('dtc_devis_liste');
  75.             } else {
  76.                 $errors $validator->validate($commande);
  77.             }
  78.         }
  79.         return $this->render('GestionComerciale/Devis/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
  80.     }
  81.     /**
  82.      * @Route("/vente/devis/modifier/{id}", name="dtc_devis_modifier")
  83.      */
  84.     public function modifierAction(Request     $requestCommande $commandeEntityManagerInterface $emCommandeService $commandeService,
  85.                                    NoteService $noteServiceTranslatorInterface $translatorValidatorInterface $validator
  86.     ) {
  87.         //$etatCommandeService = $this->container->get('dtc.etatcommande');
  88.         //$etatCommande = $etatCommandeService->calculerEtatCommande($commande, false, true);
  89.         //echo $etatCommande->getLibelle();
  90.         $user $this->getUser();
  91.         //$commande->setUtilisateur($user);
  92.         $forceQteDispo $request->query->get('forceQteDispo');
  93.         $form          $this->createForm(DevisType::class, $commande);
  94.         $articles      = [
  95.             'ids'    => $request->request->get('ids'),
  96.             'tva'    => $request->request->get('tva'),
  97.             'qte'    => $request->request->get('qte'),
  98.             'remise' => $request->request->get('remise'),
  99.             'force'  => $request->request->get('force'),
  100.         ];
  101.         $valeurs       = ["articles" => $articles'typeDocument' => 'devis''operation' => 'devis'];
  102.         $repoDossier $em->getRepository(Fichier::class);
  103.         $parent      $repoDossier->find(4);
  104.         if (is_object($commande->getCommande())) {
  105.             $fichier $repoDossier->findOneBy(["commande" => $commande->getCommande(), "type" => "dossier""parent" => $parent]);
  106.         } else {
  107.             $fichier $repoDossier->findOneBy(["commande" => $commande"type" => "dossier""parent" => $parent]);
  108.         }
  109.         if ( ! is_object($fichier)) {
  110.             $fichier = new Fichier();
  111.             $fichier->setUtilisateur($user);
  112.             $fichier->setType("dossier");
  113.             $fichier->setRenomme(true);
  114.             $fichier->setSupprimable(false);
  115.             $fichier->setModifiable(false);
  116.             $fichier->setCommande($commande);
  117.             $fichier->setParent($parent);
  118.             $libelle_ged trim($commande->getReference());
  119.             $fichier->setLIbelle($libelle_ged);
  120.             $em->persist($fichier);
  121.             $enfant2 = new Fichier();
  122.             $enfant2->setUtilisateur($user);
  123.             $enfant2->setType("dossier");
  124.             $enfant2->setRenomme(true);
  125.             $enfant2->setSupprimable(false);
  126.             $enfant2->setModifiable(false);
  127.             $enfant2->setCommande($commande);
  128.             $enfant2->setParent($fichier);
  129.             $enfant2->setLibelle("BAT");
  130.             $em->persist($enfant2);
  131.             $em->flush();
  132.         }
  133.         $errors "";
  134.         $form->handleRequest($request);
  135.         if ($form->isSubmitted()) {
  136.             $droit $this->isGranted(EntityVoter::UPDATECommande::class);
  137.             if ( ! $droit) {
  138.                 return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId()]);
  139.             }
  140.             if ($form->isValid()) {
  141.                 $em->persist($commande);
  142.                 $em->flush();
  143.                 $articles = [
  144.                     'ids'                      => $request->request->get('ids'),
  145.                     'remise'                   => $request->request->get('remise'),
  146.                     'remiseCalcule'            => $request->request->get('remiseCalcule'),
  147.                     'montantRemise'            => $request->request->get('montantRemise'),
  148.                     'commentaire'              => $request->request->get('commentaire'),
  149.                     'commentairePrive'         => $request->request->get('commentairePrive'),
  150.                     'libellesSecondaires'      => $request->request->get('libellesSecondaires'),
  151.                     'libelles'                 => $request->request->get('libelles'),
  152.                     'tva'                      => $request->request->get('tva'),
  153.                     'idsTva'                   => $request->request->get('idsTva'),
  154.                     'remiseSuppl'              => $request->request->get('remiseSuppl'),
  155.                     'ecocontribution'          => $request->request->get('ecocontribution'),
  156.                     'prix'                     => $request->request->get('prix'),
  157.                     //'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
  158.                     'qte'                      => $request->request->get('qte'),
  159.                     'force'                    => $request->request->get('force'),
  160.                     'commentaireSuppl'         => $request->request->get('commentaireSuppl'),
  161.                     'emplacement'              => $request->request->get('emplacement'),
  162.                     'nbEmplacement'            => $request->request->get('nbEmplacement'),
  163.                     'articlesCommandeRepris'   => $request->request->get('articlesCommandeRepris'),
  164.                     'qteDispo'                 => $request->request->get('qteDispo'),
  165.                     'transporteurs'            => $request->request->get('transporteurs'),
  166.                     'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
  167.                     'articlesCommandeIds'      => $request->request->get('articlesCommandeIds'),
  168.                     'tabPrixAchatNetEuros'     => $request->request->get('tabPrixAchatNetEuros'),
  169.                     'societe_livraison_txt'     => $request->request->get('societe_livraison_txt'),
  170.                     'numero_livraison_txt'      => $request->request->get('numero_livraison_txt'),
  171.                     'rue_livraison_txt'         => $request->request->get('rue_livraison_txt'),
  172.                     'complement_livraison_txt'  => $request->request->get('complement_livraison_txt'),
  173.                     'complement2_livraison_txt' => $request->request->get('complement2_livraison_txt'),
  174.                     'cp_livraison_txt'          => $request->request->get('cp_livraison_txt'),
  175.                     'ville_livraison_txt'       => $request->request->get('ville_livraison_txt'),
  176.                     'pays_livraison_txt'        => $request->request->get('pays_livraison_txt'),
  177.                     'societe_facturation_txt'     => $request->request->get('societe_facturation_txt'),
  178.                     'numero_facturation_txt'      => $request->request->get('numero_facturation_txt'),
  179.                     'rue_facturation_txt'         => $request->request->get('rue_facturation_txt'),
  180.                     'complement_facturation_txt'  => $request->request->get('complement_facturation_txt'),
  181.                     'complement2_facturation_txt' => $request->request->get('complement2_facturation_txt'),
  182.                     'cp_facturation_txt'          => $request->request->get('cp_facturation_txt'),
  183.                     'ville_facturation_txt'       => $request->request->get('ville_facturation_txt'),
  184.                     'pays_facturation_txt'        => $request->request->get('pays_facturation_txt'),
  185.                     'kilometrage'                 => $request->request->get('kilometrage'),
  186.                     'dateCT'                      => $request->request->get('dateCT'),
  187.                 ];
  188.                 if ($request->request->get('toggle-devis-devis-or') != '') {
  189.                     $typeDocument $request->request->get('toggle-devis-devis-or');
  190.                 } else {
  191.                     $typeDocument 'devis';
  192.                 }
  193.                 $valeurs = ["articles" => $articles'typeDocument' => $typeDocument'operation' => 'devis'];
  194.                 //print_r($valeurs);
  195.                 //exit;
  196.                 if ($request->request->get('annuler') == 'annuler') {
  197.                     $commande->setVisible(false);
  198.                     $this->addFlash('notice'$translator->trans('Devis supprimé avec succès!'));
  199.                     $em->persist($commande);
  200.                     $em->flush();
  201.                     $commandeService->creerHistorique($commande6);
  202.                     //return $this->redirectToRoute('dtc_devis_modifier',array('id'=>$commande->getId()));
  203.                     return $this->redirectToRoute('dtc_devis_liste');
  204.                 }
  205.                 if ($request->request->get('facturer') != '') {
  206.                     //on vérifie que le devis n'a pas deja une commande
  207.                     if (is_object($commande->getCommande())) {
  208.                         $commandeUrl $this->generateUrl('dtc_commande_modifier', ['id' => $commande->getCommande()->getId()]);
  209.                         $trans       $translator->trans('Vous devez facturer depuis la commande existante ! <a href="'.$commandeUrl.'">Voir ici</a>');
  210.                         //$this->addFlash('warning',$translator->trans('Vous devez facturer depuis la commande existante !'));
  211.                         $this->addFlash('warning'$trans);
  212.                         return $this->redirectToRoute('dtc_commande_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
  213.                     } else {
  214.                         $valeurs["facturer"] = "1";
  215.                         $idCommande          $commandeService->transformerCommandeEnDevis($commande$valeurs);
  216.                         $this->addFlash('notice'$translator->trans('Facture créée avec succès!'));
  217.                         return $this->redirectToRoute('dtc_facture_afficher', ["id" => $idCommande]);
  218.                     }
  219.                 } elseif ($request->request->get('commander') != '') {
  220.                     //on vérifie que le devis n'a pas deja une commande
  221.                     if (is_object($commande->getCommande())) {
  222.                         $commandeUrl $this->generateUrl('dtc_commande_modifier', ['id' => $commande->getCommande()->getId()]);
  223.                         $trans       $translator->trans('La commande existe dejà pour ce devis ! <a href="'.$commandeUrl.'">Voir ici</a>');
  224.                         //$this->addFlash('warning',$translator->trans('La Commande existe dejà pour ce devis !'));
  225.                         $this->addFlash('warning'$trans);
  226.                         return $this->redirectToRoute('dtc_commande_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
  227.                     } else {
  228.                         $idCommande $commandeService->transformerCommandeEnDevis($commande$valeurs);
  229.                         $this->addFlash('notice'$translator->trans('Commande créée avec succès!'));
  230.                         //dump($valeurs);
  231.                         return $this->redirectToRoute('dtc_commande_modifier', ["id" => $idCommande'forceQteDispo' => true]);
  232.                     }
  233.                 } else {
  234.                     $commandeService->sauvegarder($commande$valeurs);
  235.                     //$commandeService->changeDateLivraisonTheoriqueCommandeProcess($commande);
  236.                     $commandeService->changeDateExpeditionTheoriqueCommandeProcess($commande);
  237.                     $categ_relance $em->getRepository(Categorie::class)->find(9);
  238.                     $statutAfaire  $em->getRepository(Statut::class)->find(1);
  239.                     $notes      $em->getRepository(Note::class)->findBy(
  240.                         [
  241.                             'commande'  => $commande,
  242.                             'statut'    => $statutAfaire,
  243.                             'categorie' => $categ_relance,
  244.                         ]
  245.                     );
  246.                     $datatables = [];
  247.                     if (count($commande->getArticleCommande())) {
  248.                         $datatables[] = 'dta-article-devis';
  249.                     }
  250.                     if (is_object($commande->getClient()) && count($notes) == 0) {
  251.                         $noteService->creerRelance($commande);
  252.                         $datatables[] = 'dta-notes-objet';
  253.                     }
  254.                     if ($request->isXmlHttpRequest()) {
  255.                         //dump($request->request->get('declencheur'));
  256.                         if ( ! in_array($request->request->get('declencheur'), ['supprimer-row-article'])) {
  257.                             $commandeService->creerHistorique($commande$request->request->get('declencheur'));
  258.                         }
  259.                         return new JsonResponse(['data' => 1'date' => (new \Datetime)->format('d/m/Y à H:i'), 'datatables' => $datatables]);
  260.                     }
  261.                     $this->addFlash('notice'$translator->trans('Devis sauvegardé avec succès!'));
  262.                     $commandeService->creerHistorique($commande2);
  263.                     if ($request->request->get('toggle-devis-devis-or') != '') {
  264.                         return $this->redirectToRoute('dtc_ordre_reparation_modifier', ["id" => $commande->getId(), 'operation' => 'devis''forceQteDispo' => true]);
  265.                     } else {
  266.                         return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
  267.                     }
  268.                 }
  269.             } else {
  270.                 $errors $validator->validate($commande);
  271.                 //\Doctrine\Common\Util\Debug::dump($errors);
  272.             }
  273.         }
  274.         return $this->render(
  275.             'GestionComerciale/Devis/ajouter.html.twig',
  276.             ['form' => $form->createView(), 'errors' => $errors'commande' => $commande'forceQteDispo' => $forceQteDispo]
  277.         );
  278.     }
  279.     /**
  280.      * @Route("/vente/devis/supprimer/multiple", name="dtc_devis_liste_supprimer")
  281.      */
  282.     public function supprimerMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  283.     {
  284.         $url $this->generateUrl('dtc_devis_liste', []);
  285.         return new JsonResponse(['url' => $url'valide' => '1']);
  286.         $data $request->get('dataTables');
  287.         $ids  $data['actions'];
  288.         $repo $em->getRepository(Commande::class);
  289.         for ($i 0$i count($ids); $i++) {
  290.             $v $repo->find($ids[$i]);
  291.             if (is_object($v)) {
  292.                 $em->remove($v);
  293.             }
  294.         }
  295.         $em->flush();
  296.         $this->addFlash(
  297.             'notice',
  298.             $translator->trans('Devis supprimé avec succès !')
  299.         );
  300.         $url $this->generateUrl('dtc_devis_liste', []);
  301.         return new JsonResponse(['url' => $url'valide' => '1']);
  302.     }
  303.     /**
  304.      * @Route("/vente/devis/supprimer/{id}", name="dtc_devis_supprimer")
  305.      */
  306.     public function supprimerAction(Request $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  307.     {
  308.         $titre_modal $translator->trans("Demande de confirmation");
  309.         $user        $this->getUser();
  310.         $form   $this->createForm(SupprimerDevisType::class, $commande);
  311.         $errors "";
  312.         $form->handleRequest($request);
  313.         if ($form->isSubmitted()) {
  314.             if ($form->isValid()) {
  315.                 $em->remove($commande);
  316.                 $em->flush();
  317.                 $this->addFlash(
  318.                     'notice',
  319.                     $translator->trans('Devis supprimé avec succès !')
  320.                 );
  321.                 $url $this->generateUrl('dtc_devis_liste', []);
  322.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  323.             } else {
  324.                 $errors $validator->validate($commande);
  325.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $commande->getId(), 'type' => '']);
  326.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  327.             }
  328.         }
  329.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $commande->getId(), 'type' => '''errors' => $errors]);
  330.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  331.     }
  332.     /**
  333.      * @Route("/vente/devis", name="dtc_devis_liste")
  334.      */
  335.     public function listerAction(Request                $requestColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator,
  336.                                  EntityManagerInterface $em
  337.     ) {
  338.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => false"orderable" => false];
  339.         $tableau_class_cellule[] = [
  340.             "className" => "visible_export colonne_id",
  341.             "targets"   => [1],
  342.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "id"),
  343.         ];
  344.         $tableau_class_cellule[] = [
  345.             "className" => "visible_export colonne_id text-center",
  346.             "targets"   => [2],
  347.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "date"),
  348.         ];
  349.         $tableau_class_cellule[] = [
  350.             "className" => "visible_export colonne_id",
  351.             "targets"   => [3],
  352.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "reference"),
  353.         ];
  354.         $tableau_class_cellule[] = [
  355.             "className" => "visible_export colonne_id",
  356.             "targets"   => [4],
  357.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "refclient"),
  358.         ];
  359.         $tableau_class_cellule[] = [
  360.             "className" => "visible_export colonne_id",
  361.             "targets"   => [5],
  362.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "client"),
  363.         ];
  364.         $tableau_class_cellule[] = [
  365.             "className" => "visible_export colonne_id",
  366.             "targets"   => [6],
  367.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "libelleLivraison"),
  368.         ];
  369.         $tableau_class_cellule[] = [
  370.             "className" => "visible_export colonne_id w200 text-right",
  371.             "targets"   => [7],
  372.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "totalHT"),
  373.         ];
  374.         $tableau_class_cellule[] = [
  375.             "className" => "visible_export colonne_id",
  376.             "targets"   => [8],
  377.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "commercial"),
  378.         ];
  379.         $tableau_class_cellule[] = [
  380.             "className" => "visible_export colonne_id",
  381.             "targets"   => [9],
  382.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "assistanteCommerciale"),
  383.         ];
  384.         $tableau_class_cellule[] = [
  385.             "className" => "visible_export colonne_id",
  386.             "targets"   => [10],
  387.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "commentaire"),
  388.         ];
  389.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(10),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"dateBon"));
  390.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(11),"visible"=>true);
  391.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"refCli"));
  392.         $tableau_class_cellule[] = [
  393.             "className" => "visible_export colonne_id text-center",
  394.             "targets"   => [11],
  395.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateRelance"),
  396.         ];
  397.         $tableau_class_cellule[] = [
  398.             "className" => "visible_export colonne_id text-center",
  399.             "targets"   => [12],
  400.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateReceptionFournisseur"),
  401.         ];
  402.         $tableau_class_cellule[] = [
  403.             "className" => "visible_export colonne_id text-center ",
  404.             "targets"   => [13],
  405.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateLivraisonSouhaitee"),
  406.         ];
  407.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(13),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"dateLivraisonTheorique"));
  408.         $tableau_class_cellule[] = [
  409.             "className" => "visible_export colonne_id text-center",
  410.             "targets"   => [14],
  411.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateExpeditionTheorique"),
  412.         ];
  413.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(14),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"colis"));
  414.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id w60""targets" => [15], "visible" => true];
  415.         $this->datatable($request$datatable$translator);
  416.         $param             $request->query->all();
  417.         $param["en_cours"] = "on";
  418.         return $this->render('GestionComerciale/Devis/lister.html.twig', [
  419.             'parametres'          => $param,
  420.             'tableauClassColonne' => $tableau_class_cellule,
  421.         ]);
  422.     }
  423.     /**
  424.      * set datatable configs
  425.      *
  426.      * @return \App\Library\Datatable\Util\Datatable
  427.      */
  428.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  429.     {
  430.         $param $request->query->all();
  431.         $datatable->setEntity(Commande::class, "x")
  432.                   ->setFields(
  433.                       [
  434.                           $translator->trans("ID")                       => 'x.id',
  435.                           $translator->trans("Date")                     => 'x.date',
  436.                           $translator->trans("Réf")                      => 'x.reference',
  437.                           $translator->trans("Réf client")               => 'c.reference',
  438.                           $translator->trans("Client")                   => 'c.nom',
  439.                           $translator->trans("Société / Nom")            => 'x.libelleLivraison',
  440.                           //$translator->trans("Statut") =>  's.libelle',
  441.                           $translator->trans("Total HT")                 => 'x.total',
  442.                           $translator->trans("Commercial")               => 'co.reference',
  443.                           $translator->trans("Assistante commercial")    => 'ac.reference',
  444.                           $translator->trans("Comm")                     => 'x.commentaire',
  445.                           //$translator->trans("Date Prep") =>  'x.dateBon',
  446.                           $translator->trans("Date de relance")          => 'x.dateRelance',
  447.                           $translator->trans("Date de réception fourn.") => 'x.dateReceptionFournisseur',
  448.                           $translator->trans("Date liv. souhaitée")      => 'x.dateLivraisonSouhaitee',
  449.                           //$translator->trans("Date liv. théorique") =>  'x.dateLivraisonTheorique',
  450.                           $translator->trans("Date exp. théorique")      => 'x.dateExpeditionTheorique',
  451.                           //$translator->trans("Réf Cmd Cli") =>  'x.referenceClient',
  452.                           //$translator->trans("Nb colis") =>  'x.nbColis',
  453.                           $translator->trans("Actions")                  => 'x.id',
  454.                           "_identifier_"                                 => 'x.id',
  455.                       ]
  456.                   )
  457.                   ->addJoin('x.etatCommande''ec'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  458.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  459.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  460.                   //->addJoin('x.typeDocumentCommercial', 'td', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  461.                   ->addJoin('x.assistanteCommercial''ac'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  462.                   ->addJoin('x.commercial''co'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  463.                   ->setRenderers(
  464.                       [
  465.                           => [
  466.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  467.                               'params' => [
  468.                                   'edit_route' => 'dtc_devis_modifier',
  469.                               ],
  470.                           ],
  471.                           => [
  472.                               'view' => 'FO/DataTable/heure.html.twig',
  473.                           ],
  474.                           => [
  475.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  476.                               'params' => [
  477.                                   'edit_route' => 'dtc_devis_modifier',
  478.                               ],
  479.                           ],
  480.                           => [
  481.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  482.                               'params' => [
  483.                                   'edit_route'   => 'dtc_client_modifier',
  484.                                   'typeDocument' => 'client',
  485.                               ],
  486.                           ],
  487.                           4  => [
  488.                               'view'   => 'FO/DataTable/client.html.twig',
  489.                               'params' => [],
  490.                           ],
  491.                           /*3 => array(
  492.                           'view' => 'FO/DataTable/etat_commande.html.twig',
  493.                            'params' => array(
  494.                                   ),
  495.                           ),
  496.                           */
  497.                           6  => [
  498.                               'view'   => 'FO/DataTable/prix.html.twig',
  499.                               'params' => ['avecPort' => 1],
  500.                           ],
  501.                           7  => [
  502.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  503.                               'params' => [
  504.                                   'edit_route'   => 'dtc_utilisateur_modifier',
  505.                                   'typeDocument' => 'equipier',
  506.                               ],
  507.                           ],
  508.                           8  => [
  509.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  510.                               'params' => [
  511.                                   'edit_route'   => 'dtc_utilisateur_modifier',
  512.                                   'typeDocument' => 'equipier',
  513.                               ],
  514.                           ],
  515.                           /*
  516.                           7 => array(
  517.                               'view' => 'FO/DataTable/prenom_nom.html.twig'
  518.                           ),
  519.                           */
  520.                           10 => [
  521.                               'view' => 'FO/DataTable/heure.html.twig',
  522.                           ],
  523.                           11 => [
  524.                               'view' => 'FO/DataTable/date.html.twig',
  525.                           ],
  526.                           12 => [
  527.                               'view' => 'FO/DataTable/date.html.twig',
  528.                           ],
  529.                           13 => [
  530.                               'view' => 'FO/DataTable/date.html.twig',
  531.                           ],
  532.                           14 => [
  533.                               'view'   => 'FO/DataTable/actions.html.twig',
  534.                               'params' => [
  535.                                   'edit_route' => 'dtc_devis_modifier',
  536.                                   //'supprimer_route'    => 'dtc_devis_supprimer',
  537.                                   'pdf_route'  => 'dtc_devis_pdf',
  538.                                   'objet'      => Commande::class,
  539.                                   'deplier'    => true,
  540.                               ],
  541.                           ],
  542.                       ]
  543.                   )
  544.                   ->setMultiple(
  545.                       [
  546.                           'delete' => [
  547.                               'title' => 'Non disponible',
  548.                               'route' => 'dtc_devis_liste_supprimer',
  549.                           ],
  550.                       ]
  551.                   )
  552.             //->setOrder("ec.ordre", "desc")
  553.                   ->setOrder("x.date""desc")
  554.                   ->setSearch(true)
  555.                   ->setSearchFields([234569]);
  556.         //$datatable->setSearchFields(array(0,2));
  557.         //$where = "x.typeDocumentCommercial = :typeDocumentCommercial AND x.dateSuppression IS NULL AND x.commande IS NULL and x.visible= :visible";
  558.         $where      "x.typeDocumentCommercial = :typeDocumentCommercial AND x.dateSuppression IS NULL and x.visible= :visible";
  559.         $parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS'visible' => 1];
  560.         $where_statut "";
  561.         if (array_key_exists('parametres'$param)) {
  562.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  563.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  564.                 $parameters["client"] = $param["parametres"]["client"];
  565.                 if ($where != "") {
  566.                     $where .= " AND ";
  567.                 }
  568.                 $where .= "c.id = :client";
  569.             }
  570.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  571.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  572.                 $param["parametres"]["date_debut"]->setTime(000000);
  573.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  574.                 if ($where != "") {
  575.                     $where .= " AND ";
  576.                 }
  577.                 $where .= "x.date >= :date_debut";
  578.             }
  579.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  580.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  581.                 $param["parametres"]["date_fin"]->setTime(235959);
  582.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  583.                 if ($where != "") {
  584.                     $where .= " AND ";
  585.                 }
  586.                 $where .= "x.date <= :date_fin";
  587.             }
  588.             if (array_key_exists('en_cours'$param["parametres"]) and $param["parametres"]["en_cours"] != "") {
  589.                 //$parameters["perdu"]="1";
  590.                 if ($where_statut != "") {
  591.                     $where_statut .= " OR ";
  592.                 }
  593.                 $where_statut .= "x.commande IS NULL";
  594.                 if (array_key_exists('perdu'$param["parametres"]) and $param["parametres"]["perdu"] != "") {
  595.                     $parameters["perdu"] = "1";
  596.                     if ($where_statut != "") {
  597.                         $where_statut .= " OR ";
  598.                     }
  599.                     $where_statut .= "x.perdu = :perdu";
  600.                 } else {
  601.                     $parameters["perdu"] = "0";
  602.                     if ($where_statut != "") {
  603.                         $where_statut .= " AND ";
  604.                     }
  605.                     $where_statut .= "(x.perdu = :perdu OR x.perdu IS NULL)";
  606.                 }
  607.                 if (array_key_exists('gagne'$param["parametres"]) and $param["parametres"]["gagne"] != "") {
  608.                     if ($where_statut != "") {
  609.                         $where_statut .= " OR ";
  610.                     }
  611.                     $where_statut .= "x.commande IS NOT NULL";
  612.                 } else {
  613.                     if ($where_statut != "") {
  614.                         $where_statut .= " AND ";
  615.                     }
  616.                     $where_statut .= "x.commande IS NULL";
  617.                 }
  618.             } elseif (array_key_exists('perdu'$param["parametres"]) and $param["parametres"]["perdu"] != "") {
  619.                 $parameters["perdu"] = "1";
  620.                 if ($where_statut != "") {
  621.                     $where_statut .= " OR ";
  622.                 }
  623.                 $where_statut .= "x.perdu = :perdu";
  624.                 if (array_key_exists('gagne'$param["parametres"]) and $param["parametres"]["gagne"] != "") {
  625.                     if ($where_statut != "") {
  626.                         $where_statut .= " OR ";
  627.                     }
  628.                     $where_statut .= "x.commande IS NOT NULL";
  629.                 } else {
  630.                     if ($where_statut != "") {
  631.                         $where_statut .= " AND ";
  632.                     }
  633.                     $where_statut .= "x.commande IS NULL";
  634.                 }
  635.             } elseif (array_key_exists('gagne'$param["parametres"]) and $param["parametres"]["gagne"] != "") {
  636.                 if ($where_statut != "") {
  637.                     $where_statut .= " OR ";
  638.                 }
  639.                 $where_statut .= "x.commande IS NOT NULL";
  640.                 $parameters["perdu"] = "0";
  641.                 if ($where_statut != "") {
  642.                     $where_statut .= " AND ";
  643.                 }
  644.                 $where_statut .= "(x.perdu = :perdu OR x.perdu IS NULL)";
  645.             }
  646.             if ($where_statut != "") {
  647.                 if ($where != "") {
  648.                     $where .= " AND ";
  649.                 }
  650.                 $where .= '('.$where_statut.')';
  651.             }
  652.         }
  653.         //echo $where;
  654.         //exit;
  655.         if ($where != '') {
  656.             $datatable->setWhere($where$parameters);
  657.         }
  658.         return $datatable;
  659.     }
  660.     /**
  661.      * @Route("/devis/recuperer/{id}", name="dtc_devis_recuperer")
  662.      */
  663.     public function recupererDevisAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  664.     {
  665.         $titre_modal "Liste des devis de ".$client->getPrenom()." ".$client->getNom();
  666.         $this->datatableDevis($client$datatable$translator);
  667.         $rendu $this->renderView('GestionComerciale/Devis/recuperer.html.twig', ['client' => $client]);
  668.         return new JsonResponse(['rendu' => $rendu'valide' => '1''url' => '''titre' => $titre_modal]);
  669.     }
  670.     /**
  671.      * @Route("/devis/recuperer/grid/{id}", name="dtc_client_devis_liste_grid")
  672.      */
  673.     public function gridDevisAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  674.     {
  675.         return $this->datatableDevis($client$datatable$translator)->execute();
  676.     }
  677.     /**
  678.      * @Route("/vente/devis/grid", name="dtc_devis_liste_grid")
  679.      */
  680.     public function gridAction(Request            $requestDatatable $datatableTranslatorInterface $translatorEntityManagerInterface $em,
  681.                                ValidatorInterface $validator
  682.     ) {
  683.         return $this->datatable($request$datatable$translator)->execute();
  684.     }
  685.     /**
  686.      * set datatable configs
  687.      *
  688.      * @return \App\Library\Datatable\Util\Datatable
  689.      */
  690.     private function datatableDevis($client ""Datatable $datatableTranslatorInterface $translator)
  691.     {
  692.         $datatable->setDatatableId('dta-devis')
  693.                   ->setEntity(Commande::class, "x")
  694.                   ->setFields(
  695.                       [
  696.                           $translator->trans("ID")        => 'x.id',
  697.                           $translator->trans("Réference") => 'x.reference',
  698.                           $translator->trans("Statut")    => 's.libelle',
  699.                           $translator->trans("Type")      => 't.libelle',
  700.                           $translator->trans("Total HT")  => 'x.total',
  701.                           $translator->trans("Actions")   => 'x.id',
  702.                           "_identifier_"                  => 'x.id',
  703.                       ]
  704.                   )
  705.                   ->setWhere(
  706.                       'x.client = :client',
  707.                       ['client' => $client]
  708.                   )
  709.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  710.                   //->addJoin('x.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  711.                   ->setRenderers(
  712.                       [
  713.                           => [
  714.                               'view'   => 'FO/DataTable/lien.html.twig',
  715.                               'params' => [
  716.                                   'edit_route' => 'dtc_commande_modifier',
  717.                                   'objet'      => Commande::class,
  718.                               ],
  719.                           ],
  720.                           => [
  721.                               'view' => 'FO/DataTable/prix.html.twig',
  722.                           ],
  723.                           => [
  724.                               'view'   => 'FO/DataTable/actions.html.twig',
  725.                               'params' => [
  726.                                   'edit_route' => 'dtc_commande_modifier',
  727.                                   'objet'      => Commande::class,
  728.                               ],
  729.                           ],
  730.                       ]
  731.                   )
  732.                   ->setOrder("x.id""desc")
  733.                   ->setSearch(true)
  734.                   ->setSearchFields([1234]);
  735.         return $datatable;
  736.     }
  737.     /**
  738.      * @Route("/devis/pdf/{id}", name="dtc_devis_pdf")
  739.      */
  740.     public function pdfDevisAction(Request $requestCommande $commandeEntityManagerInterface $entityManagerEnvironment $environmentPdf $pdf)
  741.     {
  742.         $societe    $entityManager->getRepository(Societe::class)->find(1);
  743.         $date_Y     date("Y");
  744.         $date_M     date("m");
  745.         $date_D     date("d");
  746.         $date       $date_Y.'/'.$date_M.'/'.$date_D;
  747.         $chemin_pdf 'PDF/DEVIS/'.$date.'/DEVIS-'.$commande->getReference().'.pdf';
  748.         if (file_exists($chemin_pdf)) {
  749.             unlink($chemin_pdf);
  750.         }
  751.         //return $this->render('GestionComerciale/Facture/template_pdf.html.twig',array('commande'  => $commande,'societe'  => $societe));
  752.         $footer $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
  753.         $footer $environment->render('FO/PDF/footer_devis_pagination_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  754.         $header $this->renderView('FO/PDF/header_devis_pdf.html.twig', ['societe' => $societe'commande' => $commande]);
  755.         //$snappy->setOption('page-size', 'A4');
  756.         $pdf->setOption('footer-html'$footer);
  757.         //$pdf->setOption('header-html', $header);
  758.         $pdf->setOption('header-spacing'"4");
  759.         $pdf->setOption('footer-spacing'"3");
  760.         $pdf->setOption('disable-smart-shrinking'true);
  761.         //$snappy->setOption('print-media-type', false );
  762.         $pdf->setOption('margin-left'0);
  763.         $pdf->setOption('margin-right'0);
  764.         $pdf->setOption('page-height'"297");
  765.         $pdf->setOption('page-width'"210");
  766.         $reference     $request->query->get('reference');
  767.         $mode          $request->query->get('mode');
  768.         $forceQteDispo $request->query->get('forceQteDispo');
  769.         $pdf->generateFromHtml(
  770.             $this->renderView(
  771.                 'GestionComerciale/Devis/template_pdf.html.twig',
  772.                 [
  773.                     'commande'      => $commande,
  774.                     'societe'       => $societe,
  775.                     'reference'     => $reference,
  776.                     'mode'          => $mode,
  777.                     'forceQteDispo' => $forceQteDispo,
  778.                 ]
  779.             ),
  780.             $chemin_pdf
  781.         );
  782.         return $this->render('FO/PDF/conteneur_pdf.html.twig', [
  783.             'objet'      => $commande,
  784.             'chemin_pdf' => '/'.$chemin_pdf,
  785.             'visualiser' => $request->query->get('visualiser'),
  786.         ]);
  787.         //return new RedirectResponse("/".$chemin_pdf);
  788.     }
  789.     /**
  790.      * @Route("", name="")
  791.      */
  792.     public function toggleDevisDevisOrAction(Request $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  793.     {
  794.         if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::DEVIS) {
  795.             $idTypeDocumentCommercial 10;  //Devis -> Devis Or
  796.             $typeDocumentCommercial TypeDocumentCommercial::DEVISOR;
  797.             $message                  'Devis transformé avec succès en devis OR!';
  798.         } else {
  799.             $idTypeDocumentCommercial 1//Devis Or -> Devis
  800.             $typeDocumentCommercial TypeDocumentCommercial::DEVIS;
  801.             $message                  'Devis OR transformé avec succès en devis!';
  802.         }
  803.         //$typeDocumentCommercial = $em->getRepository(TypeDocumentCommercial::class)->find($idTypeDocumentCommercial);//devis
  804.         $commande->setTypeDocumentCommercial($typeDocumentCommercial);
  805.         $em->persist($commande);
  806.         $em->flush();
  807.         return $message;
  808.         //return $this->redirectToRoute('dtc_devis_modifier',array("id"=>$commande->getId()));
  809.     }
  810.     /**
  811.      * @Route("/vente/devis/perdu/{id}", name="dtc_devis_perdu")
  812.      */
  813.     public function perduAction(Request $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  814.     {
  815.         $titre_modal $translator->trans("Marquer le devis comme perdu");
  816.         $user        $this->getUser();
  817.         $form   $this->createForm(PerduDevisType::class, $commande);
  818.         $errors "";
  819.         $form->handleRequest($request);
  820.         $repo_message_predefini $em->getRepository(MessagePredefini::class);
  821.         $message_predefini      $repo_message_predefini->findAll();
  822.         if ($form->isSubmitted()) {
  823.             if ($form->isValid()) {
  824.                 $commande->setPerdu(true);
  825.                 $em->persist($commande);
  826.                 $em->flush();
  827.                 $this->addFlash('notice'$translator->trans('Devis marqué comme perdu avec succès !'));
  828.                 $url $this->generateUrl('dtc_devis_liste', []);
  829.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  830.             } else {
  831.                 $errors $validator->validate($commande);
  832.                 $rendu  $this->renderView(
  833.                     'GestionComerciale/Devis/perdu.html.twig',
  834.                     ['form' => $form->createView(), 'errors' => $errors'id' => $commande->getId(), 'message_predefini' => $message_predefini]
  835.                 );
  836.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  837.             }
  838.         }
  839.         $rendu $this->renderView(
  840.             'GestionComerciale/Devis/perdu.html.twig',
  841.             ['form' => $form->createView(), 'id' => $commande->getId(), 'message_predefini' => $message_predefini'errors' => $errors]
  842.         );
  843.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  844.     }
  845.     /**
  846.      * @Route("/vente/devis/reouverture/{id}", name="dtc_devis_reouverture")
  847.      */
  848.     public function reouvertureAction(Request $requestCommande $commandeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  849.     {
  850.         $titre_modal $translator->trans("Ré-ouvrir le devis");
  851.         $user        $this->getUser();
  852.         $form   $this->createForm(ReouvrirDevisType::class, $commande);
  853.         $errors "";
  854.         $form->handleRequest($request);
  855.         $repo_message_predefini $em->getRepository(MessagePredefini::class);
  856.         $message_predefini      $repo_message_predefini->findAll();
  857.         if ($form->isSubmitted()) {
  858.             if ($form->isValid()) {
  859.                 $commande->setPerdu(false);
  860.                 $commande->setCommentaireAnnulation(null);
  861.                 $em->persist($commande);
  862.                 $em->flush();
  863.                 $this->addFlash('notice'$translator->trans('Devis ré-ouvert avec succès !'));
  864.                 $url $this->generateUrl('dtc_devis_liste', []);
  865.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  866.             } else {
  867.                 $errors $validator->validate($commande);
  868.                 $rendu  $this->renderView(
  869.                     'GestionComerciale/Devis/reouvrir.html.twig',
  870.                     ['form' => $form->createView(), 'errors' => $errors'id' => $commande->getId(), 'message_predefini' => $message_predefini]
  871.                 );
  872.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  873.             }
  874.         }
  875.         $rendu $this->renderView(
  876.             'GestionComerciale/Devis/reouvrir.html.twig',
  877.             ['form' => $form->createView(), 'id' => $commande->getId(), 'message_predefini' => $message_predefini'errors' => $errors]
  878.         );
  879.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  880.     }
  881.     /**
  882.      * @Route("/vente/devis/purger", name="dtc_devis_purger")
  883.      */
  884.     public function purgerAction(Request $requestCommandeService $commandeService)
  885.     {
  886.         $commandeService->purgerDevis();
  887.         return new JsonResponse(['valide' => '1''url' => '']);
  888.     }
  889. }