src/Controller/Client/JobCardController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Client;
  3. use App\Entity\User;
  4. use DateTimeImmutable;
  5. use App\Entity\JobCard;
  6. use App\Entity\Service;
  7. use App\Entity\Historique;
  8. use App\Form\EtatsDesLieuxJobCardType;
  9. use App\Form\JobCardModificationFormType;
  10. use App\Form\ModificationJobcardClientType;
  11. use App\Form\RegistrationType;
  12. use App\Repository\HistoriqueRepository;
  13. use App\Repository\JobCardRepository;
  14. use App\Services\SendMail;
  15. use Symfony\Component\Mime\Email;
  16. use Symfony\Config\FrameworkConfig;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Validator\Constraints\Length;
  23. use Symfony\Component\String\Slugger\SluggerInterface;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  26. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  27. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  28. /**
  29.  * Gestion de des jobCard
  30.  */
  31. class JobCardController extends AbstractController
  32. {
  33.     /**
  34.      * cette methode affiche les jobcard de l'utilisateur connecté
  35.      * et le nombre de jobcard qui ont le status soumis.
  36.      *
  37.      * @param JobCardRepository $jobCardRepository
  38.      * @param PaginatorInterface $paginator
  39.      * @param Request $request
  40.      * @return Response
  41.      */
  42.     #[Route('/jobcard/index'name'app.index')]
  43.     public function index(JobCardRepository $jobCardRepositoryPaginatorInterface $paginatorRequest $request): Response
  44.     {
  45.         if (!$this->getUser()) {
  46.             throw new UserNotFoundException();
  47.         }
  48.         $this->denyAccessUnlessGranted('ROLE_USER');
  49.         # a l'aide de la pagination on recupère les jobcards créer par l'utilisateur connecté
  50.         $jobcards $paginator->paginate(
  51.             $jobCardRepository->findBy(['user' => $this->getUser()], ['createdAt' => 'desc']),
  52.             $request->query->getInt('page'1), /*page number*/
  53.             /*limit per page*/
  54.         );
  55.         # On récupère tous les jobcards de l'user connecté dont leurs status sont à soumis
  56.         $qb $jobCardRepository->createQueryBuilder('j')
  57.             ->where('j.status = :soumis')
  58.             ->andWhere('j.user = :user')
  59.             ->setParameter('soumis'JobCard::SOUMIS)
  60.             ->setParameter('user'$this->getUser())
  61.             ->getQuery()
  62.             ->getResult();
  63.         return $this->render('Client/home.html.twig', [
  64.             'jobcards' => $jobcards,
  65.             'total' => count($qb)
  66.         ]);
  67.     }
  68.     /**
  69.      * Cette methode permet de faire la création d'un jobcard
  70.      * A savoir elle prend en compte l'enregistrement des fichiers
  71.      * Et l'enregistrement de l'historique de création du jobcard.
  72.      *
  73.      * @param EntityManagerInterface $em
  74.      * @param Request $request
  75.      * @param SluggerInterface $slugger
  76.      * @return Response
  77.      */
  78.     #[Route('/jobcard/nouveau'name'jobcard.new')]
  79.     public function create(EntityManagerInterface $emRequest $requestSluggerInterface $slugger): Response
  80.     {
  81.         if (!$this->getUser()) {
  82.             throw new UserNotFoundException();
  83.         }
  84.         $this->denyAccessUnlessGranted('ROLE_USER');
  85.         #Création du formulaire pour la création du jobcard
  86.         $jobcard = new JobCard();
  87.         $form $this->createForm(RegistrationType::class, $jobcard);
  88.         $form->handleRequest($request);
  89.         if ($form->isSubmitted()) {
  90.             # Enrégistrement des photos télécharger par le client
  91.             $photo $form->get('photo')->getData();
  92.             if ($photo) {
  93.                 for ($i 0$i count($photo); $i++) {
  94.                     $nomOrigineFichier[$i] = pathinfo($photo[$i]->getClientOriginalName(), PATHINFO_FILENAME);
  95.                     $safeFilename[$i] = $slugger->slug($nomOrigineFichier[$i]);
  96.                     $nouveauNom[$i] = $safeFilename[$i] . '-' uniqid() . '.' $photo[$i]->guessExtension();
  97.                     try {
  98.                         $photo[$i]->move(
  99.                             $this->getParameter('images_directory'),
  100.                             $nouveauNom[$i]
  101.                         );
  102.                     } catch (FileException $e) {
  103.                     }
  104.                 }
  105.                 $jobcard->setImageFile($nouveauNom);
  106.             }
  107.             #Récupération des différents services selectionés par le client
  108.             $services $form->get('services')->getData();
  109.             #Ajouter chaque service selectioné dans le jobcard
  110.             for ($i 0$i count($services); $i++) {
  111.                 $jobcard->addService($services[$i]);
  112.             }
  113.             #Récupération de tous les champs soumis du formulaire
  114.             $jobcard $form->getData();
  115.             #Ajout l'utilisateur connecté au jobcard encours d'enregistrement
  116.             $jobcard->setUser($this->getUser());
  117.             #Sauvegarde des données dans la BD pour enfin récuperer l'id
  118.             $em->persist($jobcard);
  119.             $em->flush();
  120.             #Mise en place de l'enregistrement d'un jobcard avec un numéro unique à l'aide de son id
  121.             if ($jobcard->getId() < 10) {
  122.                 $numero 'JB-00' $jobcard->getId();
  123.                 $jobcard->setNumero($numero);
  124.             } else if ($jobcard->getId() >= 10 && $jobcard->getId() < 100) {
  125.                 $numero 'JB-0' $jobcard->getId();
  126.                 $jobcard->setNumero($numero);
  127.             } else {
  128.                 $numero 'JB-' $jobcard->getId();
  129.                 $jobcard->setNumero($numero);   
  130.             }
  131.             # Création de l'historique et enregistrement des informationn dans la BD
  132.             $historique = new Historique();
  133.             $historique
  134.                 ->setAction('création du jobCard')
  135.                 ->setJobcard($jobcard)
  136.                 ->setProfil('Client')
  137.                 ->setUser($this->getUser());
  138.             $em->persist($historique);   
  139.             $em->flush();
  140.             $this->addFlash(  
  141.                 'success',
  142.                 "La création du jobcard à aboutit et enrégistré avec un numéro unique " $jobcard->getNumero(),
  143.             );
  144.             return $this->redirectToRoute('app.index');
  145.         }
  146.         return $this->render('Client/nouveau.html.twig', [
  147.             'form' => $form->createView()
  148.         ]);
  149.     }
  150.     /**
  151.      * Cette methode permet de faire l'édition d'un jobcard par le commercial.
  152.      */
  153.     #[Route('/commercial/jobcard/edit/{id}'name'jobacard.edit')]
  154.     public function ModificationJobcardParLeCommercial($idEntityManagerInterface $emRequest $requestJobCardRepository $jobCardRepository)
  155.     {
  156.         //$this->denyAccessUnlessGranted('ROLE_USER', null, "Vous n'avez pas access à cette ressource");
  157.         $jobcard $jobCardRepository->findOneBy(['id' => $id]);
  158.         $form $this->createForm(JobCardModificationFormType::class, $jobcard);
  159.         $form->handleRequest($request);
  160.         if ($form->isSubmitted() && $form->isValid()) {
  161.             $jobcard $form->getData();
  162.             $em->persist($jobcard);
  163.             $em->flush();
  164.             $this->addFlash('success''Modification éffécuté avec success');
  165.             return $this->redirectToRoute('jobcard.details', ['id' => $jobcard->getId()]);
  166.         }
  167.         return $this->render('commercial/dashbord_edit_jobcard.html.twig', [
  168.             'form' => $form->createView(),
  169.             'jobcard' => $jobcard
  170.         ]);
  171.     }
  172.     /**
  173.      * Cette methode permet de faire la suppression d'un jobcard
  174.      * En supprimant elle suprimme les services selectionés l'ors de la crétion du jobcard.
  175.      * @param EntityManagerInterface $em
  176.      * @param JobCardRepository $jobCardRepository
  177.      * @param HistoriqueRepository $historiqueRepository
  178.      */
  179.     #[Route('/jobcard/suppression/{id}'name'jobcard.supp'methods: ['GET''POST'])]
  180.     public function delete($idEntityManagerInterface $emJobCardRepository $jobCardRepositoryHistoriqueRepository $historiqueRepository)
  181.     {
  182.         $jobcard $jobCardRepository->findOneBy(['id' => $id]);
  183.         if (!$jobcard) {
  184.             $this->addFlash(
  185.                 'warning',
  186.                 'Le jobcard en question n\'est pas trouvé!'
  187.             );
  188.         }
  189.         $historique $historiqueRepository->findBy(['jobcard' => $jobcard->getId()]);
  190.         for ($i 0$i count($historique); $i++) {
  191.             $jobcard->removeHistorique($historique[$i]);
  192.         }
  193.         $em->remove($jobcard);
  194.         $em->flush();
  195.         $this->addFlash(
  196.             'success',
  197.             'le jobcard avec le numéro ' $jobcard->getNumero() . ' a été supprimé avec succes!'
  198.         );
  199.         return $this->redirectToRoute('app.index');
  200.     }
  201.     /**
  202.      * Cette methode affiche les détails d'un jobcard.
  203.      * Et l'historique assoicié à cet jobcard.
  204.      * @param int $id
  205.      * @param JobCardRepository $repository
  206.      * @param HistoriqueRepository $historiqueRepository
  207.      * @param PaginatorInterface $paginator
  208.      * @param Request $request
  209.      */
  210.     #[Route('/jobcard/detail/{id}'name'jobcard.details'methods: ['GET''POST'])]
  211.     public function detail($idJobCardRepository $repositoryHistoriqueRepository $historiqueRepositoryPaginatorInterface $paginatorRequest $request): Response
  212.     {
  213.         $historiques = new Historique();
  214.         #Réchercher un jobcard à travers son id s'il existe
  215.         $jobcard $repository->findOneBy(['id' => $id]);
  216.         if (!$jobcard) {
  217.             $this->addFlash(
  218.                 'warning',
  219.                 'les détails de cet jobcard ne sont pas disponibles'
  220.             );
  221.         }
  222.         # Affichage de l'historique d'un jobcard à l'aide de la pagination
  223.         $historiques $paginator->paginate(
  224.             $historiqueRepository->findBy(['jobcard' => $jobcard], ['createdAt' => 'desc']),
  225.             $request->query->getInt('page'1), /*page number*/
  226.             /*limit per page*/
  227.         ); 
  228.         return $this->render('Client/details.html.twig', [
  229.             'jobcard' => $jobcard,
  230.             'historiques' => $historiques
  231.         ]);
  232.     }
  233.     #[Route('/jobcard/all'name'jobcard.all'methods: ['GET''POST'])]
  234.     /**
  235.      * Cette methode affiche tous les jobcards enrégistrés
  236.      * Et le nombre de jobcard avec le status soumis.
  237.      *
  238.      * @param JobCardRepository $repository  
  239.      * @param PaginatorInterface $paginator
  240.      * @param Request $request
  241.      * @return Response
  242.      */
  243.     public function afficherTousLesJobcards(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  244.     {
  245.         if (!$this->getUser()) {
  246.             throw new UserNotFoundException();
  247.         }
  248.         #Affichage de tous les jobcard créer pour le profil commercial
  249.         $jobcards $paginator->paginate(
  250.             $repository->findBy([], ['createdAt' => 'desc']),
  251.             $request->query->getInt('page'1),
  252.             
  253.         );  
  254.         #Trouver tous le jobcard dont leur status est à = soumis
  255.         $qb $repository->createQueryBuilder('j')  
  256.             ->where('j.status = :soumis')
  257.             ->setParameter('soumis'JobCard::SOUMIS)
  258.             ->getQuery()
  259.             ->getResult();
  260.         return $this->render('commercial/dashbord_index.html.twig', [
  261.             'jobcards' => $jobcards,
  262.             'total' => count($qb)
  263.         ]);
  264.     }
  265.     #[Route('/jobcard/etat_des_lieux_entrant/{id}'name'etat.lieu'methods: ['GET''POST'])]
  266.     /**
  267.      * Cette methode fait l'enrégistrement des états de lieux entrant,
  268.      * Cette methode est une forme de modification de l'objet jobcard en cours puisqu'on complète des données,
  269.      * sur un objet déja rempli par le client,
  270.      * On fait la signature qu'un seule fois si elle n'est pas encore faites,
  271.      * Pour la signature une fois la signature est faite ce n'est plus possible de faire sa modification,
  272.      * On fait l'enrégistrement de son historique.
  273.      */
  274.         /**
  275.          * bazar bazar.
  276.          *
  277.          * @param mixe $id
  278.          * @param EntityManagerInterface $em
  279.          * @param Request $request
  280.          * @param JobCardRepository $repository
  281.          * @return Response
  282.          */
  283.     public function saisirEtatDesLieuxEntrant($idEntityManagerInterface $emRequest $requestJobCardRepository $repositorySendMail $sendMail): Response
  284.     {
  285.         if (!$this->getUser()) {
  286.             throw new UserNotFoundException();
  287.         }
  288.         $this->denyAccessUnlessGranted('ROLE_COMMERCIAL'); 
  289.         $jobcard_actu $repository->find($id);
  290.         #Création du formulaire de saisie
  291.         $form $this->createForm(EtatsDesLieuxJobCardType::class, $jobcard_actu);
  292.         $form->handleRequest($request);
  293.         if ($form->isSubmitted() && $form->isValid()) {
  294.             # recupération de l'url des images
  295.             $jobcard_actu->setPneumatique($form->get('pneumatique')->getData());
  296.             $jobcard_actu->setNettoyage($form->get('nettoyage')->getData());
  297.             $jobcard_actu->setRayures($form->get('rayures')->getData());
  298.             $jobcard_actu->setDeformination($form->get('deformination')->getData());
  299.             $jobcard_actu->setPhareD($form->get('phareD')->getData());
  300.             $jobcard_actu->setPhareG($form->get('phareG')->getData());
  301.             $jobcard_actu->setPareBrise($form->get('pareBrise')->getData());
  302.             $jobcard_actu->setVidangeMoteur($form->get('vidangeMoteur')->getData());
  303.             $jobcard_actu->setVidangePontAV($form->get('vidangePontAV')->getData());
  304.             $jobcard_actu->setFiltreAire($form->get('filtreAire')->getData());
  305.             $jobcard_actu->setLavage($form->get('lavage')->getData());
  306.             $jobcard_actu->setEquilibreRoues($form->get('equilibreRoues')->getData());
  307.             $jobcard_actu->setControleNiveau($form->get('controleNiveau')->getData());
  308.             $jobcard_actu->setVidangeBoite($form->get('vidangeBoite')->getData());
  309.             $jobcard_actu->setVidangePontAr($form->get('vidangePontAr')->getData());
  310.             $jobcard_actu->setFreinAr($form->get('freinAr')->getData());
  311.             $jobcard_actu->setFreinAhuile($form->get('freinAhuile')->getData());
  312.             $jobcard_actu->setGraissageTransmission($form->get('graissageTransmission')->getData());
  313.             $jobcard_actu->setPressionDespneux($form->get('pressionDespneux')->getData());
  314.             $jobcard_actu->setControleEclairage($form->get('controleEclairage')->getData());
  315.             $jobcard_actu->setTraveauxDemander($form->get('traveauxDemander')->getData());
  316.             $jobcard_actu->setAutreObservations($form->get('autreObservations')->getData());
  317.             //énregistrement de la date de la saisie des etats de lieu
  318.             #modification des propriéte pour stocker le chemain ou seront enrégistrés les images et la  date de l'enrégistrement
  319.             if ($jobcard_actu->getClientSignature() === null && $jobcard_actu->getCommercialSignature() === null) {
  320.                 $urlClient $form->get('signatureClient')->getData();
  321.                 $urlCommercial $form->get('signatureCommerciale')->getData();
  322.                 $jobcard_actu->setCommercialSignature($this->sauvegardeSignature($urlCommercial));
  323.                 $jobcard_actu->setClientSignature($this->sauvegardeSignature($urlClient));
  324.                 $jobcard_actu->setDateArrivee(new DateTimeImmutable());
  325.             }
  326.             $jobcard_actu->setIsEtatEntre(true);
  327.             //enrégistrment du nom complet du commericial qui à saisie l'état des lieux
  328.             /**@var User */
  329.             $user $this->getUser();
  330.             if ($jobcard_actu->getNomCommercial() === null) {
  331.                 $jobcard_actu->setNomCommercial($user->getPrenom() . ' ' $user->getNom());
  332.             }
  333.             #la pérsistance des données
  334.             $em->persist($jobcard_actu);
  335.             $em->persist($user);
  336.             #Création de l'historique
  337.             $historique = new Historique();
  338.             $historique
  339.                 ->setAction('remplissage état des lieux')
  340.                 ->setJobcard($jobcard_actu)
  341.                 ->setProfil('Commercial')
  342.                 ->setUser($this->getUser());
  343.             $em->persist($historique);
  344.             $em->flush();
  345.             $this->addFlash('success''Remplissage des états de lieux entrants éffectué pour le jobcard ' $jobcard_actu->getNumero(),);
  346.             return $this->redirectToRoute('jobcard.all');
  347.         } 
  348.         return $this->render('commercial/dashbord_saisie_etat_lieu.twig', [
  349.             'form' => $form->createView(),
  350.             'jobcard' => $jobcard_actu
  351.         ]);
  352.     }
  353.     /**
  354.      * Cette methode fais le traitement des images qu'on reçoit des deux signataires
  355.      * La conversion de l'image en chaine
  356.      * décodage de l'image dans la base64
  357.      * Le chemin de stockage des signatures avec un nom unique.
  358.      * @param string $urlImage
  359.      * @return string
  360.      */
  361.     private function sauvegardeSignature(string $urlImage): string
  362.     {
  363.         $encoded_image explode(","$urlImage)[1];
  364.         $decoded_image base64_decode($encoded_image);
  365.         $filename "signatures/signature-" uniqid() . '.png';
  366.         file_put_contents($filename$decoded_image);
  367.         return $filename;
  368.     }
  369.     #[Route('/jobcard/ajouter_photo/{id}'name'ajouter_photo'methods: (['POST']))]
  370.     public function ajouterPhotos(EntityManagerInterface $em$idRequest $requestSluggerInterface $sluggerJobCardRepository $repository)
  371.     {
  372.         $jobcard $repository->find($id);
  373.         if (!$jobcard) {
  374.             throw new AccessDeniedException('jobcard inexistant');
  375.         }
  376.         $token $request->request->get('token');
  377.         if ($this->isCsrfTokenValid('add-file'$token)) {
  378.             $photo $request->files->get('photos');
  379.             $nomOrigineFichier pathinfo($photo->getClientOriginalName(), PATHINFO_FILENAME);
  380.             $safeFilename $slugger->slug($nomOrigineFichier);
  381.             $nouveauNom $safeFilename '-' uniqid() . '.' $photo->guessExtension();
  382.             try {
  383.                 $photo->move(
  384.                     $this->getParameter('images_directory'),
  385.                     $nouveauNom
  386.                 );
  387.             } catch (FileException $e) {
  388.             }
  389.             $jobcard->setImages($nouveauNom);
  390.             $em->persist($jobcard);
  391.             $em->flush();
  392.             $this->addFlash('info''ajout de photos éffectué');
  393.             return $this->redirectToRoute('jobcard.details', ['id' => $jobcard->getId()]);
  394.         }
  395.         return new Response();
  396.     }
  397.     #[Route('/client/jobcard/liste_des_demandes_soumise'name'jobcard.soumise'methods: (['GET']))]
  398.     public function afficherLesJobcardSoumisesPourLeClient(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  399.     {
  400.         $jobcardSoumises $paginator->paginate(
  401.             $repository->findBy(['status' => JobCard::SOUMIS'user' => $this->getUser()], ['createdAt' => 'desc']),
  402.             $request->query->getInt('page'1),
  403.             5
  404.         );
  405.         return $this->render('Client/demandes_soumises.html.twig', [
  406.             'jobcardsSoumises' => $jobcardSoumises
  407.         ]);
  408.     }
  409.     #[Route('/client/jobcard/liste_des_demandes_en_cours'name'jobcard.enCours'methods: (['GET']))]
  410.     public function afficherLesJobcardEnCoursPourLeClient(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  411.     {
  412.         $jobcardEncours $paginator->paginate(
  413.             $repository->findBy(['status' => JobCard::EN_COURS'user' => $this->getUser()], ['createdAt' => 'desc']),
  414.             $request->query->getInt('page'1),
  415.             5
  416.         );
  417.         return $this->render('Client/demandes_enCours.html.twig', [
  418.             'jobcardEncours' => $jobcardEncours
  419.         ]);
  420.     }
  421.     #[Route('/client/jobcard/liste_des_demandes_terminees'name'jobcard.terminees'methods: (['GET']))]
  422.     public function afficherLesJobcardTermineesPourLeClient(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  423.     {
  424.         $jobcardTerminees $paginator->paginate(
  425.             $repository->findBy(['status' => JobCard::TERMINE'user' => $this->getUser()], ['createdAt' => 'desc']),
  426.             $request->query->getInt('page'1),
  427.             5
  428.         );
  429.         return $this->render('Client/demandes_terminees.html.twig', [
  430.             'jobcardTerminees' => $jobcardTerminees
  431.         ]);
  432.     }
  433.     #[Route('/jobcard/liste_des_tous_les_demandandes_terminees'name'jobcards_terminees'methods: (['GET']))]
  434.     public function afficherLesJobcardsTerminees(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  435.     {
  436.         $jobcardTerminees $paginator->paginate(
  437.             $repository->findBy(['status' => JobCard::TERMINE], ['createdAt' => 'desc']),
  438.             $request->query->getInt('page'1),
  439.             5
  440.         );
  441.         return $this->render('Client/ReparationsStatus/demandes_terminees.html.twig', [
  442.             'jobcardTerminees' => $jobcardTerminees
  443.         ]);
  444.     }
  445.     #[Route('/jobcard/liste_de_toutes_les_demandes_en_cours'name'jobcards.enCours'methods: (['GET']))]
  446.     public function afficherLesJobcardEnCours(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  447.     {
  448.         $jobcardEncours $paginator->paginate(
  449.             $repository->findBy(['status' => JobCard::EN_COURS], ['createdAt' => 'desc']),
  450.             $request->query->getInt('page'1),
  451.             5
  452.         );
  453.         return $this->render('Client/ReparationsStatus/demandes_enCours.html.twig', [
  454.             'jobcardEncours' => $jobcardEncours
  455.         ]);
  456.     }
  457.     #[Route('/jobcard/liste_de_toutes_les_demandes_soumises'name'jobcards.soumises'methods: (['GET']))]
  458.     public function afficherLesJobcardSoumises(JobCardRepository $repositoryPaginatorInterface $paginatorRequest $request): Response
  459.     {
  460.         $jobcardSoumises $paginator->paginate(
  461.             $repository->findBy(['status' => JobCard::SOUMIS], ['createdAt' => 'desc']),
  462.             $request->query->getInt('page'1),
  463.             5
  464.         );
  465.         return $this->render('Client/ReparationsStatus/demandes_soumises.html.twig', [
  466.             'jobcardsSoumises' => $jobcardSoumises
  467.         ]);
  468.     }
  469.     #[Route('commercial/jobcard/traitement_demande/{id}'name'traitement_demande'methods: ['POST''GET'])]
  470.     public function traitementDelaDemande($idRequest $requestJobCardRepository $repositoryEntityManagerInterface $emSendMail $sendMail){
  471.         $jobcard $repository->find($id);
  472.         $token $request->request->get('token');
  473.         /*  la vérification du token récupéré et le token mis sur le formulaire pour la sécurité
  474.         si la vérification est vrai on procède à l'enregistrement
  475.         sinon on affiche les détails de la demande */
  476.         if ($this->isCsrfTokenValid('add'$token)) {
  477.             $status $request->request->get('traitement');
  478.             $jobcard->setStatus($status);
  479.             $em->persist($jobcard);
  480.             $em->flush();
  481.             $this->addFlash('success''Le status de la demande est changé en '.$status);
  482.             $sendMail->sendMail(
  483.                 $jobcard->getUser()->getEmail(),
  484.                 'Changement de Status de la demande '.$jobcard->getNumero(),
  485.                 'information_changement_status.html.twig',
  486.                 [
  487.                     'commentaire' => $request->request->get('commentaire'),
  488.                     'jobcard' => $jobcard
  489.                 ]
  490.             );
  491.             return $this->redirectToRoute('jobcard.details', ['id' => $jobcard->getId()]);
  492.         }
  493.         return $this->redirectToRoute('jobcard.details', ['id' => $jobcard->getId()]);
  494.     }
  495.     #[Route('/client/jobcard/edit/{id}'name'jobacard.client.edit')]
  496.     public function ModificationJobcardParLeClient($idEntityManagerInterface $emRequest $requestJobCardRepository $jobCardRepository)
  497.     {
  498.         $jobcard $jobCardRepository->find(['id' => $id]);
  499.         $form $this->createForm(ModificationJobcardClientType::class, $jobcard);
  500.         $form->handleRequest($request);
  501.         if ($form->isSubmitted() && $form->isValid()) {
  502.             $jobcard $form->getData();
  503.             $jobcard->setStatus(JobCard::SOUMIS);
  504.             $em->persist($jobcard);
  505.             $em->flush();
  506.             $this->addFlash('success''Modification éffécuté avec success');
  507.             return $this->redirectToRoute('jobcard.details', ['id' => $jobcard->getId()]);
  508.         }
  509.         return $this->render('Client/edit.html.twig', [
  510.             'form' => $form->createView(),
  511.             'jobcard' => $jobcard
  512.         ]);
  513.     }
  514. }