src/Controller/Api/CartController.php line 236

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\DTO\AppDTO;
  4. use App\Entity\Prod;
  5. use App\Entity\Order;
  6. use App\Service\Auth\Auth;
  7. use App\Service\Cart\Cart;
  8. use App\Entity\Cart as EntityCart;
  9. use App\Repository\CartRepository;
  10. use App\Repository\ProdRepository;
  11. use App\Repository\OrderRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Contracts\Cache\CacheInterface;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. class CartController extends AbstractController
  20. {
  21.     protected EntityManagerInterface $em;
  22.     protected CacheInterface $Cache;
  23.     protected AppDTO $app;
  24.     protected Cart $Cart;
  25.     protected Auth $Auth;
  26.     // Repository
  27.     protected ProdRepository $Prods;
  28.     protected OrderRepository $Orders;
  29.     protected CartRepository $CartItems;
  30.     public function __construct(EntityManagerInterface $emCacheInterface $CacheAppDTO $appCart $CartAuth $AuthSecurity $security)
  31.     {
  32.         $this->Cache $Cache;
  33.         $this->em $em;
  34.         $this->app $app;
  35.         $this->Cart $Cart;
  36.         $this->Auth $Auth;
  37.         $this->Auth->setUser($security->getUser());
  38.         $this->Prods $this->em->getRepository(Prod::class);
  39.         $this->Orders $this->em->getRepository(Order::class);
  40.         $this->CartItems $this->em->getRepository(EntityCart::class);
  41.     }
  42.     // Проверка есть ли достаточное кол-во товара на складе
  43.     #[Route('/api/cart/test'name'cart_test')]
  44.     public function test(Request $request): Response
  45.     {
  46.         print_r($this->Cart->getCart());
  47.         die();
  48.     }
  49.     // Проверка есть ли достаточное кол-во товара на складе
  50.     #[Route('/api/cart/check'name'cart_check')]
  51.     public function check(Request $request): Response
  52.     {
  53.         $id = (int) $request->get('id');
  54.         $var = (int) $request->get('var');
  55.         $prod_num $request->get('num') ? (int) $request->get('num') : 1;
  56.         $prod $this->Prods->find($id);
  57.         if ($var == 2) {
  58.             $num_na_sklade $prod->getNum2();
  59.         } elseif ($var == 3) {
  60.             $num_na_sklade $prod->getNum3();
  61.         } else {
  62.             $num_na_sklade $prod->getNum();
  63.         }
  64.         
  65.         $cart_id $this->Cart->getCartId($id$var);
  66.         $num_in_cart $this->Cart->getCart()[$cart_id]['num'] ?? 0;
  67.         $num $num_in_cart $prod_num;
  68.     
  69.         if ($num_na_sklade $num) {
  70.             $res = array('status' => 'false''num' => $num_na_sklade $num_in_cart);
  71.         } else {
  72.             $res = array('status' => 'true''num' => $num_na_sklade $num_in_cart);
  73.         }
  74.         
  75.         return $this->json($res);
  76.     }
  77.     // Добавить товар в корзину
  78.     #[Route('/api/cart/buy'name'cart_buy')]
  79.     public function buy(Request $request): Response
  80.     {
  81.         $id = (int) $request->get('id');
  82.         $var = (int) $request->get('var');
  83.         $num $request->get('num') ? (int) $request->get('num') : 1;
  84.         $chars $request->get('chars');
  85.         // На всякий случай принудительно считаю скидку еще раз     
  86.         // ASweb\Discount\UserDiscount::setValue(ASweb\Discount\UserDiscount::calculateUserDiscount(new Model_Discount, new Model_Order, new Model_User('client'), Auth::getUserId()));
  87.     
  88.         $prod $this->Prods->find($id);
  89.         if ($var == || $var == 0) {
  90.             $price $prod->getPrice();
  91.             $skidka $prod->getSkidka();
  92.             $weight $prod->getWeight();
  93.             $numdiscount $prod->getNumdiscount();
  94.         } elseif ($var == 2) {
  95.             $price $prod->getPrice2();
  96.             $skidka $prod->getSkidka2();
  97.             $weight $prod->getWeight2();
  98.             $numdiscount $prod->getNumdiscount2();
  99.         } elseif ($var == 3) {
  100.             $price $prod->getPrice3();
  101.             $skidka $prod->getSkidka3();
  102.             $weight $prod->getWeight3();
  103.             $numdiscount $prod->getNumdiscount3();
  104.         }
  105.     
  106.         $this->Cart->addItem($id$var$num$price$skidka$numdiscount$weight$chars);
  107.         $result = [
  108.             "id" => $id,
  109.             "prods" => $this->Cart->getProdNum(),
  110.             "packs" => $this->Cart->getPackNum(),
  111.             "amount" => $this->Cart->getAmount(),
  112.             "reload" => $request->get('reload'),
  113.             'cart' => $this->Cart->getCart(),
  114.         ];
  115.     
  116.         return $this->json($result);
  117.     }
  118.     #[Route('/api/cart/update'name'cart_update')]
  119.     public function update(Request $request): Response
  120.     {
  121.         $id = (string) $request->get('id');
  122.         $num $request->get('num') ? (int) $request->get('num') : 1;
  123.         $prod $this->Prods->find((int)$this->Cart->getCart()[$id]['id']);
  124.         $var $this->Cart->getCart()[$id]['var'];
  125.         
  126.         if ($var == 1) {
  127.             $price $prod->getPrice();
  128.             $skidka $prod->getSkidka();
  129.             $weight $prod->getWeight();
  130.             $numdiscount $prod->getNumdiscount();
  131.         } elseif ($var == 2) {
  132.             $price $prod->getPrice2();
  133.             $skidka $prod->getSkidka2();
  134.             $weight $prod->getWeight2();
  135.             $numdiscount $prod->getNumdiscount2();
  136.         } elseif ($var == 3) {
  137.             $price $prod->getPrice3();
  138.             $skidka $prod->getSkidka3();
  139.             $weight $prod->getWeight3();
  140.             $numdiscount $prod->getNumdiscount3();
  141.         }
  142.         $this->Cart->updateItem($id$num$numdiscount);
  143.         $to_pay $this->Cart->getAmountWithDelivery();
  144.         if (($this->Cart->getAmount() >= $this->app->sett->get('free_delivery_amount')) && !$this->Auth->isOpt()) {
  145.             $to_pay $this->Cart->getAmount();
  146.         }
  147.         $result = [
  148.             "cart_id" => $id
  149.             "id" => $this->Cart->getCart()[$id]['id'],
  150.             "price" => round($this->Cart->getCart()[$id]['price']),
  151.             "baseprice" => $this->Cart->getCart()[$id]['baseprice'],
  152.             "skidka" => $this->Cart->getCart()[$id]['skidka'],
  153.             "discount" => $this->Cart->getCart()[$id]['userdiscount'] + $this->Cart->getCart()[$id]['numdiscount'],
  154.             "num" => $this->Cart->getCart()[$id]['num'],
  155.             "prods" => intval($this->Cart->getProdNum()),
  156.             "packs" => intval($this->Cart->getPackNum()),
  157.             "weight" => $this->Cart->getWeight(),
  158.             "amount" => $this->Cart->getAmount(),
  159.             "sum" => $this->Cart->getAmountWithoutDiscount(),
  160.             "to_pay" => $to_pay,
  161.             "discount" => ($this->Cart->getAmountWithoutDiscount() - $this->Cart->getAmount()),
  162.             "cart" => $this->Cart->getCart(),
  163.         ];
  164.         return $this->json($result);
  165.     }
  166.     // Список товаров для блока корзины
  167.     #[Route('/api/cart/list'name'cart_list')]
  168.     public function cartList(): Response
  169.     {        
  170.         // if ($prods_limited = $Cart->prods_limited()) $view->prods_limited = $Cart->prods_limited;
  171.         // foreach($Cart->cart as $k => $v){
  172.         //     if($v["num"] == 0) unset($Cart->cart[$k]);
  173.         // }
  174.         // echo $view->render('cart/list.php');
  175.         // die();
  176.         $response = [];
  177.         return $this->json($response);
  178.     }
  179.     
  180.     #[Route('/api/cart/delete'name'cart_delete')]
  181.     public function deleteProd(Request $request): Response
  182.     {
  183.         $item $request->get('item');
  184.         $this->Cart->deleteItem($item);
  185.         $result = [
  186.             "prods" => $this->Cart->getProdNum(),
  187.             "amount" => $this->Cart->getAmount(),
  188.             "cart" => $this->Cart->getCart(),
  189.         ];
  190.         return $this->json($result);
  191.     }
  192.     #[Route('/api/cart/removegroup'name'cart_removegroup')]
  193.     public function removegroup(Request $request): Response
  194.     {
  195.         $items $request->get('items');
  196.         foreach ($items as $item) {
  197.             $this->Cart->deleteItem($item);
  198.         }
  199.         $response = ["cart" => $this->Cart->getCart(), "amount" => $this->Cart->getAmount()];
  200.         return $this->json($response);
  201.     }
  202.     #[Route('/api/cart/clear'name'cart_clear')]
  203.     public function clearCart(): Response
  204.     {
  205.         $this->Cart->deleteAll();
  206.         $result = [
  207.             "prods" => $this->Cart->getProdNum(), 
  208.             "amount" => $this->Cart->getAmount()
  209.         ];
  210.         return $this->json($result);
  211.     }
  212.     #[Route('/api/cart/get'name'cart_get')]
  213.     public function getCart(Request $request): Response
  214.     {
  215.         $result = [
  216.             "prods" => $this->Cart->getProdNum(),
  217.             "packs" => $this->Cart->getPackNum(),
  218.             "amount" => $this->Cart->getAmount(),
  219.             "cart" => $this->Cart->getCart(),
  220.             "reload" => $request->get('reload'),
  221.         ];
  222.         return $this->json($result);
  223.     }
  224.     
  225.     #[Route(path'/api/cart/repeat-order/{order_id}'name'cart_order_repeat_no_locale'priority100defaults: ['_locale' => '%app.default_lang%'])]
  226.     #[Route(path'/{_locale}/api/cart/repeat-order/{order_id}'name'cart_order_repeat'priority100requirements: ['_locale' => '%app.langs%'])] 
  227.     public function repeatOrder(int $order_id 0): Response
  228.     {
  229.         $cartitems $this->CartItems->findBy(['order_id' => $order_id]);
  230.         foreach ($cartitems as $k => $v) {    
  231.             $prod $v->getProd();
  232.             $var $v->getVar();
  233.             $num $v->getNum();
  234.             if ($var == || $var == 0) {    
  235.                 $price $prod->getPrice();
  236.                 $skidka $prod->getSkidka();
  237.                 $weight $prod->getWeight();
  238.                 $numdiscount $prod->getNumdiscount();
  239.             } elseif ($var == 2) {
  240.                 $price $prod->getPrice2();
  241.                 $skidka $prod->getSkidka2();
  242.                 $weight $prod->getWeight2();
  243.                 $numdiscount $prod->getNumdiscount2();
  244.             } elseif ($var == 3) {
  245.                 $price $prod->getPrice3();
  246.                 $skidka $prod->getSkidka3();
  247.                 $weight $prod->getWeight3();
  248.                 $numdiscount $prod->getNumdiscount3();
  249.             }
  250.             
  251.             $this->Cart->addItem($prod->getId(), $var$num$price$skidka$numdiscount$weight);
  252.         }
  253.     
  254.         return $this->redirectToRoute('cart');
  255.         die();
  256.     }
  257. }