src/Controller/Dashboard/Shared/CartController.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Dashboard\Shared;
  3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Contracts\Translation\TranslatorInterface;
  7. use App\Service\AppServices;
  8. use App\Entity\CartElement;
  9. class CartController extends Controller {
  10.     /**
  11.      * @Route("/attendee/cart", name="dashboard_attendee_cart")
  12.      */
  13.     public function cart(Request $requestTranslatorInterface $translatorAppServices $services) {
  14.         $em $this->getDoctrine()->getManager();
  15.         // Remove previous ticket reservations
  16.         if (count($this->getUser()->getTicketreservations())) {
  17.             foreach ($this->getUser()->getTicketreservations() as $ticketreservation) {
  18.                 $em->remove($ticketreservation);
  19.             }
  20.             $em->flush();
  21.         }
  22.         // Check event sale status
  23.         foreach ($this->getUser()->getCartelements() as $cartelement) {
  24.             if (!$cartelement->getEventticket()->isOnSale()) {
  25.                 $em->remove($cartelement);
  26.                 $em->flush();
  27.                 $this->addFlash('notice'$translator->trans('Your cart has been automatically updated because one or more events are no longer on sale'));
  28.                 return $this->redirectToRoute("dashboard_attendee_cart");
  29.             }
  30.             if (!$cartelement->getEventticket()->isOnSale()) {
  31.                 $em->remove($cartelement);
  32.                 $em->flush();
  33.                 $this->addFlash('notice'$translator->trans('Your cart has been automatically updated because one or more events are no longer on sale'));
  34.                 return $this->redirectToRoute("dashboard_attendee_cart");
  35.             }
  36.             if ($cartelement->getEventticket()->getTicketsLeftCount() > && $cartelement->getQuantity() > $cartelement->getEventticket()->getTicketsLeftCount()) {
  37.                 $cartelement->setQuantity($cartelement->getEventticket()->getTicketsLeftCount());
  38.         //         print_r($cartelement);
  39.         // die("fsdfsfs");
  40.         
  41.                 $em->persist($cartelement);
  42.                 $em->flush();
  43.                 $this->addFlash('notice'$translator->trans('Your cart has been automatically updated because one or more event\'s quotas has changed'));
  44.                 return $this->redirectToRoute("dashboard_attendee_cart");
  45.             }
  46.         }
  47.         
  48.         
  49.         if ($request->getMethod() == "POST") {
  50.             if (count($request->request->all()) == 0) {
  51.                 $this->addFlash('notice'$translator->trans('No tickets selected to add to cart'));
  52.             } else {
  53.                 foreach ($request->request->all() as $ticketreference => $ticketquantity) {
  54.                     $cartelement $this->getUser()->getCartelementByEventTicketReference($ticketreference);
  55.                     if (!$cartelement) {
  56.                         $this->addFlash('error'$translator->trans('The event ticket can not be found'));
  57.                         return $this->render('Dashboard/Attendee/Cart/cart.html.twig');
  58.                     }
  59.                     $cartelement->setQuantity($ticketquantity);
  60.                     $em->persist($cartelement);
  61.                 }
  62.                 $em->flush();
  63.                 $this->addFlash('success'$translator->trans('Your cart has been updated'));
  64.             }
  65.         }
  66.         return $this->render('Dashboard/Attendee/Cart/cart.html.twig');
  67.     }
  68.     /**
  69.      * @Route("attendee/cart/add", name="dashboard_attendee_cart_add")
  70.      * @Route("pointofsale/cart/add", name="dashboard_pointofsale_cart_add")
  71.      */
  72.     public function add(Request $requestTranslatorInterface $translatorAppServices $services) {
  73.         $em $this->getDoctrine()->getManager();
  74.         foreach ($request->request->all() as $ticketreference => $ticketquantity) {
  75.             if ($ticketquantity != "" && intval($ticketquantity) > 0) {
  76.                 $eventticket $em->getRepository("App\Entity\EventTicket")->findOneByReference($ticketreference);
  77.                 if (!$eventticket) {
  78.                     $this->addFlash('error'$translator->trans('The event ticket can not be found'));
  79.                     return $services->redirectToReferer();
  80.                 }
  81.                 if (!$eventticket->isOnSale()) {
  82.                     $this->addFlash('error'$eventticket->stringifyStatus());
  83.                     return $services->redirectToReferer();
  84.                 }
  85.                 
  86.                 $cartelement = new CartElement();
  87.                 $cartelement->setUser($this->getUser());
  88.                 $cartelement->setEventticket($eventticket);
  89.                 $cartelement->setQuantity(intval($ticketquantity));
  90.                 if ($this->getUser()->hasRole("ROLE_ATTENDEE") && !$cartelement->getEventticket()->getFree()) {
  91.                     $cartelement->setTicketFee($services->getSetting("ticket_fee_online"));
  92.                 } else if ($this->getUser()->hasRole("ROLE_POINTOFSALE") && !$cartelement->getEventticket()->getFree()) {
  93.                     $cartelement->setTicketFee($services->getSetting("ticket_fee_pos"));
  94.                 }
  95.                 
  96.                 $em->persist($cartelement);
  97.                 $em->flush();
  98.             }
  99.         }
  100.         if ($this->isGranted("ROLE_ATTENDEE")) {
  101.             $this->addFlash('success'$translator->trans('The tickets has been successfully added to your cart'));
  102.             return $this->redirectToRoute("dashboard_attendee_cart");
  103.         } else {
  104.             return $this->redirectToRoute("dashboard_pointofsale_checkout");
  105.         }
  106.     }
  107.     /**
  108.      * @Route("/attendee/cart/{id}/remove", name="dashboard_attendee_cart_remove")
  109.      */
  110.     public function remove($idTranslatorInterface $translatorAppServices $services) {
  111.         $em $this->getDoctrine()->getManager();
  112.         $cartelement $em->getRepository("App\Entity\CartElement")->find($id);
  113.         if ($cartelement->getUser() != $this->getUser()) {
  114.             $this->addFlash('error'$translator->trans('Access is denied. You may not have the appropriate permissions to access this resource.'));
  115.             return $this->redirectToRoute("dashboard_index");
  116.         }
  117.         $em->remove($cartelement);
  118.         $em->flush();
  119.         $this->addFlash('info'$translator->trans('Your cart has been updated'));
  120.         return $services->redirectToReferer("cart");
  121.     }
  122.     /**
  123.      * @Route("/attendee/cart/empty", name="dashboard_attendee_cart_empty")
  124.      */
  125.     public function emptyCart(TranslatorInterface $translatorAppServices $services) {
  126.         $em $this->getDoctrine()->getManager();
  127.         $services->emptyCart($this->getUser());
  128.         $this->addFlash('info'$translator->trans('Your cart has been emptied'));
  129.         return $services->redirectToReferer("cart");
  130.     }
  131. }