src/Controller/FollowupController.php line 35
<?php
namespace App\Controller;
use App\Entity\Participation\Ig;
use App\Entity\Participation\Odr;
use App\Entity\Participation\Participation;
use App\Entity\User;
use App\Form\EditParticipationType;
use App\Form\FollowupType;
use App\Form\ForgottenReferenceType;
use App\Message\EmailForgottenReferenceMessage;
use App\Message\SendParticipationIGToShannonMessage;
use App\Message\SendParticipationODRToShannonMessage;
use App\Model\Followup;
use App\Model\ForgottenReference;
use App\Service\ParticipationService;
use App\Service\UtilService;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
#[Route('/suivi')]
class FollowupController extends AbstractController
{
#[Route('/participation', name: 'followup_participation')]
public function index(Request $request, EntityManagerInterface $entityManager, Followup $followup, UtilService $utilService): Response
{
$session = $request->getSession();
$session->remove("followup_participation");
$followup = new Followup();
$form = $this->createForm(FollowupType::class, $followup);
$form->handleRequest($request);
if ($request->isXmlHttpRequest()) {
if ($form->isSubmitted() && $form->isValid()) {
$participations = $entityManager->getRepository(Participation::class)->findByReferenceAndEmail($followup->getReference(), $followup->getEmail());
$uuid = $participations[0]->getUuid();
$session->set("followup_participation", $uuid);
$route = $this->generateUrl('followup_status', ['uuid' => $uuid]);
return $this->json([
"status" => 1,
"data" => [
"route" => $route
]
]);
}
else {
return $this->json([
'status' => 0,
'data' => $utilService->getErrorMessages($form)
]);
}
}
return $this->render('followup/index.html.twig', [
"form" => $form->createView(),
'formAction' => $this->generateUrl('followup_participation')
]);
}
#[Route('/statut/{uuid}', name: 'followup_status')]
public function participationStatus(ParticipationService $participationService, MessageBusInterface $bus, Request $request, string $uuid, EntityManagerInterface $entityManager, TranslatorInterface $translator): Response
{
$session = $request->getSession();
$followup = $session->get("followup_participation");
if ((string)$followup !== $uuid) {
return $this->redirectToRoute("followup_participation");
}
try{
$participation = $entityManager->getRepository(Participation::class)->findOneBy(["uuid" => $uuid]);
} catch (ConversionException $e) {
return $this->redirectToRoute("followup_participation");
}
$lastParticipation = $entityManager->getRepository(Participation::class)->findLastParticipationByUser($participation->getUser());
$refParticipation = ($participation instanceof Ig)? new Ig() : new Odr();
$newParticipation = $participationService->setReferenceParticipation($lastParticipation, $refParticipation);
$form = $this->createForm(EditParticipationType::class, $newParticipation);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($newParticipation);
$entityManager->flush();
if ($participation instanceof Ig) {
$bus->dispatch(new SendParticipationIGToShannonMessage($newParticipation->getUuid()));
} else {
$bus->dispatch(new SendParticipationODRToShannonMessage($newParticipation->getUuid()));
}
$this->addFlash('success', $translator->trans("reupload.file"));
}
return $this->render('followup/status.html.twig', [
'form' => $form->createView(),
'newParticipationId' => $newParticipation->getUuid(),
'lastParticipation' => $lastParticipation
]);
}
#[Route('/reference-oubliee', name: 'followup_forgotten_reference')]
public function forgottenReference(Request $request, EntityManagerInterface $entityManager, MessageBusInterface $bus, TranslatorInterface $translator): Response
{
$forgottenReference = new ForgottenReference();
$form = $this->createForm(ForgottenReferenceType::class, $forgottenReference);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$users = $entityManager->getRepository(User::class)->findBy(["email" => $forgottenReference->getEmail()], ['id'=>'desc']);
if (count($users) > 0) {
$user = $users[0];
$participation = $entityManager->getRepository(Participation::class)->findLastNumberedParticipation($user);
if ($participation instanceof Participation) {
$bus->dispatch(new EmailForgottenReferenceMessage($participation->getUuid()));
}
}
$this->addFlash('success', $translator->trans("form.forgotten_reference"));
$forgottenReference = new ForgottenReference();
$form = $this->createForm(ForgottenReferenceType::class, $forgottenReference);
}
return $this->render('followup/forgotten_reference.html.twig', [
"form" => $form->createView()
]);
}
}