src/Controller/Clients/CategorieController.php line 518

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Clients;
  3. use App\Entity\Clients\Categorie;
  4. use App\Entity\Clients\Client;
  5. use App\Entity\Clients\ClientCategorie;
  6. use App\Entity\Remises\Remise;
  7. use App\Entity\Remises\RemiseCategorieClient;
  8. use App\Form\Clients\CategorieModalType;
  9. use App\Form\Clients\CategorieType;
  10. use App\Form\Clients\SupprimerCategorieType;
  11. use App\Library\Datatable\Util\Datatable;
  12. use App\Security\Voter\EntityVoter;
  13. use App\Service\Utilisateur\ColonneTableauService;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use JMS\Serializer\SerializerBuilder;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  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 CategorieController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/client/categorie/dupliquer/{id}", name="dtc_client_categorie_dupliquer")
  28.      */
  29.     public function dupliquerAction(Request $requestCategorie $categorieEntityManagerInterface $emTranslatorInterface $translator)
  30.     {
  31.         $categorie_duplique = clone $categorie;
  32.         //$article_duplique->setId(null);
  33.         $categorie_duplique->setNom("COPIE ".$categorie_duplique->getNom());
  34.         $em->persist($categorie_duplique);
  35.         $em->flush();
  36.         $this->addFlash(
  37.             'notice',
  38.             $translator->trans('Categorie client dupliqué avec succès !')
  39.         );
  40.         return $this->redirectToRoute('dtc_client_categorie_liste');
  41.     }
  42.     /**
  43.      * @Route("/client/categorie/nouveau", name="dtc_client_categorie_ajouter")
  44.      */
  45.     public function ajouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  46.     {
  47.         $categorie = new Categorie();
  48.         $user      $this->getUser();
  49.         $categorie->setUtilisateur($user);
  50.         $form   $this->createForm(CategorieType::class, $categorie);
  51.         $errors "";
  52.         $form->handleRequest($request);
  53.         if ($form->isSubmitted()) {
  54.             if ($form->isValid()) {
  55.                 $em->persist($categorie);
  56.                 $em->flush();
  57.                 $this->addFlash(
  58.                     'notice',
  59.                     $translator->trans('Categorie ajouté avec succès !')
  60.                 );
  61.                 return $this->redirectToRoute('dtc_client_categorie_liste');
  62.             } else {
  63.                 $errors $validator->validate($categorie);
  64.             }
  65.         }
  66.         return $this->render('Clients/Categorie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
  67.     }
  68.     /**
  69.      * @Route("/client/categorie/modifier/{id}", name="dtc_client_categorie_modifier")
  70.      */
  71.     public function modifierAction(Request            $requestCategorie $categorieEntityManagerInterface $emTranslatorInterface $translator,
  72.                                    ValidatorInterface $validatorDatatable $datatable
  73.     ) {
  74.         $user $this->getUser();
  75.         $categorie->setUtilisateur($user);
  76.         $form   $this->createForm(CategorieType::class, $categorie);
  77.         $errors "";
  78.         $form->handleRequest($request);
  79.         if ($form->isSubmitted()) {
  80.             $droit $this->isGranted(EntityVoter::UPDATECategorie::class);
  81.             if ( ! $droit) {
  82.                 return $this->redirectToRoute('dtc_client_categorie_modifier', ["id" => $categorie->getId()]);
  83.             }
  84.             if ($form->isValid()) {
  85.                 $em->persist($categorie);
  86.                 $em->flush();
  87.                 $this->addFlash(
  88.                     'notice',
  89.                     $translator->trans('Categorie sauvegardé avec succès !')
  90.                 );
  91.                 return $this->redirectToRoute('dtc_client_categorie_modifier', ["id" => $categorie->getId()]);
  92.             } else {
  93.                 $errors $validator->validate($categorie);
  94.             }
  95.         }
  96.         $this->datatableClients($categorie$datatable$translator);
  97.         $this->datatableRemises($categorie$datatable$translator);
  98.         return $this->render('Clients/Categorie/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'categorie' => $categorie]);
  99.     }
  100.     /**
  101.      * @Route("/client/categorie/", name="dtc_client_categorie_liste")
  102.      */
  103.     public function listerAction(Request $requestEntityManagerInterface $emColonneTableauService $serviceColonneTableauTranslatorInterface $translatorDatatable $datatable)
  104.     {
  105.         $tableau_class_cellule[] = [
  106.             "className" => "colonne_id visible_export",
  107.             "targets"   => [0],
  108.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "id"),
  109.         ];
  110.         $tableau_class_cellule[] = [
  111.             "className" => "colonne_id visible_export",
  112.             "targets"   => [1],
  113.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "libelle"),
  114.         ];
  115.         $tableau_class_cellule[] = [
  116.             "className" => "colonne_id visible_export",
  117.             "targets"   => [2],
  118.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Categorie::class, "parent"),
  119.         ];
  120.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [3], "visible" => true];
  121.         $this->datatable($request$datatable$translator);
  122.         $categorie_enfants     = [];
  123.         $repo_categorie_client $em->getRepository(Categorie::class);
  124.         $categorie_client      $repo_categorie_client->findBy(["categorieParent" => null], ['libelle' => 'ASC']);
  125.         $param $request->query->all();
  126.         return $this->render('Clients/Categorie/lister.html.twig', [
  127.             'parametres'          => $param,
  128.             "categorie_parent"    => $categorie_client,
  129.             'tableauClassColonne' => $tableau_class_cellule,
  130.         ]);
  131.     }
  132.     /**
  133.      * set datatable configs
  134.      *
  135.      * @return \App\Library\Datatable\Util\Datatable
  136.      */
  137.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  138.     {
  139.         $param $request->query->all();
  140.         $datatable
  141.             ->setEntity(Categorie::class, "x")
  142.             ->setFields(
  143.                 [
  144.                     $translator->trans("ID")      => 'x.id',
  145.                     $translator->trans("Libellé") => 'x.libelle',
  146.                     $translator->trans("Parent")  => 'p.libelle',
  147.                     $translator->trans("Actions") => 'x.id',
  148.                     "_identifier_"                => 'x.id',
  149.                 ]
  150.             )
  151.             ->addJoin('x.categorieParent''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  152.             ->setRenderers(
  153.                 [
  154.                     => [
  155.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  156.                         'params' => [
  157.                             'edit_route' => 'dtc_client_categorie_modifier',
  158.                         ],
  159.                     ],
  160.                     /*
  161.                     1 => array(
  162.                         'view' => 'FO/DataTable/edit_texte.html.twig',
  163.                         'params' => array(
  164.                                 'objet'    => 'DTCClientsBundle:Client',
  165.                                 'champ'    => 'setLibelle',
  166.                             ),
  167.                     ),*/
  168.                     => [
  169.                         'view'   => 'FO/DataTable/actions.html.twig',
  170.                         'params' => [
  171.                             'edit_route' => 'dtc_client_categorie_modifier',
  172.                             //'dupliquer_route'    => 'dtc_client_categorie_dupliquer',
  173.                             'objet'      => Categorie::class,
  174.                         ],
  175.                     ],
  176.                 ]
  177.             )
  178.             ->setOrder("x.id""desc")
  179.             ->setSearch(true)
  180.             ->setSearchFields([12]);
  181.         //$datatable->setSearchFields(array(0,2));
  182.         $where      "";
  183.         $parameters = [];
  184.         if (array_key_exists('parametres'$param)) {
  185.             if (array_key_exists('categorie_parent'$param["parametres"]) and $param["parametres"]["categorie_parent"] > 0) {
  186.                 //echo "AZERTYUI";
  187.                 //$datatable->addJoin('x.clientCategorie', 'cc', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  188.                 //$datatable->addJoin('cc.categorie', 'catC', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  189.                 $parameters["categorie"] = $param["parametres"]["categorie_parent"];
  190.                 $where                   .= "x.categorieParent = :categorie";
  191.             }
  192.         }
  193.         if ($where != '') {
  194.             //echo $where;
  195.             $datatable->setWhere($where$parameters);
  196.         }
  197.         return $datatable;
  198.     }
  199.     /**
  200.      * Grid action
  201.      * @return Response
  202.      */
  203.     /**
  204.      * @Route("/client/categorie/grid", name="dtc_client_categorie_liste_grid")
  205.      */
  206.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  207.     {
  208.         return $this->datatable($request$datatable$translator)->execute();
  209.     }
  210.     /**
  211.      * set datatable configs
  212.      *
  213.      * @return \App\Library\Datatable\Util\Datatable
  214.      */
  215.     private function datatableClients($categorieDatatable $datatableTranslatorInterface $translator)
  216.     {
  217.         $datatable->setDatatableId('dta-clients_categorie_client')
  218.                   ->setEntity(Client::class, "x")
  219.                   ->setFields(
  220.                       [
  221.                           $translator->trans("Logo")        => 'x.logo',
  222.                           $translator->trans("Réf")         => 'x.reference',
  223.                           $translator->trans("Nom")         => 'x.nom',
  224.                           $translator->trans("Prénom")      => 'x.prenom',
  225.                           $translator->trans("Ville")       => 'v.titre',
  226.                           $translator->trans("CP")          => 'cp.codePostal',
  227.                           $translator->trans("Pays")        => 'p.titre',
  228.                           $translator->trans("Téléphone")   => 'x.telephone',
  229.                           $translator->trans("Téléphone 2") => 'x.telephone2',
  230.                           $translator->trans("Email")       => 'x.email',
  231.                           $translator->trans("TVA")         => 'x.numTva',
  232.                           $translator->trans("Actions") => 'x.id',
  233.                           "_identifier_"                => 'x.id',
  234.                       ]
  235.                   )
  236.                   ->addJoin('x.ville''v'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  237.                   ->addJoin('x.pays''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  238.                   ->addJoin('x.codePostal''cp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  239.                   ->addJoin('x.typeClient''tp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  240.                   ->addJoin('x.clientCategorie''cc'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  241.                   ->setWhere(
  242.                       'cc.categorie = :categorie',
  243.                       ['categorie' => $categorie]
  244.                   )
  245.                   ->setRenderers(
  246.                       [
  247.                           => [
  248.                               'view'   => 'FO/DataTable/logo.html.twig',
  249.                               'params' => [
  250.                                   'edit_route' => 'dtc_client_modifier',
  251.                               ],
  252.                           ],
  253.                           => [
  254.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  255.                               'params' => [
  256.                                   'edit_route' => 'dtc_client_modifier',
  257.                               ],
  258.                           ],
  259.                           2  => [
  260.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  261.                               'params' => [
  262.                                   'edit_route' => 'dtc_client_modifier',
  263.                               ],
  264.                           ],/*
  265.                                 3 => array(
  266.                                     'view' => 'FO/DataTable/edit_texte.html.twig',
  267.                                     'params' => array(
  268.                                             'objet'    => 'DTCClientsBundle:Client',
  269.                                             'champ'    => 'setPrenom',
  270.                                         ),
  271.                                 ),
  272.                                 7 => array(
  273.                                     'view' => 'FO/DataTable/edit_texte.html.twig',
  274.                                     'params' => array(
  275.                                             'objet'    => 'DTCClientsBundle:Client',
  276.                                             'champ'    => 'setTelephone',
  277.                                         ),
  278.                                 ),
  279.                                 8 => array(
  280.                                     'view' => 'FO/DataTable/edit_texte.html.twig',
  281.                                     'params' => array(
  282.                                             'objet'    => 'DTCClientsBundle:Client',
  283.                                             'champ'    => 'setTelephone2',
  284.                                         ),
  285.                                 ),*/
  286.                           11 => [
  287.                               'view'   => 'FO/DataTable/actions.html.twig',
  288.                               'params' => [
  289.                                   'edit_route' => 'dtc_client_modifier',
  290.                                   //'dupliquer_route'    => 'dtc_client_dupliquer',
  291.                                   //'supprimer_route'    => 'dtc_client_supprimer',
  292.                                   'objet'      => Client::class,
  293.                               ],
  294.                           ],
  295.                       ]
  296.                   )
  297.                   ->setOrder("x.id""desc")
  298.                   ->setSearch(true)
  299.                   ->setSearchFields([123456789]);
  300.         return $datatable;
  301.     }
  302.     /**
  303.      * Grid action
  304.      * @return Response
  305.      */
  306.     /**
  307.      * @Route("/client/categorie/clients/grid/{id}", name="dtc_client_categorie_clients_liste_grid")
  308.      */
  309.     public function gridClientsAction(Request $requestCategorie $categorieDatatable $datatableTranslatorInterface $translator)
  310.     {
  311.         return $this->datatableClients($categorie$datatable$translator)->execute();
  312.     }
  313.     /**
  314.      * set datatable configs
  315.      *
  316.      * @return \App\Library\Datatable\Util\Datatable
  317.      */
  318.     private function datatableRemises($categorieDatatable $datatableTranslatorInterface $translator)
  319.     {
  320.         $datatable
  321.             ->setDatatableId('dta-remises_categorie_client')
  322.             ->setEntity(Remise::class, "x")
  323.             ->setFields(
  324.                 [
  325.                     $translator->trans("ID")          => 'x.id',
  326.                     $translator->trans("Libellé")     => 'x.libelle',
  327.                     $translator->trans("Valeur")      => 'x.montant',
  328.                     $translator->trans("Description") => 'x.description',
  329.                     $translator->trans("Début")       => 'x.dateDebut',
  330.                     $translator->trans("Fin")         => 'x.dateFin',
  331.                     //$translator->trans("Montant Minimum") =>  'x.montantMinimumCommande',
  332.                     //$translator->trans("Quantité total") =>  'x.quantiteTotal',
  333.                     //$translator->trans("Quantité Max/Client") =>  'x.quantiteMaxPersonne',
  334.                     //$translator->trans("Quantité Restante") =>  'x.quantiteRestante',
  335.                     $translator->trans("Actif")       => 'x.statut',
  336.                     $translator->trans("Actions")     => 'x.id',
  337.                     "_identifier_"                    => 'x.id',
  338.                 ]
  339.             )
  340.             ->addJoin('x.remiseCategorieClient''rca'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  341.             ->setWhere(
  342.                 'rca.categorie = :categorie',
  343.                 ['categorie' => $categorie]
  344.             )
  345.             ->setRenderers(
  346.                 [
  347.                     => [
  348.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  349.                         'params' => [
  350.                             'edit_route' => 'dtc_remise_modifier',
  351.                         ],
  352.                     ],
  353.                     => [
  354.                         'view'   => 'FO/DataTable/commentaire.html.twig',
  355.                         'params' => [],
  356.                     ],
  357.                     => [
  358.                         'view'   => 'FO/DataTable/date.html.twig',
  359.                         'params' => [],
  360.                     ],
  361.                     => [
  362.                         'view'   => 'FO/DataTable/date.html.twig',
  363.                         'params' => [],
  364.                     ],
  365.                     => [
  366.                         'view'   => 'FO/DataTable/statut.html.twig',
  367.                         'params' => [
  368.                             'edit_route' => 'dtc_remise_changer_statut',
  369.                         ],
  370.                     ],
  371.                     => [
  372.                         'view'   => 'FO/DataTable/actions.html.twig',
  373.                         'params' => [
  374.                             'edit_route' => 'dtc_remise_modifier',
  375.                             //'dupliquer_route'    => 'dtc_remise_dupliquer',
  376.                             //'supprimer_route'    => 'dtc_remise_supprimer',
  377.                             'objet'      => Remise::class,
  378.                         ],
  379.                     ],
  380.                 ]
  381.             )
  382.             ->setOrder("x.id""desc")
  383.             ->setSearch(true)
  384.             ->setSearchFields([1]);
  385.         //$datatable->setSearchFields(array(0,2));
  386.         return $datatable;
  387.     }
  388.     /**
  389.      * Grid action
  390.      * @return Response
  391.      */
  392.     /**
  393.      * @Route("/client/categorie/remises/grid/{id}", name="dtc_client_categorie_remises_liste_grid")
  394.      */
  395.     public function gridRemisesAction(Request $requestCategorie $categorieDatatable $datatableTranslatorInterface $translator)
  396.     {
  397.         //$this->datatableRemises($categorie);
  398.         return $this->datatableRemises($categorie$datatable$translator)->execute();
  399.     }
  400.     //\Doctrine\Common\Util\Debug::dump($tabZonesLivraison);
  401.     /**
  402.      * @Route("/checkbox/client/categorie", name="dtc_client_categorie_checkbox")
  403.      */
  404.     public function listerCategorieClientCheckboxAction(Request $request$client = [], EntityManagerInterface $em)
  405.     {
  406.         $id                    '';
  407.         $repo_client           $em->getRepository(Client::class);
  408.         $repo_categorie        $em->getRepository(Categorie::class);
  409.         $repo_client_categorie $em->getRepository(ClientCategorie::class);
  410.         $id                    $request->query->get('id');
  411.         $url                   $this->generateUrl('dtc_client_categorie_checkbox', []);
  412.         if ($request->query->get('client') != '') {
  413.             $client $repo_client->find($request->query->get('client'));
  414.         }
  415.         //$categories = $repo_categorie->listeCategories();
  416.         $categories    $repo_categorie->getCategorieEnfant($id);
  417.         $tabCategories = [];
  418.         foreach ($categories as $c) {
  419.             $c['checked']            = 0;
  420.             $c['totalSousCategorie'] = count($repo_categorie->findBy(["categorieParent" => $c]));
  421.             $c['selection']          = 0;
  422.             if (is_object($client) and is_object($repo_client_categorie->findOneBy(['client' => $client'categorie' => $c]))) {
  423.                 $c['checked'] = 1;
  424.             }
  425.             $tabCategories[] = $c;
  426.         }
  427.         $categories $tabCategories;
  428.         if ($request->isXmlHttpRequest()) {
  429.             $rendu $this->renderView(
  430.                 'Clients/Categorie/checkbox.html.twig',
  431.                 ['categories' => $categories'client' => $client'url' => $url'objet' => 'client''name' => 'categories']
  432.             );
  433.             return new JsonResponse(['rendu' => $rendu]);
  434.         }
  435.         return $this->render('Clients/Categorie/checkbox.html.twig', ['categories' => $categories'client' => $client'url' => $url'objet' => 'client''name' => 'categories']);
  436.     }
  437.     /**
  438.      * @Route("", name="")
  439.      */
  440.     public function listerCategorieClientTableAction(Request $request$remise = [], EntityManagerInterface $em)
  441.     {
  442.         $id                           '';
  443.         $repo_remise                  $em->getRepository(Remise::class);
  444.         $repo_categorie               $em->getRepository(Categorie::class);
  445.         $repo_remise_client_categorie $em->getRepository(RemiseCategorieClient::class);
  446.         $id                           $request->query->get('id');
  447.         if ($request->query->get('remise') != '') {
  448.             $remise $repo_remise->find($request->query->get('remise'));
  449.         }
  450.         $categories $repo_categorie->listeCategories();
  451.         $tabCategories = [];
  452.         foreach ($categories as $c) {
  453.             $c['checked']   = 0;
  454.             $c['selection'] = 0;
  455.             if (is_object($remise) and is_object($repo_remise_client_categorie->findOneBy(['remise' => $remise'categorie' => $c]))) {
  456.                 $c['checked'] = 1;
  457.             }
  458.             $tabCategories[] = $c;
  459.         }
  460.         $categories $tabCategories;
  461.         if ($request->isXmlHttpRequest()) {
  462.             $rendu $this->renderView('Clients/Categorie/tableau.html.twig', ['categories' => $categories'remise' => $remise]);
  463.             return new JsonResponse(['rendu' => $rendu]);
  464.         }
  465.         return $this->render('Clients/Categorie/tableau.html.twig', ['categories' => $categories'remise' => $remise]);
  466.     }
  467.     /**
  468.      * @Route("", name="")
  469.      */
  470.     public function choisirCategoriePourClientAction(Request $request$client = [], EntityManagerInterface $em)
  471.     {
  472.         $id                    '';
  473.         $repo_client           $em->getRepository(Client::class);
  474.         $repo_categorie        $em->getRepository(Categorie::class);
  475.         $repo_client_categorie $em->getRepository(ClientCategorie::class);
  476.         $id                    $request->query->get('id');
  477.         $url $this->generateUrl('dtc_client_categorie_checkbox', []);
  478.         if ($request->query->get('client') != '') {
  479.             $client $repo_client->find($request->query->get('client'));
  480.         }
  481.         $id_categorie_enfants_client = [];
  482.         $premiere_categorie_client   "";
  483.         $categorie_enfants           '';
  484.         $categorie_racine            $repo_categorie->findBy(["modifiable" => 0]);
  485.         if (is_object($client)) {
  486.             $premiere_categorie       $repo_client_categorie->getCategorieRacinePourClient($client);
  487.             $categorie_enfants_client $repo_client_categorie->getCategorieEnfantsPourClient($client);
  488.             foreach ($categorie_enfants_client as $cc) {
  489.                 $id_categorie_enfants_client[] = $cc->getCategorie()->getId();
  490.             }
  491.             if ( ! is_object($premiere_categorie)) {
  492.                 $premiere_categorie $repo_client_categorie->getCategorieRacinePourClient();
  493.             }
  494.         } else {
  495.             $premiere_categorie $repo_client_categorie->getCategorieRacinePourClient();
  496.             //echo $premiere_categorie->getId();
  497.             //exit;
  498.         }
  499.         if (is_object($premiere_categorie)) {
  500.             $premiere_categorie_client $premiere_categorie->getCategorie();
  501.             $categorie_enfants         $repo_categorie->findBy(["categorieParent" => $premiere_categorie_client]);
  502.         }
  503.         return $this->render(
  504.             'Clients/Categorie/formulaire_client.html.twig',
  505.             [
  506.                 "categorie_racine"            => $categorie_racine,
  507.                 "premiere_categorie_client"   => $premiere_categorie_client,
  508.                 "categorie_enfants"           => $categorie_enfants,
  509.                 "id_categorie_enfants_client" => $id_categorie_enfants_client,
  510.             ]
  511.         );
  512.     }
  513.     /**
  514.      * @Route("/checkbox/categorie/enfants", name="dtc_client_lister_categorie_enfant")
  515.      */
  516.     public function listerCategorieClientEnfantCheckboxAction(Request $requestEntityManagerInterface $em)
  517.     {
  518.         $repo_client           $em->getRepository(Client::class);
  519.         $repo_categorie        $em->getRepository(Categorie::class);
  520.         $repo_client_categorie $em->getRepository(ClientCategorie::class);
  521.         $id                    $request->query->get('id');
  522.         $rendu             "";
  523.         $categorie_enfants = [];
  524.         $racine            $repo_categorie->find($id);
  525.         if (is_object($racine)) {
  526.             $categorie_enfants $repo_categorie->findBy(["categorieParent" => $racine]);
  527.         }
  528.         foreach ($categorie_enfants as $e) {
  529.             $rendu .= '<li>';
  530.             $rendu .= '<input type="checkbox" name="categorie_client_enfants[]" value="'.$e->getId().'" id="categorie_enfant_'.$e->getId().'">';
  531.             $rendu .= ' <label for="categorie_enfant_'.$e->getId().'">'.$e->getLibelle().'</label>';
  532.             $rendu .= '</li>';
  533.         }
  534.         return new JsonResponse(['rendu' => $rendu]);
  535.     }
  536.     /**
  537.      * @Route("/option/categorie/enfants", name="dtc_client_lister_categorie_enfant_liste")
  538.      */
  539.     public function listerCategorieClientEnfantListeAction(Request $requestEntityManagerInterface $em)
  540.     {
  541.         $repo_client           $em->getRepository(Client::class);
  542.         $repo_categorie        $em->getRepository(Categorie::class);
  543.         $repo_client_categorie $em->getRepository(ClientCategorie::class);
  544.         $id                    $request->query->get('id');
  545.         $rendu             "";
  546.         $categorie_enfants = [];
  547.         $racine            $repo_categorie->find($id);
  548.         if (is_object($racine)) {
  549.             $categorie_enfants $repo_categorie->findBy(["categorieParent" => $racine]);
  550.         }
  551.         $rendu .= '<option value="">Sélectionnez</option>';
  552.         foreach ($categorie_enfants as $e) {
  553.             $rendu .= '<option value="'.$e->getId().'">';
  554.             $rendu .= $e->getLibelle();
  555.             $rendu .= '</option>';
  556.         }
  557.         return new JsonResponse(['rendu' => $rendu]);
  558.     }
  559.     /**
  560.      * @Route("/client/categorie/recherche", name="dtc_client_categorie_recherche")
  561.      */
  562.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginator)
  563.     {
  564.         $q      $request->query->get('q');
  565.         $parent $request->query->get('par');
  566.         $repo    $em->getRepository(Categorie::class);
  567.         $results $repo->getRechercheCategorie($q$parent);
  568.         $pagination $paginator->paginate(
  569.             $results/* query NOT result */
  570.             $request->query->getInt('page'1/*page number*/,
  571.             10 /*limit per page*/
  572.         );
  573.         $pagination_results $pagination->getItems();
  574.         $option_placeholde  = ["libelle" => "Sélectionnez""id" => ""];
  575.         if ($request->query->getInt('page'1) == 1) {
  576.             array_unshift($pagination_results$option_placeholde);
  577.         }
  578.         $pagination->setItems($pagination_results);
  579.         $serializer SerializerBuilder::create()->build();
  580.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  581.     }
  582.     /**
  583.      * @Route("", name="")
  584.      */
  585.     public function listerCategorieDossierAction(Request $requestEntityManagerInterface $em$clientId '')
  586.     {
  587.         $repo_client           $em->getRepository(Client::class);
  588.         $repo_categorie        $em->getRepository(Categorie::class);
  589.         $repo_client_categorie $em->getRepository(ClientCategorie::class);
  590.         $client           $repo_client->find($clientId);
  591.         $clientCategories = [];
  592.         if (is_object($client)) {
  593.             $categoriesClient $repo_client_categorie->findBy(['client' => $clientId], ['libelle' => 'ASC']);
  594.             foreach ($categoriesClient as $categorieArticle) {
  595.                 $clientCategories[] = $categorieArticle->getCategorie()->getId();
  596.             }
  597.         }
  598.         //\Doctrine\Common\Util\Debug::dump($clientId);
  599.         $categories $repo_categorie->findBy(['modifiable' => 0], ['libelle' => 'ASC']);//CategorieParent
  600.         return $this->render('Clients/Categorie/lister-dossier.html.twig', [
  601.             'nbCategoriesEnfant' => [],
  602.             'categories'         => $categories,
  603.             'client'             => $client,
  604.             'categoriesClient'   => $clientCategories,
  605.             'mode'               => '',
  606.             'move'               => true,
  607.         ]);
  608.     }
  609.     /**
  610.      * @Route("/categorie-client/ajouter/modal", name="dtc_client_categorie_ajouter_modal")
  611.      */
  612.     public function ajouterModalAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  613.     {
  614.         $repo_categorie $em->getRepository(Categorie::class);
  615.         $titre_modal    $translator->trans("Créer une nouvelle catégorie");
  616.         $errors         "";
  617.         $errorsSup      = [];
  618.         $categorie      = new Categorie;
  619.         $parentId $request->query->get('parent');
  620.         if ($parentId == '') {
  621.             $parentId 1;
  622.         }//par defaut le parent est la categorie racine.
  623.         if ($parentId != '') {
  624.             $parent $repo_categorie->find($parentId);
  625.             if (is_object($parent)) {
  626.                 $titre_modal .= ' enfant de '.$parent->getLibelle();
  627.                 $categorie->setCategorieParent($parent);
  628.             }
  629.         }
  630.         $user $this->getUser();
  631.         $categorie->setUtilisateur($user);
  632.         $form $this->createForm(CategorieModalType::class, $categorie);
  633.         $form->handleRequest($request);
  634.         if ($form->isSubmitted()) {
  635.             if ($form->isValid()) {
  636.                 $em->persist($categorie);
  637.                 $em->flush();
  638.                 $url $this->generateUrl('dtc_client_categorie_liste', []);
  639.                 //$url="";
  640.                 $this->addFlash('notice'$translator->trans('Categorie ajoutée avec succès !'));
  641.                 return new JsonResponse(['rendu' => '''errorsSup' => $errorsSup'valide' => '1''url' => $url'type' => '''libelle' => ''],
  642.                                         200,
  643.                                         ['Content-Type' => 'application/json']);
  644.             } else {
  645.                 $errors $validator->validate($categorie);
  646.             }
  647.         }
  648.         $rendu $this->renderView(
  649.             'Clients/Categorie/ajouter-modal.html.twig',
  650.             ['form' => $form->createView(), 'errorsSup' => $errorsSup'errors' => $errors'errorsSup' => $errorsSup'categorie' => $categorie]
  651.         );
  652.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  653.     }
  654.     /**
  655.      * @Route("/client/categorie/supprimer/{id}", name="dtc_client_categorie_supprimer")
  656.      */
  657.     public function supprimerAction(Request $requestCategorie $objetEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  658.     {
  659.         $titre_modal $translator->trans("Demande de confirmation");
  660.         $user        $this->getUser();
  661.         $message     '';
  662.         $errorsSup   = [];
  663.         //Verifier si la categorie a des produits
  664.         if (count($objet->getClientCategorie()) > 0) {
  665.             $errorsSup[] = 'La catégorie n\'est pas supprimable car elle contient des clients.';
  666.         }
  667.         //Verifier si la categorie a des categories enfantes
  668.         if (count($objet->getCategoriesEnfant()) > 0) {
  669.             //if ($message != '') $message .= ' ';
  670.             $errorsSup[] = 'La catégorie n\'est pas supprimable car elle contient des catégories enfants';
  671.         }
  672.         $form   $this->createForm(SupprimerCategorieType::class, $objet);
  673.         $errors "";
  674.         $form->handleRequest($request);
  675.         //if ($form->isSubmitted() && $message != '') {
  676.         if ($form->isSubmitted() && count($errorsSup) == 0) {
  677.             if ($form->isValid()) {
  678.                 foreach ($objet->getRemiseCategorieClient() as $remiseCatClient) {
  679.                     $em->remove($remiseCatClient);
  680.                 }
  681.                 $em->remove($objet);
  682.                 $em->flush();
  683.                 $this->addFlash('notice'$translator->trans('Catégorie supprimée avec succès !'));
  684.                 $url $this->generateUrl('dtc_client_categorie_liste');
  685.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  686.             } else {
  687.                 $errors $validator->validate($objet);
  688.                 $rendu  $this->renderView(
  689.                     'Clients/Categorie/supprimer.html.twig',
  690.                     ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'message' => $message]
  691.                 );
  692.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  693.             }
  694.         }
  695.         $rendu $this->renderView('Clients/Categorie/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'message' => $message]);
  696.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  697.     }
  698. }