<?php
namespace App\Controller;
use App\Entity\Order;
use App\Entity\OrderDetail;
use App\Repository\PneuRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/commande")
*/
class OrderController extends AbstractController
{
/**
* @Route("/index", name="submit_order", methods={"GET", "POST"})
*
*/
public function add(SessionInterface $session, PneuRepository $pneuRepository, EntityManagerInterface $em, Request $request): Response
{
$this->denyAccessUnlessGranted('ROLE_USER');
$panier = $session->get('panier', []);
if($panier === []){
$this->addFlash('message', 'Votre panier est vide');
// return $this->redirectToRoute('app_home_index');
return $this->renderForm('home/message.html.twig', [
"message" => "Votre panier est vide"
]);
}
//Le panier n'est pas vide, on crée la commande
$order = new Order();
// On remplit la commande
$order->setUser($this->getUser());
$order->setCreatedAt(new \DateTime());
// $order->setReference(uniqid());
$data = [];
// On parcourt le panier pour créer les détails de commande
$totalPrice=0;
$total = 0;
foreach($panier as $item => $quantity){
// On va chercher le produit
$pneu = $pneuRepository->find($item);
$data[] = [
'pneu' => $pneu,
'quantity' => $quantity
];
$total += $pneu->getPrix() * $quantity;
$orderDetail = new OrderDetail();
$price = $pneu->getPrix();
// $totalPrice = $totalPrice + $price ;
// On crée le détail de commande
$orderDetail->setPneu($pneu);
$orderDetail->setPrice($price);
$orderDetail->setQuantity($quantity);
$order->addOrderDetail($orderDetail);
}
$order->setTotalPrice($total);
$order->setStatus("0");
$order->setReference(uniqid());
// On persiste et on flush
// $em->persist($order);
// $em->flush();
// On initialise des variables
$data = [];
$total = 0;
foreach($panier as $id => $quantity){
$pneu = $pneuRepository->find($id);
$data[] = [
'pneu' => $pneu,
'quantity' => $quantity
];
$total += $pneu->getPrix() * $quantity;
}
// return $this->render('cart/index.html.twig', compact('data', 'total'));
// $session->remove('panier');
$user = $this->getUser();
// Création manuelle d'un formulaire
$form = $this->createFormBuilder($user)
->add('nom', TextType::class, [
'label' => 'nom complet',
'attr' => ['class' => 'form-control']
])
->add('address', TextType::class, [
'label' => 'Adresse de livraison',
'attr' => ['class' => 'form-control']
])
->add('numero', TextType::class, [
'label' => 'Numéro de téléphone',
'attr' => ['class' => 'form-control']
])
->add('save', SubmitType::class, [
'label' => 'Mettre à jour',
'attr' => ['class' => 'btn btn-primary']
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
$this->addFlash('success', 'Adresse mise à jour avec succès.');
return $this->redirectToRoute('submit_order'); // Rediriger vers la même page ou une autre page après soumission
}
return $this->render('cart/confirmation.html.twig', [
"order" => $order,
"data" => $data,
"total" => $total,
"form" => $form->createView(),
]);
$this->addFlash('message', 'Commande créée avec succès');
// return $this->redirectToRoute('app_home_index');
return $this->renderForm('home/message.html.twig', [
"message" => "Commande créée avec succès"
]);
// return $this->render('order/index.html.twig', [
// // 'users' => $userRepository->findAll(),
// ]);
}
}