src/Controller/Admin/InscriptionController.php line 81
<?php
namespace App\Controller\Admin;
use App\Entity\AppConstants;
use App\Entity\Evenement;
use App\Entity\Inscription;
use App\Entity\Line;
use App\Entity\LineParticipant;
use App\Entity\PaymentLog;
use App\Entity\User;
use App\Entity\Voucher;
use App\Form\InscriptionType;
use App\Repository\InscriptionRepository;
use App\Service\MailService;
use Doctrine\ORM\EntityManagerInterface;
use Endroid\QrCode\Builder\BuilderInterface;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Qipsius\TCPDFBundle\Controller\TCPDFController;
use Symfony\Contracts\Translation\TranslatorInterface;
use \TCPDF;
use App\Service\PaymentService;
use App\Service\CertificateEmailService;
# [Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
class InscriptionController extends AbstractController
{
private $em;
private $builder;
private $mailService;
private TranslatorInterface $translator;
private PaymentService $paymentService;
private CertificateEmailService $certificateEmailService;
public function __construct(EntityManagerInterface $em, BuilderInterface $builder, MailService $mailService, TranslatorInterface $translator, PaymentService $paymentService, CertificateEmailService $certificateEmailService)
{
$this->em = $em;
$this->builder = $builder;
$this->mailService = $mailService;
$this->translator = $translator;
$this->paymentService = $paymentService;
$this->certificateEmailService = $certificateEmailService;
setlocale(LC_ALL, ["fr_FR", "fr.UTF-8", "fr_FR.UTF-8", "fra"]);
setlocale(LC_TIME, ["fr_FR", "fr.UTF-8", "fr_FR.UTF-8", "fra"]);
}
#[Route('/evenement/{reference}/empty', name: 'app_admin_inscription_empty', defaults: ['reference' => 0])]
public function empty(Request $request, $reference = 0): Response
{
$evenement = $this->em->getRepository(Evenement::class)->findOneBy(["reference" => $reference]);
return $this->render('inscription/empty.html.twig', [
'reference' => $reference,
'evenement' => $evenement,
]);
}
#[Route('/evenement/{reference}/inscription', name: 'app_admin_inscription_form', defaults: ['group' => false])]
#[Route('/evenement/{reference}/inscription_group', name: 'app_admin_inscription_group_form', defaults: ['group' => true])]
public function inscription(Request $request, $reference, $group = false): Response
{
$session = $request->getSession();
/** @var User $user_session */
$user_session = $this->getUser();
/** @var User $user */
$user = null;
if ($user_session) {
$user = $this->em->getRepository(User::class)->find($user_session->getId());
} else {
$session->set(AppConstants::SESSION_EVENEMENT_REFERENCE, $reference);
$embed_query = [AppConstants::SESSION_EVENEMENT_REFERENCE => $reference];
if (isset($_GET['embed'])) {
if (is_string($_GET['embed']) && intval($_GET['embed'])) {
$embed_query['embed'] = $_GET['embed'];
}
}
return $this->redirectToRoute('app_user_login', $embed_query);
}
//check if they're verified
if ($user && !$user->isVerified()) {
$session->set(AppConstants::SESSION_EVENEMENT_REFERENCE, $reference);
return $this->redirectToRoute('app_user_home', [AppConstants::SESSION_EVENEMENT_REFERENCE => $reference]);
}
$evenement = $this->em->getRepository(Evenement::class)->findOneBy(["reference" => $reference]);
//user not registered in the event : treat or display program form
if (!$evenement) {
$this->addFlash('error', ' Evenement Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', @compact('reference'));
}
if ($evenement->getStatus() != Evenement::STATUS_VALIDATED) {
$this->addFlash('error', ' Evenement not valide ! ');
return $this->redirectToRoute('app_admin_inscription_empty', @compact('reference'));
}
// check if exist evenement parent
if ($evenement && $evenement->getParent() instanceof Evenement) {
$inscriptionParent = $this->em->getRepository(Inscription::class)->findOneBy([
'user' => $user_session->getId(),
'evenement' => $evenement->getParent()->getId(),
// 'status' => Inscription::STATUS_VALID,
]);
if (empty($inscriptionParent)) {
$this->addFlash('success', "Vous devez au préalable vous inscrire au congrés.");
return $this->redirectToRoute('app_admin_inscription_form', ['reference' => $evenement->getParent()->getReference()]);
}
}
$inscription = null;
// check if user have an old inscription with payment method not specified
if ($evenement && $user) {
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->getInscriptionNotPaidByUser($evenement, $user);
}
// create a new inscription for user
if (empty($inscription)) {
$inscription = new Inscription();
$inscription->setEvenement($evenement);
$inscription->setReference(uniqid() . time());
$inscription->setStatus(Inscription::STATUS_DRAFT);
if ($user) {
if (!$user->hasRole(User::ROLE_ADMIN)) {
$inscription->setUser($user);
}
//set the devise value
if (empty($inscription->getDevise())) {
if ($inscription->getUser()->getCountry() && $inscription->getUser()->getCountry() == "TN") {
$inscription->setDevise(Inscription::DEVISE_DT);
} else {
$inscription->setDevise(Inscription::DEVISE_EURO);
}
}
if (empty($inscription->getFirstname())) {
$inscription->setFirstname($user->getFirstName());
}
if (empty($inscription->getLastname())) {
$inscription->setLastName($user->getLastName());
}
}
$this->em->persist($inscription);
$this->em->flush();
}
//check if they're already registered in the event
if ($inscription && $inscription->getStatus() == Inscription::STATUS_VALID) {
//user already registered in the event , redirect to editing inscription
$this->addFlash('success', "vous êtes déjà inscrit dans cet événement, vous pouvez modifier votre inscription");
return $this->redirectToRoute('app_admin_inscription_edit', ['reference' => $inscription->getReference()]);
}
$lines = [];
if ($evenement) {
$lines = $this->em->getRepository(Line::class)->getOptionByEvent($evenement->getId());
}
$form = $this->createFormBuilder()->getForm();
$form->handleRequest($request);
$inscriptionLines = $session->get('inscriptionLines');
$linesSubmited = $request->request->all();
if ($this->getParameter('kernel.environment') == 'dev' && $this->getParameter('kernel.debug') && function_exists('dump')) :
// dump(@compact('form', 'evenement', 'inscriptionLines', 'linesSubmited'));
endif;
if ($form->isSubmitted() && $linesSubmited) {
$session->set('inscriptionLines', $linesSubmited);
} else {
$linesSubmited = $inscriptionLines;
}
if ($form->isSubmitted() && $form->isValid()) {
unset($linesSubmited['action']);
unset($linesSubmited['form']);
$problem = false;
$dataProblem = [];
foreach ($linesSubmited as $line) {
if (preg_match("/^(line|subLine)-\d+$/i", $line)) {
$lineId = explode('-', $line)[1];
/** @var Line $checkLine */
$checkLine = $this->em->getRepository(Line::class)->findOneBy(['id' => $lineId]);
if ($checkLine) {
if ($checkLine->getNumberOfPlaces()) {
if ($checkLine->getNumberOfPlaces() > $checkLine->getNumberOfPlacesReserved()) {
$inscription->addLineList($checkLine);
} else {
$problem = true;
$dataProblem[] = $checkLine->getId();
}
} else {
$inscription->addLineList($checkLine);
}
}
}
}
if (is_null($user) && empty($inscription->getUser())) {
$session->set(AppConstants::SESSION_INSCRIPTION_REFERENCE, $inscription->getReference());
}
//persist the inscription
$this->em->persist($inscription);
$this->em->flush();
//get all the previous payment logs
$this->em->getRepository(PaymentLog::class)->removeUnpaied($inscription);
$paymentLogs = $this->em->getRepository(PaymentLog::class)->findBy(['inscription' => $inscription]); // , 'isPaid' => false
//store the lines all already brought activities
$paymentLogLines = [];
foreach ($paymentLogs as $pl) {
if ($pl->getLine()) {
$paymentLogLines[] = $pl->getLine()->getId();
}
}
foreach ($inscription->getLineList() as $line) {
// if (!in_array($line->getId(), $paymentLogLines)) {
$paymentLog = new PaymentLog();
$paymentLog->setInscription($inscription);
$paymentLog->setLine($line);
// $paymentLogLines[] = $line->getId();
$amount = 0;
if ($inscription->getDevise() == Inscription::DEVISE_DT) {
$amount = (float)($inscription->isTitleResidant() ? $line->getPriceResidant() : $line->getPrice());
} else if ($inscription->getDevise() == Inscription::DEVISE_EURO) {
$amount = (float)($inscription->isTitleResidant() ? $line->getPriceResidantEuro() : $line->getPriceEuro());
}
$paymentLog->setMontant($amount);
$paymentLog->setIsPaid(false);
if ($inscription->getStatus() == Inscription::STATUS_PAYMENT_SUCCESS) {
$paymentLog->setIsPaid(true);
}
$this->em->persist($paymentLog);
$this->em->flush();
// }
}
// generateQRCode
if ($problem) {
return $this->redirectToRoute('app_admin_inscription_edit', ['reference' => $inscription->getReference()]);
}
$session->remove('inscriptionLines');
return $this->redirectToRoute('app_admin_inscription_by_reference', ['reference' => $inscription->getReference()]);
}
//no one is connected
if (is_null($user)) {
if ($evenement) {
$session->set(AppConstants::SESSION_EVENEMENT_REFERENCE, $evenement->getReference());
}
// return $this->render('inscription/login_or_register.html.twig', [
// 'event_reference' => $reference,
// 'evenement' => $evenement,
// 'inscription' => $inscription,
// 'lines' => $lines,
// 'form' => $form->createView(),
// 'linesSubmited' => [],
// ]);
}
if ($this->getParameter('kernel.environment') == 'dev' && $this->getParameter('kernel.debug') && function_exists('dump')) :
dump(@compact('form', 'reference', 'evenement', 'inscription', 'lines', 'inscriptionLines', 'linesSubmited'));
endif;
return $this->render('inscription/form.html.twig', @compact('linesSubmited') + [
'event_reference' => $reference,
'evenement' => $evenement,
'inscription' => $inscription,
'lines' => $lines,
'form' => $form->createView(),
'payments' => $this->em->getRepository(PaymentLog::class)->findBy(['inscription' => $inscription, 'isPaid' => 0])
]);
}
#[Route('/admin/evenement/{event_id}/inscription/{id}/details', name: 'app_admin_inscription_details')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
public function detail(Request $request, $event_id, $id): Response
{
/** @var Evenement $evenement */
$evenement = $this->em->getRepository(Evenement::class)->findOneBy(["id" => $event_id]);
if (!$evenement) {
$this->addFlash('error', ' Evenement Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id, "reference" => 0]);
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $id]);
if (!$inscription) {
$this->addFlash('error', ' Inscription Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
if ($inscription->getEvenement()->getId() != $event_id) {
$this->addFlash('error', ' Inscription Not related to this Evenement ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
// check if exist evenement parent
$evenementParent = null;
$inscriptionParent = null;
if ($evenement && $evenement->getParent() instanceof Evenement) {
$inscriptionParent = $this->em->getRepository(Inscription::class)->findOneBy([
'user' => $inscription->getUser()->getId(),
'evenement' => $evenement->getParent()->getId(),
// 'status' => Inscription::STATUS_VALID,
]);
}
// check if exist evenement child
$evenementChild = null;
$inscriptionChild = null;
if ($evenement->getChild()) {
$evenementChild = $evenement->getChild();
if ($evenementChild && $inscription->getUser()) {
$inscriptionChild = $this->em->getRepository(Inscription::class)->findOneBy([
'user' => $inscription->getUser()->getId(),
'evenement' => $evenementChild->getId(),
'status' => Inscription::STATUS_VALID,
]);
}
}
if ($this->getParameter('kernel.environment') == 'dev' && $this->getParameter('kernel.debug') && function_exists('dump')) {
dump(@compact('inscription', 'evenement') + ['inscription_evenement' => $inscription->getEvenement()]);
}
return $this->render('admin/inscription/detail.html.twig', [
'evenement' => $evenement,
'inscription' => $inscription,
'inscriptionParent' => $inscriptionParent,
'inscriptionChild' => $inscriptionChild,
]);
}
#[Route('/inscription/{reference}/summary', name: 'app_admin_inscription_summary')]
public function summary(Request $request, $reference): Response
{
$session = $request->getSession();
$user = $this->getUser();
//no one is connected
if (!$user) {
return $this->redirectToRoute('app_user_login', [AppConstants::SESSION_EVENEMENT_REFERENCE => $reference]);
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["reference" => $reference]);
if (!$inscription) {
return $this->redirectToRoute('app_admin_inscription_form', ["reference" => $reference]);
}
$vouchers = $inscription->getVouchers()->getValues();
$discountTotal = false;
$totalOfVouchers = 0;
$i = 0;
while ($inscription->getVouchers()->count() > 0 and $discountTotal == false and $i < $inscription->getVouchers()->count()) {
/** @var Voucher $voucher */
$voucher = $vouchers[$i];
if ($voucher->getType() == Voucher::TYPE_LIMITED) {
$totalOfVouchers += $voucher->getPrice();
} else {
$discountTotal = true;
}
$i++;
}
if ($code_voucher = $request->request->get('voucher')) {
// $domain = $request->server->get('HTTP_HOST');
/** @var Voucher $voucher */
$voucher = $this->em->getRepository(Voucher::class)->findOneByCode($code_voucher);
if (!$voucher) {
$this->addFlash('error', $this->translator->trans('Voucher Not Found !'));
return $this->redirectToRoute('app_admin_inscription_summary', ['reference' => $reference]);
}
if (!$voucher->isStatus()) {
$this->addFlash('error', $this->translator->trans('Voucher not valid !'));
return $this->redirectToRoute('app_admin_inscription_summary', ['reference' => $reference]);
}
if ($voucher->isUsed()) {
$this->addFlash('error', $this->translator->trans('Voucher already used !'));
return $this->redirectToRoute('app_admin_inscription_summary', ['reference' => $reference]);
}
if ($voucher->getInscription() == $inscription) {
$this->addFlash('error', $this->translator->trans('Voucher already used in this inscription !'));
return $this->redirectToRoute('app_admin_inscription_summary', ['reference' => $reference]);
}
$voucher->setInscription($inscription);
$inscription->addVoucher($voucher);
$this->em->persist($inscription);
$this->em->flush();
if ($voucher->getType() == Voucher::TYPE_UNLIMITED) {
$inscription->setStatus(Inscription::STATUS_VALID);
$inscription->calculPayment();
$inscription->setServicePayment("Voucher");
$inscription->setNote("Code: {$code_voucher}");
$this->paymentService->paymentValide($inscription);
$this->em->flush();
$flush_message = $this->translator->trans('Inscription effectuée avec succès !');
if ($inscription->getEvenement()->isMembership()) {
$flush_message = $this->translator->trans('Adhésion ' . $inscription->getEvenement()->getMembershipYear() . ' à la STP effectuée avec succès !');
}
$this->addFlash('success', $flush_message);
return $this->redirectToRoute('app_admin_inscription_payment_success', ['reference' => $reference, 'service_payment' => 'voucher']);
}
$this->addFlash('success', $this->translator->trans('Voucher added successfully !'));
return $this->redirectToRoute('app_admin_inscription_summary', ['reference' => $reference]);
}
// $payments = $this->em->getRepository(PaymentLog::class)->findBy(['inscription' => $inscription, 'isPaid' => false]);
$payments = $this->em->getRepository(PaymentLog::class)->getPaymentLogUnpaid($inscription, isPaid: false);
if ($this->getParameter('kernel.environment') == 'dev' && $this->getParameter('kernel.debug') && function_exists('dump')) {
dump(@compact('inscription', 'evenement', 'discountTotal', 'totalOfVouchers', 'payments') + ['inscription_evenement' => $inscription->getEvenement()]);
}
return $this->render('inscription/summary.html.twig', [
'inscription' => $inscription,
'totalOfVouchers' => $totalOfVouchers,
'discountTotal' => $discountTotal,
'payments' => $payments
]);
}
#[Route('/inscription/{reference}', name: 'app_admin_inscription_by_reference', defaults: ['recap' => true])]
#[Route('/inscription/{reference}/edit', name: 'app_admin_inscription_edit', defaults: ['recap' => true])]
public function edit(Request $request, $reference = null, $recap = true): Response
{
$session = $request->getSession();
$user = $this->getUser();
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["reference" => $reference]);
if (!$inscription) {
return $this->redirectToRoute('app_admin_inscription_form', ["reference" => $reference]);
}
$evenement = $inscription->getEvenement();
//no one is connected
if (!$user) {
return $this->redirectToRoute('app_user_login', [AppConstants::SESSION_EVENEMENT_REFERENCE => $evenement ? $evenement->getReference() : 0, AppConstants::SESSION_INSCRIPTION_REFERENCE => $reference]);
}
$form = $this->createFormBuilder()
->getForm();
$form->handleRequest($request);
$lines = $this->em->getRepository(Line::class)->getOptionByEvent($inscription->getEvenement()->getId());
$inscriptionLines = $session->get('inscriptionLines');
$linesSubmited = $request->request->all();
if ($form->isSubmitted() && $linesSubmited) {
$session->set('inscriptionLines', $linesSubmited);
} else {
$linesSubmited = $inscriptionLines;
}
if ($form->isSubmitted() && $form->isValid()) {
unset($linesSubmited['action']);
unset($linesSubmited['form']);
foreach ($inscription->getLineList()->getValues() as $value) {
$inscription->removeLineList($value);
}
$this->em->flush();
$problem = false;
$dataProblem = [];
foreach ($linesSubmited as $line) {
if (preg_match("/^(line|subLine)-\d+$/i", $line)) {
$lineId = explode('-', $line)[1];
/** @var Line $checkLine */
$checkLine = $this->em->getRepository(Line::class)->findOneBy(['id' => $lineId]);
if ($checkLine) {
if ($checkLine->getNumberOfPlaces()) {
if ($checkLine->getNumberOfPlaces() > $checkLine->getNumberOfPlacesReserved()) {
$inscription->addLineList($checkLine);
} else {
$problem = true;
// $this->addFlash('line-' . $checkLine->getId(), ' All place reserved ! ');
$dataProblem[] = $checkLine->getId();
}
} else {
$inscription->addLineList($checkLine);
}
}
}
}
$inscription->calculPayment();
$this->em->persist($inscription);
$this->em->flush();
//get all the previous payment logs
$this->em->getRepository(PaymentLog::class)->removeUnpaied($inscription);
$paymentLogs = $this->em->getRepository(PaymentLog::class)->findBy(['inscription' => $inscription]);
//store the lines all already brought activities
$paymentLogLines = [];
foreach ($paymentLogs as $pl) {
if ($pl->getLine()) {
$paymentLogLines[] = $pl->getLine()->getId();
}
}
//add newly brought activities to the payment log
foreach ($inscription->getLineList() as $line) {
if (!in_array($line->getId(), $paymentLogLines)) {
$paymentLog = new PaymentLog();
$paymentLog->setInscription($inscription);
$paymentLog->setLine($line);
$paymentLogLines[] = $line->getId();
$amount = 0;
if ($inscription->getDevise() == Inscription::DEVISE_DT) {
$amount = (float)($inscription->isTitleResidant() ? $line->getPriceResidant() : $line->getPrice());
} else if ($inscription->getDevise() == Inscription::DEVISE_EURO) {
$amount = (float)($inscription->isTitleResidant() ? $line->getPriceResidantEuro() : $line->getPriceEuro());
}
$paymentLog->setMontant($amount);
$paymentLog->setIsPaid(false);
if ($inscription->getStatus() == Inscription::STATUS_PAYMENT_SUCCESS) {
$paymentLog->setIsPaid(true);
}
$this->em->persist($paymentLog);
$this->em->flush();
}
}
if (!$problem) {
$session->remove('inscriptionLines');
return $this->redirectToRoute('app_admin_inscription_by_reference', ['reference' => $inscription->getReference()]);
}
}
if ($this->getParameter('kernel.environment') == 'dev' && $this->getParameter('kernel.debug') && function_exists('dump')) {
// dump(@compact('inscription', 'lines', 'form', 'recap') + ['evenement' => $inscription->getEvenement()]);
}
return $this->render('inscription/edit.html.twig', @compact('linesSubmited') + [
'evenement' => $inscription->getEvenement(),
'lines' => $lines,
'inscription' => $inscription,
'form' => $form->createView(),
'recap' => $recap,
'payments' => $this->em->getRepository(PaymentLog::class)->findBy(['inscription' => $inscription, 'isPaid' => 0]),
]);
}
#[Route('/evenement/{event_id}/inscription/{inscription_id}/attestation', name: 'app_admin_inscription_attestation', defaults: ['print' => true])]
#[Route('/evenement/{event_id}/inscription/{inscription_id}/attestation/html', name: 'app_admin_inscription_attestation_html', defaults: ['print' => false])]
# [Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
public function attestation(Request $request, TCPDFController $tcpdf, $event_id, $inscription_id, $print = true): Response
{
$user = $this->getUser();
/** @var Evenement $evenement */
$evenement = $this->em->getRepository(Evenement::class)->findOneBy(["id" => $event_id]);
if (!$evenement) {
$this->addFlash('error', ' Evenement Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id, "reference" => 0]);
}
//no one is connected
if (!$user && $evenement) {
return $this->redirectToRoute('app_user_login', [AppConstants::SESSION_EVENEMENT_REFERENCE => $evenement->getReference()]);
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $inscription_id]);
if (!$inscription) {
$this->addFlash('error', ' Inscription Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
if ($inscription->getEvenement()->getId() != $event_id) {
$this->addFlash('error', ' Inscription Not related to this Evenement ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
$idAteliers = $inscription->getListOfLinesId();
$names = array();
foreach ($idAteliers as $id) {
// if ($id != 126) {
//exclude the payment line
$atelier = $this->em->getRepository(Line::class)->findOneBy(["id" => $id]);
$name = "<span>" . $atelier->getTheme() . "</span>" . ":" . "<br><br>" . $atelier->getDescription();
$names[] = $name;
// }
}
// print for all lines
// $this
//open pdf file in browser
return new Response(
"",
Response::HTTP_OK,
['Content-Type' => 'application/pdf']
);
}
#[Route('/admin/evenement/{event_id}/inscription/{inscription_id}/{line_id}', name: 'app_admin_evenement_inscription_certif', defaults: ['send' => false])]
#[Route('/admin/evenement/{event_id}/inscription/{inscription_id}/{line_id}/send', name: 'app_admin_evenement_inscription_send_certif', defaults: ['send' => true, 'pdf' => false])]
#[Route('/admin/evenement/{event_id}/inscription/{inscription_id}/{line_id}/html', name: 'app_admin_evenement_inscription_html_certif', defaults: ['send' => false, 'pdf' => false])]
#[Route('/evenement/{event_id}/inscription/{inscription_id}/{line_id}', name: 'app_evenement_inscription_certif', defaults: ['send' => false])]
#[Route('/evenement/{event_id}/inscription/{inscription_id}/{line_id}/send', name: 'app_evenement_inscription_send_certif', defaults: ['send' => true, 'pdf' => false])]
#[Route('/evenement/{event_id}/inscription/{inscription_id}/{line_id}/html', name: 'app_evenement_inscription_html_certif', defaults: ['send' => false, 'pdf' => false])]
public function sendCertificationByMail(Request $request, $event_id, $inscription_id, $line_id, bool $send = false, bool $pdf = true): Response
{
//gestion d'erreurs
$user = $this->getUser();
/** @var Evenement $evenement */
$evenement = $this->em->getRepository(Evenement::class)->findOneBy(["id" => $event_id]);
if (!$evenement) {
$this->addFlash('error', ' Evenement Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id, "reference" => 0]);
}
//no one is connected
if (!$user && $evenement) {
if (str_contains($request->attributes->get('_route'), 'admin')) {
return $this->redirectToRoute('app_login', []);
}
return $this->redirectToRoute('app_user_login', [AppConstants::SESSION_EVENEMENT_REFERENCE => $evenement->getReference()]);
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $inscription_id]);
if (!$inscription) {
$this->addFlash('error', ' Inscription Not Found ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
if ($inscription->getEvenement()->getId() != $event_id) {
$this->addFlash('error', ' Inscription Not related to this Evenement ! ');
return $this->redirectToRoute('app_admin_inscription_empty', ['event_id' => $event_id]);
}
/** @var Line $line */
$line = $this->em->getRepository(Line::class)->getLineWithLineParticipants($line_id);
$html = $this->certificateEmailService->sendCertificateInscrit($inscription, $line, $line->getActivityType(), null, null, $send, $pdf);
if ($html instanceof StreamedResponse) {
return $html;
}
if ($send) {
return $this->redirectToRoute("app_admin_inscription_details", [
"event_id" => $event_id,
"id" => $inscription_id,
]);
}
//open pdf file in browser
return new Response(
$pdf ? "" : $html,
Response::HTTP_OK,
['Content-Type' => 'application/pdf']
);
}
# !TODO check if prefixed url /admin !
#[Route('/inscription/{id}/cancel', name: "app_admin_evenement_inscription_cancel")]
public function cancelPaiement(Request $request, ?Inscription $inscription = null)
{
if ($inscription && $inscription->getStatus() == Inscription::STATUS_VALID && $inscription->getStatusPayment() == Inscription::STATUS_PAYMENT_SUCCESS) {
$inscription->setStatus(Inscription::STATUS_WAITING);
$inscription->setStatusPayment(Inscription::STATUS_PAYMENT_PENDING);
$inscription->setDatePayment(null);
$this->em->persist($inscription);
$this->em->flush();
if ($inscription->getEvenement()) {
return $this->redirectToRoute('app_admin_evenement_inscriptions_list', ['id' => $inscription->getEvenement()->getId()]);
}
}
return $this->redirectToRoute('app_admin_evenement');
}
#[Route('/admin/inscription/{id}/switch_payment', name: 'app_admin_evenement_inscription_switch_payment')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
public function switchPayment(Request $request, $id): Response
{
$user = $this->getUser();
//no one is connected
if (!$user) {
return $this->redirectToRoute('app_login');
}
/** @ var Evenement $evenement */
// $evenement = $this->em->getRepository(Evenement::class)->findOneById($id);
// if (!$evenement){
// $this->addFlash('error',' Evenement Not Found ! ');
// return $this->redirectToRoute('app_admin_evenement') ;
// }
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $id]);
if ($inscription) {
if ($inscription->getStatus() == Inscription::STATUS_DRAFT) {
$inscription->setStatus(Inscription::STATUS_VALID);
$inscription->setDatePayment(new \DateTime());
} elseif ($inscription->getStatus() == Inscription::STATUS_VALID) {
$inscription->setStatus(Inscription::STATUS_DRAFT);
$inscription->setDatePayment(null);
}
$this->em->persist($inscription);
$this->em->flush();
if ($inscription->getEvenement()) {
return $this->redirectToRoute('app_admin_evenement_inscriptions_list', ['id' => $inscription->getEvenement()->getId()]);
}
return $this->redirectToRoute('app_admin_evenement', ["inscription" => $inscription->getId()]);
}
return $this->redirectToRoute('app_admin_evenement', []);
}
#[Route('/inscription/{reference}/empty', name: 'app_evenement_inscription_empty')]
# [Security("is_granted('ROLE_MEMBER')")]
public function emptyInscription(Request $request, $reference): Response
{
$user = $this->getUser();
//no one is connected
if (!$user) {
// return $this->redirectToRoute('app_login');
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["reference" => $reference]);
if ($inscription) {
$lines_payed = [];
$inscription->getPaymentLogs()->filter(function(PaymentLog $element) use (&$lines_payed) {
if($element && $element->isPaid() && $element->getLine() && $element->getLine()->getId()) {
$lines_payed[] = $element->getLine()->getId();
return true;
}
return false;
});
foreach ($inscription->getLineList()->getValues() as $value) {
if(!in_array($value->getId(), $lines_payed)) {
$inscription->removeLineList($value);
}
}
$this->em->persist($inscription);
$this->em->getRepository(PaymentLog::class)->removeUnpaied($inscription);
}
if ($request->get('action') == 'edit' && $reference) {
return $this->redirectToRoute('app_admin_inscription_by_reference', ["reference" => $reference]);
}
if ($request->get('action') == 'add' && $inscription && $inscription->getEvenement() && $inscription->getEvenement()->getReference()) {
return $this->redirectToRoute('app_admin_inscription_form', ["reference" => $inscription->getEvenement()->getReference()]);
}
if ($request->headers->get('referer')) {
return $this->redirect($request->headers->get('referer'));
}
return $this->redirectToRoute('app_user_home', []);
}
#[Route('/admin/inscription/{id}/empty', name: 'app_admin_evenement_inscription_empty')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
public function emptyInscriptionAdmin(Request $request, $id): Response
{
$user = $this->getUser();
//no one is connected
if (!$user) {
// return $this->redirectToRoute('app_login');
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $id]);
if ($inscription) {
}
return $this->redirectToRoute('app_admin_evenement', []);
}
#[Route('/admin/inscription/{id}/delete', name: 'app_admin_evenement_inscription_delete')]
#[Security("is_granted('ROLE_ADMIN') or is_granted('ROLE_SUPER_ADMIN')")]
public function deleteInscription(Request $request, $id): Response
{
$user = $this->getUser();
//no one is connected
if (!$user) {
//return $this->redirectToRoute('app_login');
}
/** @var Inscription $inscription */
$inscription = $this->em->getRepository(Inscription::class)->findOneBy(["id" => $id]);
if ($inscription) {
}
return $this->redirectToRoute('app_admin_evenement', []);
}
}