src/Controller/TombolaController.php line 23

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CommandeTicket;
  4. use App\Entity\Reservation;
  5. use App\Entity\Tombola;
  6. use App\Entity\User;
  7. use App\Form\CommandeTicketType;
  8. use App\Net15\PaiementBundle\Entity\ModePaiement;
  9. use App\Repository\CommandeTicketRepository;
  10. use App\Repository\EditionRepository;
  11. use App\Repository\TicketRepository;
  12. use App\Repository\TombolaRepository;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\RedirectResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. class TombolaController extends AbstractController
  19. {
  20.     #[Route('/tombola/{tombola}'name'app_tombola_front_commande')]
  21.     public function app_tombola_front_commande(
  22.         Tombola $tombola,
  23.         Request $request,
  24.         CommandeTicketRepository $commandeRepo,
  25.         TombolaRepository $tombolaRepo
  26.     ): Response
  27.     {
  28.         $user $this->getUser();
  29.         if (!$user instanceof User) {
  30.             return $this->redirectToRoute('login');
  31.         }
  32.         $commande = new CommandeTicket($tombola$user);
  33.         $form $this->createForm(CommandeTicketType::class, $commande, [
  34.             'tailles_disponibles' => $tombola->getTaillesDisponibles(),
  35.         ]);
  36.         $form->handleRequest($request);
  37.         // helper de rendu (évite les duplications)
  38.         $renderForm = fn () => $this->render('tombola/commande.html.twig', [
  39.             'tombola'        => $tombola,
  40.             'ventesOuvertes' => $tombola->isVenteOuverte(),
  41.             'form'           => $form->createView(),
  42.         ]);
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.             // ventes fermées
  45.             if (!$tombola->isVenteOuverte()) {
  46.                 $this->addFlash(
  47.                     'error',
  48.                     'Désolé, la période de vente des tickets pour cette tombola est terminée.'
  49.                 );
  50.                 return $renderForm();
  51.             }
  52.             $quantiteDemandee count($commande->getTickets());
  53.             $ticketsRestants  $tombola->getTicketRestant();
  54.             // stock insuffisant
  55.             if ($quantiteDemandee $ticketsRestants) {
  56.                 $message $ticketsRestants === 0
  57.                     'Désolé, tous les tickets pour cette tombola ont été vendus.'
  58.                     sprintf(
  59.                         'Vous avez demandé %d ticket(s), mais il n\'en reste que %d disponible(s).',
  60.                         $quantiteDemandee,
  61.                         $ticketsRestants
  62.                     );
  63.                 $this->addFlash('error'$message);
  64.                 return $renderForm();
  65.             }
  66.             // commande valide
  67.             $commande
  68.                 ->setQuantite($quantiteDemandee)
  69.                 ->setPrix($tombola->getPrix())
  70.                 ->setModePaiement(ModePaiement::PAYBOX)
  71.                 ->setStatus(CommandeTicket::STATUT_EN_ATTENTE_PAIEMENT);
  72.             $commandeRepo->save($commande);
  73.             $tombola->venteTicket($quantiteDemandee);
  74.             $tombolaRepo->save($tombola);
  75.             $this->addFlash('success''Votre commande a bien été enregistrée !');
  76.             $recapitulatif = [
  77.                 'type'  => 'tombola',
  78.                 'id'    => $commande->getId(),
  79.                 'name'  => $quantiteDemandee ' ticket(s) de tombola',
  80.                 'price' => $commande->getTotalPrice(),
  81.                 'email' => $commande->getUser()->getEmail(),
  82.             ];
  83.             return $this->redirectToRoute('paiement_payer', [
  84.                 'parent_entity_class' => null,
  85.                 'parent_entity_id'    => null,
  86.                 'entity_class'        => CommandeTicket::class,
  87.                 'entity_id'           => $commande->getUlid(),
  88.                 'libelle'             => 'Motards du viaduc - Tombola ' $tombola->getTitre(),
  89.                 'montant'             => $commande->getTotalPrice(),
  90.                 'recapitulatif'       => $recapitulatif,
  91.                 'payement_method'     => ModePaiement::PAYBOX,
  92.                 'back_path'           => 'app_tombola_front_tickets',
  93.                 'prenom'              => $user->getFirstname(),
  94.                 'nom'                 => $user->getLastname(),
  95.                 'adresse1'            => $user->getAddress(),
  96.                 'adresse2'            => $user->getAddressComplement(),
  97.                 'zipcode'             => $user->getZipCode(),
  98.                 'city'                => $user->getCity(),
  99.                 'country'             => $user->getPays()->getId(),
  100.             ], Response::HTTP_SEE_OTHER);
  101.         }
  102.         return $renderForm();
  103.     }
  104.     #[Route('/tombola-mes-tickets'name'app_tombola_front_tickets')]
  105.     public function app_tombola_front_tickets(EditionRepository $editionRepository,
  106.                                               TombolaRepository $tombolaRepository,
  107.                                               CommandeTicketRepository $commandeTicketRepository): RedirectResponse|Response
  108.     {
  109.         $user $this->getUser();
  110.         if(!$user instanceof User){
  111.             return $this->redirectToRoute('login');
  112.         }
  113.         $edition $editionRepository->getEditionEnCours();
  114. //        dd($edition);
  115.         $tombola $tombolaRepository->findOneBy(['edition'=>$edition]);
  116. //        dump($tombola);
  117.         $commandes $commandeTicketRepository->findBy(['user'=>$user,'tombola' => $tombola]);
  118.         return $this->render('tombola/mes_tickets.html.twig', [
  119.             'tombola' => $tombola,
  120.             'commandes' => $commandes,
  121.         ]);
  122.     }
  123. }