Exemple #1
0
 /**
  * Displays a form to create a new Oferta entity.
  *
  */
 public function newAction()
 {
     $entity = new Oferta();
     // Rellenar con valores adecuados algunas propiedades
     $em = $this->getDoctrine()->getEntityManager();
     $ciudad = $em->getRepository('CiudadBundle:Ciudad')->findOneBySlug($this->getRequest()->getSession()->get('ciudad'));
     $entity->setCiudad($ciudad);
     $entity->setCompras(0);
     $entity->setUmbral(0);
     $entity->setFechaPublicacion(new \DateTime('now'));
     $entity->setFechaExpiracion(new \DateTime('tomorrow'));
     $form = $this->createForm(new OfertaType(), $entity);
     return $this->render('BackendBundle:Oferta:new.html.twig', array('entity' => $entity, 'form' => $form->createView()));
 }
Exemple #2
0
 public function load(ObjectManager $manager)
 {
     // Crear 5 ciudades de prueba
     foreach (array('Madrid', 'Barcelona', 'Castellón', 'Vigo', 'Vitoria-Gasteiz') as $nombre) {
         $ciudad = new Ciudad();
         $ciudad->setNombre($nombre);
         $manager->persist($ciudad);
     }
     $manager->flush();
     // Crear 10 tiendas en cada ciudad
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $numTienda = 0;
     foreach ($ciudades as $ciudad) {
         for ($i = 1; $i <= 10; $i++) {
             $numTienda++;
             $tienda = new Tienda();
             $tienda->setNombre('Tienda #' . $numTienda);
             $tienda->setLogin('tienda' . $numTienda);
             $tienda->setPassword('password' . $numTienda);
             $tienda->setSalt(md5(time()));
             $tienda->setDescripcion("Lorem ipsum dolor sit amet, consectetur adipisicing elit," . "sed do eiusmod tempor incididunt ut labore et dolore magna" . "aliqua. Ut enim ad minim veniam, quis nostrud exercitation" . "ullamco laboris nisi ut aliquip ex ea commodo consequat.");
             $tienda->setDireccion("Calle Lorem Ipsum, {$i}\n" . $ciudad->getNombre());
             $tienda->setCiudad($ciudad);
             $manager->persist($tienda);
         }
     }
     $manager->flush();
     // Crear 50 ofertas en cada ciudad
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $numOferta = 0;
     foreach ($ciudades as $ciudad) {
         $tiendas = $manager->getRepository('TiendaBundle:Tienda')->findByCiudad($ciudad->getId());
         for ($i = 1; $i <= 50; $i++) {
             $numOferta++;
             $oferta = new Oferta();
             $oferta->setNombre('Oferta #' . $numOferta . ' lorem ipsum dolor sit amet');
             $oferta->setDescripcion("Lorem ipsum dolor sit amet, consectetur adipisicing.\n" . "Elit, sed do eiusmod tempor incididunt.\n" . "Ut labore et dolore magna aliqua.\n" . "Nostrud exercitation ullamco laboris nisi ut");
             $oferta->setCondiciones("Labore et dolore magna aliqua. Ut enim ad minim veniam.");
             $oferta->setRutaFoto('foto' . rand(1, 20) . '.jpg');
             $oferta->setPrecio(number_format(rand(100, 10000) / 100, 2));
             $oferta->setDescuento($oferta->getPrecio() * (rand(10, 70) / 100));
             // Se publican 9 ofertas en el pasado, 1 en el presente y 40 en el futuro
             if (1 == $i) {
                 $fecha = 'today';
                 $oferta->setRevisada(true);
             } elseif ($i < 10) {
                 $fecha = 'now - ' . ($i - 1) . ' days';
                 // el 80% de las ofertas pasadas se marcan como revisadas
                 $oferta->setRevisada(rand(1, 1000) % 10 < 8);
             } else {
                 $fecha = 'now + ' . ($i - 10 + 1) . ' days';
                 $oferta->setRevisada(true);
             }
             $fechaPublicacion = new \DateTime($fecha);
             $fechaPublicacion->setTime(23, 59, 59);
             $fechaExpiracion = clone $fechaPublicacion;
             $fechaExpiracion->add(\DateInterval::createFromDateString('24 hours'));
             $oferta->setFechaPublicacion($fechaPublicacion);
             $oferta->setFechaExpiracion($fechaExpiracion);
             $oferta->setCompras(0);
             $oferta->setUmbral(rand(25, 100));
             $oferta->setCiudad($ciudad);
             // Seleccionar aleatoriamente una tienda que pertenezca a la ciudad
             $oferta->setTienda($tiendas[array_rand($tiendas)]);
             $manager->persist($oferta);
         }
     }
     $manager->flush();
     // Crear 100 usuarios en cada ciudad
     $numUsuario = 0;
     foreach ($ciudades as $ciudad) {
         for ($i = 1; $i <= 100; $i++) {
             $numUsuario++;
             $usuario = new Usuario();
             $usuario->setNombre('Usuario #' . $numUsuario);
             $usuario->setApellidos('Apellido1 Apellido2');
             $usuario->setEmail('usuario' . $numUsuario . '@localhost');
             $usuario->setSalt('');
             $usuario->setPassword('password' . $numUsuario);
             $usuario->setDireccion("Calle Ipsum Lorem, 2\n" . $ciudad->getNombre());
             // El 60% de los usuarios permite email
             $usuario->setPermiteEmail(rand(1, 1000) % 10 < 6);
             $usuario->setFechaAlta(new \DateTime('now - ' . rand(1, 150) . ' days'));
             $usuario->setFechaNacimiento(new \DateTime('now - ' . rand(7000, 20000) . ' days'));
             $dni = substr(rand(), 0, 8);
             $usuario->setDni($dni . substr("TRWAGMYFPDXBNJZSQVHLCKE", strtr($dni, "XYZ", "012") % 23, 1));
             $usuario->setNumeroTarjeta('1234567890123456');
             $usuario->setCiudad($ciudad);
             $manager->persist($usuario);
         }
     }
     $manager->flush();
     // Crear 500 ventas aleatorias
     $ofertas = $manager->getRepository('OfertaBundle:Oferta')->findAll();
     $usuarios = $manager->getRepository('UsuarioBundle:Usuario')->findAll();
     foreach ($usuarios as $usuario) {
         $compras = rand(0, 10);
         $comprado = array();
         for ($i = 0; $i < $compras; $i++) {
             $venta = new Venta();
             // Sólo se añade una venta:
             //   - si este mismo usuario no ha comprado antes la misma oferta
             //   - si la oferta seleccionada ha sido revisada
             //   - si la fecha de publicación de la oferta es posterior a ahora mismo
             $oferta = $ofertas[array_rand($ofertas)];
             while (in_array($oferta->getId(), $comprado) || $oferta->getRevisada() == false || $oferta->getFechaPublicacion() > new \DateTime('now')) {
                 $oferta = $ofertas[array_rand($ofertas)];
             }
             $comprado[] = $oferta->getId();
             $venta->setOferta($oferta);
             $venta->setUsuario($usuario);
             $publicacion = clone $oferta->getFechaPublicacion();
             $venta->setFecha($publicacion->add(\DateInterval::createFromDateString(rand(10, 10000) . ' seconds')));
             $manager->persist($venta);
             $oferta->setCompras($oferta->getCompras() + 1);
             $manager->persist($oferta);
         }
         unset($comprado);
     }
     $manager->flush();
 }
Exemple #3
0
 public function load(ObjectManager $manager)
 {
     // Obtener todas las tiendas y ciudades de la base de datos
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     //$tiendas = $manager->getRepository('TiendaBundle:Tienda')->findAll();
     foreach ($ciudades as $ciudad) {
         $tiendas = $manager->getRepository('TiendaBundle:Tienda')->findByCiudad($ciudad->getId());
         for ($j = 1; $j <= 20; $j++) {
             $oferta = new Oferta();
             $oferta->setNombre($this->getNombre());
             $oferta->setDescripcion($this->getDescripcion());
             $oferta->setCondiciones($this->getCondiciones());
             $oferta->setRutaFoto('foto' . rand(1, 20) . '.jpg');
             $oferta->setPrecio(number_format(rand(100, 10000) / 100, 2));
             $oferta->setDescuento($oferta->getPrecio() * (rand(10, 70) / 100));
             // Una oferta se publica hoy, el resto se reparte entre el pasado y el futuro
             if (1 === $j) {
                 $fecha = 'today';
                 $oferta->setRevisada(true);
             } elseif ($j < 10) {
                 $fecha = 'now - ' . ($j - 1) . ' days';
                 // el 80% de las ofertas pasadas se marcan como revisadas
                 $oferta->setRevisada(rand(1, 1000) % 10 < 8);
             } else {
                 $fecha = 'now + ' . ($j - 10 + 1) . ' days';
                 $oferta->setRevisada(true);
             }
             $fechaPublicacion = new \DateTime($fecha);
             $fechaPublicacion->setTime(23, 59, 59);
             // Se debe clonar el valor de la fechaPublicacion porque si se usa directamente
             // el método ->add(), se modificaría el valor original, que no se guarda en la BD
             // hasta que se hace el ->flush()
             $fechaExpiracion = clone $fechaPublicacion;
             $fechaExpiracion->add(\DateInterval::createFromDateString('24 hours'));
             $oferta->setFechaPublicacion($fechaPublicacion);
             $oferta->setFechaExpiracion($fechaExpiracion);
             $oferta->setCompras(0);
             $oferta->setUmbral(rand(25, 100));
             $oferta->setCiudad($ciudad);
             // Seleccionar aleatoriamente una tienda que pertenezca a la ciudad anterior
             $tienda = $tiendas[array_rand($tiendas, 1)];
             $oferta->setTienda($tienda);
             $manager->persist($oferta);
             $manager->flush();
             // Traducir los contenidos de la oferta al inglés
             //$id = $oferta->getId();
             //$offer = $manager->find('OfertaBundle:Oferta', $id);
             //$offer->setNombre('ENGLISH '.$oferta->getNombre());
             //$offer->setDescripcion('ENGLISH '.$oferta->getDescripcion());
             //$offer->setTranslatableLocale('en');
             //$manager->persist($offer);
             //$manager->flush();
         }
     }
 }
Exemple #4
0
 public function load($manager)
 {
     // Obtener todas las tiendas y ciudades de la base de datos
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $tiendas = $manager->getRepository('TiendaBundle:Tienda')->findAll();
     // Ordenar las tiendas por ciudad, para generar ofertas coherentes
     $tiendasPorCiudad = array();
     foreach ($tiendas as $tienda) {
         $tiendasPorCiudad[$tienda->getCiudad()->getId()][] = $tienda;
     }
     for ($i = 0; $i < count($ciudades); $i++) {
         for ($j = 1; $j <= 20; $j++) {
             $oferta = new Oferta();
             $oferta->setNombre($this->getNombre());
             $oferta->setDescripcion($this->getDescripcion());
             $oferta->setCondiciones($this->getCondiciones());
             $oferta->setFoto('foto' . rand(1, 20) . '.jpg');
             $oferta->setPrecio(number_format(rand(100, 10000) / 100, 2));
             $oferta->setDescuento($oferta->getPrecio() * (rand(10, 70) / 100));
             // Una oferta se publica hoy, el resto se reparte entre el pasado y el futuro
             if ($j < 10) {
                 $fechaPublicacion = new \DateTime('now - ' . ($j - 1) . ' days');
             } else {
                 $fechaPublicacion = new \DateTime('now + ' . ($j - 9) . ' days');
             }
             $fechaPublicacion->setTime(23, 59, 59);
             // Se debe clonar el valor de la fechaPublicacion porque si se usa directamente
             // el método ->add(), se modificaría el valor original, que no se guarda en la BD
             // hasta que se hace el ->flush()
             $fechaExpiracion = clone $fechaPublicacion;
             $fechaExpiracion->add(\DateInterval::createFromDateString('24 hours'));
             $oferta->setFechaPublicacion($fechaPublicacion);
             $oferta->setFechaExpiracion($fechaExpiracion);
             $oferta->setCompras(0);
             $oferta->setUmbral(rand(25, 100));
             // Se marcan como revisadas aproximadamente el 80% de las ofertas
             $oferta->setRevisada(rand(1, 1000) % 10 < 8);
             $oferta->setCiudad($ciudades[$i]);
             // Seleccionar aleatoriamente una tienda que pertenezca a la ciudad anterior
             $tiendasDeLaCiudad = $tiendasPorCiudad[$oferta->getCiudad()->getId()];
             $tienda = $tiendasDeLaCiudad[rand(0, count($tiendasDeLaCiudad) - 1)];
             $oferta->setTienda($tienda);
             $manager->persist($oferta);
             $manager->flush();
             // Otorgar el permiso adecuado a cada oferta utilizando la ACL
             // Obtener la identidad del objeto oferta y del usuario
             $idObjeto = ObjectIdentity::fromDomainObject($oferta);
             $idUsuario = UserSecurityIdentity::fromAccount($tienda);
             // Buscar si la oferta ya dispone de una ACL previa
             $proveedor = $this->container->get('security.acl.provider');
             try {
                 $acl = $proveedor->findAcl($idObjeto, array($idUsuario));
             } catch (\Symfony\Component\Security\Acl\Exception\AclNotFoundException $e) {
                 // El objeto no disponía de ninguna ACL, crearla
                 $acl = $proveedor->createAcl($idObjeto);
             }
             // Borrar los ACEs previos que (a lo mejor) dispone este objeto
             $aces = $acl->getObjectAces();
             foreach ($aces as $index => $ace) {
                 $acl->deleteObjectAce($index);
             }
             $acl->insertObjectAce($idUsuario, MaskBuilder::MASK_OPERATOR);
             $proveedor->updateAcl($acl);
         }
     }
 }
Exemple #5
0
 public function testValidarTienda()
 {
     $oferta = new Oferta();
     $oferta->setNombre('Oferta de prueba');
     $oferta->setDescripcion('Descripción de prueba - Descripción de prueba - Descripción de prueba');
     $oferta->setFechaPublicacion(new \DateTime('today'));
     $oferta->setFechaExpiracion(new \DateTime('tomorrow'));
     $oferta->setUmbral(3);
     $oferta->setPrecio(10.5);
     $ciudad = $this->getCiudad();
     $oferta->setCiudad($ciudad);
     $oferta->setTienda($this->getTienda($ciudad));
     $oferta_ciudad = $oferta->getCiudad()->getNombre();
     $oferta_tienda_ciudad = $oferta->getTienda()->getCiudad()->getNombre();
     $this->assertEquals($oferta_ciudad, $oferta_tienda_ciudad, 'La tienda asociada a la oferta es de la misma ciudad en la que se vende la oferta');
 }
Exemple #6
0
 /**
  * Load data fixtures with the passed EntityManager
  *
  * @param ObjectManager $manager
  */
 public function load(ObjectManager $manager)
 {
     $numOfertas = 5;
     for ($i = 0; $i < $numOfertas; $i++) {
         $oferta = new Oferta();
         $oferta->setNombre("Oferta " . $i);
         $oferta->setDescripcion("Descripción de la oferta " . $i);
         $oferta->setCondiciones("Condiciones de la oferta " . $i);
         $oferta->setFechaPublicacion(new \DateTime(date('Y-m-d H:i:s')));
         $oferta->setFechaExpiracion(new \DateTime(date('Y-m-d H:i:s', strtotime('+1 years'))));
         if ($i % 2) {
             $oferta->setCiudad($manager->find('CiudadBundle:Ciudad', 1));
         } else {
             $oferta->setCiudad($manager->find('CiudadBundle:Ciudad', 2));
         }
         $oferta->setTienda($manager->find('TiendaBundle:Tienda', 1));
         $oferta->setRutaFoto(null);
         $oferta->setPrecio(19.99);
         $oferta->setDescuento(0);
         $oferta->setUmbral(100);
         $oferta->setCompras(0);
         $oferta->setRevisada(1);
         $manager->persist($oferta);
     }
     $manager->flush();
 }
Exemple #7
0
 public function load(ObjectManager $manager)
 {
     for ($i = 0; $i < 400; $i++) {
         $entidad = new Oferta();
         $entidad->setNombre('Oferta');
         $entidad->setDescripcion('Es un buen producto');
         $entidad->setDescripcion('condiciones excelentes');
         $entidad->setRutaFoto('/foto/prod_xx.jpg');
         $entidad->setPrecio(rand(1, 100));
         $entidad->setFechaPublicacion(new \DateTime());
         $entidad->setFechaExpiracion(new \DateTime());
         $entidad->setCompras(rand(1, 400));
         $entidad->setUmbral(rand(400, 500));
         $entidad->setRevisada(rand(0, 1));
         $entidad->setCiudad('ccs');
         $entidad->setTienda('local');
         $manager->persist($entidad);
     }
     $manager->flush();
 }