src/Controller/Articles/ConcurrenceController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\Concurrence;
  5. use App\Entity\Fournisseurs\Fournisseur;
  6. use App\Form\Articles\ConcurrenceType;
  7. use App\Form\Articles\SupprimerConcurrenceType;
  8. use App\Library\Datatable\Util\Datatable;
  9. use App\Security\Voter\EntityVoter;
  10. use App\Service\Articles\ArticleService;
  11. use App\Service\Utilisateur\ColonneTableauService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Validator\Validator\ValidatorInterface;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. class ConcurrenceController extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/concurrence-article/nouveau/{id}/{type}", name="dtc_concurrence_article_ajouter")
  24.      */
  25.     public function ajouterAction(Request $request$id$type ""EntityManagerInterface $emArticleService $articleServiceTranslatorInterface $translatorValidatorInterface $validator)
  26.     {
  27.         $titre_modal $translator->trans("Nouvelle concurrence");
  28.         $repo_objet  $em->getRepository(Article::class);
  29.         $get         $request->query->all();
  30.         $concurrence = new Concurrence();
  31.         $objet $repo_objet->find($id);
  32.         if (is_object($objet)) {
  33.             $concurrence->setArticle($objet);
  34.             //$concurrence->setLibelle($objet->getLibelle());
  35.         }
  36.         $user $this->getUser();
  37.         $concurrence->setUtilisateur($user);
  38.         $form      $this->createForm(ConcurrenceType::class, $concurrence);
  39.         $errors    "";
  40.         $form->handleRequest($request);
  41.         if ($form->isSubmitted()) {
  42.             if ($form->isValid()) {
  43.                 if ($type == 'article') {
  44.                     $repo_objet $em->getRepository(Article::class);
  45.                     $objet      $repo_objet->find($id);
  46.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $objet->getId(), 'tab' => 'concurrence']);
  47.                 }
  48.                 $em->persist($concurrence);
  49.                 $em->persist($objet);
  50.                 $em->flush();
  51.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  52.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]],
  53.                                             200,
  54.                                             ['Content-Type' => 'application/json']);
  55.                 } else {
  56.                     $this->addFlash('notice'$translator->trans('Concurrence ajoutée avec succès !'));
  57.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  58.                 }
  59.             } else {
  60.                 $errors $validator->validate($concurrence);
  61.                 $rendu  $this->renderView(
  62.                     'Articles/Concurrence/ajouter.html.twig',
  63.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'concurrence' => $concurrence]
  64.                 );
  65.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  66.             }
  67.         }
  68.         $rendu $this->renderView(
  69.             'Articles/Concurrence/ajouter.html.twig',
  70.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'concurrence' => $concurrence]
  71.         );
  72.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  73.         //return $this->render('Articles/Concurrence/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  74.     }
  75.     /**
  76.      * @Route("/concurrence-article/modifier/{objet}/{id}/{type}", name="dtc_concurrence_article_modifier")
  77.      */
  78.     public function modifierAction(Request $requestConcurrence $objet$id$typeEntityManagerInterface $emArticleService $articleServiceTranslatorInterface $translatorValidatorInterface $validator)
  79.     {
  80.         $concurrence $objet;
  81.         $titre_modal $translator->trans("Modifier la concurrence");
  82.         $get         $request->query->all();
  83.         $user        $this->getUser();
  84.         $concurrence->setUtilisateur($user);
  85.         $form      $this->createForm(ConcurrenceType::class, $concurrence);
  86.         $errors    "";
  87.         $form->handleRequest($request);
  88.         if ($form->isSubmitted()) {
  89.             $droit         $this->isGranted(EntityVoter::UPDATEConcurrence::class);
  90.             /*
  91.             if(!$droit) {
  92.                 $rendu = $this->renderView('Articles/Concurrence/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  93.                 return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  94.             }
  95.             */
  96.             if ($form->isValid()) {
  97.                 if ($type == 'article') {
  98.                     $repo_objet $em->getRepository(Article::class);
  99.                     $article    $repo_objet->find($id);
  100.                     if (is_object($article)) {
  101.                         $concurrence->setArticle($article);
  102.                     }
  103.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'concurrence']);
  104.                 }
  105.                 $em->persist($concurrence);
  106.                 $em->flush();
  107.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  108.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]],
  109.                                             200,
  110.                                             ['Content-Type' => 'application/json']);
  111.                 } else {
  112.                     $this->addFlash('notice'$translator->trans('Concurrence modifiée avec succès !'));
  113.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  114.                 }
  115.             } else {
  116.                 $errors $validator->validate($concurrence);
  117.                 $rendu  $this->renderView(
  118.                     'Articles/Concurrence/ajouter.html.twig',
  119.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'concurrence' => $concurrence]
  120.                 );
  121.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  122.             }
  123.         }
  124.         $rendu $this->renderView(
  125.             'Articles/Concurrence/ajouter.html.twig',
  126.             ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet'concurrence' => $concurrence]
  127.         );
  128.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  129.     }
  130.     /**
  131.      * @Route("/concurrence-article/supprimer/{objet}/{id}/{type}", name="dtc_concurrence_article_supprimer")
  132.      */
  133.     public function supprimerAction(Request $requestConcurrence $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  134.     {
  135.         $concurrence $objet;
  136.         $titre_modal $translator->trans("Demande de confirmation");
  137.         $get         $request->query->all();
  138.         $user        $this->getUser();
  139.         $form   $this->createForm(SupprimerConcurrenceType::class, $concurrence);
  140.         $errors "";
  141.         $form->handleRequest($request);
  142.         if ($form->isSubmitted()) {
  143.             if ($form->isValid()) {
  144.                 $em->remove($concurrence);
  145.                 $em->flush();
  146.                 $url "";
  147.                 if ($type == 'article') {
  148.                     $url $this->generateUrl('dtc_article_modifier', ['id' => $id'tab' => 'concurrence']);
  149.                 }
  150.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  151.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]],
  152.                                             200,
  153.                                             ['Content-Type' => 'application/json']);
  154.                 } else {
  155.                     $this->addFlash('notice'$translator->trans('Concurrence supprimée avec succès !'));
  156.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  157.                 }
  158.             } else {
  159.                 $errors $validator->validate($concurrence);
  160.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  161.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  162.             }
  163.         }
  164.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $objet]);
  165.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  166.     }
  167.     /**
  168.      * @Route("/concurrence-article/charger-tableau/{id}/{type}", name="dtc_concurrence_charger_tableau")
  169.      */
  170.     public function chargerTableauAction(Request $request$id "0"$type "a")
  171.     {
  172.         $rendu $this->renderView('Articles/Concurrence/charger_tableau.html.twig', ["id" => $id"type" => $type]);
  173.         return new JsonResponse(['rendu' => $rendu]);
  174.     }
  175.     /**
  176.      * @Route("/concurrence-article", name="dtc_concurrence_article_liste")
  177.      */
  178.     public function listerAction(Request $request$id "0"$type "a"EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  179.     {
  180.         $tableau_class_cellule = [];
  181.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [0], "visible" => true];
  182.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id ""targets" => [1], "visible" => true];
  183.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-right""targets" => [2], "visible" => true];
  184.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [3], "visible" => true];
  185.         $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id text-center""targets" => [4], "visible" => true];
  186.         $tableau_class_cellule[] = ["orderable" => false"searchable" => false"className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true];
  187.         /*
  188.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(0),"visible"=>true);
  189.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(1),"visible"=>true);
  190.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id","targets"=>array(2),"visible"=>true);
  191.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id ","targets"=>array(3),"visible"=>true);
  192.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-right","targets"=>array(4),"visible"=>true);
  193.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(5),"visible"=>true);
  194.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(6),"visible"=>true);
  195.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(7),"visible"=>true);
  196.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(8),"visible"=>true);
  197.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-right","targets"=>array(9),"visible"=>true);
  198.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(10),"visible"=>true);
  199.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-right","targets"=>array(11),"visible"=>true);
  200.         $tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id text-center","targets"=>array(12),"visible"=>true);
  201.         $tableau_class_cellule[]=array("orderable"=> false,"searchable"=> false,"className"=>" colonne_id text-center","targets"=>array(13),"visible"=>true);
  202.         $tableau_class_cellule[]=array("orderable"=> false,"searchable"=> false,"className"=>" colonne_id text-center","targets"=>array(14),"visible"=>true);
  203.         $tableau_class_cellule[]=array("orderable"=> false,"searchable"=> false,"className"=>" colonne_id text-center","targets"=>array(15),"visible"=>true);
  204.         */
  205.         $modal     $request->query->get('modal');
  206.         $articleId $request->query->get('id');
  207.         $qte       $request->query->get('qte');
  208.         if ($type == "article") {
  209.             $repo_objet $em->getRepository(Article::class);
  210.         }
  211.         if ($type == "fournisseur") {
  212.             $repo_objet $em->getRepository(Fournisseur::class);
  213.         }
  214.         $objet $repo_objet->find($id);
  215.         if ($articleId != '') {
  216.             $article $repo_objet->find($articleId);
  217.             if ($modal == && is_object($article)) {
  218.                 $titre_modal $translator->trans('Concurrence');
  219.                 $this->datatableArticle($article$type$datatable$translator);
  220.                 $rendu $this->renderView('Articles/Concurrence/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule"id" => $articleId"type" => $type'qte' => $qte]
  221.                 );
  222.                 //$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  223.                 return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  224.             }
  225.         }
  226.         if (is_object($objet)) {
  227.             if ($type == "article") {
  228.                 $this->datatableArticle($objet$type$datatable$translator);
  229.             } elseif ($type == "fournisseur") {
  230.                 $tableau_class_cellule   = [];
  231.                 $tableau_class_cellule[] = ["searchable" => false"className" => "visible_export colonne_id""targets" => [0], "visible" => true];
  232.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [1], "visible" => true];
  233.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id""targets" => [2], "visible" => true];
  234.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [3], "visible" => true];
  235.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [4], "visible" => true];
  236.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [5], "visible" => true];
  237.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [6], "visible" => true];
  238.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-right""targets" => [7], "visible" => true];
  239.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [8], "visible" => true];
  240.                 $tableau_class_cellule[] = ["searchable" => true"className" => "visible_export colonne_id text-center""targets" => [9], "visible" => true];
  241.                 $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id visible_export text-right""targets" => [10], "visible" => true];
  242.                 $this->datatableFournisseur($objet$type$datatable$translator);
  243.             }
  244.             return $this->render('Articles/Concurrence/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type]);
  245.         } else {
  246.             $this->datatable($datatable$translator);
  247.             return $this->render('Articles/Concurrence/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type]);
  248.         }
  249.     }
  250.     /**
  251.      * set datatable configs
  252.      *
  253.      * @return \App\Library\Datatable\Util\Datatable
  254.      */
  255.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  256.     {
  257.         $datatable->setDatatableId('dta-concurrence')
  258.                   ->setEntity(Concurrence::class, "x")
  259.                   ->setFields(
  260.                       [
  261.                           $translator->trans("ID")      => 'x.id',
  262.                           //$translator->trans("Libelle") =>  'x.libelle',
  263.                           $translator->trans("Actions") => 'x.id',
  264.                           "_identifier_"                => 'x.id',
  265.                       ]
  266.                   )
  267.             //->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  268.             /*->setWhere(
  269.                     $type_jointure.' = :objet',
  270.                     array('objet' => $objet)
  271.                )
  272.               */
  273.                   ->setRenderers(
  274.                 [
  275.                     => [
  276.                         'view'   => 'FO/DataTable/actions.html.twig',
  277.                         'params' => [
  278.                             //'edit_route'  => 'dtc_garantie_modifier',
  279.                             //'supprimer_route'  => 'dtc_garantie_supprimer',
  280.                             'entite' => 'garantie',
  281.                             'objet'  => Concurrence::class,
  282.                         ],
  283.                     ],
  284.                 ]
  285.             )
  286.                   ->setOrder("x.id""desc")
  287.                   ->setSearch(true)
  288.                   ->setSearchFields([14]);
  289.         return $datatable;
  290.     }
  291.     /**
  292.      * set datatable configs
  293.      *
  294.      * @return \App\Library\Datatable\Util\Datatable
  295.      */
  296.     private function datatableFournisseur($objet$type ""Datatable $datatableTranslatorInterface $translator)
  297.     {
  298.         $type_jointure 'x.'.$type;
  299.         $datatable->setDatatableId('dta-concurrence-fournisseur')
  300.                   ->setEntity(Concurrence::class, "x")
  301.                   ->setFields(
  302.                       [
  303.                           //$translator->trans("ID") =>  'x.id',
  304.                           $translator->trans("Réf")           => 'a.reference',
  305.                           $translator->trans("Réf fourn")     => 'x.referenceFournisseur',
  306.                           $translator->trans("Libellé")       => 'a.libelle',
  307.                           $translator->trans("Qté mini cond") => 'x.quantite',
  308.                           $translator->trans("Qté mini art") => 'a.seuilMiniCommandeFournisseur',
  309.                           $translator->trans("Qté maxi art") => 'a.seuilMaxiCommandeFournisseur',
  310.                           $translator->trans("Conditionnement")  => 'x.conditionnement',
  311.                           $translator->trans("Prix achat brut")  => 'x.prixAchatBrut',
  312.                           $translator->trans("Tx remise")        => 'x.tauxRemise',
  313.                           $translator->trans("Tx remise suppl.") => 'x.tauxRemiseSupplementaire',
  314.                           $translator->trans("Prix achat net")   => 'x.prixAchatNet',
  315.                           //$translator->trans("Fournisseur") =>  'f.libelle',
  316.                           //$translator->trans("Devise") =>  "d.name",
  317.                           $translator->trans("Défaut")           => 'x.defaut',
  318.                           $translator->trans("Actions")          => 'x.id',
  319.                           "_identifier_"                         => 'x.id',
  320.                       ]
  321.                   )
  322.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  323.                   ->addJoin('x.fournisseur''f'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  324.                   ->addJoin('f.devise''d'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  325.                   ->setWhere(
  326.                       'x.fournisseur = :objet',
  327.                       ['objet' => $objet]
  328.                   )
  329.                   ->setRenderers(
  330.                       [
  331.                           /*
  332.                           1 => array(
  333.                               'view' => 'FO/DataTable/actions_modal.html.twig',
  334.                               'params' => array(
  335.                                       'edit_route'  => 'dtc_article_modifier',
  336.                                       'id'    => '',
  337.                                       'type'    => $type,
  338.                                       //'entite'    => 'article',
  339.                                       //'objet' => "DTCArticlesBundle:Article",
  340.                                       'typeDocument' => 'article'
  341.                                   ),
  342.                           ),
  343.                            *
  344.                            */
  345.                           => [
  346.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  347.                               'params' => [
  348.                                   'edit_route' => 'dtc_condition_achat_modifier',
  349.                                   'id'         => $objet->getId(),
  350.                                   'type'       => $type,
  351.                                   'entite'     => 'garantie',
  352.                                   'objet'      => Concurrence::class,
  353.                                   'affichage'  => 'item',
  354.                               ],
  355.                           ],
  356.                           7  => [
  357.                               'view' => 'FO/DataTable/prix.html.twig',
  358.                           ],
  359.                           10 => [
  360.                               'view' => 'FO/DataTable/prix.html.twig',
  361.                           ],
  362.                           11 => [
  363.                               'view' => 'FO/DataTable/booleen.html.twig',
  364.                           ],
  365.                           12 => [
  366.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  367.                               'params' => [
  368.                                   'edit_route'      => 'dtc_condition_achat_modifier',
  369.                                   'supprimer_route' => 'dtc_condition_achat_supprimer',
  370.                                   'id'              => $objet->getId(),
  371.                                   'type'            => $type,
  372.                                   'table'           => "dta-concurrence",
  373.                                   'entite'          => 'garantie',
  374.                                   'objet'           => Concurrence::class
  375.                               ,
  376.                                   'width_modal'     => 800,
  377.                               ],
  378.                           ],
  379.                       ]
  380.                   )
  381.                   ->setOrder("x.id""desc")
  382.                   ->setSearch(true)
  383.                   ->setSearchFields([123678910]);
  384.         return $datatable;
  385.     }
  386.     /**
  387.      * set datatable configs
  388.      *
  389.      * @return \App\Library\Datatable\Util\Datatable
  390.      */
  391.     private function datatableArticle($objet$type ""Datatable $datatableTranslatorInterface $translator)
  392.     {
  393.         $type_jointure 'x.'.$type;
  394.         $datatable->setDatatableId('dta-concurrence')
  395.                   ->setEntity(Concurrence::class, "x")
  396.                   ->setFields(
  397.                       [
  398.                           //$translator->trans("ID") =>  'x.id',
  399.                           $translator->trans("Date")       => 'x.date',
  400.                           $translator->trans("Concurrent") => 'x.concurrent',
  401.                           $translator->trans("Prix")       => 'x.prix',
  402.                           $translator->trans("Devise")     => 'd.name',
  403.                           $translator->trans("Équiper")    => 'u.reference',
  404.                           $translator->trans("Actions") => 'x.id',
  405.                           "_identifier_"                => 'x.id',
  406.                       ]
  407.                   )
  408.                   ->addJoin('x.devise''d'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  409.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  410.             //    ->addJoin('f.devise', 'd', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  411.             //    ->addJoin('x.uniteMesure', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  412.             /*->setWhere(
  413.                     $type_jointure.' = :objet',
  414.                     array('objet' => $objet)
  415.                )
  416.               */
  417.                   ->setWhere(
  418.                 'x.article = :objet',
  419.                 ['objet' => $objet]
  420.             )
  421.                   ->setRenderers(
  422.                       [
  423.                           => [
  424.                               'view' => 'FO/DataTable/date.html.twig',
  425.                           ],
  426.                           => [
  427.                               'view'   => 'FO/DataTable/prix.html.twig',
  428.                               'params' => [
  429.                                   'afficher_total' => false,
  430.                               ],
  431.                           ],
  432.                           => [
  433.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  434.                               'params' => [
  435.                                   'edit_route'   => 'dtc_utilisateur_modifier',
  436.                                   'typeDocument' => 'equipier',
  437.                               ],
  438.                           ],
  439.                           => [
  440.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  441.                               'params' => [
  442.                                   'edit_route'      => 'dtc_concurrence_article_modifier',
  443.                                   'supprimer_route' => 'dtc_concurrence_article_supprimer',
  444.                                   'id'              => $objet->getId(),
  445.                                   'type'            => $type,
  446.                                   'table'           => "dta-concurrence",
  447.                                   'entite'          => 'garantie',
  448.                                   'objet'           => Concurrence::class,
  449.                                   'width_modal'     => 800,
  450.                               ],
  451.                           ],
  452.                       ]
  453.                   )
  454.                   ->setOrder("x.id""desc")
  455.                   ->setSearch(true)//->setSearchFields(array(1,2))
  456.         ;
  457.         return $datatable;
  458.     }
  459.     /**
  460.      * @Route("/concurrence-article/grid/{id}/{type}", name="dtc_concurrence_article_liste_grid")
  461.      */
  462.     public function gridAction($id ""$type "",EntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  463.     {
  464.         if ($type == "article") {
  465.             $repo_objet $em->getRepository(Article::class);
  466.         } elseif ($type == "fournisseur") {
  467.             $repo_objet $em->getRepository(Fournisseur::class);
  468.         }
  469.         $objet $repo_objet->find($id);
  470.         if (is_object($objet) and $type == "article") {
  471.             return $this->datatableArticle($objet$type$datatable$translator)->execute();
  472.         } elseif (is_object($objet) and $type == "fournisseur") {
  473.             return $this->datatableFournisseur($objet$type$datatable$translator)->execute();
  474.         } else {
  475.             return $this->datatable($datatable$translator)->execute();
  476.         }
  477.     }
  478. }