src/Controller/Notes/NoteController.php line 1551

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Notes;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Clients\Client;
  5. use App\Entity\Fournisseurs\Fournisseur;
  6. use App\Entity\GestionComerciale\Commande;
  7. use App\Entity\GestionComerciale\CommandeFournisseur;
  8. use App\Entity\Inventaires\Inventaire;
  9. use App\Entity\Kanban\Fiche;
  10. use App\Entity\Notes\Categorie;
  11. use App\Entity\Notes\Invitation;
  12. use App\Entity\Notes\Note;
  13. use App\Entity\Notes\Statut;
  14. use App\Entity\Utilisateur\Contact;
  15. use App\Entity\Utilisateur\Utilisateur;
  16. use App\Form\Notes\NoteType;
  17. use App\Form\Notes\SupprimerNoteType;
  18. use App\Library\Datatable\Util\Datatable;
  19. use App\Repository\Notes\NoteRepository;
  20. use App\Service\FO\Mailer;
  21. use App\Service\GestionComerciale\EmailService;
  22. use App\Service\Notes\NoteGoogleAgendaService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\Form\FormError;
  29. use Symfony\Component\Process\Process;
  30. use Symfony\Component\Process\Exception\ProcessFailedException;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Component\Validator\Validator\ValidatorInterface;
  33. use Symfony\Contracts\Translation\TranslatorInterface;
  34. class NoteController extends AbstractController
  35. {
  36.     /**
  37.      * @Route("/rappels", name="dtc_lister_rappel")
  38.      */
  39.     public function listeRappelAction(Request $requestEntityManagerInterface $entityManager)
  40.     {
  41.         //return false;
  42.         $user  $this->getUser();
  43.         $notes $entityManager->getRepository(Note::class)->getRappel($user);
  44.         $rendu $this->renderView('Notes/Note/template_note.html.twig', ['notes' => $notes]);
  45.         return new JsonResponse(['rendu' => $rendu]);
  46.     }
  47.     /**
  48.      * @Route("/rappels/termine/{id}/{type}", name="dtc_cloturer_rappel")
  49.      */
  50.     public function cloturerRappelAction(Request $requestNote $note$type ""EntityManagerInterface $em)
  51.     {
  52.         if ($type == "fermer") {
  53.             $note->setTermine(1);
  54.             $em->persist($note);
  55.             $em->flush();
  56.         } else {
  57.             $delai $request->query->get('delai');
  58.             if ($delai == "0") {
  59.                 $note->setTermine(1);
  60.                 $em->persist($note);
  61.                 $em->flush();
  62.             } else {
  63.                 $note->setTermine(0);
  64.                 $date = new \DateTime();
  65.                 if ($delai == "1H") {
  66.                     $date->add(new \DateInterval('PT60M'));
  67.                 } elseif ($delai == "5M") {
  68.                     $date->add(new \DateInterval('PT05M'));
  69.                 } else {
  70.                     $date->add(new \DateInterval('P'.$delai.'D'));
  71.                 }
  72.                 $note->setDateRappel($date);
  73.                 $em->persist($note);
  74.                 $em->flush();
  75.             }
  76.         }
  77.         return new JsonResponse(['rendu' => "1"]);
  78.     }
  79.     /**
  80.      * @Route("/note/kanban/fiche/{id}/nouveau", name="dtc_note_kanban_ajouter")
  81.      */
  82.     public function ajouterFicheKanbanAction(Request $requestFiche $ficheEntityManagerInterface $emValidatorInterface $validatorNoteGoogleAgendaService $serviceGoogleAgenda)
  83.     {
  84.         $user           $this->getUser();
  85.         $note           = new Note();
  86.         $categorie_note $em->getRepository(Categorie::class)->findAll();
  87.         $statutAfaire   $em->getRepository(Statut::class)->find(1);
  88.         $note->setStatut($statutAfaire);
  89.         $note->setUtilisateur($user);
  90.         if (is_object($fiche->getClient())) {
  91.             $note->setClient($fiche->getClient());
  92.         }
  93.         $dateNoteDebut = new \Datetime();
  94.         $dateNoteFin   = new \Datetime();
  95.         $note->setDateDebut($dateNoteDebut);
  96.         $dateNoteFin date_modify($dateNoteFin"+1 hour");
  97.         $type_json   "";
  98.         $currentPath "";
  99.         $currentPath $request->query->get('currentPath');
  100.         $note->setFiche($fiche);
  101.         $note->setDateFin($dateNoteFin);
  102.         $form   $this->createForm(NoteType::class, $note);
  103.         $errors "";
  104.         $form->handleRequest($request);
  105.         if ($form->isSubmitted()) {
  106.             /*
  107.             if(is_object($note->getStatut()) and $note->getStatut()->getId() == "1" and $note->getDateRappel() == NULL) {
  108.             $error = new FormError("Vous devez indiquer une date de rappel !");
  109.             $form->get('statut')->addError($error);
  110.           }
  111.           */
  112.             if ($form->isValid()) {
  113.                 if ($note->getLibelle() == "" and is_object($note->getCategorie())) {
  114.                     $note->setLibelle($note->getCategorie()->getLibelle());
  115.                 } elseif ($note->getLibelle() == "") {
  116.                     $note->setLibelle("Sans titre");
  117.                 }
  118.                 $url "";
  119.                 if ($note->getAlerte() == "") {
  120.                     $note->setDateRappel(null);
  121.                 } else {
  122.                     $dateRappel = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  123.                     $dateRappel->add(new \DateInterval('PT'.$note->getAlerte().'M'));
  124.                     $note->setDateRappel($dateRappel);
  125.                 }
  126.                 $em->persist($note);
  127.                 $em->flush();
  128.                 $serviceGoogleAgenda->ajouter($note);
  129.                 return new JsonResponse(
  130.                     ['type_json' => $type_json'rendu' => '''valide' => '1''url' => $url"errors" => $errors]
  131.                 );
  132.             } else {
  133.                 $errors $validator->validate($note);
  134.                 $errors $this->renderView('layout-errors.html.twig', ['errors' => $errors'form' => $form->createView()]);
  135.                 $rendu $this->renderView(
  136.                     'Notes/Note/ajouter_modal.html.twig',
  137.                     ['currentPath' => $currentPath'categorie_note' => $categorie_note'form' => $form->createView(), 'errors' => $errors"fiche" => $fiche]
  138.                 );
  139.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''errors' => $errors]);
  140.             }
  141.         }
  142.         return $this->render(
  143.             'Notes/Note/note_fiche.html.twig',
  144.             ['currentPath' => $currentPath'categorie_note' => $categorie_note'form' => $form->createView(), 'errors' => $errors"fiche" => $fiche]
  145.         );
  146.     }
  147.     /**
  148.      * @Route("/note/nouveau", name="dtc_note_ajouter")
  149.      */
  150.     public function ajouterAction(Request $requestEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validatorMailer $emailService)
  151.     {
  152.         $type_json   "";
  153.         $param       $request->query->all();
  154.         $titre_modal $translator->trans("Nouvelle Tâche");
  155.         $note            = new Note();
  156.         $categorie_note  $em->getRepository(Categorie::class)->findAll();
  157.         $statutAfaire    $em->getRepository(Statut::class)->find(1);
  158.         $repo_user       $em->getRepository(Utilisateur::class);
  159.         $repo_invitation $em->getRepository(Invitation::class);
  160.         $note->setStatut($statutAfaire);
  161.         $get        $request->query->all();
  162.         $dateDuJour = new \Datetime();
  163.         $dateNoteDebut = new \Datetime();
  164.         $dateNoteFin   = new \Datetime();
  165.         $note->setDateDebut($dateNoteDebut);
  166.         $dateNoteFin date_modify($dateNoteFin"+1 hour");
  167.         // $dateNote->add(new \DateInterval('PT1H'));
  168.         $currentPath "";
  169.         $currentPath $request->query->get('callback');
  170.         $type_tache "";
  171.         if (array_key_exists('type'$get) && $get["type"] != "") {
  172.             $type_tache $get["type"];
  173.         }
  174.         if (array_key_exists('type'$get) && $get["type"] == "commande" && array_key_exists('id'$get) && $get["id"] != "") {
  175.             $repo_commande $em->getRepository(Commande::class);
  176.             $obj           $repo_commande->find($get["id"]);
  177.             if (is_object($obj)) {
  178.                 $note->setCommande($obj);
  179.                 if (is_object($obj->getClient())) {
  180.                     $note->setClient($obj->getClient());
  181.                 }
  182.             }
  183.         } elseif (array_key_exists('type'$get) && $get["type"] == "fournisseur" && array_key_exists('id'$get) && $get["id"] != "") {
  184.             $repo_fournisseur $em->getRepository(Fournisseur::class);
  185.             $obj              $repo_fournisseur->find($get["id"]);
  186.             if (is_object($obj)) {
  187.                 $note->setFournisseur($obj);
  188.             }
  189.         } elseif (array_key_exists('type'$get) && $get["type"] == "client" && array_key_exists('id'$get) && $get["id"] != "") {
  190.             $repo_client $em->getRepository(Client::class);
  191.             $obj         $repo_client->find($get["id"]);
  192.             if (is_object($obj)) {
  193.                 $note->setClient($obj);
  194.             }
  195.         } elseif (array_key_exists('type'$get) && $get["type"] == "commandeFournisseur" && array_key_exists('id'$get) && $get["id"] != "") {
  196.             $repo_commande_fournisseur $em->getRepository(CommandeFournisseur::class);
  197.             $obj                       $repo_commande_fournisseur->find($get["id"]);
  198.             if (is_object($obj)) {
  199.                 $note->setCommandeFournisseur($obj);
  200.                 if (is_object($obj->getFournisseur())) {
  201.                     $note->setFournisseur($obj->getFournisseur());
  202.                 }
  203.             }
  204.         } elseif (array_key_exists('type'$get) && $get["type"] == "article" && array_key_exists('id'$get) && $get["id"] != "") {
  205.             $repo_article $em->getRepository(Article::class);
  206.             $obj          $repo_article->find($get["id"]);
  207.             if (is_object($obj)) {
  208.                 $note->setArticle($obj);
  209.             }
  210.         } elseif (array_key_exists('type'$get) && $get["type"] == "inventaire" && array_key_exists('id'$get) && $get["id"] != "") {
  211.             $repo_inventaire $em->getRepository(Inventaire::class);
  212.             $obj             $repo_inventaire->find($get["id"]);
  213.             if (is_object($obj)) {
  214.                 $note->setInventaire($obj);
  215.             }
  216.         }
  217.         $affaire    "";
  218.         $affaire_id $request->query->get('affaire');
  219.         if ($affaire_id != "") {
  220.             $repo_affaire $em->getRepository(Fiche::class);
  221.             $affaire      $repo_affaire->find($affaire_id);
  222.             if (is_object($affaire)) {
  223.                 $note->setFiche($affaire);
  224.                 if (is_object($affaire->getClient())) {
  225.                     $note->setClient($affaire->getClient());
  226.                     if (is_object($affaire->getContact())) {
  227.                         $note->setContact($affaire->getContact());
  228.                     }
  229.                 }
  230.             }
  231.         }
  232.         $note->setDateFin($dateNoteFin);
  233.         //$equipiers = $repo_user->findAll();
  234.         $equipiers   $repo_user->findBy(["visible" => 1"archive" => 0], ["prenom" => "asc"]);
  235.         $repo_client $em->getRepository(Client::class);
  236.         $client      "";
  237.         if (array_key_exists('client'$param)) {
  238.             $client $repo_client->find($param['client']);
  239.             if (is_object($client)) {
  240.                 $note->setClient($client);
  241.             }
  242.         } elseif (array_key_exists('email'$param) && is_array($param["email"]) && count($param["email"]) > 0) {
  243.             //echo "<div>EMAIL ".$param["email"][0]."</div>";
  244.             $email_recherche trim($param["email"][0]);
  245.             if ($email_recherche != "") {
  246.                 $repo_client  $em->getRepository(Client::class);
  247.                 $client_email $repo_client->findOneBy(["email" => $email_recherche]);
  248.                 if (is_object($client_email)) {
  249.                     $note->setClient($client_email);
  250.                     //echo "toto";
  251.                 } else {
  252.                     $repo_contact  $em->getRepository(Contact::class);
  253.                     $contact_email $repo_contact->findOneBy(["email" => $email_recherche]);
  254.                     if (is_object($contact_email) && is_object($contact_email->getClient())) {
  255.                         $note->setClient($contact_email->getClient());
  256.                         $note->setContact($contact_email);
  257.                     }
  258.                 }
  259.             }
  260.             if (is_object($note->getClient())) {
  261.                 $repo_affaire $em->getRepository(Fiche::class);
  262.                 $affaire      $repo_affaire->findOneBy(["client" => $note->getClient()], ["date" => "DESC"]);
  263.                 if (is_object($affaire)) {
  264.                     $note->setFiche($affaire);
  265.                 }
  266.             }
  267.         }
  268.         $sujet "";
  269.         if (array_key_exists('sujet'$param)) {
  270.             $note->setLibelle($param["sujet"]);
  271.             $sujet $param["sujet"];
  272.         }
  273.         $user $this->getUser();
  274.         $note->setUtilisateur($user);
  275.         //$form = $this->createForm(new NoteType($em), $note);
  276.         $form $this->createForm(NoteType::class, $note);
  277.         $errors "";
  278.         $form->handleRequest($request);
  279.         if ($form->isSubmitted()) {
  280.             /*
  281.             if(is_object($note->getStatut()) and $note->getStatut()->getId() == "1" and $note->getDateRappel() == NULL) {
  282.             $error = new FormError("Vous devez indiquer une date de rappel !");
  283.             $form->get('statut')->addError($error);
  284.           }
  285.           */
  286.             if ($form->isValid()) {
  287.                 $post $request->request->all();
  288.                 if ( ! is_object($note->getClient())) {
  289.                     if (array_key_exists('clientSelect'$post) && $post["clientSelect"] != '') {
  290.                         $post["clientSelect"] = substr($post["clientSelect"], 1, -1);
  291.                         $client               = new Client();
  292.                         $client->setRaisonSociale($post["clientSelect"]);
  293.                         $em->persist($client);
  294.                         $note->setClient($client);
  295.                         $em->flush();
  296.                     }
  297.                 }
  298.                 if ( ! is_object($note->getContact())) {
  299.                     if (array_key_exists('contactSelect'$post) && $post["contactSelect"] != '') {
  300.                         $post["contactSelect"] = substr($post["contactSelect"], 1, -1);
  301.                         $contact               = new Contact();
  302.                         $contact->setPrenom($post["contactSelect"]);
  303.                         $contact->setClient($note->getClient());
  304.                         $contact->setDefaut(false);
  305.                         $em->persist($contact);
  306.                         $note->setContact($contact);
  307.                     }
  308.                 }
  309.                 //print_r($post);
  310.                 if ($note->getLibelle() == "" and is_object($note->getCategorie())) {
  311.                     $note->setLibelle($note->getCategorie()->getLibelle());
  312.                 }
  313.                 if (is_object($client)) {
  314.                     $url $this->generateUrl('dtc_client_modifier', ["tab" => "notes""id" => $client->getId()]);
  315.                 } elseif ($currentPath == "agenda" or $currentPath == "agenda") {
  316.                     $url       "";
  317.                     $type_json "agenda";
  318.                 } elseif ($currentPath != "") {
  319.                     $url       $currentPath;
  320.                     $type_json "agenda";
  321.                 } else {
  322.                     $url "";
  323.                     //$url = $this->generateUrl('dtcfo_homepage', array());
  324.                 }
  325.                 $dateRappel "";
  326.                 if ($note->getAlerte() == "") {
  327.                     $note->setDateRappel(null);
  328.                 } else {
  329.                     $dateRappel = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  330.                     $dateRappel->sub(new \DateInterval('PT'.$note->getAlerte().'M'));
  331.                     $note->setDateRappel($dateRappel);
  332.                 }
  333.                 if (is_object($dateRappel) && $dateRappel $dateDuJour) {
  334.                     $note->setTermine(1);
  335.                 }
  336.                 $em->persist($note);
  337.                 $em->flush();
  338.                 // Gérer les invitations
  339.                 if (array_key_exists('invites'$post) && count($post["invites"]) > 0) {
  340.                     for ($ii 0$ii count($post["invites"]); $ii++) {
  341.                         $invite $repo_user->find($post["invites"][$ii]);
  342.                         if (is_object($invite)) {
  343.                             $invitation = new Invitation();
  344.                             $invitation->setNote($note);
  345.                             $invitation->setEmetteur($user);
  346.                             $invitation->setDestinataire($invite);
  347.                             $invitation->setJeton($invitation->generateRandomString());
  348.                             $em->persist($invitation);
  349.                             //$emailService->envoyerEmail($commande);
  350.                         }
  351.                     }
  352.                     $em->flush();
  353.                 }
  354.                 if (array_key_exists('invites'$post) && count($post["invites"]) > 0) {
  355.                     for ($ii 0$ii count($post["invites"]); $ii++) {
  356.                         $invite     $repo_user->find($post["invites"][$ii]);
  357.                         $invitation $repo_invitation->findOneBy(["note" => $note"destinataire" => $invite]);
  358.                         if (is_object($invite)) {
  359.                             $emailService->sendMailInvitation($note$invitation);
  360.                         }
  361.                     }
  362.                 }
  363.                 if ($note->getRecurrence() != "" && ! is_object($note->getParent())) {
  364.                     if ( ! is_null($note->getFinRecurrence())) {
  365.                         $dateFinRecurrence = new \Datetime($note->getFinRecurrence()->format('Y-m-d H:i:s'));
  366.                     } else {
  367.                         $dateFinRecurrence = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  368.                         $dateFinRecurrence->add(new \DateInterval('P3650D'));
  369.                     }
  370.                     $dateTemp = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  371.                     $dateDebutTemp = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  372.                     $dateFinTemp   = new \Datetime($note->getDateFin()->format('Y-m-d H:i:s'));
  373.                     if (is_object($note->getDateRappel())) {
  374.                         $dateRappelTemp = new \Datetime($note->getDateRappel()->format('Y-m-d H:i:s'));
  375.                     }
  376.                     $compteur_occurence 300;
  377.                     while ($dateTemp $dateFinRecurrence and $compteur_occurence 0) {
  378.                         $compteur_occurence--;
  379.                         $noteClonee = clone $note;
  380.                         if ($note->getRecurrence() == "jour") {
  381.                             $dateTemp->modify('+1 day');
  382.                             $dateFinTemp->modify('+1 day');
  383.                             if (is_object($note->getDateRappel())) {
  384.                                 $dateRappelTemp->modify('+1 day');
  385.                             }
  386.                             $dateDebutTemp->modify('+1 day');
  387.                         }
  388.                         if ($note->getRecurrence() == "semaine") {
  389.                             $dateTemp->modify('+1 week');
  390.                             $dateFinTemp->modify('+1 week');
  391.                             if (is_object($note->getDateRappel())) {
  392.                                 $dateRappelTemp->modify('+1 week');
  393.                             }
  394.                             $dateDebutTemp->modify('+1 week');
  395.                         }
  396.                         if ($note->getRecurrence() == "mois") {
  397.                             $dateTemp->modify('+1 month');
  398.                             $dateFinTemp->modify('+1 month');
  399.                             if (is_object($note->getDateRappel())) {
  400.                                 $dateRappelTemp->modify('+1 month');
  401.                             }
  402.                             $dateDebutTemp->modify('+1 month');
  403.                         }
  404.                         if ($note->getRecurrence() == "an") {
  405.                             $dateTemp->modify('+1 year');
  406.                             $dateFinTemp->modify('+1 year');
  407.                             if (is_object($note->getDateRappel())) {
  408.                                 $dateRappelTemp->modify('+1 year');
  409.                             }
  410.                             $dateDebutTemp->modify('+1 year');
  411.                         }
  412.                         $dateDebutTempBis = new \Datetime($dateDebutTemp->format('Y-m-d H:i:s'));
  413.                         $dateFinTempBis   = new \Datetime($dateFinTemp->format('Y-m-d H:i:s'));
  414.                         if (is_object($note->getDateRappel())) {
  415.                             $dateRappelTempBis = new \Datetime($dateRappelTemp->format('Y-m-d H:i:s'));
  416.                         }
  417.                         $noteClonee->setDateDebut($dateDebutTempBis);
  418.                         $noteClonee->setDateFin($dateFinTempBis);
  419.                         if (is_object($note->getDateRappel())) {
  420.                             $noteClonee->setDateRappel($dateRappelTempBis);
  421.                         }
  422.                         if (is_object($note->getDateRappel()) && $dateRappelTempBis $dateDuJour) {
  423.                             $noteClonee->setTermine(1);
  424.                         }
  425.                         /*
  426.                         $noteClonee->setDateDebut($dateDebutTemp);
  427.                         $noteClonee->setDateFin($dateFinTemp);
  428.                         $noteClonee->setDateRappel($dateRappelTemp);
  429.                         */
  430.                         $note->setParent($note);
  431.                         $noteClonee->setParent($note);
  432.                         //$serviceGoogleAgenda = $this->get('dtc.notegoogleagenda');
  433.                         //$serviceGoogleAgenda->ajouter($noteClonee);
  434.                         $em->persist($noteClonee);
  435.                         // Gérer les invitations
  436.                         if (array_key_exists('invites'$post) && count($post["invites"]) > 0) {
  437.                             for ($ii 0$ii count($post["invites"]); $ii++) {
  438.                                 $invite $repo_user->find($post["invites"][$ii]);
  439.                                 if (is_object($invite)) {
  440.                                     $invitation = new Invitation();
  441.                                     $invitation->setNote($noteClonee);
  442.                                     $invitation->setEmetteur($user);
  443.                                     $invitation->setDestinataire($invite);
  444.                                     $invitation->setJeton($invitation->generateRandomString());
  445.                                     $em->persist($invitation);
  446.                                     //$emailService->envoyerEmail($commande);
  447.                                 }
  448.                             }
  449.                             $em->flush();
  450.                             $em->refresh($noteClonee);
  451.                         }
  452.                         $em->flush();
  453.                         $em->refresh($noteClonee);
  454.                         //$builder = new ProcessBuilder();
  455.                         //$builder->setArguments(array('php', '../app/console', 'cron:synchronisationgoogleagenda','ajouter',$noteClonee->getId()));
  456.                         //$builder->getProcess()->start();
  457.                         $process  = new Process(['php''bin/console''cron:synchronisationgoogleagenda''ajouter'$noteClonee->getId()]);
  458.                         $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  459.                         $process->setOptions(['create_new_console' => true]);
  460.                         $process->start();
  461.                     }
  462.                 }
  463.                 $em->flush();
  464.                 $em->refresh($note);
  465.                 //$serviceGoogleAgenda = $this->get('dtc.notegoogleagenda');
  466.                 //$serviceGoogleAgenda->ajouter($note);
  467.                 /*
  468.                 $builder = new Process();
  469.                 $builder->setWorkingDirectory("../");
  470.                 $builder->setArguments(['php', 'bin/console', 'cron:synchronisationgoogleagenda', 'ajouter', $note->getId()]);
  471.                 $builder->run();
  472.                 */
  473.                 $process  = new Process(['php''bin/console''cron:synchronisationgoogleagenda''ajouter'$note->getId()]);
  474.                 $process->setWorkingDirectory($this->getParameter('kernel.project_dir'));
  475.                 $process->setOptions(['create_new_console' => true]);
  476.                 $process->start();
  477.                 /*
  478.                 // executes after the command finishes
  479.                 if (!$process->isSuccessful()) {
  480.                 throw new ProcessFailedException($process);
  481.               }
  482.               echo $process->getOutput();
  483.               */
  484.                 //exit;
  485.                 if (array_key_exists('origine'$get) && $get["origine"] == "webmail") {
  486.                     //echo "A";
  487.                     //exit;
  488.                     return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'ajout_note_webmail']);
  489.                 } elseif (array_key_exists('table'$get) && $get["table"] != "") {
  490.                     //echo "B";
  491.                     //exit;
  492.                     return new Response(
  493.                         json_encode(['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]),
  494.                         200,
  495.                         ['Content-Type' => 'application/json']
  496.                     );
  497.                 } else {
  498.                     //echo "C(".$type_json.":".$currentPath.")";
  499.                     //exit;
  500.                     return new JsonResponse(['type' => $type_json'rendu' => '''valide' => '1''url' => $url]);
  501.                 }
  502.                 return new JsonResponse(['type_json' => $type_json'rendu' => '''valide' => '1''url' => $url]);
  503.             } else {
  504.                 $errors $validator->validate($note);
  505.                 $rendu $this->renderView(
  506.                     'Notes/Note/ajouter_modal.html.twig',
  507.                     [
  508.                         'note'           => $note,
  509.                         'sujet'          => $sujet,
  510.                         'affaire'        => $affaire,
  511.                         'equipiers'      => $equipiers,
  512.                         'currentPath'    => $currentPath,
  513.                         'categorie_note' => $categorie_note,
  514.                         'form'           => $form->createView(),
  515.                         'errors'         => $errors,
  516.                         'type_tache'     => $type_tache,
  517.                     ]
  518.                 );
  519.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  520.             }
  521.         }
  522.         $rendu $this->renderView(
  523.             'Notes/Note/ajouter_modal.html.twig',
  524.             [
  525.                 'note'           => $note,
  526.                 'sujet'          => $sujet,
  527.                 'affaire'        => $affaire,
  528.                 'equipiers'      => $equipiers,
  529.                 'currentPath'    => $currentPath,
  530.                 'categorie_note' => $categorie_note,
  531.                 'form'           => $form->createView(),
  532.                 'errors'         => $errors,
  533.                 'type_tache'     => $type_tache,
  534.             ]
  535.         );
  536.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  537.     }
  538.     /**
  539.      * @Route("/note/modifier/{objet}/{id}/{type}", name="dtc_note_modifier")
  540.      */
  541.     public function modifierAction(Request $requestNote $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validatorMailer $emailService
  542.     ) {
  543.         $type_json       "";
  544.         $note            $objet;
  545.         $user            $this->getUser();
  546.         $param           $request->query->all();
  547.         $get             $request->query->all();
  548.         $categorie_note  $em->getRepository(Categorie::class)->findAll();
  549.         $repo_note       $em->getRepository(Note::class);
  550.         $repo_user       $em->getRepository(Utilisateur::class);
  551.         $repo_invitation $em->getRepository(Invitation::class);
  552.         $dateDuJour      = new \Datetime();
  553.         //$equipiers = $repo_user->findAll();
  554.         //$equipiers = $repo_user->findBy(array("visible"=>1,"visibileListingMail"=>1,"archive"=>0));
  555.         $equipiers $repo_user->findBy(["visible" => 1"archive" => 0], ["prenom" => "asc"]);
  556.         $invites   $repo_invitation->findBy(["note" => $note]);
  557.         $affaire "";
  558.         /*
  559.         if(is_object($note->getFiche())) {
  560.         $affaire = $note->getFiche();
  561.       }
  562.       */
  563.         if ($user->getId() != $note->getUtilisateur()->getId() and $note->getPrive()) {
  564.             $titre_modal $translator->trans("Note privé");
  565.             $rendu       $this->renderView('Notes/Note/note_prive.html.twig', ["errors" => "Cette note est privé, vous ne pouvez pas la visualiser"]);
  566.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  567.         }
  568.         if ($user->getId() != $note->getUtilisateur()->getId() and != 1) {
  569.             $titre_modal $translator->trans("Affichage tâche");
  570.             $errors      "";
  571.             $form        $this->createForm(NoteType::class, $note);
  572.             $rendu       $this->renderView(
  573.                 'Notes/Note/afficher_modal.html.twig',
  574.                 [
  575.                     'invites'        => $invites,
  576.                     'equipiers'      => $equipiers,
  577.                     'categorie_note' => $categorie_note,
  578.                     'note'           => $note,
  579.                     'errors'         => $errors,
  580.                     'form'           => $form->createView(),
  581.                 ]
  582.             );
  583.             return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  584.         }
  585.         $titre_modal $translator->trans("Modifier une tâche");
  586. //$note = new Note;
  587.         $client "";
  588.         if (array_key_exists('client'$param)) {
  589.             $repo_client $em->getRepository(Client::class);
  590.             $client      $repo_client->find($param['client']);
  591.             if (is_object($client)) {
  592.                 $note->setClient($client);
  593.             }
  594.         }
  595.         $user $this->getUser();
  596. //$note->setUtilisateur($user);
  597.         $form   $this->createForm(NoteType::class, $note);
  598.         $errors "";
  599.         $form->handleRequest($request);
  600.         if ($form->isSubmitted()) {
  601.             if ($form->isValid()) {
  602.                 $post $request->request->all();
  603.                 //print_r($post);
  604.                 //exit;
  605.                 if ($type == "liste") {
  606.                     $url $this->generateUrl('dtc_note_liste', []);
  607.                     //$this->addFlash('notice',$translator->trans('Note modifiée avec succès !'));
  608.                 } elseif ($type == "agenda") {
  609.                     $url       "";
  610.                     $type_json "agenda";
  611.                 } elseif (is_object($note->getClient())) {
  612.                     $url $this->generateUrl('dtc_client_modifier', ["tab" => "notes""id" => $note->getClient()->getId()]);
  613.                 } elseif ($type == "kanban") {
  614.                     //$rendu = $this->renderView('Notes/Note/ajouter_modal.html.twig', array('invites'=>$invites, 'equipiers'=>$equipiers,'categorie_note'=>$categorie_note,'form' => $form->createView(),'errors'=>$errors,'note'=>$note));
  615.                     //return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  616.                     $url       "";
  617.                     $type_json "";
  618.                 } else {
  619.                     $url $this->generateUrl('dtcfo_homepage', []);
  620.                 }
  621.                 if ($note->getAlerte() == "") {
  622.                     $note->setDateRappel(null);
  623.                 } else {
  624.                     $dateRappel = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  625.                     $dateRappel->add(new \DateInterval('PT'.$note->getAlerte().'M'));
  626.                     $note->setDateRappel($dateRappel);
  627.                 }
  628.                 if ($dateDuJour $note->getDateDebut()) {
  629.                     $note->setTermine(1);
  630.                 } else {
  631.                     $note->setTermine(0);
  632.                 }
  633.                 if ($note->getMessage() == "undefined") {
  634.                     $note->setMessage("");
  635.                 }
  636.                 $em->persist($note);
  637.                 $em->flush();
  638.                 $tab_nouveaux_invites = [];
  639.                 // Gérer les invitations
  640.                 if (array_key_exists('invites'$post) && count($post["invites"]) > 0) {
  641.                     for ($ii 0$ii count($post["invites"]); $ii++) {
  642.                         //echo "<div>Z</div>";
  643.                         $invite      $repo_user->find($post["invites"][$ii]);
  644.                         $deja_invite $repo_invitation->findOneBy(["note" => $note"destinataire" => $invite]);
  645.                         if (is_object($invite) and ! is_object($deja_invite)) {
  646.                             //echo "<div>A</div>";
  647.                             $invitation = new Invitation();
  648.                             $invitation->setNote($note);
  649.                             $invitation->setEmetteur($user);
  650.                             $invitation->setDestinataire($invite);
  651.                             $invitation->setJeton($invitation->generateRandomString());
  652.                             $em->persist($invitation);
  653.                             $tab_nouveaux_invites[] = $invite;
  654.                             //$emailService->envoyerEmail($commande);
  655.                         } else {
  656.                             //    echo "<div>B</div>";
  657.                             $invitation $repo_invitation->findOneBy(["note" => $note"destinataire" => $invite]);
  658.                             if (is_object($invite) and (is_null($invitation->getAccepte()) or $invitation->getAccepte() == 1)) {
  659.                                 $emailService->sendMailInvitationModifier($note$invitation);
  660.                             }
  661.                         }
  662.                     }
  663.                     $em->flush();
  664.                 }
  665.                 if (count($tab_nouveaux_invites) > 0) {
  666.                     foreach ($tab_nouveaux_invites as $nouveau_invite) {
  667.                         //echo "<div>R</div>";
  668.                         $invitation $repo_invitation->findOneBy(["note" => $note"destinataire" => $nouveau_invite]);
  669.                         if (is_object($invite)) {
  670.                             //echo "<div>T</div>";
  671.                             $emailService->sendMailInvitation($note$invitation);
  672.                         }
  673.                     }
  674.                 }
  675.                 //print_r($post);
  676.                 if (array_key_exists('operation'$post) && $post["operation"] == "futur" && is_object($note->getParent())) {
  677.                     //mail("thomas@noogaa.com","A tes edit ".$note->getId(),"tes edit ".$note->getId());
  678.                     $repo_note    $em->getRepository(Note::class);
  679.                     $notesEnfants $repo_note->findBy(["parent" => $note->getParent()]);
  680.                     if (count($notesEnfants) > 0) {
  681.                         foreach ($notesEnfants as $ne) {
  682.                             //if($ne->getDateDebut() > $note->getDateDebut() && $note->getId() != $ne->getId()) {
  683.                             if ($note->getId() != $ne->getId()) {
  684.                                 //mail("thomas@noogaa.com","B tes edit ".$note->getId(),"tes edit ".$note->getId());
  685.                                 $em->remove($ne);
  686.                                 $em->flush();
  687.                                 /*
  688.                                 // TODO refactor command
  689.                                 $builder = new ProcessBuilder();
  690.                                 $builder->setWorkingDirectory("../");
  691.                                 $builder->setArguments(['php', 'bin/console', 'cron:synchronisationgoogleagenda', 'supprimer', $ne->getId()]);
  692.                                 $builder->getProcess()->start();
  693.                                 */
  694.                             }
  695.                         }
  696.                     } else {
  697.                         //mail("thomas@noogaa.com","C tes edit ".$note->getId(),"tes edit ".$note->getId());
  698.                     }
  699.                 }
  700.                 //echo "BBBBBBBB==>".$note->getRecurrence();
  701.                 //if(!is_object($note->getParent())) {
  702.                 if ((array_key_exists('operation'$post) && $post["operation"] == "futur" && is_object($note->getParent())) or (array_key_exists(
  703.                                                                                                                                      'operation',
  704.                                                                                                                                      $post
  705.                                                                                                                                  ) && $post["operation"] == "")) {
  706.                     if ($note->getRecurrence() != "") {
  707.                         $note->setParent($note);
  708.                         if ( ! is_null($note->getFinRecurrence())) {
  709.                             $dateFinRecurrence = new \Datetime($note->getFinRecurrence()->format('Y-m-d H:i:s'));
  710.                         } else {
  711.                             $dateFinRecurrence = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  712.                             $dateFinRecurrence->add(new \DateInterval('P3650D'));
  713.                         }
  714.                         $dateTemp = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  715.                         $dateDebutTemp = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
  716.                         $dateFinTemp   = new \Datetime($note->getDateFin()->format('Y-m-d H:i:s'));
  717.                         if (is_object($note->getDateRappel())) {
  718.                             $dateRappelTemp = new \Datetime($note->getDateRappel()->format('Y-m-d H:i:s'));
  719.                         }
  720.                         $compteur_occurence 300;
  721.                         //echo "XXXXXXXX";
  722.                         while ($dateTemp $dateFinRecurrence and $compteur_occurence 0) {
  723.                             //echo "R";
  724.                             $compteur_occurence--;
  725.                             $noteClonee = clone $note;
  726.                             if ($note->getRecurrence() == "jour") {
  727.                                 $dateTemp->modify('+1 day');
  728.                                 $dateFinTemp->modify('+1 day');
  729.                                 if (is_object($note->getDateRappel())) {
  730.                                     $dateRappelTemp->modify('+1 day');
  731.                                 }
  732.                                 $dateDebutTemp->modify('+1 day');
  733.                             }
  734.                             if ($note->getRecurrence() == "semaine") {
  735.                                 $dateTemp->modify('+1 week');
  736.                                 $dateFinTemp->modify('+1 week');
  737.                                 if (is_object($note->getDateRappel())) {
  738.                                     $dateRappelTemp->modify('+1 week');
  739.                                 }
  740.                                 $dateDebutTemp->modify('+1 week');
  741.                             }
  742.                             if ($note->getRecurrence() == "mois") {
  743.                                 $dateTemp->modify('+1 month');
  744.                                 $dateFinTemp->modify('+1 month');
  745.                                 if (is_object($note->getDateRappel())) {
  746.                                     $dateRappelTemp->modify('+1 month');
  747.                                 }
  748.                                 $dateDebutTemp->modify('+1 month');
  749.                             }
  750.                             if ($note->getRecurrence() == "an") {
  751.                                 $dateTemp->modify('+1 year');
  752.                                 $dateFinTemp->modify('+1 year');
  753.                                 if (is_object($note->getDateRappel())) {
  754.                                     $dateRappelTemp->modify('+1 year');
  755.                                 }
  756.                                 $dateDebutTemp->modify('+1 year');
  757.                             }
  758.                             $dateDebutTempBis = new \Datetime($dateDebutTemp->format('Y-m-d H:i:s'));
  759.                             $dateFinTempBis   = new \Datetime($dateFinTemp->format('Y-m-d H:i:s'));
  760.                             if (is_object($note->getDateRappel())) {
  761.                                 $dateRappelTempBis = new \Datetime($dateRappelTemp->format('Y-m-d H:i:s'));
  762.                             }
  763.                             $noteClonee->setDateDebut($dateDebutTempBis);
  764.                             $noteClonee->setDateFin($dateFinTempBis);
  765.                             if (is_object($note->getDateRappel())) {
  766.                                 $noteClonee->setDateRappel($dateRappelTempBis);
  767.                             }
  768.                             if (is_object($note->getDateRappel()) && $dateRappelTempBis $dateDuJour) {
  769.                                 $noteClonee->setTermine(1);
  770.                             }
  771.                             /*
  772.                             $noteClonee->setDateDebut($dateDebutTemp);
  773.                             $noteClonee->setDateFin($dateFinTemp);
  774.                             $noteClonee->setDateRappel($dateRappelTemp);
  775.                             */
  776.                             $note->setParent($note);
  777.                             $noteClonee->setParent($note);
  778.                             $noteClonee->setIdImport(null);
  779.                             $em->persist($noteClonee);
  780.                             $em->flush();
  781.                             $em->refresh($noteClonee);
  782.                             // TODO refactor command
  783.                             /*
  784.                             $builder = new ProcessBuilder();
  785.                             $builder->setWorkingDirectory("../");
  786.                             $builder->setArguments(['php', 'bin/console', 'cron:synchronisationgoogleagenda', 'ajouter', $noteClonee->getId()]);
  787.                             $builder->getProcess()->start();
  788.                             */
  789.                         }
  790.                         $em->flush();
  791.                     }
  792.                 }
  793.                 //$serviceGoogleAgenda = $this->get('dtc.notegoogleagenda');
  794.                 //$serviceGoogleAgenda->modifier($note);
  795.                 $em->refresh($note);
  796.                 // TODO refactor command
  797.                 /*
  798.                 $builder = new ProcessBuilder();
  799.                 $builder->setWorkingDirectory("../");
  800.                 $builder->setArguments(['php', 'bin/console', 'cron:synchronisationgoogleagenda', 'modifier', $note->getId()]);
  801.                 $builder->getProcess()->start();
  802.                 */
  803.                 $url "";
  804.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  805.                     return new JsonResponse(
  806.                         ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  807.                     );
  808.                 } else {
  809.                     if ($type == "liste") {
  810.                         $this->addFlash('notice'$translator->trans('Note modifiée avec succès !'));
  811.                     }
  812.                     return new JsonResponse(['type' => $type_json'rendu' => '''valide' => '1''url' => $url]);
  813.                 }
  814.                 return new JsonResponse(['type' => $type_json'rendu' => '''valide' => '1''url' => $url]);
  815.             } else {
  816.                 $errors $validator->validate($note);
  817.                 $rendu  $this->renderView(
  818.                     'Notes/Note/ajouter_modal.html.twig',
  819.                     [
  820.                         'affaire'        => $affaire,
  821.                         'invites'        => $invites,
  822.                         'equipiers'      => $equipiers,
  823.                         'categorie_note' => $categorie_note,
  824.                         'form'           => $form->createView(),
  825.                         'errors'         => $errors,
  826.                         'note'           => $note,
  827.                     ]
  828.                 );
  829.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  830.             }
  831.         }
  832.         $rendu $this->renderView(
  833.             'Notes/Note/ajouter_modal.html.twig',
  834.             [
  835.                 'affaire'        => $affaire,
  836.                 'invites'        => $invites,
  837.                 'equipiers'      => $equipiers,
  838.                 'categorie_note' => $categorie_note,
  839.                 'form'           => $form->createView(),
  840.                 'errors'         => $errors,
  841.                 'note'           => $note,
  842.             ]
  843.         );
  844.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  845.     }
  846.     /**
  847.      * @Route("/note/supprimer/{objet}/{id}/{type}", name="dtc_note_supprimer")
  848.      */
  849.     public function supprimerAction(Request            $requestNote $objet$id$typeEntityManagerInterface $emTranslatorInterface $translatorMailer $mailer,
  850.                                     ValidatorInterface $validator
  851.     ) {
  852.         $note $objet;
  853.         $form $this->createForm(SupprimerNoteType::class, $note);
  854.         $get  $request->query->all();
  855.         /* if($user->getId() != $note->getUtilisateur()->getId()) { à changer
  856.         $titre_modal=$translator->trans("Demande de confirmation");
  857.         $erreur = "Cette note a été mise en ligne par ".$note->getUtilisateur()->getPrenom()." ".$note->getUtilisateur()->getNom().", vous ne pouvez pas la supprimer.";
  858.         $rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', array('errors'=>$erreur));
  859.         return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
  860.       }*/
  861.         $titre_modal $translator->trans("Demande de confirmation");
  862.         $errors "";
  863.         $form->handleRequest($request);
  864.         if ($form->isSubmitted() && $form->isValid()) {
  865.             $type_json "";
  866.             if ($form->isValid()) {
  867.                 $post $request->request->all();
  868.                 if (array_key_exists('operation'$post) && $post["operation"] == "futur" && is_object($note->getParent())) {
  869.                     $repo_note    $em->getRepository(Note::class);
  870.                     $notesEnfants $repo_note->findBy(["parent" => $note->getParent()]);
  871.                     if (count($notesEnfants) > 0) {
  872.                         foreach ($notesEnfants as $ne) {
  873.                             if ($ne->getDateDebut() > $note->getDateDebut()) {
  874.                                 // TODO refactor command
  875. //                                $builder = new ProcessBuilder();
  876. //                                $builder->setWorkingDirectory("../");
  877. //                                $builder->setArguments(array('php', 'bin/console', 'cron:synchronisationgoogleagenda', 'supprimer', $ne->getId()));
  878. //                                $builder->getProcess()->start();
  879.                                 $em->remove($ne);
  880.                                 //$serviceGoogleAgenda = $this->get('dtc.notegoogleagenda');
  881.                                 //$serviceGoogleAgenda->supprimer($ne);
  882.                                 /*
  883.                                 $builder = new ProcessBuilder();
  884.                                 $builder->setArguments(array('php', '../bin/console', 'cron:synchronisationgoogleagenda','supprimer',$ne->getId()));
  885.                                 $builder->getProcess()->start();
  886.                                 */
  887.                             }
  888.                         }
  889.                     }
  890.                 }
  891.                 $repo_invitation $em->getRepository(Invitation::class);
  892.                 $invites         $repo_invitation->findBy(["note" => $note]);
  893.                 if (count($invites) > 0) {
  894.                     foreach ($invites as $inv) {
  895.                         //$emailService->sendMailInvitation($note,$invite);
  896.                         if (is_null($inv->getAccepte()) or $inv->getAccepte() == "1") {
  897.                             $mailer->sendMailInvitationAnnule($note$inv);
  898.                         }
  899.                     }
  900.                 }
  901.                 // TODO refactor commmand
  902. //                $builder = new ProcessBuilder();
  903. //                $builder->setWorkingDirectory("../");
  904. //                $builder->setArguments(array('php', 'bin/console', 'cron:synchronisationgoogleagenda', 'supprimer', $note->getId()));
  905. //                $builder->getProcess()->start();
  906.                 $em->remove($note);
  907.                 $em->flush();
  908.                 if ($type == "liste") {
  909.                     $url $this->generateUrl('dtc_note_liste', []);
  910.                 } elseif ($type == "agenda") {
  911.                     $url       "";
  912.                     $type_json "agenda";
  913.                 } elseif (is_object($note->getClient())) {
  914.                     $url $this->generateUrl('dtc_client_modifier', ["tab" => "notes""id" => $note->getClient()->getId()]);
  915.                 } else {
  916.                     $url $this->generateUrl('dtcfo_homepage', []);
  917.                 }
  918.                 //$serviceGoogleAgenda = $this->get('dtc.notegoogleagenda');
  919.                 //$serviceGoogleAgenda->supprimer($note);
  920.                 /*
  921.                 $builder = new ProcessBuilder();
  922.                 $builder->setArguments(array('php', '../bin/console', 'cron:synchronisationgoogleagenda','supprimer',$note->getId()));
  923.                 $builder->getProcess()->start();
  924.                 */
  925.                 $url "";
  926.                 if (array_key_exists('table'$get) && $get["table"] != "") {
  927.                     return new JsonResponse(
  928.                         ['rendu' => '''valide' => '1''url' => $url'type' => 'recharger_datatable''id_datatable' => $get["table"]]
  929.                     );
  930.                 } else {
  931.                     if ($type != "agenda") {
  932.                         $this->addFlash('notice'$translator->trans('Note supprimée avec succès !'));
  933.                     }
  934.                     return new JsonResponse(['type' => $type_json'rendu' => '''valide' => '1''url' => $url]);
  935.                 }
  936.             } else {
  937.                 $errors $validator->validate($note);
  938.                 $rendu  $this->renderView(
  939.                     'Notes/Note/supprimer.html.twig',
  940.                     ['form' => $form->createView(), 'errors' => $errors'id' => $note->getId(), 'note' => $note'type' => '']
  941.                 );
  942.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  943.             }
  944.         }
  945.         $rendu $this->renderView('Notes/Note/supprimer.html.twig', ['form' => $form->createView(), 'id' => $note->getId(), 'type' => '''errors' => $errors'note' => $note]
  946.         );
  947.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  948.     }
  949.     /**
  950.      * @Route("/note/client", name="dtc_note_liste")
  951.      * @Route("/note/", name="dtc_note_liste2")
  952.      */
  953.     public function listerAction(Request $requestDatatable $datatableTranslatorInterface $translatorEntityManagerInterface $em)
  954.     {
  955.         $user        $this->getUser();
  956.         $categorie   $request->query->get('cat');
  957.         $param       $request->query->all();
  958.         $repo_statut $em->getRepository(Statut::class);
  959.         $statut      null;
  960.         if (array_key_exists('statut'$param)) {
  961.             $statut $repo_statut->find($param["statut"]);
  962.         }
  963.         $tableau_class_cellule   = [];
  964.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => false"orderable" => false"searchable" => false];
  965.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => false"orderable" => false"searchable" => false];
  966.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [2], "visible" => true"orderable" => false"searchable" => false];
  967.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [9], "visible" => true"orderable" => false"searchable" => false];
  968.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [11], "visible" => true"orderable" => false"searchable" => false];
  969.         //$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>false,"orderable"=>false,"searchable"=> false);
  970.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","id"),"orderable"=>true,"searchable"=> false);
  971.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","message"),"orderable"=>true,"searchable"=> false);
  972.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(3),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","cat"),"orderable"=>true,"searchable"=> false);
  973.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(4),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","client"),"orderable"=>true,"searchable"=> false);
  974.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","contact"),"orderable"=>true,"searchable"=> false);
  975.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(6),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","date"),"orderable"=>true,"searchable"=> false);
  976.         //$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(7),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCNotesBundle:Note","rappel"),"orderable"=>true,"searchable"=> false);
  977.         //$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(8),"visible"=>true);
  978.         $tableau_class_cellule   = [];
  979.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [0], "visible" => false"orderable" => false"searchable" => false];
  980.         $tableau_class_cellule[] = ["className" => "colonne_id""targets" => [1], "visible" => false"orderable" => false"searchable" => false];
  981.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [2], "visible" => true"orderable" => true"searchable" => false];
  982.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [3], "visible" => true"orderable" => true"searchable" => false];
  983.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [4], "visible" => true"orderable" => true"searchable" => false];
  984.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [5], "visible" => true"orderable" => true"searchable" => false];
  985.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [6], "visible" => true"orderable" => true"searchable" => false];
  986.         $tableau_class_cellule[] = ["className" => "colonne_id text-center""targets" => [7], "visible" => true"orderable" => true"searchable" => false];
  987.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [8], "visible" => true"orderable" => true"searchable" => false];
  988.         $tableau_class_cellule[] = ["className" => "colonne_id ""targets" => [9], "visible" => true"orderable" => false"searchable" => false];
  989.         $this->datatable($request$datatable$translator);
  990.         $parametres = [];
  991.         if ( ! array_key_exists('equipiers'$param)) {
  992.             $param['equipiers'] = [$user->getId()];
  993.         }
  994.         if ( ! array_key_exists('statut'$param)) {
  995.             $param['statut'] = 1;//à faire
  996.         }
  997.         //$parametres["parametres"] = $param;
  998.         $listeCategorieNote $em->getRepository(Categorie::class)->findAll();
  999.         $repo_user $em->getRepository(Utilisateur::class);
  1000.         //$equipiers = $repo_user->findAll();
  1001.         //$equipiers = $repo_user->findBy(array("visible"=>1,"visibileListingMail"=>1,"archive"=>0));
  1002.         $equipiers $repo_user->findBy(["visible" => 1"archive" => 0], ["prenom" => "asc"]);
  1003.         return $this->render('Notes/Note/lister.html.twig', [
  1004.             'listeCategorieNote'  => $listeCategorieNote,
  1005.             'categorie'           => $categorie,
  1006.             'parametres'          => $param,
  1007.             'statut'              => $statut,
  1008.             'statuts'             => $repo_statut->findAll(),
  1009.             'tableauClassColonne' => $tableau_class_cellule,
  1010.             'equipiers'           => $equipiers,
  1011.         ]);
  1012.     }
  1013.     /**
  1014.      * @Route("/note/grid", name="dtc_note_liste_grid")
  1015.      */
  1016.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  1017.     {
  1018.         return $this->datatable($request$datatable$translator)->execute();
  1019.     }
  1020.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  1021.     {
  1022.         $param $request->query->all();
  1023.         //var_dump($param);
  1024.         $user $this->getUser();
  1025.         $datatable->setDatatableId('dta-notes-clients')
  1026.                   ->setEntity(Note::class, "x")
  1027.                   ->setFields(
  1028.                       [
  1029.                           $translator->trans("ID")            => 'x.id',
  1030.                           $translator->trans("Date échéance") => 'x.dateDebut',
  1031.                           //$translator->trans("Offre")    => 'f.reference',
  1032.                           //$translator->trans("Tunnel")    => 'k.libelle',
  1033.                           $translator->trans("Client")  => 'cl.nom',
  1034.                           $translator->trans("Titre")   => 'x.libelle',
  1035.                           $translator->trans("Type")    => 'cn.libelle',
  1036.                           $translator->trans("Contact") => 'c.nom',
  1037.                           $translator->trans("Statut")  => 's.libelle',
  1038.                           $translator->trans("Auteur")  => 'u.nom',
  1039.                           $translator->trans("Actions") => 'x.id',
  1040.                           "_identifier_"                => 'x.id',
  1041.                       ]
  1042.                   )
  1043.             //->addJoin('x.fiche', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1044.             //->addJoin('f.kanban', 'k', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1045.                   ->addJoin('x.categorie''cn'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1046.                   ->addJoin('x.statut''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1047.                   ->addJoin('x.contact''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1048.                   ->addJoin('x.client''cl'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1049.                   ->addJoin('x.utilisateur''u'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1050.                   ->setRenderers(
  1051.                       [
  1052.                           => [
  1053.                               'view'   => 'FO/DataTable/heure.html.twig',
  1054.                               'params' => [],
  1055.                           ],
  1056.                           => [
  1057.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1058.                               'params' => [
  1059.                                   'edit_route'   => 'dtc_client_modifier',
  1060.                                   'typeDocument' => 'client',
  1061.                               ],
  1062.                           ],
  1063.                           => [
  1064.                               'view'   => 'FO/DataTable/titre_activite.html.twig',
  1065.                               'params' => [
  1066.                                   'edit_route'      => 'dtc_note_modifier',
  1067.                                   'supprimer_route' => 'dtc_note_supprimer',
  1068.                                   //'id'    => $client->getId(),
  1069.                                   'width_modal'     => 900,
  1070.                                   'type'            => "liste",
  1071.                                   'objet'           => Note::class,
  1072.                               ],
  1073.                           ],
  1074.                           => [
  1075.                               'view'   => 'FO/DataTable/type_activite.html.twig',
  1076.                               'params' => [],
  1077.                           ],
  1078.                           => [
  1079.                               'view'   => 'FO/DataTable/contact.html.twig',
  1080.                               'params' => [],
  1081.                           ],
  1082.                           => [
  1083.                               'view'   => 'FO/DataTable/utilisateur.html.twig',
  1084.                               'params' => [],
  1085.                           ],
  1086.                           => [
  1087.                               'view'   => 'FO/DataTable/actions_activites_modal.html.twig',
  1088.                               'params' => [
  1089.                                   'edit_route'      => 'dtc_note_modifier',
  1090.                                   'supprimer_route' => 'dtc_note_supprimer',
  1091.                                   //'id'    => $client->getId(),
  1092.                                   'width_modal'     => 900,
  1093.                                   'type'            => "liste",
  1094.                                   'objet'           => Note::class,
  1095.                                   'table'           => "dta-notes-clients",
  1096.                               ],
  1097.                           ],
  1098.                       ]
  1099.                   )
  1100.                   ->setOrder("x.dateDebut""desc")
  1101.                   ->setSearch(true)
  1102.                   ->setSearchFields([2])
  1103.                   ->setMultiple(
  1104.                       [
  1105.                           'delete' => [
  1106.                               'title' => $translator->trans('Non disponible'),
  1107.                               'route' => 'dtc_commande_liste_supprimer',
  1108.                           ],
  1109.                       ]
  1110.                   );
  1111.         $where      "";
  1112.         $where      "(x.prive = :prive OR x.prive IS NULL OR x.utilisateur = :utilisateur) AND (x.categorie != :categorieintervention or x.categorie is null) AND x.statut = :statut";
  1113.         $parameters = ["prive" => 0"utilisateur" => $user"categorieintervention" => 8'statut' => 1];
  1114.         $where      "(x.categorie NOT IN (:categorieintervention) or x.categorie IS NULL) and (x.modifiable is null or x.modifiable=1)";
  1115.         $parameters = ["categorieintervention" => [8]];
  1116.         //dump($param);
  1117.         if (array_key_exists('parametres'$param)) {
  1118.             if (array_key_exists('affaire'$param["parametres"]) and $param["parametres"]["affaire"] > 0) {
  1119.                 $parameters["affaire"] = $param["parametres"]["affaire"];
  1120.                 if ($where != "") {
  1121.                     $where .= " AND";
  1122.                 }
  1123.                 $where .= " x.fiche >= :affaire";
  1124.             }
  1125.             if (array_key_exists('cat_activites_hidden'$param["parametres"]) and $param["parametres"]["cat_activites_hidden"] != "") {
  1126.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1127.                 $parameters["cat_activite"] = $param["parametres"]["cat_activites_hidden"];
  1128.                 if ($where != "") {
  1129.                     $where .= " AND ";
  1130.                 }
  1131.                 $where .= "cn.id = :cat_activite";
  1132.             }
  1133.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  1134.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  1135.                 $parameters["client"] = $param["parametres"]["client"];
  1136.                 if ($where != "") {
  1137.                     $where .= " AND ";
  1138.                 }
  1139.                 $where .= "x.client = :client";
  1140.             }
  1141.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] > 0) {
  1142.                 $debut \DateTime::createFromFormat('d/m/Y'$param["parametres"]['date_debut']);
  1143.                 $debut->setTime(000000);
  1144.                 $parameters["debut"] = $debut;
  1145.                 if ($where != "") {
  1146.                     $where .= " AND";
  1147.                 }
  1148.                 $where .= " x.dateDebut >= :debut";
  1149.             }
  1150.             if (array_key_exists('equipiers'$param["parametres"]) and count($param["parametres"]["equipiers"]) > 0) {
  1151.                 if ($where != "") {
  1152.                     $where .= " AND";
  1153.                 }
  1154.                 $where                     .= " x.utilisateur IN (:equipiers) AND (x.prive = :prive OR x.prive IS NULL OR x.utilisateur = :utilisateur)";
  1155.                 $parameters["equipiers"]   = $param["parametres"]["equipiers"];
  1156.                 $parameters["utilisateur"] = $user;
  1157.                 $parameters["prive"]       = 0;
  1158.                 //echo "AAAA";
  1159.             }
  1160.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] > 0) {
  1161.                 $fin \DateTime::createFromFormat('d/m/Y'$param["parametres"]['date_fin']);
  1162.                 $fin->setTime(235959);
  1163.                 $parameters["fin"] = $fin;
  1164.                 if ($where != "") {
  1165.                     $where .= " AND";
  1166.                 }
  1167.                 $where .= " x.dateDebut <= :fin";
  1168.             }
  1169.             if (array_key_exists('statut'$param["parametres"]) and $param["parametres"]["statut"] > 0) {
  1170.                 $parameters["statut"] = $param["parametres"]["statut"];
  1171.                 if ($where != "") {
  1172.                     $where .= " AND";
  1173.                 }
  1174.                 $where .= " s.id = :statut";
  1175.             }
  1176.             if (array_key_exists('cat'$param["parametres"]) and $param["parametres"]["cat"] > 0) {
  1177.                 $parameters["cat"] = $param["parametres"]["cat"];
  1178.                 if ($where != "") {
  1179.                     $where .= " AND";
  1180.                 }
  1181.                 $where .= " cn.id = :cat";
  1182.             }
  1183.         }
  1184.         if ($where != '') {
  1185.             //echo $where."<br/><br/>";
  1186.             //print_r($param) ;
  1187.             //exit;
  1188.             $datatable->setWhere($where$parameters);
  1189.         }
  1190.         return $datatable;
  1191.     }
  1192.     /**
  1193.      * @Route("/tache/charger-tableau/{id}/{type}", name="dtc_tache_article_charger_tableau")
  1194.      * @Route("/tache/charger-tableau/{id}/{type}", name="dtc_tache_client_charger_tableau")
  1195.      * @Route("/tache/charger-tableau/{id}/{type}", name="dtc_tache_fournisseur_charger_tableau")
  1196.      * @Route("/tache/charger-tableau/{id}/{type}", name="dtc_tache_commandeFournisseur_charger_tableau")
  1197.      * @Route("/tache/charger-tableau/{id}/{type}", name="dtc_tache_commande_charger_tableau")
  1198.      * @Route("/note/charger-tableau/{id}/{type}", name="dtc_note_charger_tableau")
  1199.      */
  1200.     public function chargerTableauAction(Request $request$id "0"$type ""EntityManagerInterface $em)
  1201.     {
  1202.         $objet null;
  1203.         if ($type == "article") {
  1204.             $repo_objet $em->getRepository(Article::class);
  1205.             $objet      $repo_objet->find($id);
  1206.         } elseif ($type == "client") {
  1207.             $repo_objet $em->getRepository(Client::class);
  1208.             $objet      $repo_objet->find($id);
  1209.         } elseif ($type == "commande") {
  1210.             $repo_objet $em->getRepository(Commande::class);
  1211.             $objet      $repo_objet->find($id);
  1212.         } elseif ($type == "commandeFournisseur") {
  1213.             $repo_objet $em->getRepository(CommandeFournisseur::class);
  1214.             $objet      $repo_objet->find($id);
  1215.         } elseif ($type == "fournisseur") {
  1216.             $repo_objet $em->getRepository(Fournisseur::class);
  1217.             $objet      $repo_objet->find($id);
  1218.         }
  1219.         $rendu $this->renderView('Notes/Note/charger_tableau.html.twig', ["id" => $id"type" => $type"objet" => $objet]);
  1220.         return new JsonResponse(['rendu' => $rendu]);
  1221.     }
  1222. }