예제 #1
0
 public function comprarAction($ciudad, $slug)
 {
     $em = $this->getDoctrine()->getManager();
     $usuario = $this->get('security.context')->getToken()->getUser();
     // Solo pueden comprar los usuarios registrados y logueados
     if (null == $usuario || !$this->get('security.context')->isGranted('ROLE_USUARIO')) {
         $this->get('session')->getFlashBag()->add('info', 'Antes de comprar debes registrarte o conectarte con tu usuario y contraseña.');
         return $this->redirect($this->generateUrl('usuario_login'));
     }
     // Comprobar que existe la ciudad indicada
     $ciudad = $em->getRepository('CiudadBundle:Ciudad')->findOneBySlug($ciudad);
     if (!$ciudad) {
         throw $this->createNotFoundException('La ciudad indicada no está disponible');
     }
     // Comprobar que existe la oferta indicada
     $oferta = $em->getRepository('OfertaBundle:Oferta')->findOneBy(array('ciudad' => $ciudad->getId(), 'slug' => $slug));
     if (!$oferta) {
         throw $this->createNotFoundException('La oferta indicada no está disponible');
     }
     // Un mismo usuario no puede comprar dos veces la misma oferta
     $venta = $em->getRepository('OfertaBundle:Venta')->findOneBy(array('oferta' => $oferta->getId(), 'usuario' => $usuario->getId()));
     if (null != $venta) {
         $fechaVenta = $venta->getFecha();
         $formateador = \IntlDateFormatter::create($this->get('translator')->getLocale(), \IntlDateFormatter::LONG, \IntlDateFormatter::NONE);
         $this->get('session')->getFlashBag()->add('error', 'No puedes volver a comprar la misma oferta (la compraste el ' . $formateador->format($fechaVenta) . ').');
         return $this->redirect($peticion->headers->get('Referer', $this->generateUrl('portada')));
     }
     // Guardar la nueva venta e incrementar el contador de compras de la oferta
     $venta = new Venta();
     $venta->setOferta($oferta);
     $venta->setUsuario($usuario);
     $venta->setFecha(new \DateTime());
     $em->persist($venta);
     $oferta->setCompras($oferta->getCompras() + 1);
     $em->flush();
     return $this->render('UsuarioBundle:Default:comprar.html.twig', array('oferta' => $oferta, 'usuario' => $usuario));
 }