src/Controller/OrderController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Order;
  4. use App\Entity\OrderDetail;
  5. use App\Repository\PneuRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * @Route("/commande")
  16.  */
  17. class OrderController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/index", name="submit_order", methods={"GET", "POST"})
  21.      * 
  22.      */
  23.     public function add(SessionInterface $sessionPneuRepository $pneuRepositoryEntityManagerInterface $emRequest $request): Response
  24.     {
  25.         $this->denyAccessUnlessGranted('ROLE_USER');
  26.         $panier $session->get('panier', []);
  27.         if($panier === []){
  28.             $this->addFlash('message''Votre panier est vide');
  29.             // return $this->redirectToRoute('app_home_index');
  30.             return $this->renderForm('home/message.html.twig', [
  31.                 "message" => "Votre panier est vide"
  32.             ]);
  33.         }
  34.         //Le panier n'est pas vide, on crée la commande
  35.         $order = new Order();
  36.         // On remplit la commande
  37.         $order->setUser($this->getUser());
  38.         $order->setCreatedAt(new \DateTime());
  39.         // $order->setReference(uniqid());
  40.         $data = [];
  41.         // On parcourt le panier pour créer les détails de commande
  42.         $totalPrice=0;
  43.         $total 0;
  44.         foreach($panier as $item => $quantity){
  45.             // On va chercher le produit
  46.             $pneu $pneuRepository->find($item);
  47.             $data[] = [
  48.                 'pneu' => $pneu,
  49.                 'quantity' => $quantity
  50.             ];
  51.             $total += $pneu->getPrix() * $quantity;
  52.             $orderDetail = new OrderDetail();            
  53.             $price $pneu->getPrix();
  54.             // $totalPrice = $totalPrice + $price ;
  55.             // On crée le détail de commande
  56.             $orderDetail->setPneu($pneu);
  57.             $orderDetail->setPrice($price);
  58.             $orderDetail->setQuantity($quantity);
  59.             $order->addOrderDetail($orderDetail);
  60.         }
  61.         $order->setTotalPrice($total);
  62.         $order->setStatus("0");
  63.         $order->setReference(uniqid());
  64.         // On persiste et on flush
  65.         // $em->persist($order);
  66.         // $em->flush();
  67.         // On initialise des variables
  68.         $data = [];
  69.         $total 0;
  70.         foreach($panier as $id => $quantity){
  71.             $pneu $pneuRepository->find($id);
  72.             $data[] = [
  73.                 'pneu' => $pneu,
  74.                 'quantity' => $quantity
  75.             ];
  76.             $total += $pneu->getPrix() * $quantity;
  77.         }
  78.         
  79.         // return $this->render('cart/index.html.twig', compact('data', 'total'));
  80.         // $session->remove('panier');
  81.         $user $this->getUser();
  82.         // Création manuelle d'un formulaire
  83.         $form $this->createFormBuilder($user)
  84.             ->add('nom'TextType::class, [
  85.                 'label' => 'nom complet',
  86.                 'attr' => ['class' => 'form-control']
  87.             ])
  88.             ->add('address'TextType::class, [
  89.                 'label' => 'Adresse de livraison',
  90.                 'attr' => ['class' => 'form-control']
  91.             ])
  92.             ->add('numero'TextType::class, [
  93.                 'label' => 'Numéro de téléphone',
  94.                 'attr' => ['class' => 'form-control']
  95.             ])
  96.             ->add('save'SubmitType::class, [
  97.                 'label' => 'Mettre à jour',
  98.                 'attr' => ['class' => 'btn btn-primary']
  99.             ])
  100.             ->getForm();
  101.         $form->handleRequest($request);
  102.         if ($form->isSubmitted() && $form->isValid()) {
  103.             $entityManager $this->getDoctrine()->getManager();
  104.             $entityManager->flush();
  105.             $this->addFlash('success''Adresse mise à jour avec succès.');
  106.             return $this->redirectToRoute('submit_order'); // Rediriger vers la même page ou une autre page après soumission
  107.         }
  108.         return $this->render('cart/confirmation.html.twig', [
  109.             "order" => $order,
  110.             "data" => $data,
  111.             "total" => $total,
  112.             "form" => $form->createView(),
  113.         ]);
  114.         $this->addFlash('message''Commande créée avec succès');
  115.         // return $this->redirectToRoute('app_home_index');
  116.         return $this->renderForm('home/message.html.twig', [
  117.             "message" => "Commande créée avec succès"
  118.         ]);
  119.         // return $this->render('order/index.html.twig', [
  120.         //     // 'users' => $userRepository->findAll(),
  121.         // ]);
  122.     }
  123. }