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)); }