src/Controller/AbonnementController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Abonnement;
  4. use App\Entity\Souscription;
  5. use App\Form\AbonnementType;
  6. use App\Form\AbonnementFrontType;
  7. use App\Repository\AbonnementRepository;
  8. use App\Repository\UserRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use App\Entity\User;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
  17. use App\Form\SouscriptionType;
  18. #[Route('/abonnement')]
  19. class AbonnementController extends AbstractController
  20. {
  21.     #[Route('/new/souscription'name'souscription_new')]
  22.     public function newsouscription(Request $requestEntityManagerInterface $em): Response
  23.     {
  24.         
  25.         // Création de l'entité vide
  26.         $souscription = new Souscription();
  27.         // Création du formulaire
  28.         $form $this->createForm(SouscriptionType::class, $souscription);
  29.         // Gestion de la requête
  30.         $form->handleRequest($request);
  31.         if ($form->isSubmitted() && $form->isValid()) {
  32.             // On peut récupérer les données du formulaire
  33.             // $typeAbonnement = $souscription->getTypeabonnement();
  34.             // $paymentMethod = $souscription->getPaymentMethod();
  35.             // Persistance en base de données
  36.             $em->persist($souscription);
  37.             $em->flush();
  38.             // Message flash de succès
  39.             $this->addFlash('success''Souscription créée avec succès !');
  40.             // Redirection vers une route (ex : liste des abonnements)
  41.             return $this->redirectToRoute('abonnement_new'); 
  42.         }
  43.         // Rendu du formulaire dans la vue
  44.         return $this->render('abonnement/newsouscription.html.twig', [
  45.             'form' => $form->createView(),
  46.         ]);
  47.     }
  48.     #[Route('/all/abonnements'name'app_all_abonnement_index'methods: ['GET'])]
  49.     public function AllAbonnements(AbonnementRepository $abonnementRepository): Response
  50.     {
  51.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN');
  52.      
  53.         return $this->render('abonnement/all.html.twig', [
  54.             'abonnements' => $abonnementRepository->findAll(),
  55.             
  56.         ]);
  57.     }
  58.     #[Route('/mesabonnements'name'app_mes_abonnement_index'methods: ['GET'])]
  59.     public function MesAbonnements(AbonnementRepository $abonnementRepository): Response
  60.     {
  61.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  62.        $abonnements $abonnementRepository->createQueryBuilder('u')
  63.        ->join('u.userabonnee''e')
  64.    //    ->join('e.entreprise', 'd')
  65.     
  66.     ->where('e = :creator')
  67.     ->setParameter('creator'$this->getUser())
  68.     ->getQuery()
  69.     ->getResult();
  70.         
  71.         return $this->render('abonnement/mesabonnements.html.twig', [
  72.             'abonnements' => $abonnements//abonnementRepository->findAll(),
  73.             
  74.         ]);
  75.     }
  76.     #[Route('/'name'app_abonnement_index'methods: ['GET'])]
  77.     public function index(AbonnementRepository $abonnementRepository): Response
  78.     {
  79.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  80.         $user $this->getUser();
  81.         // 🔹 Vérifie abonnement et rôle
  82.         if (!$user->isOkAbonnement() && in_array('ROLE_ADMIN'$user->getRoles(), false)) {
  83.             // Redirection admin avec abonnement actif
  84.             $this->addFlash('error''Vous n\'êtes pas autorisé à accéder à cette page, veuillez vous abonner d\'abord.');
  85.             return $this->redirectToRoute('souscription_new');
  86.         }
  87.        $abonnements $abonnementRepository->createQueryBuilder('u')
  88.        ->join('u.userabonnee''e')
  89.    //    ->join('e.entreprise', 'd')
  90.     
  91.     ->where('e = :creator')
  92.     ->setParameter('creator'$this->getUser())
  93.     ->getQuery()
  94.     ->getResult();
  95.         
  96.         return $this->render('abonnement/index.html.twig', [
  97.             'abonnements' => $abonnements//abonnementRepository->findAll(),
  98.             
  99.         ]);
  100.     }
  101.     public function getUserDetails(string $username): Response
  102.     {
  103.         $user $this->userRepository->findUserByUsername($username);
  104.         if (!$user) {
  105.             return new Response('Utilisateur non trouvé');
  106.         }
  107.         $fullName $user->getFirstName() . ' ' $user->getLastName();
  108.         return new Response('Nom complet : ' $fullName);
  109.     }
  110.     #[Route('/abonnement/nouvel'name'app_abonnement_nouvel')]
  111.     public function nouvel(Request $requestEntityManagerInterface $entityManager): Response
  112.     {
  113.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN');
  114.         try {
  115.             $abonnement = new Abonnement();
  116.             $form $this->createForm(AbonnementType::class, $abonnement);
  117.             $form->handleRequest($request);
  118.     
  119.             if ($form->isSubmitted() && $form->isValid()) {
  120.              
  121.                 // Récupérer la durée (non mappée à l'entité)
  122.         $duree = (int) $form->get('duree')->getData(); // ex: 1, 3, 6, 12
  123.         $userabonnee $form->get('userabonnee')->getData();
  124.         if  ($duree == null){
  125.             $this->addFlash('error''Erreur : il faut choisir une durée d\'abonnement.');
  126.             return $this->redirectToRoute('souscription_new');
  127.         
  128.         }
  129.         
  130.         else{
  131.         
  132.             $dernierAbonnement $entityManager->createQueryBuilder()
  133.     ->select('a')
  134.     ->from(\App\Entity\Abonnement::class, 'a')
  135.     ->where('a.userabonnee = :userId')
  136.     ->setParameter('userId'$userabonnee)
  137.     ->orderBy('a.dateabonnement''DESC')
  138.     ->setMaxResults(1)
  139.     ->getQuery()
  140.     ->getOneOrNullResult();
  141.         
  142.           //  dd($dernierAbonnement);
  143.         
  144.         if (($dernierAbonnement) && ($dernierAbonnement->getDateResiliation() < new \DateTime())) {
  145.             $dateDebut = new \DateTime(); // maintenant
  146.         
  147.         } else if (($dernierAbonnement) && ($dernierAbonnement->getDateResiliation() > new \DateTime())){
  148.             // aucun abonnement trouvé    
  149.             $dateDebut $dernierAbonnement->getDateResiliation();
  150.         }    
  151.         else {
  152.         
  153.             $dateDebut = new \DateTime(); // maintenant
  154.         }   
  155.         
  156.         
  157.         
  158.         // Récupérer la date de début
  159.      //   $dateDebut = $abonnement->getDateabonnement();
  160.         // Cloner la date (évite de modifier la même instance)
  161.         $dateFin = (clone $dateDebut)->modify("+{$duree} months");
  162.     }
  163.         // Définir la date de fin sur l'entité
  164.                $entityManager->persist($abonnement);
  165.                $abonnement->setDateabonnement($dateDebut);
  166.                $abonnement->setDateresiliation($dateFin);
  167.                 $abonnement->setUserprofile($abonnement->getUserabonnee()->getUsername());
  168.                 $entityManager->flush();
  169.                 $this->addFlash('success''Abonnement enregistré avec succès');
  170.                 return $this->redirectToRoute('app_abonnement_index', [], Response::HTTP_SEE_OTHER);
  171.             }
  172.     
  173.             return $this->renderForm('abonnement/new.html.twig', [
  174.                 'abonnement' => $abonnement,
  175.                 'form' => $form,
  176.             ]);
  177.         } catch (\Throwable $e) {
  178.             // Simuler le rendu debug
  179.             $renderer = new HtmlErrorRenderer(true); // true = debug ON
  180.             $error $renderer->render($e);
  181.             return new Response($error->getMessage(), $error->getStatusCode(), $error->getHeaders());
  182.         }
  183.     }
  184.     
  185.     #[Route('/new'name'app_abonnement_new'methods: ['GET''POST'])]
  186.     public function new(Request $requestEntityManagerInterface $entityManager): Response
  187.     {
  188.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN');
  189.         $abonnement = new Abonnement();
  190.         $form $this->createForm(AbonnementType::class, $abonnement);
  191.         $form->handleRequest($request);
  192.         if ($form->isSubmitted() && $form->isValid()) {
  193.             $entityManager->persist($abonnement);
  194.             $abonnement->setUserprofile($abonnement->getUserabonnee()->getUsername());
  195.             $entityManager->flush();
  196.             return $this->redirectToRoute('app_abonnement_index', [], Response::HTTP_SEE_OTHER);
  197.         }
  198. /*
  199.         return $this->renderForm('abonnement/new.html.twig', [
  200.             'abonnement' => $abonnement,
  201.             'form' => $form,
  202.         ]);*/
  203.         $response $this->render('abonnement/new.html.twig', ['abonnement' => $abonnement,
  204.             'form' => $form,]);
  205. $response->headers->set('Cache-Control''no-cache, no-store, must-revalidate');
  206. return $response;
  207.     }
  208.     #[Route('/souscrire'name'app_abonnement_front_new'methods: ['GET''POST'])]
  209.     public function newfront(Request $requestEntityManagerInterface $entityManager): Response
  210.     {
  211.         $abonnement = new Abonnement();
  212.         $form1 $this->createForm(AbonnementFrontType::class, $abonnement);
  213.         $form1->handleRequest($request);
  214.         if ($form1->isSubmitted() && $form1->isValid()) {
  215.             $entityManager->persist($abonnement);
  216.             $entityManager->flush();
  217. //dd($this->getUser()->getId());
  218.             return $this->redirectToRoute('app_user_profile_show', ['id'=> $this->getUser()->getId()], Response::HTTP_SEE_OTHER);
  219.         }
  220.         return $this->renderForm('abonnement/newfront.html.twig', [
  221.             'abonnement' => $abonnement,
  222.             'form1' => $form1,
  223.         ]);
  224.     }
  225.     #[Route('/{id}'name'app_abonnement_show'methods: ['GET'])]
  226.     public function show(Abonnement $abonnement,Security $securityUserRepository $userRepository,AbonnementRepository $abonnementRepository): Response
  227.     {
  228.         $user $security->getUser();
  229.         if (!$user) {
  230.             throw $this->createAccessDeniedException('Veuillez vous connecter.');
  231.         }
  232.     
  233.         $userp $userRepository->findBy(['username' => $user->getUsername()]);
  234. //dd($userp);
  235.            foreach ($userp as $usera) {
  236.             $namecomplet $usera->getPrenom().' '.$usera->getNom(); // Vérifiez que $product est bien un objet
  237.            }
  238.         return $this->render('abonnement/show.html.twig', [
  239.             'abonnement' => $abonnement,
  240.             'namecomplet' => $namecomplet,
  241.         ]);
  242.     }
  243.     #[Route('/abonnement/{id}/modifier-livraisons'name'abonnement_modifier_livraisons'methods: ['POST'])]
  244.     public function modifierNombreLivraisons(Request $requestAbonnement $abonnementEntityManagerInterface $em): Response
  245.     {
  246.         $nombre = (int) $request->request->get('nombreLivraisons');
  247.     
  248.         if ($nombre 0) {
  249.             $this->addFlash('danger''Le nombre de livraisons doit être supérieur ou égal à 0.');
  250.             return $this->redirectToRoute('app_abonnement_show', ['id' => $abonnement->getId()]);
  251.         }
  252.     
  253.         $abonnement->setNombrelivraison($nombre);
  254.         if ($abonnement->getNombrelivraison() >= $abonnement->getTypeabonnement() -> getCaracteristiquestypeabonnement()->getNbreliv()) {
  255.             $abonnement->setStatutAbonnement('closed');
  256.             $abonnement->setDateresiliation(new \DateTime('now'));
  257.             # code...
  258.         }
  259.         $em->flush();
  260.     
  261.         $this->addFlash('success''Nombre de livraisons mis à jour avec succès !');
  262.     
  263.         return $this->redirectToRoute('app_abonnement_show', ['id' => $abonnement->getId()]);
  264.     }
  265.     
  266.     #[Route('/{id}/edit'name'app_abonnement_edit'methods: ['GET''POST'])]
  267.     public function edit(Request $requestAbonnement $abonnementEntityManagerInterface $entityManager): Response
  268.     {
  269.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN');
  270.         $form $this->createForm(AbonnementType::class, $abonnement);
  271.         $form->handleRequest($request);
  272.         if ($form->isSubmitted() && $form->isValid()) {
  273.             $entityManager->flush();
  274.             return $this->redirectToRoute('app_abonnement_index', [], Response::HTTP_SEE_OTHER);
  275.         }
  276.         return $this->renderForm('abonnement/edit.html.twig', [
  277.             'abonnement' => $abonnement,
  278.             'form' => $form,
  279.         ]);
  280.     }
  281.     #[Route('/{id}'name'app_abonnement_delete'methods: ['POST'])]
  282.     public function delete(Request $requestAbonnement $abonnementEntityManagerInterface $entityManager): Response
  283.     {
  284.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN');
  285.         if ($this->isCsrfTokenValid('delete'.$abonnement->getId(), $request->request->get('_token'))) {
  286.             $entityManager->remove($abonnement);
  287.             $entityManager->flush();
  288.         }
  289.         return $this->redirectToRoute('app_abonnement_index', [], Response::HTTP_SEE_OTHER);
  290.     }
  291. }