/**
  * @Route("/order", name="order")
  */
 public function orderAction(Request $request)
 {
     $user = $this->getUser();
     $categories = $this->getDoctrine()->getRepository('AppBundle:Category')->findAll();
     $order = new Orders();
     $order->setIsSent(false);
     $session = $request->getSession();
     $cartItems = $session->get('cartItems');
     $products = [];
     $sum = 0;
     for ($i = 0; $i < sizeof($cartItems); $i++) {
         $products[$i] = $this->getDoctrine()->getRepository('AppBundle:Product')->find($cartItems[$i]);
         $sum += $products[$i]->getPrice();
     }
     $order->setProducts($products);
     $order->setTotalCost($sum);
     $order->setUser($user);
     $form = $this->createFormBuilder($user)->add('street', 'text', array('label' => 'ulica', 'attr' => array('class' => 'form-control')))->add('number', 'number', array('label' => 'numer domu', 'attr' => array('class' => 'form-control')))->add('city', 'text', array('label' => 'miasto', 'attr' => array('class' => 'form-control')))->add('zipCode', 'text', array('label' => 'kod pocztowy', 'attr' => array('class' => 'form-control')))->add('save', 'submit', array('label' => 'zamów', 'attr' => array('class' => 'form-control')))->getForm();
     $form->handleRequest($request);
     if ($form->isSubmitted() && $form->isValid()) {
         $prevOrders = $user->getOrders();
         $prevOrders->add($order);
         $user->setOrders($prevOrders);
         for ($i = 0; $i < sizeof($products); $i++) {
             $products[$i]->setQuantity($products[$i]->getQuantity() - 1);
         }
         $session->set('cartItems', array());
         $em = $this->getDoctrine()->getManager();
         $em->persist($order);
         $em->flush();
         return $this->render('cart/ordered.html.twig', array('user' => $user, 'categories' => $categories));
     }
     return $this->render('cart/order.html.twig', array('user' => $user, 'categories' => $categories, 'form' => $form->createView()));
 }
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('status', 'choice', ['choices' => Orders::getStatuses(), 'required' => false])->add('user', 'entity', ['class' => 'AppBundle\\Entity\\User', 'required' => false])->add('car', 'entity', ['class' => 'AppBundle\\Entity\\Car', 'required' => false]);
     $listener = function (FormEvent $event) {
         // Is data empty?
         foreach ($event->getData() as $data) {
             if (is_array($data)) {
                 foreach ($data as $subData) {
                     if (!empty($subData)) {
                         return;
                     }
                 }
             } else {
                 if (!empty($data)) {
                     return;
                 }
             }
         }
         $event->getForm()->addError(new FormError('Filter empty'));
     };
     $builder->addEventListener(FormEvents::POST_BIND, $listener);
 }
 /**
  * @Route("/cars/{id}", name="car_desc")
  * function is responsible for the car hire and send an email to the user with information about the loan.
  */
 public function carDescriptionAction(Request $request, $id)
 {
     if ($this->isGranted('ROLE_MOD')) {
         switch ($request->query->get('action', 'none')) {
             case 'accept':
                 if ($request->query->has('id')) {
                     $order = $this->getDoctrine()->getRepository("AppBundle:Orders")->find($request->query->get('id'));
                     if ($order !== null && $order->getRate() !== null && $order->getOpinion() !== null) {
                         $order->setRateAccepted(true);
                         $this->getDoctrine()->getManager()->flush();
                     }
                 }
                 break;
             case 'remove':
                 if ($request->query->has('id')) {
                     $order = $this->getDoctrine()->getRepository("AppBundle:Orders")->find($request->query->get('id'));
                     if ($order !== null && $order->getRate() !== null && $order->getOpinion() !== null) {
                         $order->setRateAccepted(false);
                         $order->setOpinion(null);
                         $order->setRate(null);
                         $this->getDoctrine()->getManager()->flush();
                     }
                 }
                 break;
         }
     }
     $categories = $this->getDoctrine()->getRepository("AppBundle:Categories")->findAll();
     $car = $this->getDoctrine()->getRepository("AppBundle:Cars")->find($id);
     $parameters = explode(';', $car->getParameters());
     $category = $this->getDoctrine()->getRepository("AppBundle:Categories")->find($car->getCategoryId());
     $lastOrder = $this->getDoctrine()->getRepository("AppBundle:Orders")->findBy(['carId' => $car->getId()], ['expDate' => 'DESC'], 1);
     $orders = $this->getDoctrine()->getRepository("AppBundle:Orders")->findBy(['carId' => $car]);
     $users = [];
     for ($i = 0; $i < count($orders); $i++) {
         if ($orders[$i]->getRate() !== null) {
             $users[$i] = $this->getDoctrine()->getRepository("AppBundle:Users")->find($orders[$i]->getUserId());
         }
     }
     if (empty($lastOrder) || $lastOrder[0]->getExpDate() < new \DateTime('now')) {
         $available = true;
     } else {
         $available = false;
     }
     $order = new Orders();
     $order->setCarId($car->getId());
     $order->setDate(new \DateTime('now'));
     $nowDate = new \DateTime();
     $format = 'Y-m-d';
     if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
         $order->setUserId($this->getUser()->getId());
     }
     $form = $this->createFormBuilder($order)->add('expDate', ChoiceType::class, ['label' => 'Do kiedy', 'attr' => ['class' => 'form-control'], 'choices' => ['Dni' => ['1 dzień' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '2 dni' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '3 dni' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '4 dni' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '5 dni' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '6 dni' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format))], 'Tygodnie' => ['1 tydzień' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1D'))->format($format)), '2 tygodnie' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1W'))->format($format)), '3 tygodnie' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1W'))->format($format))], 'Miesiące' => ['1 miesiąc' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1W'))->format($format)), '2 miesiące' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1M'))->format($format)), '3 miesiące' => \DateTime::createFromFormat($format, $nowDate->add(new \DateInterval('P1M'))->format($format))]]])->add('add', SubmitType::class, ['label' => 'Potwierdź', 'attr' => ['class' => 'btn btn-primary']])->getForm();
     $form->handleRequest($request);
     if ($form->isSubmitted() && $form->isValid()) {
         $em = $this->getDoctrine()->getManager();
         $em->persist($order);
         $em->flush();
         if ($this->getUser()->getMail() !== null) {
             $mail = \Swift_Message::newInstance()->setSubject('Wiadomość od Symfony 3')->setFrom('*****@*****.**')->setTo($this->getUser()->getMail())->setBody($this->renderView('order_mail.html.twig', ['user' => $this->getUser()->getUsername(), 'car' => $car->getName(), 'date' => $order->getDate()->format('d.m.Y'), 'expDate' => $order->getExpDate()->format('d.m.Y'), 'price' => $car->getPrice()]), 'text/html');
             $this->get('mailer')->send($mail);
         }
         return $this->redirectToRoute('orderSuccess');
     }
     return $this->render("car_desc.html.twig", ['title' => $car->getName() . " - szczegóły", 'rate_title' => "Opinie", 'car' => $car, 'category' => $category, 'categories' => $categories, 'available' => $available, 'parameters' => $parameters, 'form' => $form->createView(), 'rates' => $orders, 'users' => $users]);
 }
 /**
  * @Route(
  *     "/orders/create",
  *     name="orders_create"
  * )
  */
 public function createAction()
 {
     $request = Request::createFromGlobals();
     if ($request->isMethod('POST')) {
         $errors = false;
         $date_time_now = new DateTime();
         $order = new Orders();
         $user = $this->getUser();
         $order_name = strval($request->request->get('order_name'));
         $supplier_name = strval($request->request->get('supplier_name'));
         $supplier_link = strval($request->request->get('supplier_link'));
         $description = strval($request->request->get('description'));
         $event_address = strval($request->request->get('event_address'));
         if ($order_name == '' || $supplier_name == '' || $description == '' || $event_address == '') {
             $this->addFlash('error', 'Please do not leave empty fields!');
             $errors = true;
         }
         $order_date_time = strval($request->request->get('order_date_time'));
         // Check if string is some sort of time
         if (strtotime($order_date_time)) {
             $order_date_time = new DateTime($order_date_time);
             if ($order_date_time->format("Y-m-d H:i") <= $date_time_now->format("Y-m-d H:i")) {
                 $this->addFlash('error', 'Wrong order date and time! It must be set to a future.');
                 $errors = true;
             }
         } else {
             $this->addFlash('error', 'Wrong order date and time!');
             $errors = true;
         }
         $joining_date_time = strval($request->request->get('joining_date_time'));
         // Check if string is some sort of time
         if (strtotime($joining_date_time)) {
             $joining_date_time = new DateTime($joining_date_time);
             if ($joining_date_time->format("Y-m-d H:i") <= $date_time_now->format("Y-m-d H:i")) {
                 $this->addFlash('error', 'Wrong joining date and time! It must be set to a future.');
                 $errors = true;
             }
         } else {
             $this->addFlash('error', 'Wrong joining date and time!');
             $errors = true;
         }
         if (!$errors) {
             $order->setUser($user);
             $order->setName($order_name);
             $order->setSupplierName($supplier_name);
             $order->setSupplierMenuLink($supplier_link);
             $order->setDescription($description);
             $order->setAddress($event_address);
             $order->setEventDate($order_date_time);
             $order->setJoiningDeadline($joining_date_time);
             $em = $this->getDoctrine()->getManager();
             $em->persist($order);
             $em->flush();
             $this->addFlash('notice', 'Order successfully created!');
             return new RedirectResponse($this->generateUrl('orders_details', array('order_id' => $order->getId())));
         }
         return $this->render('default/create_order.html.twig', array('order_name' => $order_name, 'supplier_name' => $supplier_name, 'supplier_link' => $supplier_link, 'description' => $description, 'event_address' => $event_address, 'order_date_time' => strval($request->request->get('order_date_time')), 'joining_date_time' => strval($request->request->get('joining_date_time'))));
     } else {
         return $this->render('default/create_order.html.twig');
     }
 }
 /**
  * Displays a form to create a new Car entity.
  *
  * @Route("/hire/{car}", name="car_hire")
  * @Method("GET")
  * @param Request $request
  * @param Car $car
  * @return RedirectResponse
  */
 public function hireAction(Request $request, Car $car)
 {
     if ($car->getAmount() < 1) {
         $this->addFlash('error', 'Brak wolnych pojazdów');
         return $this->redirectToRoute('car_show', ['id' => $car->getId()]);
     }
     $entity = new Orders();
     $entity->setCar($car)->setUser($this->getUser())->setDays($request->get('days', 1))->setStatus('Do zapłaty');
     $car->setAmount($car->getAmount() - 1);
     $em = $this->getDoctrine()->getManager();
     $em->persist($entity);
     $em->flush();
     $this->addFlash('success', 'Zamówienie zostało zapisane, czekamy na kontakt w salonie');
     return $this->redirectToRoute('orders');
 }
Exemple #6
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('status', 'choice', ['choices' => Orders::getStatuses()])->add('car', null, ['required' => true])->add('user', null, ['required' => true]);
 }