src/Controller/Convocations/ConvocationsController.php line 52

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Convocations;
  3. use App\Entity\Convocations;
  4. use App\Entity\StagiairesReports;
  5. use App\Form\Convocations\ConvocationGenerateFormType;
  6. use App\Form\Convocations\ConvocationModifyFormType;
  7. use App\Form\Convocations\ConvocationReponseFormType;
  8. use App\Repository\ConvocationsEtatsRepository;
  9. use App\Repository\ConvocationsRepository;
  10. use App\Repository\FormationsRepository;
  11. use App\Repository\StagiairesReportsRepository;
  12. use App\Repository\StagiairesRepository;
  13. use DateTime;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\Filesystem\Filesystem;
  17. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\String\Slugger\SluggerInterface;
  23. use ZipArchive;
  24. class ConvocationsController extends AbstractController
  25. {
  26.     private string $ConvocPdfDirectory//Chemin d'uplaod des fichiers PDF 'config/services.yaml'
  27.     
  28.     public function __construct(string $ConvocPdfDirectory)
  29.     {
  30.         $this->ConvocPdfDirectory $ConvocPdfDirectory;
  31.     }
  32.     
  33.     
  34.     /**
  35.      * @Route("/convocations/", name="convocations")
  36.      */
  37.     public function index(ConvocationsRepository $convocationsRepositoryFormationsRepository $formationsRepositoryStagiairesRepository $stagiairesRepository): Response
  38.     {
  39.         $convocations $convocationsRepository->findAll();
  40.         
  41.         return $this->render('convocations/convocationsListing.html.twig', [
  42.             'convocations' => $convocations,
  43.         ]);
  44.     }
  45.     /**
  46.      * @Route("/convocations/cycle/generer/{idFormation}", name="convocations_generate")
  47.      */
  48.     public function generate($idFormation=nullRequest $requestManagerRegistry $doctrineStagiairesRepository $stagiairesRepositoryFormationsRepository $formationsRepository): Response
  49.     {
  50.         // $convocation = new Convocations();
  51.         
  52.         $formulaire $this->createForm(ConvocationGenerateFormType::class, null, ['idFormation' => $idFormation]);
  53.         $formulaire->handleRequest($request);
  54.         if($formulaire->isSubmitted()) {
  55.             // dd($formulaire);
  56.             
  57.             $nbreStagiaires $formulaire->getExtraData('extraData')['nbreStagiaires'];
  58.             $idFormation $formulaire->get('formation')->getData()->getId();
  59.             $listeIdStagiaires"";
  60.             for($x=0$x<$nbreStagiaires$x++) {
  61.                 if(isset($formulaire->getExtraData('extraData')['stagiairesCheck'.$x]) && $formulaire->getExtraData('extraData')['stagiairesCheck'.$x]=='on') {
  62.                     $convocation = new Convocations();
  63.                     $convocation $formulaire->getData();
  64.                     $formation $formationsRepository->find($idFormation);
  65.                     $convocation->setFormation($formation);
  66.                     $listeIdStagiaires .= $formulaire->getExtraData('extraData')['stagiaireId'.$x];
  67.                     $stagiaire $stagiairesRepository->find($formulaire->getExtraData('extraData')['stagiaireId'.$x]);
  68.                     $convocation->setStagiaire($stagiaire);
  69.                     
  70.                     
  71.                     //TRAITEMENT DE L'ETAT DU STAGIAIRE
  72.                     if($formation->getBloc()->getNumBloc() == 1) {
  73.                         $stagiaire->setEtat(5);
  74.                     } else {
  75.                         $stagiaire->setEtat(6);
  76.                     }
  77.                     $convocation->setEtat(1);
  78.                     
  79.                     $dateCreation = new DateTime('NOW');
  80.                     $dateCreation->format('Y-m-d H:i');
  81.                     $convocation->setDateCreation($dateCreation);
  82.                     $entityManager $doctrine->getManager();
  83.                     $entityManager->persist($convocation);
  84.                     $entityManager->persist($stagiaire);
  85.                     $entityManager->flush();
  86.                     $entityManager->clear();
  87.                 }
  88.             }
  89.             return $this->redirectToRoute('formations_show_convocations', ['idFormation' => $idFormation]);
  90.         }
  91.         return $this->render('convocations/convocationsGenerer.html.twig', [
  92.             'formulaire' => $formulaire->createView(),
  93.             'idFormation' => $idFormation
  94.         ]);
  95.     }
  96.     /**
  97.      * @Route("/convocations/afficher/{idConvocation}", name="convocations_show")
  98.      */
  99.     public function show(
  100.         $idConvocation
  101.         SluggerInterface $slugger
  102.         ConvocationsRepository $convocationsRepository
  103.         ConvocationsEtatsRepository $convocationsEtatsRepository
  104.         Request $request
  105.         FormationsRepository $formationsRepository
  106.         StagiairesReportsRepository $stagiairesReportsRepository
  107.         StagiairesRepository $stagiairesRepository
  108.         ManagerRegistry $doctrine): Response
  109.     {
  110.         $convocation $convocationsRepository->find($idConvocation);
  111.         $stagiaire $stagiairesRepository->find($convocation->getStagiaire()->getId());
  112.         $convocationEtat $convocationsEtatsRepository->find($convocation->getEtat());
  113.         $formation $formationsRepository->find($convocation->getFormation()->getId());
  114.         $numBloc $convocation->getFormation()->getBloc()->getNumBloc();
  115.         //Vérification si un report d'une convocation existe pour le bloc de la formation
  116.         $report $stagiairesReportsRepository->findBy([
  117.             'stagiaires' => $stagiaire,
  118.             'numBloc' => $numBloc
  119.         ]);
  120.         $formulaireReponse $this->createForm(ConvocationReponseFormType::class, $convocation);
  121.         $formulaireReponse->handleRequest($request);
  122.         if($formulaireReponse->isSubmitted()) {
  123.             $convocation $formulaireReponse->getData();
  124.             
  125.             $dateTraitementReponse = new DateTime('NOW');
  126.             $dateTraitementReponse->format('Y-m-d H:i');
  127.             $convocation->setDateTraitementReponse($dateTraitementReponse);
  128.             // Traitement de l'upload du bulletin réponse
  129.             $bulletin_reponse $formulaireReponse->get('bulletinReponseScan')->getData();
  130.             if ($bulletin_reponse) {
  131.                 if($convocation->getBulletinReponseScan()) {
  132.                     $nomFichier $this->getParameter('files_directory_convocation_bulletins_reponses').'/'.$convocation->getBulletinReponseScan();
  133.         
  134.                     if(file_exists($nomFichier)) {
  135.                         unlink($nomFichier);
  136.                     }
  137.                 }
  138.                 $originalFilename pathinfo($bulletin_reponse->getClientOriginalName(), PATHINFO_FILENAME);
  139.                 $safeFilename $slugger->slug($originalFilename);
  140.                 $newFilename 'convocation_'.$idConvocation.'_bulletinReponse_'.uniqid().'.'.$bulletin_reponse->guessExtension();
  141.                 
  142.                 $bulletin_reponse->move(
  143.                     $this->getParameter('files_directory_convocation_bulletins_reponses'),
  144.                     $newFilename
  145.                 );
  146.                 $convocation->setBulletinReponseScan($newFilename);
  147.             }
  148.             $entityManager $doctrine->getManager();
  149.             $entityManager->persist($convocation);
  150.             $entityManager->flush();
  151.             // // $entityManager->clear();
  152.             return $this->redirectToRoute('convocations_show', ['idConvocation'=>$idConvocation]);
  153.         }
  154.         
  155.         return $this->render('convocations/convocationsAfficher.html.twig', [
  156.             'convocation' => $convocation,
  157.             'convocationEtat' => $convocationEtat,
  158.             'formulaireReponse' => $formulaireReponse->createView(),
  159.             'cheminFichierUpload' => $this->getParameter('files_directory_convocation_bulletins_reponses'),
  160.             'formation' => $formation,
  161.             'report' => $report,
  162.             'nav' => '4'
  163.         ]);
  164.     }
  165.     /**
  166.      * @Route("/convocations/modifier/{idConvocation}", name="convocations_modify")
  167.      */
  168.     public function modify($idConvocationRequest $requestConvocationsRepository $convocationsRepositoryManagerRegistry $doctrine): Response
  169.     {
  170.         $convocation $convocationsRepository->find($idConvocation);
  171.         
  172.         $formulaire $this->createForm(ConvocationModifyFormType::class, $convocation);
  173.         $formulaire->handleRequest($request);
  174.         if($formulaire->isSubmitted()) {
  175.             $entityManager $doctrine->getManager();
  176.             $entityManager->persist($convocation);
  177.             $entityManager->flush();
  178.             $entityManager->clear();
  179.             return $this->redirectToRoute('convocations_show', ['idConvocation'=>$idConvocation]);
  180.         }
  181.         return $this->render('convocations/convocationsModifier.html.twig', [
  182.             'formulaire' => $formulaire->createView(),
  183.             'convocation' => $convocation
  184.         ]);
  185.     }
  186.     /**
  187.      * @Route("/convocations/supprimer/{idConvocation}", name="convocations_del")
  188.      */
  189.     public function delete($idConvocationRequest $requestConvocationsRepository $convocationsRepositoryStagiairesRepository $stagiairesRepositoryManagerRegistry $doctrine): Response
  190.     {
  191.         $convocation $convocationsRepository->find($idConvocation);
  192.         
  193.         $idFormation $convocation->getFormation()->getId();
  194.         $stagiaire $stagiairesRepository->find($convocation->getStagiaire()->getId());
  195.         
  196.         $entityManager $doctrine->getManager();
  197.         if($convocation->getEtat() == 1) {
  198.             $entityManager->remove($convocation);
  199.             //TRAITEMENT DE L'ETAT DU STAGIAIRE
  200.             if($convocation->getFormation()->getBloc()->getNumBloc() == 1) {
  201.                 $stagiaire->setEtat(3);
  202.             } else {
  203.                 $stagiaire->setEtat(4);
  204.             }
  205.             $entityManager->persist($stagiaire);
  206.             $entityManager->flush();
  207.         }
  208.         
  209.         return $this->redirectToRoute('formations_show_convocations', ['idFormation' => $idFormation]);
  210.     }
  211.     /**
  212.      * @Route("/convocations/cloturer/{idConvocation}", name="convocations_enclose")
  213.      */
  214.     public function enclose($idConvocationRequest $requestConvocationsRepository $convocationsRepositoryStagiairesRepository $stagiairesRepositoryStagiairesReportsRepository $stagiairesReportsRepositoryFormationsRepository $formationsRepositoryManagerRegistry $doctrine): Response
  215.     {
  216.         $convocation $convocationsRepository->find($idConvocation);
  217.     
  218.         $stagiaire $stagiairesRepository->find($convocation->getStagiaire()->getId());
  219.         
  220.         $numBloc $convocation->getFormation()->getBloc()->getNumBloc();
  221.         $report $stagiairesReportsRepository->findBy([
  222.             'stagiaires' => $stagiaire,
  223.             'numBloc' => $numBloc
  224.         ]);
  225.         $reponse $convocation->getReponse()->getId();
  226.         if($reponse==2) { // S'engage > Maintient de l'inscription
  227.             $convocation->setEtat(2);
  228.         }
  229.         else if($reponse==1) { // Pas de réponse > contentieux
  230.             $convocation->setEtat(4);
  231.         }
  232.         else if($reponse>=&& empty($report)) { // Pas de réponse > Reconvocation
  233.             $convocation->setEtat(3);
  234.         }
  235.         else if($reponse>=&& !empty($report)) { // Pas de réponse > Contentieux
  236.             $convocation->setEtat(4);
  237.         }
  238.         
  239.         $entityManager $doctrine->getManager();
  240.         $entityManager->persist($convocation);
  241.         $entityManager->flush();
  242.         $entityManager->clear();
  243.         return $this->redirectToRoute('convocations_show', ['idConvocation' => $idConvocation]);
  244.     }
  245.     /**
  246.      * @Route("/convocations/rouvrir/{idConvocation}", name="convocations_reopen")
  247.      */
  248.     public function reopen($idConvocationRequest $requestConvocationsRepository $convocationsRepositoryManagerRegistry $doctrine): Response
  249.     {
  250.         $convocation $convocationsRepository->find($idConvocation);
  251.         
  252.         $convocation->setEtat(1);
  253.         
  254.         $entityManager $doctrine->getManager();
  255.         $entityManager->persist($convocation);
  256.         $entityManager->flush();     
  257.         return $this->redirectToRoute('convocations_show', ['idConvocation' => $idConvocation]);
  258.     }
  259.     /**
  260.      * @Route("/convocations/PDF/afficher/{idConvocation}", name="convocations_PDF_show")
  261.      */
  262.     public function convocationPDFShow($idConvocationConvocationsRepository $convocationsRepository): Response
  263.     {
  264.         $convocation $convocationsRepository->find($idConvocation);
  265.         $idFormation $convocation->getFormation()->getId();
  266.         $idStagiaire $convocation->getStagiaire()->getId();
  267.         return new BinaryFileResponse(
  268.             $this->ConvocPdfDirectory '/idFormation-' $idFormation '/convocationPDF-idStagiaire-' $idStagiaire '-idConvocation-' $idConvocation '.pdf'
  269.         );
  270.     }
  271.     /**
  272.      * @Route("/convocations/bulletinReponse/afficher/{idConvocation}", name="convocations_bulletinReponse_show")
  273.      */
  274.     public function bulletinReponseShow($idConvocationConvocationsRepository $convocationsRepository): Response
  275.     {
  276.         $convocation $convocationsRepository->find($idConvocation);     
  277.         return new BinaryFileResponse(
  278.             $this->getParameter('files_directory_convocation_bulletins_reponses').'/'.$convocation->getBulletinReponseScan()
  279.         );
  280.     }
  281.     /**
  282.      * @Route("/convocations/bulletinReponse/supprimer/{idConvocation}", name="convocations_bulletinReponse_del")
  283.      */
  284.     public function bulletinReponseDel($idConvocationConvocationsRepository $convocationsRepositoryManagerRegistry $doctrine): Response
  285.     {
  286.         $convocation $convocationsRepository->find($idConvocation);     
  287.         if($convocation->getBulletinReponseScan()) {
  288.             $nomFichier $this->getParameter('files_directory_convocation_bulletins_reponses').'/'.$convocation->getBulletinReponseScan();
  289.             if(file_exists($nomFichier)) {
  290.                 unlink($nomFichier);
  291.             }
  292.         }
  293.         $entityManager $doctrine->getManager();
  294.         $convocation->setBulletinReponseScan('');
  295.         $entityManager->persist($convocation);
  296.         $entityManager->flush();
  297.         return $this->redirectToRoute('convocations_show', ['idConvocation' => $idConvocation]);
  298.     }
  299.     /**
  300.      * @Route("/convocations/cloturer/toutes/{idFormation}", name="convocations_close_all")
  301.      */
  302.     public function convocationCloseAll($idFormationConvocationsRepository $convocationsRepositoryFormationsRepository $formationsRepositoryStagiairesReportsRepository $stagiairesReportsRepositoryStagiairesRepository $stagiairesRepositoryManagerRegistry $doctrine): Response
  303.     {
  304.         $formation $formationsRepository->find($idFormation);
  305.         $convocations $convocationsRepository->findBy([
  306.             'formation' => $formation
  307.         ]);
  308.         foreach($convocations as $convocation) {
  309.             $stagiaire $stagiairesRepository->find($convocation->getStagiaire()->getId());
  310.             $convocationTemp $convocationsRepository->find($convocation->getId());
  311.             
  312.             $numBloc $convocation->getFormation()->getBloc()->getNumBloc();
  313.             $report $stagiairesReportsRepository->findBy([
  314.                 'stagiaires' => $stagiaire,
  315.                 'numBloc' => $numBloc
  316.             ]);
  317.             $reponse $convocationTemp->getReponse()->getId();
  318.             if($reponse==2) { // S'engage > Maintient de l'inscription
  319.                 $convocationTemp->setEtat(2);
  320.             }
  321.             else if($reponse==|| $reponse==10 || $reponse==11) { // Pas de réponse OU Ne souhaite plus exercer le métier et renonce à l'agrément ou Souhaite suspendre temporairement son agrément > contentieux
  322.                 $convocationTemp->setEtat(4);
  323.             }
  324.             else if($reponse>=&& empty($report)) { // Pas de réponse > Reconvocation
  325.                 $convocationTemp->setEtat(3);
  326.             }
  327.             else if($reponse>=&& !empty($report)) { // Pas de réponse > Contentieux
  328.                 $convocationTemp->setEtat(4);
  329.             }
  330.             
  331.             $entityManager $doctrine->getManager();
  332.             $entityManager->persist($convocationTemp);
  333.             $entityManager->flush();
  334.             $entityManager->clear();
  335.         }
  336.         return $this->redirectToRoute('formations_show_convocations', ['idFormation' => $idFormation]);
  337.     }
  338.     /**
  339.      * @Route("/convocations/genererZip/{idFormation}", name="convocations_generer_zip")
  340.      */
  341.     public function convocationGenererZip(
  342.         $idFormation,
  343.         FormationsRepository $formationsRepository,
  344.         StagiairesRepository $stagiairesRepository
  345.         ): Response
  346.     {
  347.         $formation $formationsRepository->find($idFormation); 
  348.         $formationIntitule $formation->getIntitule();
  349.         $formationIntitule str_replace(' ''-'$formationIntitule);  
  350.         // GENERATION DU ZIP DES
  351.         $zip = new ZipArchive();
  352.         $zipName $this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/'.$formationIntitule.'_Convocations_Bilan.zip';
  353.         
  354.         if(file_exists($zipName)) {
  355.             unlink($zipName);
  356.         }
  357.         
  358.         $zip->open($zipName,  ZipArchive::CREATE);
  359.         $fichiers scandir($this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/');
  360.         // CREER UN REPERTOIRE TEMP > RENOMMER LES FICHIERS
  361.         $filesystem = new Filesystem();
  362.         $filesystem->mkdir($this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/temp');
  363.         foreach($fichiers as $fichier) {
  364.             $idStagiaire '';
  365.            
  366.             if($fichier !== "." && $fichier !== ".." && $fichier !== "temp") {
  367.                 for($x=0$x<4$x++) {
  368.                     $num substr("$fichier"27+$x1);
  369.                     if( $num != '-') {
  370.                         $idStagiaire .= $num;
  371.                     }
  372.                 }
  373.                 $stagiaire $stagiairesRepository->find(intval($idStagiaire));
  374.                 $filesystem->copy($this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/'.$fichier$this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/temp/convocationPDF_'.$formationIntitule.'_'.$stagiaire->getNom().'-'.$stagiaire->getPrenom().'.pdf');
  375.                 
  376.                 $zip->addFile($this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/temp/convocationPDF_'.$formationIntitule.'_'.$stagiaire->getNom().'-'.$stagiaire->getPrenom().'.pdf'$fichier);
  377.             }
  378.         }
  379.  
  380.         $zip->close();
  381.         $filesystem->remove($this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/temp');
  382.         
  383.         return (new BinaryFileResponse(
  384.             $this->ConvocPdfDirectory.'idFormation-'.$idFormation.'/'.$formationIntitule.'_Convocations_Bilan.zip'
  385.         ))->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$formationIntitule.'_Convocations_Bilan.zip');
  386.     }
  387. }