src/Controller/Projets/DomaineController.php line 324

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Projets;
  3. use App\Entity\GestionComerciale\Commande;
  4. use App\Entity\Kanban\Fiche;
  5. use App\Entity\Projets\Domaine;
  6. use App\Entity\Projets\ProjetDomaine;
  7. use App\Entity\Remises\Remise;
  8. use App\Form\Projets\DomaineModalType;
  9. use App\Form\Projets\DomaineType;
  10. use App\Form\Projets\SupprimerDomaineType;
  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\Request;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Validator\Validator\ValidatorInterface;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. class DomaineController extends AbstractController
  25. {
  26.     /**
  27.      * @Route("/projet/domaine/nouveau", name="dtc_projet_domaine_ajouter")
  28.      */
  29.     public function ajouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  30.     {
  31.         $titre_modal  $translator->trans("Nouveau domaine");
  32.         $repo_domaine $em->getRepository(Domaine::class);
  33.         $get          $request->query->all();
  34.         $domaine      = new Domaine();
  35.         $parentId $request->query->get('parent');
  36.         if ($parentId == '') {
  37.             $parentId 1;
  38.         }//par defaut le parent est la domaine racine.
  39.         if ($parentId != '') {
  40.             $parent $repo_domaine->find($parentId);
  41.             if (is_object($parent)) {
  42.                 $titre_modal .= ' enfant de '.$parent->getLibelle().'('.$parent->getReference().')';
  43.                 $domaine->setDomaineParent($parent);
  44.             }
  45.         }
  46.         $user $this->getUser();
  47.         //$marche->setUtilisateur($user);
  48.         $form   $this->createForm(DomaineType::class, $domaine);
  49.         $errors "";
  50.         $form->handleRequest($request);
  51.         if ($form->isSubmitted()) {
  52.             if ($form->isValid()) {
  53.                 $url "";
  54.                 $em->persist($domaine);
  55.                 $em->flush();
  56.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  57.                     return new JsonResponse(
  58.                         ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  59.                     );
  60.                 } else {
  61.                     $this->addFlash('notice'$translator->trans('Domaine ajouté avec succès !'));
  62.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  63.                 }
  64.             } else {
  65.                 $errors $validator->validate($domaine);
  66.                 $rendu  $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'domaine' => $domaine]);
  67.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  68.             }
  69.         }
  70.         $rendu $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'domaine' => $domaine]);
  71.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  72.         //return $this->render('Articles/Marche/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  73.     }
  74.     /**
  75.      * @Route("/projet/domaine/modifier/{id}", name="dtc_projet_domaine_modifier")
  76.      */
  77.     public function modifierAction(Request $requestDomaine $domaineEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator
  78.     ) {
  79.         $titre_modal $translator->trans("Modifier domaine");
  80.         $get  $request->query->all();
  81.         $user $this->getUser();
  82.         // $origineCommande->setUtilisateur($user);
  83.         $form   $this->createForm(DomaineType::class, $domaine);
  84.         $errors "";
  85.         $form->handleRequest($request);
  86.         if ($form->isSubmitted()) {
  87.             // TODO refactor this
  88.             $droit $this->isGranted(EntityVoter::UPDATEDomaine::class);
  89.             /*
  90.             if(!$droit) {
  91.                 $rendu = $this->renderView('GestionComerciale/Origine/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
  92.                 return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  93.             }
  94.             */
  95.             $url "";
  96.             if ($form->isValid()) {
  97.                 $em->persist($domaine);
  98.                 $em->flush();
  99.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  100.                     return new JsonResponse(
  101.                         ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  102.                     );
  103.                 } else {
  104.                     $this->addFlash('notice'$translator->trans('Domaine modifié avec succès !'));
  105.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  106.                 }
  107.             } else {
  108.                 $errors $validator->validate($domaine);
  109.                 $rendu  $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'domaine' => $domaine]);
  110.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  111.             }
  112.         }
  113.         //die;
  114.         $rendu $this->renderView('Projets/Domaine/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'domaine' => $domaine]);
  115.         return new JsonResponse(['rendu' => $rendu'valide' => '01''url' => '''titre' => $titre_modal]);
  116.         //return $this->render('Articles/Marche/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
  117.     }
  118.     /**
  119.      * @Route("/projet/domaine/{page}", name="dtc_projet_domaine_liste", defaults={"page":1})
  120.      */
  121.     public function listerAction(Request            $request$pageColonneTableauService $serviceColonneTableauEntityManagerInterface $emTranslatorInterface $translator,
  122.                                  ValidatorInterface $validator
  123.     ) {
  124.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => true"orderable" => false];
  125.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "id")];
  126.         $tableau_class_cellule[] = [
  127.             "className" => "colonne_libelle",
  128.             "targets"   => [2],
  129.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "libelle"),
  130.         ];
  131.         $tableau_class_cellule[] = [
  132.             "className" => "colonne_libelle",
  133.             "targets"   => [3],
  134.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "parent"),
  135.         ];
  136.         $tableau_class_cellule[] = [
  137.             "className" => "colonne_statut",
  138.             "targets"   => [4],
  139.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Domaine::class, "statut"),
  140.         ];
  141.         //$this->datatable();
  142.         return $this->render('Projets/Domaine/lister.html.twig', ['name' => 'domaine''tableauClassColonne' => $tableau_class_cellule]);
  143.     }
  144.     /**
  145.      * set datatable configs
  146.      *
  147.      * @return \App\Library\Datatable\Util\Datatable
  148.      */
  149.     private function datatable(Datatable $datatableTranslatorInterface $translator)
  150.     {
  151.         $datatable->setEntity(Domaine::class, "x")
  152.                   ->setFields(
  153.                       [
  154.                           $translator->trans("ID")         => 'x.id',
  155.                           $translator->trans("Libellé")    => 'x.libelle',
  156.                           $translator->trans("Parent")     => 'p.libelle',
  157.                           $translator->trans("Statut Web") => 'x.statut',
  158.                           $translator->trans("Actions") => 'x.id',
  159.                           "_identifier_"                => 'x.id',
  160.                       ]
  161.                   )
  162.                   ->addJoin('x.domaineParent''p'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  163.                   ->setRenderers(
  164.                       [
  165.                           => [
  166.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  167.                               'params' => [
  168.                                   'edit_route' => 'dtc_projet_domaine_modifier',
  169.                               ],
  170.                           ],
  171.                           => [
  172.                               'view'   => 'FO/DataTable/statut.html.twig',
  173.                               'params' => [
  174.                                   'edit_route' => 'dtc_projet_domaine_changer_statut',
  175.                               ],
  176.                           ],
  177.                           => [
  178.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  179.                               'params' => [
  180.                                   'edit_route'      => 'dtc_projet_domaine_modifier',
  181.                                   'supprimer_route' => 'dtc_projet_domaine_supprimer',
  182.                                   'type'            => "",
  183.                                   'objet'           => Domaine::class,
  184.                                   'entite'          => 'domaine',
  185.                                   'table'           => 'dtc-domaine',
  186.                                   //'ajouterDomaine' => true
  187.                               ],
  188.                           ],
  189.                       ]
  190.                   )
  191.                   ->setMultiple(
  192.                       [
  193.                           'delete' => [
  194.                               'title' => 'Non disponible',
  195.                               'route' => 'dtc_projet_domaine_liste',
  196.                           ],
  197.                       ]
  198.                   )
  199.                   ->setOrder("x.id""desc")
  200.                   ->setSearch(true)
  201.                   ->setSearchFields([23]);
  202.         return $datatable;
  203.     }
  204.     /**
  205.      * Grid action
  206.      * @return Response
  207.      */
  208.     /**
  209.      * @Route("/projet/domaine/grid", name="dtc_projet_domaine_liste_grid")
  210.      */
  211.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  212.     {
  213.         return $this->datatable($datatable$translator)->execute();
  214.     }
  215.     /**
  216.      * @Route("/projet/domaine/recherche", name="dtc_projet_domaine_recherche")
  217.      */
  218.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginator)
  219.     {
  220.         $q      $request->query->get('q');
  221.         $parent $request->query->get('par');
  222.         $repo    $em->getRepository(Domaine::class);
  223.         $results $repo->getRechercheDomaine($q$parent);
  224.         //$results = array();
  225.         $pagination $paginator->paginate(
  226.             $results/* query NOT result */
  227.             $request->query->getInt('page'1/*page number*/,
  228.             10 /*limit per page*/
  229.         );
  230.         $pagination_results $pagination->getItems();
  231.         $option_placeholde  = ["libelle" => "Sélectionnez""id" => ""];
  232.         if ($request->query->getInt('page'1) == 1) {
  233.             array_unshift($pagination_results$option_placeholde);
  234.         }
  235.         $pagination->setItems($pagination_results);
  236.         //dump($results);
  237.         $serializer SerializerBuilder::create()->build();
  238.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  239.     }
  240.     /**
  241.      * @Route("/projet/domaine/statut/{id}", name="dtc_projet_domaine_changer_statut")
  242.      */
  243.     public function changeStatutAction(Request $requestDomaine $domaineEntityManagerInterface $em)
  244.     {
  245.         if ($domaine->getStatut() == 1) {
  246.             $domaine->setStatut(0);
  247.         } else {
  248.             $domaine->setStatut(1);
  249.         }
  250.         $em->persist($domaine);
  251.         $em->flush();
  252.         $headers = [
  253.             'Content-Type'                 => 'application/json',
  254.             'Access-Control-Allow-Origin'  => '*',
  255.             'Access-Control-Allow-Methods' => 'POST',
  256.         ];
  257.         return new JsonResponse(['data' => '1'], 200$headers);
  258.     }
  259.     //\Doctrine\Common\Util\Debug::dump($tabDomaines);
  260.     /**
  261.      * @Route("/checkbox/projet/domaine", name="dtc_projet_domaine_checkbox")
  262.      */
  263.     public function listerDomaineCheckboxAction(Request $request$commande = [], EntityManagerInterface $em)
  264.     {
  265.         $id                  '';
  266.         $repo_commande       $em->getRepository(Commande::class);
  267.         $repo_domaine        $em->getRepository(Domaine::class);
  268.         $repo_projet_domaine $em->getRepository(ProjetDomaine::class);
  269.         $id                  $request->query->get('id');
  270.         $url                 $this->generateUrl('dtc_projet_domaine_checkbox', []);
  271.         if ($request->query->get('commande') != '') {
  272.             $commande $repo_commande->find($request->query->get('commande'));
  273.         }
  274.         $domaines $repo_domaine->getDomaineEnfant($id);
  275.         $tabDomaines = [];
  276.         foreach ($domaines as $c) {
  277.             $c['checked']          = 0;
  278.             $c['totalSousDomaine'] = count($repo_domaine->findBy(["domaineParent" => $c]));
  279.             $c['selection']        = 0;
  280.             if (is_object($commande) and is_object($repo_projet_domaine->findOneBy(['commande' => $commande'domaine' => $c]))) {
  281.                 $c['checked'] = 1;
  282.             }
  283.             $tabDomaines[] = $c;
  284.         }
  285.         $domaines $tabDomaines;
  286.         if ($request->isXmlHttpRequest()) {
  287.             $rendu $this->renderView('Projets/Domaine/checkbox.html.twig', ['domaines' => $domaines'commande' => $commande'url' => $url'objet' => 'commande']);
  288.             return new JsonResponse(['rendu' => $rendu]);
  289.         }
  290.         return $this->render('Projets/Domaine/checkbox.html.twig', ['domaines' => $domaines'commande' => $commande'url' => $url'objet' => 'commande']);
  291.     }
  292.     /**
  293.      * set datatable configs
  294.      *
  295.      * @return \App\Library\Datatable\Util\Datatable
  296.      */
  297.     private function datatableProduits(Datatable $datatableTranslatorInterface $translator$domaine)
  298.     {
  299.         $datatable
  300.             ->setDatatableId('dta-produits')
  301.             ->setEntity(Commande::class, "x")
  302.             ->setFields(
  303.                 [
  304.                     $translator->trans("ID")              => 'x.id',
  305.                     $translator->trans("Img")             => 'x.reference',
  306.                     $translator->trans("Réf")             => 'x.reference',
  307.                     $translator->trans("Libellé")         => 'x.libelle',
  308.                     $translator->trans("Marque")          => 'm.libelle',
  309.                     $translator->trans("Desc courte")     => 'x.descriptionCourte',
  310.                     $translator->trans("Prix HT")         => 'x.prixVente',
  311.                     $translator->trans("Prix TTC")        => 'x.prixVente',
  312.                     $translator->trans("Marge")           => 'x.marge',
  313.                     $translator->trans("Cump")            => 'x.cpump',
  314.                     $translator->trans("Stock")           => 'x.stock',
  315.                     $translator->trans("Statut Internet") => 'x.statut',
  316.                     $translator->trans("Actions")         => 'x.id',
  317.                     "_identifier_"                        => 'x.id',
  318.                 ]
  319.             )
  320.             ->addJoin('x.commandeDomaine''ac'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  321.             ->setWhere(
  322.                 'ac.domaine = :domaine',
  323.                 ['domaine' => $domaine]
  324.             )
  325.             ->addJoin('x.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  326.             ->setRenderers(
  327.                 [
  328.                     => [
  329.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  330.                         'params' => [
  331.                             'edit_route' => 'dtc_commande_modifier',
  332.                         ],
  333.                     ],
  334.                     => [
  335.                         'view'   => 'FO/DataTable/image.html.twig',
  336.                         'params' => [
  337.                             'edit_route' => 'dtc_commande_modifier',
  338.                         ],
  339.                     ],
  340.                     => [
  341.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  342.                         'params' => [
  343.                             'edit_route' => 'dtc_commande_modifier',
  344.                         ],
  345.                     ],
  346.                     => [
  347.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  348.                         'params' => [
  349.                             'edit_route' => 'dtc_commande_modifier',
  350.                         ],
  351.                     ],
  352.                     6  => [
  353.                         'view'   => 'FO/DataTable/prixSuivi.html.twig',
  354.                         'params' => [
  355.                             'surveillance' => false,
  356.                         ],
  357.                     ],
  358.                     7  => [
  359.                         'view' => 'FO/DataTable/prix_commande_ttc.html.twig',
  360.                     ],
  361.                     8  => [
  362.                         'view' => 'FO/DataTable/prix.html.twig',
  363.                     ],
  364.                     9  => [
  365.                         'view' => 'FO/DataTable/prix.html.twig',
  366.                     ],
  367.                     11 => [
  368.                         'view'   => 'FO/DataTable/statut.html.twig',
  369.                         'params' => [
  370.                             'edit_route' => 'dtc_commande_changer_statut',
  371.                         ],
  372.                     ],
  373.                     12 => [
  374.                         'view'   => 'FO/DataTable/actions.html.twig',
  375.                         'params' => [
  376.                             'edit_route'      => 'dtc_commande_modifier',
  377.                             'dupliquer_route' => 'dtc_commande_dupliquer',
  378.                             'objet'           => Commande::class,
  379.                         ],
  380.                     ],
  381.                 ]
  382.             )->setOrder("x.id""desc")
  383.             ->setSearch(true)
  384.             ->setSearchFields([234]);
  385.         //$datatable->setSearchFields(array(0,2));
  386.         return $datatable;
  387.     }
  388.     /**
  389.      * Grid action
  390.      * @return Response
  391.      */
  392.     /**
  393.      * @Route("/projet/domaine/produits/grid/{id}", name="dtc_projet_domaine_produits_liste_grid")
  394.      */
  395.     public function gridProduitsAction(Request $requestDomaine $domaineDatatable $datatableTranslatorInterface $translator)
  396.     {
  397.         //$this->datatableProduits($domaine);
  398.         return $this->datatableProduits($datatable$translator$domaine)->execute();
  399.     }
  400.     /**
  401.      * set datatable configs
  402.      *
  403.      * @return \App\Library\Datatable\Util\Datatable
  404.      */
  405.     private function datatableRemises(Datatable $datatableTranslatorInterface $translator$domaine)
  406.     {
  407.         $datatable
  408.             ->setDatatableId('dta-remises')
  409.             ->setEntity(Remise::class, "x")
  410.             ->setFields(
  411.                 [
  412.                     $translator->trans("ID")      => 'x.id',
  413.                     $translator->trans("Libelle") => 'x.libelle',
  414.                     $translator->trans("Actions") => 'x.id',
  415.                     "_identifier_"                => 'x.id',
  416.                 ]
  417.             )
  418.             ->addJoin('x.remiseDomainecommande''rca'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  419.             ->setWhere(
  420.                 'rca.domaine = :domaine',
  421.                 ['domaine' => $domaine]
  422.             )
  423.             ->setRenderers(
  424.                 [
  425.                     => [
  426.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  427.                         'params' => [
  428.                             'edit_route' => 'dtc_remise_modifier',
  429.                         ],
  430.                     ],
  431.                     => [
  432.                         'view'   => 'FO/DataTable/actions.html.twig',
  433.                         'params' => [
  434.                             'edit_route' => 'dtc_remise_modifier',
  435.                             'objet'      => Remise::class,
  436.                         ],
  437.                     ],
  438.                 ]
  439.             )
  440.             ->setOrder("x.id""desc")
  441.             ->setSearch(true)
  442.             ->setSearchFields([1]);
  443.         //$datatable->setSearchFields(array(0,2));
  444.         return $datatable;
  445.     }
  446.     /**
  447.      * Grid action
  448.      * @return Response
  449.      */
  450.     /**
  451.      * @Route("", name="")
  452.      */
  453.     public function gridRemisesAction(Request $requestDomaine $domaineDatatable $datatableTranslatorInterface $translator)
  454.     {
  455.         //$this->datatableRemises($domaine);
  456.         return $this->datatableRemises($datatable$translator$domaine)->execute();
  457.     }
  458.     /**
  459.      * @Route("", name="")
  460.      */
  461.     public function listerDomaineDossierAction(Request $request$commandeId ''EntityManagerInterface $em)
  462.     {
  463.         $repo_commande       $em->getRepository(Commande::class);
  464.         $repo_domaine        $em->getRepository(Domaine::class);
  465.         $repo_projet_domaine $em->getRepository(ProjetDomaine::class);
  466.         $commande         $repo_commande->find($commandeId);
  467.         $commandeDomaines = [];
  468.         if (is_object($commande)) {
  469.             $domainesCommande $repo_projet_domaine->findBy(['commande' => $commandeId], ['position' => 'ASC']);
  470.             foreach ($domainesCommande as $domainecommande) {
  471.                 $commandeDomaines[] = $domainecommande->getDomaine()->getId();
  472.             }
  473.         }
  474.         //\Doctrine\Common\Util\Debug::dump($commandeId);
  475.         $domaines $repo_domaine->findBy(['domaineParent' => 1], ['position' => 'ASC']);//DomaineParent
  476.         return $this->render('Projets/Domaine/lister-dossier.html.twig', [
  477.             'nbDomainesEnfant' => [],
  478.             'domaines'         => $domaines,
  479.             'commande'         => $commande,
  480.             'domainesCommande' => $commandeDomaines,
  481.             'mode'             => '',
  482.             'move'             => true,
  483.         ]);
  484.     }
  485.     /**
  486.      * @Route("", name="")
  487.      */
  488.     public function listerDomaineDossierRemiseAction(Request $request$remise nullEntityManagerInterface $em)
  489.     {
  490.         $repo_remise         $em->getRepository(Remise::class);
  491.         $remise              $repo_remise->find($remise);
  492.         $repo_domaine        $em->getRepository(Domaine::class);
  493.         $nbDomainesEnfant = [];
  494.         $remiseDomaines   = [];
  495.         if (is_object($remise)) {
  496.             //$domainesRemise = $repo_projet_domaine->findBycommande($commandeId);
  497.             foreach ($remise->getRemiseDomainecommande() as $domaineRemise) {
  498.                 $boucler          true;
  499.                 $remiseDomaines[] = $domaineRemise->getDomaine()->getId();
  500.                 if (is_object($domaineRemise->getDomaine()->getDomaineParent()) and $domaineRemise->getDomaine()->getDomaineParent()->getId() > 1) {
  501.                     $parent $domaineRemise->getDomaine()->getDomaineParent();
  502.                     while ($boucler) {
  503.                         if ( ! array_key_exists($parent->getId(), $nbDomainesEnfant)) {
  504.                             $nbDomainesEnfant[$parent->getId()] = 1;
  505.                         } else {
  506.                             $nbDomainesEnfant[$parent->getId()]++;
  507.                         }
  508.                         if (is_object($parent->getDomaineParent()) and $parent->getDomaineParent()->getId() > 1) {
  509.                             $parent $parent->getDomaineParent();
  510.                         } else {
  511.                             $boucler false;
  512.                         }
  513.                     }
  514.                 }
  515.             }
  516.         }
  517.         //print_r($nbDomainesEnfant);
  518.         //\Doctrine\Common\Util\Debug::dump($commandeId);
  519.         $domaines $repo_domaine->findBy(['domaineParent' => 1], ['libelle' => 'ASC']);//DomaineParent
  520.         return $this->render(
  521.             'Projets/Domaine/lister-dossier-remise.html.twig',
  522.             ['nbDomainesEnfant' => $nbDomainesEnfant'domaines' => $domaines'remise' => $remise'domainesRemise' => $remiseDomaines]
  523.         );
  524.     }
  525.     /**
  526.      * @Route("", name="")
  527.      */
  528.     public function listerDomaineDossiercommandeAction(Request $request$id null$type "commande"$mode ""EntityManagerInterface $em)
  529.     {
  530.         //dump($commande);
  531.         $objet null;
  532.         if ($type == 'fiche') {
  533.             $objet $em->getRepository(Fiche::class)->find($id);
  534.         } else {
  535.             $objet $em->getRepository(Commande::class)->find($id);
  536.         }
  537.         $repo_domaine        $em->getRepository(Domaine::class);
  538.         $repo_projet_domaine $em->getRepository(ProjetDomaine::class);
  539.         $nbDomainesEnfant = [];
  540.         $commandeDomaines = [];
  541.         if (is_object($objet)) {
  542.             //$domainesCommande = $repo_projet_domaine->findBycommande($commandeId);
  543.             foreach ($objet->getProjetDomaines() as $domainecommande) {
  544.                 if ($domainecommande->getStatut()) {
  545.                     $boucler true;
  546.                     $count   0;
  547.                     //$commandeDomaines[] = $domainecommande->getDomaine()->getId();
  548.                     $commandeDomaines[$domainecommande->getDomaine()->getId()] = $domainecommande;
  549.                     if (is_object($domainecommande->getDomaine()->getDomaineParent()) and $domainecommande->getDomaine()->getDomaineParent()->getId() > 1) {
  550.                         $parent $domainecommande->getDomaine()->getDomaineParent();
  551.                         while ($boucler) {
  552.                             $count++;
  553.                             if ( ! array_key_exists($parent->getId(), $nbDomainesEnfant)) {
  554.                                 $nbDomainesEnfant[$parent->getId()] = 1;
  555.                             } else {
  556.                                 $nbDomainesEnfant[$parent->getId()]++;
  557.                             }
  558.                             if (is_object($parent->getDomaineParent()) and $parent->getDomaineParent()->getId() > 1) {
  559.                                 $parent $parent->getDomaineParent();
  560.                             } else {
  561.                                 $boucler false;
  562.                             }
  563.                             if ($count 100) {
  564.                                 break;
  565.                             }
  566.                         }
  567.                     }
  568.                 }
  569.             }
  570.         }
  571.         //print_r($nbDomainesEnfant);
  572.         //\Doctrine\Common\Util\Debug::dump($commandeId);
  573.         $domaines $repo_domaine->findBy(['domaineParent' => 1], ['position' => 'ASC']);//DomaineParent
  574.         return $this->render('Projets/Domaine/lister-dossier.html.twig', [
  575.             'nbDomainesEnfant' => $nbDomainesEnfant,
  576.             'domaines'         => $domaines,
  577.             'objet'            => $objet,
  578.             'type'             => $type,
  579.             'domainesCommande' => $commandeDomaines,
  580.             'mode'             => $mode,
  581.         ]);
  582.     }
  583.     /**
  584.      * @Route("/projet/domaine/supprimer/{id}", name="dtc_projet_domaine_supprimer")
  585.      */
  586.     public function supprimerAction(Request $requestDomaine $objetEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  587.     {
  588.         $titre_modal $translator->trans("Demande de confirmation.");
  589.         $user        $this->getUser();
  590.         $message     '';
  591.         $errorsSup   = [];
  592.         //Verifier si la domaine a des produits
  593.         if (count($objet->getProjetDomaines()) > 0) {
  594.             $errorsSup[] = 'Le domaine n\'est pas supprimable car il est lié à des projets.';
  595.         }
  596.         //Verifier si la domaine a des domaines enfantes
  597.         if (count($objet->getDomainesEnfant()) > 0) {
  598.             //if ($message != '') $message .= ' ';
  599.             $errorsSup[] = 'Le domaine n\'est pas supprimable car il contient des domaines enfants';
  600.         }
  601.         $form   $this->createForm(SupprimerDomaineType::class, $objet);
  602.         $errors "";
  603.         $form->handleRequest($request);
  604.         if ($form->isSubmitted() && count($errorsSup) == 0) {
  605.             if ($form->isValid()) {
  606.                 $em->remove($objet);
  607.                 $em->flush();
  608.                 $this->addFlash('notice'$translator->trans('Domaine supprimé avec succès !'));
  609.                 $url $this->generateUrl('dtc_projet_domaine_liste');
  610.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  611.             } else {
  612.                 $errors $validator->validate($objet);
  613.                 $rendu  $this->renderView(
  614.                     'Projets/Domaine/supprimer.html.twig',
  615.                     ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'message' => $message]
  616.                 );
  617.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  618.             }
  619.         }
  620.         $rendu $this->renderView('Projets/Domaine/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'message' => $message]
  621.         );
  622.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  623.     }
  624.     /**
  625.      * @Route("/projet/domaine/enfants", name="dtc_projet_lister_domaine_enfant_liste")
  626.      */
  627.     public function listerDomaineEnfantListeAction(Request $requestEntityManagerInterface $em)
  628.     {
  629.         $id           $request->query->get('id');
  630.         $repo_domaine $em->getRepository(Domaine::class);
  631.         $rendu        "";
  632.         $domaines     $repo_domaine->getDomaineEnfant($id);
  633.         $rendu .= '<option value="">Sélectionnez</option>';
  634.         foreach ($domaines as $e) {
  635.             $rendu .= '<option value="'.$e['id'].'">';
  636.             $rendu .= $e['libelle'];
  637.             $rendu .= '</option>';
  638.         }
  639.         return new JsonResponse(['rendu' => $rendu]);
  640.     }
  641.     /**
  642.      * @Route("/projet/domaine/gerer", name="dtc_gerer_cat")
  643.      */
  644.     public function gererDomaineAction(Request $requestEntityManagerInterface $em)
  645.     {
  646.         $repo_commande $em->getRepository(Commande::class);
  647.         $repo_cat $em->getRepository(Domaine::class);
  648.         $repo_cat_commande $em->getRepository(ProjetDomaine::class);
  649.         $commandes $repo_commande->findall();
  650.         foreach ($commandes as $commande) {
  651.             $commandeCat $commande->getProjetDomaines();
  652.             foreach ($commandeCat as $AC) {
  653.                 if ($AC->getDomaine()->getParent()->getId() == 1) {
  654.                 } else {
  655.                     $newAC = new ProjetDomaine();
  656.                     $newAC->setcommande($commande);
  657.                     $newAC->setDomaine($AC->getDomaine()->getParent());
  658.                     $newAC->setPosition(0);
  659.                     echo "nouvelle liasion : ";
  660.                     $em->persist($newAC);
  661.                     $em->flush();
  662.                 }
  663.             }
  664.         }
  665.         return new Response("ok");
  666.     }
  667.     /**
  668.      * @Route("/projet/domaine/changer/positions/ajax", name="dtc_projet_domaine_change_positions")
  669.      */
  670.     public function changerPositionsAjaxAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  671.     {
  672.         $repo_cat $em->getRepository(Domaine::class);
  673.         $errors    = [];
  674.         $positions $request->request->get('positions');
  675.         //var_dump($positions);
  676.         if (count($positions)) {
  677.             foreach ($positions as $key => $position) {
  678.                 $domaine $repo_cat->find($position);
  679.                 if (is_object($domaine)) {
  680.                     $domaine->setPosition($key);
  681.                     $em->persist($domaine);
  682.                 }
  683.             }
  684.             $em->flush();
  685.             $this->addFlash(
  686.                 'notice',
  687.                 $translator->trans('Positions modifiées avec succès !')
  688.             );
  689.         }
  690.         $rendu $this->renderView('layout-errors.html.twig', ['errors' => $errors]);
  691.         return new JsonResponse(['rendu' => $rendu,]);
  692.     }
  693.     /**
  694.      * @Route("/projet/domaine/ajouter/modal", name="dtc_projet_domaine_ajouter_modal")
  695.      */
  696.     public function ajouterModalAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  697.     {
  698.         $repo_domaine $em->getRepository(Domaine::class);
  699.         $titre_modal  $translator->trans("Créer un nouveau domaine");
  700.         $errors       "";
  701.         $errorsSup    = [];
  702.         $domaine      = new Domaine;
  703.         $parentId $request->query->get('parent');
  704.         if ($parentId == '') {
  705.             $parentId 1;
  706.         }//par defaut le parent est la domaine racine.
  707.         if ($parentId != '') {
  708.             $parent $repo_domaine->find($parentId);
  709.             if (is_object($parent)) {
  710.                 $titre_modal .= ' enfant de '.$parent->getLibelle().'('.$parent->getReference().')';
  711.                 $domaine->setDomaineParent($parent);
  712.             }
  713.         }
  714.         $user $this->getUser();
  715.         //$domaine->setUtilisateur($user);
  716.         $form $this->createForm(DomaineModalType::class, $domaine);
  717.         $form->handleRequest($request);
  718.         //verifier si la domaine existe
  719.         $catTmp $repo_domaine->findBy([
  720.                                             'domaineParent' => $domaine->getDomaineParent(),
  721.                                             'reference'     => $domaine->getReference(),
  722.                                         ]);
  723.         if (count($catTmp) > 0) {
  724.             $errorsSup[] = 'Cette référence de domaine existe déjà!';
  725.         }
  726.         if ($form->isSubmitted()) {
  727.             if ($form->isValid() && count($catTmp) == 0) {
  728.                 $em->persist($domaine);
  729.                 $em->flush();
  730.                 /*
  731.                 $em->persist($domaine);
  732.         $em->flush();
  733.                  *
  734.                  */
  735.                 /*
  736.               $tokenP = $request->request->get('tokenPicture');
  737.               $this->addFlash(
  738.               'notice',
  739.               $$tokenP
  740.           );
  741.       $logoService->sauvegarder($domaine,'domaine',$tokenP);
  742.                  *
  743.                  */
  744.                 $url $this->generateUrl('dtc_projet_domaine_liste', []);
  745.                 //$url="";
  746.                 $this->addFlash(
  747.                     'notice',
  748.                     $translator->trans('Domaine ajouté avec succès !')
  749.                 );
  750.                 return new JsonResponse(
  751.                     ['rendu' => '''errorsSup' => $errorsSup'valide' => '1''url' => $url'type' => '''libelle' => '']
  752.                 );
  753.             } else {
  754.                 $errors $validator->validate($domaine);
  755.             }
  756.         }
  757.         $rendu $this->renderView(
  758.             'Projets/Domaine/ajouter-modal.html.twig',
  759.             ['form' => $form->createView(), 'errorsSup' => $errorsSup'errors' => $errors'domaine' => $domaine]
  760.         );
  761.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  762.     }
  763.     /**
  764.      * @Route("/associer-domaine/domaine/{domaine}/{type}/{id}/statut/{statut}", name="dtc_projet_associer_domaine_ajax")
  765.      */
  766.     public function associerProjetDomaineAction(Request $requestDomaine $domaine$type 'commande'$id$statutEntityManagerInterface $em)
  767.     {
  768.         $repo_projet_domaine $em->getRepository(ProjetDomaine::class);
  769.         $objet               null;
  770.         if ($type == 'fiche') {
  771.             $objet $em->getRepository(Fiche::class)->find($id);
  772.         } else {
  773.             $objet $em->getRepository(Commande::class)->find($id);
  774.         }
  775.         $projetDomaine $repo_projet_domaine->findOneBy([$type => $id'domaine' => $domaine]);
  776.         if ($statut == 'majPourcentage') {
  777.             if ( ! is_object($projetDomaine)) {
  778.                 $projetDomaine = new ProjetDomaine;
  779.                 if ($type == 'fiche') {
  780.                     $projetDomaine->setFiche($objet);
  781.                 }
  782.                 if ($type == 'commande') {
  783.                     $projetDomaine->setCommande($objet);
  784.                 }
  785.                 $projetDomaine->setDomaine($domaine);
  786.             }
  787.             if ($request->query->get('pourcentage') != '') {
  788.                 $projetDomaine->setPourcentage($request->query->get('pourcentage'));
  789.             }
  790.             $em->persist($projetDomaine);
  791.         } elseif ($statut == 'add') {
  792.             if ( ! is_object($projetDomaine)) {
  793.                 $projetDomaine = new ProjetDomaine;
  794.                 if ($type == 'fiche') {
  795.                     $projetDomaine->setFiche($objet);
  796.                 }
  797.                 if ($type == 'commande') {
  798.                     $projetDomaine->setCommande($objet);
  799.                 }
  800.                 $projetDomaine->setDomaine($domaine);
  801.                 if ($request->query->get('pourcentage') != '') {
  802.                     $projetDomaine->setPourcentage($request->query->get('pourcentage'));
  803.                 }
  804.             }
  805.             $projetDomaine->setStatut(true);
  806.             $em->persist($projetDomaine);
  807.         } else {
  808.             if (is_object($projetDomaine)) {
  809.                 $projetDomaine->setStatut(false);
  810.                 //$em->remove($projetDomaine);
  811.             }
  812.         }
  813.         //$em->persist($commande);
  814.         $em->flush();
  815.         $response = new JsonResponse;
  816.         $response->setData([
  817.                                //'commande'=>$projet->getId(),
  818.                                'domaine' => $domaine->getId(),
  819.                                'statut'  => $statut,
  820.                            ]);
  821.         return $response;
  822.     }
  823. }