src/Controller/Api/CartController.php line 243

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