src/Controller/Projets/ProjetUtilisateurController.php line 370

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Projets;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\GestionComerciale\Commande;
  5. use App\Entity\Kanban\Fiche;
  6. use App\Entity\Notes\Note;
  7. use App\Entity\Projets\Projet;
  8. use App\Entity\Projets\ProjetUtilisateur;
  9. use App\Entity\Utilisateur\Contact;
  10. use App\Entity\Utilisateur\Utilisateur;
  11. use App\Form\Projets\ProjetUtilisateurType;
  12. use App\Form\Projets\SupprimerProjetUtilisateurType;
  13. use App\Library\Datatable\Util\Datatable;
  14. use App\Service\Utilisateur\ColonneTableauService;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\Validator\Validator\ValidatorInterface;
  22. use Symfony\Contracts\Translation\TranslatorInterface;
  23. class ProjetUtilisateurController extends AbstractController
  24. {
  25.     /**
  26.      * @Route("/projetutilisateur/referent/nouveau/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_ajouter")
  27.      */
  28.     public function ajouterModalAction(Request $request$id$type$typeUtilisateur ""EntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  29.     {
  30.         $titre_modal $translator->trans("Nouveau référent");
  31.         $user        $this->getUser();
  32.         $projetUtilisateur = new ProjetUtilisateur();
  33.         $url               '#';
  34.         if ($type == 'commande') {
  35.             $titre_modal $translator->trans("Ajouter un utilisateur");
  36.             $url         $this->generateUrl('dtc_commande_modifier', ["id" => $id"tab" => "equipe"]);
  37.             $objet       $em->getRepository(Commande::class)->find($id);
  38.             if (is_object($objet)) {
  39.                 $projetUtilisateur->setCommande($objet);
  40.                 if (is_object($objet->getFiche())) {
  41.                     $projetUtilisateur->setFiche($objet->getFiche());
  42.                 }//ajouter fiche si existante
  43.             }
  44.         } elseif ($type == 'projet') {
  45.             $url   $this->generateUrl('dtc_projet_modifier', ["id" => $id"tab" => "referents"]);
  46.             $objet $em->getRepository(Commande::class)->find($id);
  47.             if (is_object($objet)) {
  48.                 $projetUtilisateur->setProjet($objet);
  49.             }
  50.         } elseif ($type == 'fiche') {
  51.             $url   $this->generateUrl('dtc_projet_modifier', ["id" => $id"tab" => "referents"]);
  52.             $objet $em->getRepository(Fiche::class)->find($id);
  53.             if (is_object($objet)) {
  54.                 $projetUtilisateur->setFiche($objet);
  55.             }
  56.         } elseif ($type == 'note') {
  57.             $url   $this->generateUrl('dtc_projet_modifier', ["id" => $id"tab" => "referents"]);
  58.             $objet $em->getRepository(Note::class)->find($id);
  59.             if (is_object($objet)) {
  60.                 $projetUtilisateur->setNote($objet);
  61.             }
  62.         }
  63.         //$projetUtilisateur->setUtilisateur($user);    
  64.         $form $this->createForm(ProjetUtilisateurType::class, $projetUtilisateur);
  65.         $errorsSup = [];
  66.         $errors    = [];
  67.         $libelle   "";
  68.         $form->handleRequest($request);
  69.         if ($form->isSubmitted()) {
  70.             if ($form->isValid()) {
  71.                 $repo_projet_utilisateur $em->getRepository(ProjetUtilisateur::class);
  72.                 //$projetUtilisateurExisteDeja = $repo_projet_utilisateur->findOneBy(array("utilisateur"=>$projetUtilisateur->getUtilisateur(),"contact"=>$projetUtilisateur->getContact(),"projet"=>$projetUtilisateur->getProjet(),'commande'=>$projetUtilisateur->getCommande(),'fiche'=>$projetUtilisateur->getFiche(),'note'=>$projetUtilisateur->getNote()));
  73.                 $projetUtilisateurExisteDeja '';
  74.                 //dump($projetUtilisateurExisteDeja);
  75.                 if ( ! is_object($projetUtilisateurExisteDeja)) {
  76.                     $em->persist($projetUtilisateur);
  77.                     $em->flush();
  78.                 }
  79.                 $table  $request->query->get('table');
  80.                 $retour = ['rendu' => '''valide' => '1''url' => $url];
  81.                 if ( ! empty($table)) {
  82.                     $retour['type']         = 'recharger_datatable';
  83.                     $retour['id_datatable'] = $table;
  84.                 } else {
  85.                     if ( ! is_object($projetUtilisateurExisteDeja)) {
  86.                         $this->addFlash(
  87.                             'notice',
  88.                             $translator->trans('L\'utilisateur a été ajouté à l\'équipe!')
  89.                         );
  90.                     } else {
  91.                         $this->addFlash(
  92.                             'warning',
  93.                             $translator->trans('Cet utilisateur fait déjà parti de l\'equipe!')
  94.                         );
  95.                     }
  96.                 }
  97.                 return new JsonResponse($retour);
  98.                 //return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url,'type'=>'projetUtilisateur','projetUtilisateur'=>$projetUtilisateur->getId()), 200, array('Content-Type'=>'application/json'));
  99.             } else {
  100.                 $errors $validator->validate($projetUtilisateur);
  101.                 $rendu  $this->renderView(
  102.                     'Projets/ProjetUtilisateur/ajouter_modal.html.twig',
  103.                     [
  104.                         'form'              => $form->createView(),
  105.                         'errors'            => $errors,
  106.                         'errorsSup'         => $errorsSup,
  107.                         'projetUtilisateur' => $projetUtilisateur,
  108.                         'typeUtilisateur'   => $typeUtilisateur,
  109.                     ]
  110.                 );
  111.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  112.             }
  113.         } else {
  114.         }
  115.         $rendu $this->renderView(
  116.             'Projets/ProjetUtilisateur/ajouter_modal.html.twig',
  117.             [
  118.                 'form'              => $form->createView(),
  119.                 'errors'            => $errors,
  120.                 'errorsSup'         => $errorsSup,
  121.                 'projetUtilisateur' => $projetUtilisateur,
  122.                 'typeUtilisateur'   => $typeUtilisateur,
  123.             ]
  124.         );
  125.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  126.     }
  127.     /**
  128.      * @Route("/projetutilisateur/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_liste")
  129.      */
  130.     public function listerAction(Request             $request$id$type ""$typeUtilisateur ""ColonneTableauService $serviceColonneTableauDatatable $datatable,
  131.                                  TranslatorInterface $translatorEntityManagerInterface $em
  132.     ) {
  133.         // TODO refactor this
  134.         $tableauEntite 'DTCProjetsBundle:Referent-contact';
  135.         if ($type == 'projet') {
  136.             $repo_objet $em->getRepository(Projet::class);
  137.             $objet      $repo_objet->find($id);
  138.         } elseif ($type == 'utilisateur') {
  139.             $repo_objet    $em->getRepository(Utilisateur::class);
  140.             $objet         $repo_objet->find($id);
  141.             $tableauEntite 'DTCProjetsBundle:Referent-utilisateur';
  142.         } elseif ($type == 'commande') {
  143.             $repo_objet    $em->getRepository(Commande::class);
  144.             $objet         $repo_objet->find($id);
  145.             $tableauEntite 'DTCProjetsBundle:Referent-utilisateur';
  146.         } elseif ($type == 'contact') {
  147.             $repo_objet    $em->getRepository(Contact::class);
  148.             $objet         $repo_objet->find($id);
  149.             $tableauEntite 'DTCProjetsBundle:Referent-contact';
  150.         } elseif ($type == 'fiche') {
  151.             $repo_objet $em->getRepository(Fiche::class);
  152.             $objet      $repo_objet->find($id);
  153.             if ($typeUtilisateur == 'contact') {
  154.                 $tableauEntite 'DTCProjetsBundle:Referent-contact';
  155.             } else {
  156.                 $tableauEntite 'DTCProjetsBundle:Referent-utilisateur';
  157.             }
  158.         } elseif ($type == 'note') {
  159.             $repo_objet $em->getRepository(Note::class);
  160.             $objet      $repo_objet->find($id);
  161.             if ($typeUtilisateur == 'contact') {
  162.                 $tableauEntite 'DTCProjetsBundle:Referent-contact';
  163.             } else {
  164.                 $tableauEntite 'DTCProjetsBundle:Referent-utilisateur';
  165.             }
  166.         }
  167.         $tableau_class_cellule = [];
  168.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>true,"searchable"=> true);
  169.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false);
  170.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite"id")];
  171.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite"nom")];
  172.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [2], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite"prenom")];
  173.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [3], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite"email")];
  174.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [4], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite"tel")];
  175.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur($tableauEntite,"skype"));
  176.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [5], "visible" => true];
  177.         $this->datatable($datatable$translator$em$objet$type$typeUtilisateur);
  178.         return $this->render(
  179.             'Projets/ProjetUtilisateur/lister.html.twig',
  180.             ['tableauClassColonne' => $tableau_class_cellule"id" => $id"type" => $type'typeUtilisateur' => $typeUtilisateur]
  181.         );
  182.     }
  183.     /**
  184.      * set datatable configs
  185.      *
  186.      * @return \App\Library\Datatable\Util\Datatable
  187.      */
  188.     private function datatable(Datatable $datatableTranslatorInterface $translatorEntityManagerInterface $em$objet$type ""$typeUtilisateur "")
  189.     {
  190.         $roles $em->getRepository(Article::class)->findAll();
  191.         if ($type == "note") {
  192.             $identifiant "dta-note-referents-";
  193.         } else {
  194.             $identifiant "dta-referents-";
  195.         }
  196.         $edit_route 'dtc_note_modifier';
  197.         if ($typeUtilisateur == 'utilisateur') {
  198.             $edit_route 'dtc_utilisateur_modifier';
  199.         } elseif ($typeUtilisateur == 'contact') {
  200.             $edit_route 'dtc_contact_modifier';
  201.         }
  202.         $type_jointure 'x.'.$type;
  203.         $renderers = [
  204.             /*
  205.             1 => array(
  206.                 'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  207.                  'params' => array(
  208.                             'edit_route'    => $edit_route,
  209.                             'typeDocument' => $typeUtilisateur
  210.                         ),
  211.                 ),
  212.                 */
  213.             /*0=> array(
  214.                 'view' => 'FO/DataTable/edit_texte.html.twig',
  215.                 'params' => array(
  216.                         'objet'    => 'DTCProjetsBundle:ProjetUtilisateur',
  217.                         'champ'    => 'setLibelle',
  218.                     ),
  219.             ),
  220.             1=> array(
  221.                 'view' => 'FO/DataTable/edit_texte.html.twig',
  222.                 'params' => array(
  223.                         'objet'    => 'DTCProjetsBundle:ProjetUtilisateur',
  224.                         'champ'    => 'setNumero',
  225.                     ),
  226.             ),
  227.             2=> array(
  228.                 'view' => 'FO/DataTable/edit_texte.html.twig',
  229.                 'params' => array(
  230.                         'objet'    => 'DTCProjetsBundle:ProjetUtilisateur',
  231.                         'champ'    => 'setRue',
  232.                     ),
  233.             ),
  234.             */
  235.             => [
  236.                 'view'   => 'FO/DataTable/select_profil_equipe.html.twig',
  237.                 'params' => [
  238.                     'roles' => $roles,
  239.                     'objet' => ProjetUtilisateur::class,
  240.                     'champ' => 'setRole',
  241.                 ],
  242.             ],
  243.             => ['view' => 'FO/DataTable/lien_mailto.html.twig'],
  244.             => ['view' => 'FO/DataTable/lien_tel.html.twig'],
  245.             => [
  246.                 'view'   => 'FO/DataTable/actions_modal.html.twig',
  247.                 'params' => [
  248.                     //'edit_route'  => $edit_route,
  249.                     'supprimer_route' => 'dtc_projet_utilisateur_supprimer',
  250.                     //'id'    => $client->getId(),
  251.                     'width_modal'     => 900,
  252.                     'type'            => "liste",
  253.                     'objet'           => ProjetUtilisateur::class,
  254.                     'table'           => 'dta-referents-'.$typeUtilisateur,
  255.                 ],
  256.             ],
  257.         ];
  258.         if ($typeUtilisateur == 'contact') {
  259.             $renderers[1] = [
  260.                 'view'   => 'FO/DataTable/lien_modifier.html.twig',
  261.                 'params' => [
  262.                     'edit_route' => 'dtc_contact_modifier',
  263.                     'id'         => 0,
  264.                     'type'       => 'general',
  265.                     'entite'     => 'contact',
  266.                     'table'      => 'dta-referents-contact',
  267.                     'objet'      => Contact::class,
  268.                     'visualiser' => 1,
  269.                 ],
  270.             ];
  271.             $renderers[2] = [
  272.                 'view'   => 'FO/DataTable/lien_modifier.html.twig',
  273.                 'params' => [
  274.                     'edit_route' => 'dtc_contact_modifier',
  275.                     'id'         => 0,
  276.                     'type'       => 'general',
  277.                     'entite'     => 'contact',
  278.                     'table'      => 'dta-referents-contact',
  279.                     'objet'      => Contact::class,
  280.                     'visualiser' => 1,
  281.                 ],
  282.             ];
  283.         }
  284.         $datatable->setDatatableId($identifiant.$typeUtilisateur)
  285.                   ->setEntity(ProjetUtilisateur::class, "x")
  286.                   ->setFields(
  287.                       [
  288.                           "ID"                         => 'x.id',
  289.                           $translator->trans("Nom")    => 'u.nom',
  290.                           $translator->trans("Prénom") => 'u.prenom',
  291.                           $translator->trans("Rôle")   => 'x.id',
  292.                           $translator->trans("Email")  => 'u.email',
  293.                           $translator->trans("Tél")    => 'u.telephone',
  294.                           //$translator->trans("Skype")    => 'u.skype',
  295.                           "Actions"                    => 'x.id',
  296.                           "_identifier_"               => 'x.id',
  297.                       ]
  298.                   )
  299.                   ->addJoin('x.projet''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  300.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  301.                   ->addJoin('x.'.$typeUtilisateur'u'\Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
  302.                   ->setWhere(
  303.                       $type_jointure.' = :objet',
  304.                       ['objet' => $objet]
  305.                   )
  306.                   ->setRenderers($renderers)
  307.                   ->setOrder("x.id""desc")
  308.                   ->setSearch(true)
  309.                   ->setSearchFields([1234]);
  310.         return $datatable;
  311.     }
  312.     /**
  313.      * Grid action
  314.      * @return Response
  315.      */
  316.     /**
  317.      * @Route("/projetutilisateur/grid/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_liste_grid")
  318.      */
  319.     public function gridAction(Request $request$id ""$type ""$typeUtilisateur ""Datatable $datatableTranslatorInterface $translatorEntityManagerInterface $em)
  320.     {
  321.         if ($type == 'projet') {
  322.             $repo_objet $em->getRepository(Projet::class);
  323.             $objet      $repo_objet->find($id);
  324.         } elseif ($type == 'utilisateur') {
  325.             $repo_objet $em->getRepository(Utilisateur::class);
  326.             $objet      $repo_objet->find($id);
  327.         } elseif ($type == 'commande') {
  328.             $repo_objet $em->getRepository(Commande::class);
  329.             $objet      $repo_objet->find($id);
  330.         } elseif ($type == 'fiche') {
  331.             $objet $em->getRepository(Fiche::class)->find($id);
  332.         } elseif ($type == 'note') {
  333.             $objet $em->getRepository(Note::class)->find($id);
  334.         }
  335.         return $this->datatable($datatable$translator$em$objet$type$typeUtilisateur)->execute();
  336.     }
  337.     /**
  338.      * @Route("/projetutilisateur/supprimer/{id}", name="dtc_projet_utilisateur_supprimer")
  339.      */
  340.     public function supprimerAction(Request $requestProjetUtilisateur $projetUtilisateurEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator
  341.     ) {
  342.         $user $this->getUser();
  343.         $form $this->createForm(SupprimerProjetUtilisateurType::class, $projetUtilisateur);
  344.         $projet   $projetUtilisateur->getProjet();
  345.         $commande $projetUtilisateur->getCommande();
  346.         $fiche    $projetUtilisateur->getFiche();
  347.         $titre_modal $translator->trans("Demande de confirmation");
  348.         $errors "";
  349.         $form->handleRequest($request);
  350.         if ($form->isSubmitted()) {
  351.             $type_json "";
  352.             if ($form->isValid()) {
  353.                 $em->remove($projetUtilisateur);
  354.                 $em->flush();
  355.                 $url '#';
  356.                 if (is_object($commande)) {
  357.                     $url $this->generateUrl('dtc_commande_modifier', ["id" => $commande->getId(), "tab" => "equipe"]);
  358.                 } elseif (is_object($projet)) {
  359.                     $url $this->generateUrl('dtc_projet_modifier', ["id" => $projet->getId(), "tab" => "referents"]);
  360.                 }
  361.                 $table  $request->query->get('table');
  362.                 $retour = ['rendu' => '''valide' => '1''url' => $url];
  363.                 if ( ! empty($table)) {
  364.                     $retour['type']         = 'recharger_datatable';
  365.                     $retour['id_datatable'] = $table;
  366.                 } else {
  367.                     $this->addFlash(
  368.                         'warning',
  369.                         $translator->trans('Ce membre a été supprimé de l\'equipe!')
  370.                     );
  371.                 }
  372.                 return new JsonResponse($retour);
  373.                 //return new JsonResponse(array('type'=>$type_json,'rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
  374.             } else {
  375.                 $errors $validator->validate($projetUtilisateur);
  376.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $projetUtilisateur->getId(), 'type' => '']);
  377.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  378.             }
  379.         }
  380.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $projetUtilisateur->getId(), 'type' => '''errors' => $errors]);
  381.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  382.     }
  383. }