src/Controller/Projets/ActiviteController.php line 877

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