public function indexAction(Request $request)
 {
     $session = $request->getSession();
     $productIDs = $session->get('ids');
     $productIDs = json_decode($productIDs, true);
     $useBonus = false;
     if ($productIDs) {
         $productIDs = array_count_values($productIDs);
         $products = array();
         $basketSumm = 0;
         $basketCount = 0;
         foreach ($productIDs as $productId => $count) {
             $product = $this->getDoctrine()->getRepository('ShopBundle:Product')->find($productId);
             if (!$product) {
                 continue;
             }
             if (!$useBonus && $product->getCategory()->getId() == 1) {
                 $useBonus = true;
             }
             $product->setCount($count);
             $images = $product->getImages();
             if ($images && strpos($images, ',')) {
                 $product->setImages(strstr($images, ',', true));
             }
             $products[] = $product;
             $basketCount += $count;
             $basketSumm = $basketSumm + $product->getPrice() * $count;
         }
     } else {
         $products = array();
         $basketSumm = 0;
         $basketCount = 0;
     }
     $order = new Order();
     $orderForm = $this->get('shop.form.order');
     $form = $this->createForm($orderForm, $order);
     $form->handleRequest($request);
     if ($form->isValid()) {
         $em = $this->getDoctrine()->getManager();
         $uuid = new UuidGenerator();
         $order->setUuid($uuid->generate($em, $order));
         /** @var User $user */
         $user = $this->getUser();
         if ($user) {
             $order->setUser($user);
         }
         // Уменьшение бонусов у пользователя
         $bonus = $order->getBonus();
         if ($bonus) {
             $bonuses = json_decode($user->getBonus(), true);
             $maxBonus = $user->getMaxBonus();
             $newBonus = (int) $maxBonus - (int) $bonus;
             if ($newBonus) {
                 $bonuses[$newBonus] = $bonuses[$maxBonus];
             }
             unset($bonuses[$maxBonus]);
             $user->setBonus($bonuses ? json_encode($bonuses) : null);
         }
         $em->persist($order);
         if ($user) {
             $em->persist($user);
         }
         $em->flush();
         $this->getDoctrine()->getRepository('ShopBundle:Order')->setOrderProductsArray($order);
         $session = $request->getSession();
         if ($session) {
             $session->clear();
         }
         $this->addFlash('success', '');
         $mailer = $this->get('mailer');
         $messageClient = \Swift_Message::newInstance()->setSubject('Спасибо за заказ на нашем сайте sweet-smoke.org')->setFrom(array('*****@*****.**' => 'SweetSmoke'))->setTo(array('*****@*****.**', $order->getEmail()))->setContentType('text/html')->setBody($this->renderView("@Shop/Messages/new_order_client.html.twig", array('order' => $order)));
         $messageAdmin = \Swift_Message::newInstance()->setSubject('Заказ в интернет магазине на сайте sweet-smoke.org')->setFrom(array('*****@*****.**' => 'SweetSmoke'))->setTo(array('*****@*****.**', '*****@*****.**'))->setContentType('text/html')->setBody($this->renderView("@Shop/Messages/new_order_admin.html.twig", array('order' => $order)));
         $mailer->send($messageClient);
         $mailer->send($messageAdmin);
         $user = $this->getUser();
         if ($user) {
             return new RedirectResponse($this->generateUrl('user_cabinet_orders'));
         } else {
             return new RedirectResponse($this->generateUrl('hookah_shop_order', array('uuid' => $order->getUuid())));
         }
     }
     /** @var User $user */
     $user = $this->getUser();
     $bonus = 0;
     if ($useBonus && $user) {
         $bonus = $user->getMaxBonus();
     }
     return $this->render('@Shop/basket.html.twig', array('products' => $products, 'basketCount' => $basketCount, 'basketSumm' => $basketSumm, 'deliveryTypes' => DeliveryType::map(), 'form' => $form->createView(), 'bonus' => $bonus));
 }
Exemple #2
0
 public function getDelivery()
 {
     return DeliveryType::getAsText($this->getDeliveryType());
 }