src/Flexy/FrontBundle/Themes/CoWorking/Service/ShoppingCartService.php line 20

  1. <?php 
  2. // src/Service/ShoppingCartService.php
  3. namespace App\Flexy\FrontBundle\Themes\CoWorking\Service;
  4. use App\Flexy\ShopBundle\Entity\Order\Order;
  5. use App\Flexy\ShopBundle\Entity\Order\OrderItem;
  6. use App\Flexy\ShopBundle\Entity\Product\Product;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. class ShoppingCartService
  10. {
  11.     private $session;
  12.     public function __construct(private RequestStack $requestStack, private readonly EntityManagerInterface $entityManagerInterface)
  13.     {
  14.         $this->session $this->requestStack->getSession();
  15.         if (!$this->session->has('cart_items')) {
  16.             $this->session->set('cart_items', []);
  17.         }
  18.     }
  19.     public function addItem($item,$calculateQty=true)
  20.     {
  21.         $cartItems $this->session->get('cart_items');
  22.         $id $item['id'];
  23.         
  24.         if (isset($cartItems[$id])) {
  25.             if($calculateQty){
  26.                 $cartItems[$id]['quantity'] += 1;
  27.             }else{
  28.                 $cartItems[$id]['price'] = $item['price'];
  29.             }
  30.             
  31.         } else {
  32.             $cartItems[$id] = [
  33.                 'id' => $item['id'],
  34.                 'name' => $item['name'],
  35.                 'price' => $item['price'],
  36.                 'image' => $item['image'],
  37.                 'quantity' => 1,
  38.             ];
  39.         }
  40.         $this->session->set('cart_items'$cartItems);
  41.         
  42.     }
  43.     public function removeItem($id)
  44.     {
  45.         $cartItems $this->session->get('cart_items');
  46.         if (isset($cartItems[$id])) {
  47.             unset($cartItems[$id]);
  48.             $this->session->set('cart_items'$cartItems);
  49.         }
  50.     }
  51.     public function updateName($newId,$name,$cat){
  52.       
  53.         $cartItems $this->session->get('cart_items');
  54.         foreach ($cartItems as $key => &$cartItem) {
  55.             
  56.                
  57.          if ($cartItem['id'] == $cat) {
  58.                 $cartItem['id'] = $newId;
  59.                 $cartItem['name'] = $name
  60.                 $cartItem['image'] = 'vide'
  61.                 if ($key != $newId) {
  62.                     $cartItems[$newId] = $cartItems[$key];
  63.                     unset($cartItems[$key]);
  64.                 }  
  65.                 
  66.             }else if(  $cartItem['image'] == 'vide') {
  67.                 //$cartItem['id'] = $newId;
  68.                 $cartItem['name'] = $name;
  69.             
  70.             }
  71.               // Si l'ID change, mettez à jour également la clé du tableau associatif
  72.             /* if ($key != $newId) {
  73.                 $cartItems[$newId] = $cartItems[$key];
  74.                 unset($cartItems[$key]);
  75.             } */
  76.         
  77.         }
  78.          
  79.      
  80.         $this->session->set('cart_items'$cartItems);
  81.         
  82.         
  83.     }
  84.     public function updateQuantity($id$quantity)
  85.     {
  86.         $cartItems $this->session->get('cart_items');
  87.         if (isset($cartItems[$id])) {
  88.             $cartItems[$id]['quantity'] = $quantity;
  89.             $this->session->set('cart_items'$cartItems);
  90.         }
  91.     }
  92.     public function createOrder(){
  93.         $newOrder = new Order();
  94.         //
  95.         if(array_key_exists("firstName",$this->getCartExtraInfo())){
  96.             $newOrder->setFirstName($this->getCartExtraInfo()["firstName"]);
  97.         }
  98.         if(array_key_exists("lastName",$this->getCartExtraInfo())){
  99.             $newOrder->setFirstName($this->getCartExtraInfo()["lastName"]);
  100.         }
  101.         
  102.         foreach($this->getCartItems() as $singleCartItem){
  103.             $newOrderItem = new OrderItem();
  104.             $product $this->entityManagerInterface->getRepository(Product::class)->find((int)$singleCartItem["id"]);
  105.             
  106.          
  107.       
  108.             $newOrderItem->setProduct($product);
  109.             $newOrderItem->setQuantity(1);
  110.             $newOrderItem->setPrice($singleCartItem["price"]);
  111.             $newOrderItem->setDescription($singleCartItem["name"]);
  112.             //
  113.             $newOrder->addOrderItem($newOrderItem);
  114.             $this->entityManagerInterface->persist($newOrderItem);
  115.         }
  116.        //dd($this->getCartItems() );
  117.         
  118.         $this->entityManagerInterface->persist($newOrder);
  119.         $this->entityManagerInterface->flush();
  120.         $this->session->remove('cart_items');
  121.         return $newOrder;
  122.     }
  123.     public function setCartExtraInfo(array $extraInfo)
  124.     {
  125.         $this->session->set('cart_extra_info'$extraInfo);
  126.     }
  127.     public function addExtraInfo(array $extraInfo)
  128.     {
  129.         
  130.         // Retrieve existing extra info or initialize an empty array
  131.         $existingExtraInfo $this->session->get('cart_extra_info', []);
  132.         // Merge the new extra info with the existing data
  133.         $mergedExtraInfo array_merge($existingExtraInfo$extraInfo);
  134.         // Store the merged extra info back into the session
  135.         $this->session->set('cart_extra_info'$mergedExtraInfo);
  136.     }
  137.     // You can also add a method to retrieve the extra info if needed
  138.     public function getCartExtraInfo()
  139.     {
  140.         return $this->session->get('cart_extra_info', []);
  141.     }
  142.     public function getCartItems()
  143.     {
  144.         return $this->session->get('cart_items');
  145.     }
  146. }