src/Controller/FollowupController.php line 35

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Participation\Ig;
  4. use App\Entity\Participation\Odr;
  5. use App\Entity\Participation\Participation;
  6. use App\Entity\User;
  7. use App\Form\EditParticipationType;
  8. use App\Form\FollowupType;
  9. use App\Form\ForgottenReferenceType;
  10. use App\Message\EmailForgottenReferenceMessage;
  11. use App\Message\SendParticipationIGToShannonMessage;
  12. use App\Message\SendParticipationODRToShannonMessage;
  13. use App\Model\Followup;
  14. use App\Model\ForgottenReference;
  15. use App\Service\ParticipationService;
  16. use App\Service\UtilService;
  17. use Doctrine\DBAL\Types\ConversionException;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Messenger\MessageBusInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Contracts\Translation\TranslatorInterface;
  25. #[Route('/suivi')]
  26. class FollowupController extends AbstractController
  27. {
  28.     #[Route('/participation'name'followup_participation')]
  29.     public function index(Request $requestEntityManagerInterface $entityManagerFollowup $followupUtilService $utilService): Response
  30.     {
  31.         $session $request->getSession();
  32.         $session->remove("followup_participation");
  33.         $followup = new Followup();
  34.         $form $this->createForm(FollowupType::class, $followup);
  35.         $form->handleRequest($request);
  36.         if ($request->isXmlHttpRequest()) {
  37.             if ($form->isSubmitted() && $form->isValid()) {
  38.                 $participations $entityManager->getRepository(Participation::class)->findByReferenceAndEmail($followup->getReference(), $followup->getEmail());
  39.                 $uuid $participations[0]->getUuid();
  40.                 $session->set("followup_participation"$uuid);
  41.                 $route $this->generateUrl('followup_status', ['uuid' => $uuid]);
  42.                 return $this->json([
  43.                     "status" => 1,
  44.                     "data" => [
  45.                         "route" => $route
  46.                     ]
  47.                 ]);
  48.             }
  49.             else {
  50.                 return $this->json([
  51.                     'status' => 0,
  52.                     'data' => $utilService->getErrorMessages($form)
  53.                 ]);
  54.             }
  55.         }
  56.         return $this->render('followup/index.html.twig', [
  57.             "form" => $form->createView(),
  58.             'formAction' => $this->generateUrl('followup_participation')
  59.         ]);
  60.     }
  61.     #[Route('/statut/{uuid}'name'followup_status')]
  62.     public function participationStatus(ParticipationService $participationServiceMessageBusInterface $busRequest $requeststring $uuidEntityManagerInterface $entityManagerTranslatorInterface $translator): Response
  63.     {
  64.         $session $request->getSession();
  65.         $followup $session->get("followup_participation");
  66.         if ((string)$followup !== $uuid) {
  67.             return $this->redirectToRoute("followup_participation");
  68.         }
  69.         try{
  70.             $participation $entityManager->getRepository(Participation::class)->findOneBy(["uuid" => $uuid]);
  71.         } catch (ConversionException $e) {
  72.             return $this->redirectToRoute("followup_participation");
  73.         }
  74.         $lastParticipation $entityManager->getRepository(Participation::class)->findLastParticipationByUser($participation->getUser());
  75.         $refParticipation = ($participation instanceof Ig)? new Ig() : new Odr();
  76.         $newParticipation $participationService->setReferenceParticipation($lastParticipation$refParticipation);
  77.         $form $this->createForm(EditParticipationType::class, $newParticipation);
  78.         $form->handleRequest($request);
  79.         if ($form->isSubmitted() && $form->isValid()) {
  80.             $entityManager->persist($newParticipation);
  81.             $entityManager->flush();
  82.             if ($participation instanceof Ig) {
  83.                 $bus->dispatch(new SendParticipationIGToShannonMessage($newParticipation->getUuid()));
  84.             } else {
  85.                 $bus->dispatch(new SendParticipationODRToShannonMessage($newParticipation->getUuid()));
  86.             }
  87.             $this->addFlash('success'$translator->trans("reupload.file"));
  88.         }
  89.         return $this->render('followup/status.html.twig', [
  90.             'form' => $form->createView(),
  91.             'newParticipationId' => $newParticipation->getUuid(),
  92.             'lastParticipation' => $lastParticipation
  93.         ]);
  94.     }
  95.     #[Route('/reference-oubliee'name'followup_forgotten_reference')]
  96.     public function forgottenReference(Request $requestEntityManagerInterface $entityManagerMessageBusInterface $busTranslatorInterface $translator): Response
  97.     {
  98.         $forgottenReference = new ForgottenReference();
  99.         $form $this->createForm(ForgottenReferenceType::class, $forgottenReference);
  100.         $form->handleRequest($request);
  101.         if ($form->isSubmitted() && $form->isValid()){
  102.             $users $entityManager->getRepository(User::class)->findBy(["email" => $forgottenReference->getEmail()], ['id'=>'desc']);
  103.             if (count($users) > 0) {
  104.                 $user $users[0];
  105.                 $participation $entityManager->getRepository(Participation::class)->findLastNumberedParticipation($user);
  106.                 if ($participation instanceof Participation) {
  107.                     $bus->dispatch(new EmailForgottenReferenceMessage($participation->getUuid()));
  108.                 }
  109.             }
  110.             $this->addFlash('success'$translator->trans("form.forgotten_reference"));
  111.             $forgottenReference = new ForgottenReference();
  112.             $form $this->createForm(ForgottenReferenceType::class, $forgottenReference);
  113.         }
  114.         return $this->render('followup/forgotten_reference.html.twig', [
  115.             "form" => $form->createView()
  116.         ]);
  117.     }
  118. }