public ActionResult EditForPublicacion(int idPubli)
 {
     IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
     var listaImg = repoImagen.GetAll();
     var listaImg2 = new List<Imagene>();
     foreach (var imagene in listaImg)
     {
         if(imagene.IdPublicacion==idPubli)
         {
             listaImg2.Add(imagene);
         }
     }
     Session["IdPublicacion"] = idPubli;
     return View(listaImg2);
 }
        public ActionResult Index()
        {
            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> todasImagenes = repoImagen.GetAll();
            IList<Imagene> imagenes = new List<Imagene>();

                foreach (var imagene in todasImagenes)
                {
                    if (imagene.Tipo == "I")
                    {
                        imagenes.Add(imagene);
                    }
                }

            return View(imagenes);
        }
        //
        // GET: /Publicacion/Details/5
        public ActionResult Details(int id)
        {
            var myRepoPublicacion = new PublicacionRepositorio();
            var myRepoImagene = new ImageneRepositorio();
            var myRepoServicioP = new PublicacionServicioRepositorio();
            var myRepoCat = new CategoriumRepositorio();
            var myRepoSubCat = new SubCategoriumRepositorio();
            var myRepoEmpresa = new EmpresaRepositorio();
            var myRepoServicio = new ServicioRepositorio();
            var myRepoIdioma = new IdiomaRepositorio();
            var myRepoPrecio = new PrecioRepositorio();
            var p = myRepoPublicacion.GetById(id);
            if (p != null)
            {
                var listaImagenes = myRepoImagene.GetAll();
                var listaImagenesAux = listaImagenes.Where(imagene => imagene.IdPublicacion == id).ToList();
                p.Imagenes = listaImagenesAux;
                var listaIdioma = myRepoIdioma.GetAll();
                if (listaIdioma!=null)
                {
                    p.Idioma = new List<Idioma>();
                    foreach (var idioma in listaIdioma.Where(idioma => idioma.IdPublicacion == id))
                    {
                        p.Idioma.Add(idioma);
                    }
                }

                var listaServicio = myRepoServicioP.GetAll();
                if (listaServicio != null)
                {
                    p.Servicios = new List<Servicio>();
                    foreach (var servicio in listaServicio.Where(servicio => servicio.IdPublicacion == id))
                    {
                        p.Servicios.Add(myRepoServicio.GetById(servicio.IdServicio));
                    }
                }
                p.Empresa = myRepoEmpresa.GetById(p.IdEmpresa);
                p.SubCategorium = myRepoSubCat.GetById(p.IdSubCategoria);
                p.Categorium = myRepoCat.GetById(p.SubCategorium.IdCategoria);
                var listaPrecios = myRepoPrecio.GetAll();
                p.Precios = listaPrecios.Where(listaPrecio => listaPrecio.IdPublicacion == id).ToList();
                p.Reservacion = p.Reservacion == "S" ? "Si" : "No";
                if (p.Idioma[0].Categoria.CompareTo("1 Estrella") == 0 || p.Idioma[0].Categoria.CompareTo("2 Estrellas") == 0 || p.Idioma[0].Categoria.CompareTo("3 Estrellas") == 0 || p.Idioma[0].Categoria.CompareTo("4 Estrellas") == 0 || p.Idioma[0].Categoria.CompareTo("5 Estrellas") == 0)
                {
                    p.Idioma[0].Categoria = p.Idioma[0].Categoria.Substring(0, 1);

                }else
                {
                    p.Idioma.Add(new Idioma { Categoria = p.Idioma[0].Categoria });
                    p.Idioma[0].Categoria = "0";
                }

                return View(p);
            }
            return RedirectToAction("Index");
        }
        public ActionResult Lista(int pagActual, int orden, string cat, string sub, string lug)
        {
            var myRepoPublicacion = new PublicacionRepositorio();
            var myRepoSubCat = new SubCategoriumRepositorio();
            var myRepoCat = new CategoriumRepositorio();
            var myRepoPrecio = new PrecioRepositorio();
            IList<IList<Publicacion>> listaDeLista = new List<IList<Publicacion>>();
            IList<Publicacion> listaPub = new List<Publicacion>();
            IList<Publicacion> listaPub2 = myRepoPublicacion.GetAll();
            foreach (var publicacion in listaPub2)
            {
                publicacion.SubCategorium = myRepoSubCat.GetById(publicacion.IdSubCategoria);
                if(lug!=null && sub!=null && cat!=null)
                {
                    publicacion.Categorium = myRepoCat.GetById(publicacion.SubCategorium.IdCategoria);
                    if (publicacion.SubCategorium.Nombre == sub && publicacion.Categorium.Nombre == cat && publicacion.Estado ==lug)
                        listaPub.Add(publicacion);
                }
                else
                {
                    if (sub != null && cat != null)
                    {
                        publicacion.Categorium = myRepoCat.GetById(publicacion.SubCategorium.IdCategoria);
                        if (publicacion.SubCategorium.Nombre == sub && publicacion.Categorium.Nombre == cat)
                            listaPub.Add(publicacion);
                    }else
                    {
                        if (sub != null && lug != null)
                        {
                            if (publicacion.SubCategorium.Nombre == sub && publicacion.Estado == lug)
                            listaPub.Add(publicacion);
                        }
                        else
                        {
                            if (cat != null && lug != null)
                            {
                                publicacion.Categorium = myRepoCat.GetById(publicacion.SubCategorium.IdCategoria);
                                if (publicacion.Categorium.Nombre == sub && publicacion.Estado == lug)
                                listaPub.Add(publicacion);
                            }else
                            {
                                if (sub != null)
                                {
                                    if (publicacion.SubCategorium.Nombre == sub)
                                    listaPub.Add(publicacion);
                                }
                                else
                                {
                                    if (cat != null)
                                    {
                                        publicacion.Categorium = myRepoCat.GetById(publicacion.SubCategorium.IdCategoria);
                                        if (publicacion.Categorium.Nombre == cat)
                                        listaPub.Add(publicacion);
                                    }
                                    else
                                    {
                                        if (lug != null)
                                        {
                                            if (publicacion.Estado == lug)
                                            listaPub.Add(publicacion);
                                        }
                                    }
                                }
                            }
                        }
                    }

                }

            }
            if (listaPub.Count() == 0)
            {
                ViewData["nroPaginas"] = 1;
                ViewData["pagActual"] = 1;
                ViewData["cuenta"] = 0;
                return View(new List<Publicacion>());
            }
            foreach (var publicacion in listaPub)
            {
                publicacion.Precios = new List<Precio>();
                IList<Precio> lPrecio = myRepoPrecio.GetAll();
                foreach (var precio in lPrecio)
                {
                    if (precio.IdPublicacion == publicacion.IdPublicacion)
                    {
                        publicacion.Precios.Add(precio);
                    }
                }
            }
            IOrderedEnumerable<Publicacion> lista;
            if (orden != 1)
            {
                lista =listaPub.OrderBy(model => model.Precios[0].PrecioMin);
            }else
            {
                lista =listaPub.OrderByDescending(model => model.Precios[0].PrecioMax);
            }
            listaPub=lista.ToList();
            int nroPaginas = listaPub.Count/8;
            IList<Publicacion> listaPubAux = new List<Publicacion>();
            var cont = 0;
            var cont2 = 0;
            foreach (var publicacion in listaPub)
            {
                var myRepoIma = new ImageneRepositorio();
                var listaImagen = myRepoIma.GetAll();
                foreach (var imagene in listaImagen)
                {
                    if (imagene.IdPublicacion == publicacion.IdPublicacion)
                    {
                        publicacion.Imagen = imagene;
                        break;
                    }
                }
                cont++;
                cont2++;
                if (cont < 9)
                {
                    listaPubAux.Add(publicacion);
                }
                else
                {
                    listaDeLista.Add(listaPubAux);
                    listaPubAux = new List<Publicacion>();
                    listaPubAux.Add(publicacion);
                    cont = 0;
                }
                if (cont2 == listaPub.Count && cont < 9)
                {
                    listaDeLista.Add(listaPubAux);
                }
            }
            if (pagActual <= listaDeLista.Count && pagActual > 0)
            {
                ViewData["nroPaginas"] = nroPaginas;
                ViewData["pagActual"] = pagActual;
                ViewData["cuenta"] = listaDeLista[pagActual - 1].Count;
                return View(listaDeLista[pagActual - 1]);
            }

            return View();
        }
        public ActionResult Sponsors()
        {
            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> myImagene = repoImagen.GetAll();
            IList<Imagene> sponsorImage = new List<Imagene>();
            IList<Imagene> sponsorImageCopy = new List<Imagene>();

            foreach (var imagene in myImagene)
            {
                if (imagene.Tipo == "S")
                {
                    sponsorImageCopy.Add(imagene);
                    sponsorImage.Add(imagene);
                }
            }

            IList<Imagene> sponsorImageDesordenada = new List<Imagene>();

            Random randNum = new Random();
            int val;
            while (sponsorImage.Count > 0)
            {
                val = randNum.Next(sponsorImage.Count);
                sponsorImageDesordenada.Add(sponsorImage[val]);
                sponsorImage.RemoveAt(val);
            }
            return View(sponsorImageDesordenada);
        }
        public ActionResult Logos()
        {
            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> myImagene = repoImagen.GetAll();
            IList<Imagene> logoImages = new List<Imagene>();

            foreach (var imagene in myImagene)
            {
                if (imagene.Tipo == "L")
                {
                    logoImages.Add(imagene);
                }
            }
            return View(logoImages);
        }
        public ActionResult Index(String tipo, string patrocinante)
        {
            IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
            IList<Patrocinante> patrocinantesAux = new List<Patrocinante>();
            IList<Patrocinante> patrocinantes = repoPatrocinante.GetAll();

            IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
            IList<Telefono> TodosTelefonos = repoTelefono.GetAll();
            IList<Telefono> telefonos = new List<Telefono>();

            IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
            IList<Contacto> TodosContactos = repoContacto.GetAll();
            IList<Contacto> contactos = new List<Contacto>();

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> imagenes = repoImagen.GetAll();

            foreach (var patrocinante1 in patrocinantes)
            {
                foreach (var contacto in TodosContactos)
                {
                    if (contacto.IdPatrocinante == patrocinante1.IdPatrocinante)
                    {
                        foreach (var telefono in TodosTelefonos)
                        {
                            if (telefono.IdContacto == contacto.IdContacto)
                            {
                                telefonos.Add(telefono);
                            }
                        }
                        contacto.ListaTelefonos = telefonos;
                        telefonos = new List<Telefono>();
                        contactos.Add(contacto);
                    }
                }
                patrocinante1.Contacto = contactos;
                contactos = new List<Contacto>();

                foreach (var imagene in imagenes)
                {
                    if (imagene.IdPatrocinante != null)
                        if (imagene.IdPatrocinante == patrocinante1.IdPatrocinante)
                        {
                            patrocinante1.Imagene = imagene;
                            if (tipo != null)
                            {
                                if (tipo == "S")
                                {
                                    if (imagene.Tipo == "S")
                                        patrocinantesAux.Add(patrocinante1);
                                }
                                else
                                {
                                    if (imagene.Tipo == "L")
                                        patrocinantesAux.Add(patrocinante1);
                                }
                            }
                        }
                }
            }
            if (tipo != null)
            {
                if (patrocinante != null)
                {
                    IList<Patrocinante> patrocinantesBuscados = new List<Patrocinante>();
                    foreach (var patrocinante1 in patrocinantesAux)
                    {
                        if (patrocinante1.Nombre == patrocinante)
                        {
                            patrocinantesBuscados.Add(patrocinante1);
                        }
                    }
                    return View(patrocinantesBuscados);
                }
                return View(patrocinantesAux);
            }

            if (patrocinante != null)
            {
                IList<Patrocinante> patrocinantesBuscados = new List<Patrocinante>();
                foreach (var patrocinante1 in patrocinantes)
                {
                    if (patrocinante1.Nombre == patrocinante)
                    {
                        patrocinantesBuscados.Add(patrocinante1);
                    }
                }
                return View(patrocinantesBuscados);
            }
            return View(patrocinantes);
        }
        public ActionResult Edit(Patrocinante patrocinante)
        {
            patrocinante.Contacto[0].Tipo = "P";
            patrocinante.Contacto[0].IdPatrocinante = patrocinante.IdPatrocinante;
            foreach (var telefono in patrocinante.Contacto[0].ListaTelefonos)
            {
                telefono.Tipo = "P";
            }
            patrocinante.Contacto[0].IdEmpresa = null;

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            patrocinante.Contacto[0].IdEmpresa = null;

            IList<Imagene> imagenes = repoImagen.GetAll();
            patrocinante.Imagene.IdPatrocinante = patrocinante.IdPatrocinante;
            foreach (var imagene in imagenes)
            {
                if (imagene.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    patrocinante.Imagene.IdImagen = imagene.IdImagen;
                    if (patrocinante.File == null)
                    {
                        patrocinante.Imagene.DatosOriginal = imagene.DatosOriginal;
                        patrocinante.Imagene.DatosTrans = imagene.DatosTrans;
                    }
                }
            }

            var tipo = Request["Logo"] as string;
            if (tipo == "Sponsor")
            {
                patrocinante.Imagene.Tipo = "S";
            }
            else
            {
                patrocinante.Imagene.Tipo = "L";
            }
            if (patrocinante.File != null)
            {
                HttpFileCollectionBase files = ControllerContext.HttpContext.Request.Files;
                patrocinante.Imagene.DatosOriginal = ConvertFile(patrocinante.File);
                patrocinante.Imagene.DatosTrans = Resize(ConvertFile(patrocinante.File));
            }

            if (patrocinante.Nombre != null && patrocinante.Contacto[0].Nombre != null && patrocinante.Contacto[0].ListaTelefonos[0].CodigoInt != 0 &&
                patrocinante.Contacto[0].ListaTelefonos[0].CodigoLoc != 0 && patrocinante.Contacto[0].ListaTelefonos[0].Numero != 0)
            {
                IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
                repoPatrocinante.Update(patrocinante);

                IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
                patrocinante.Contacto[0].IdPatrocinante = patrocinante.IdPatrocinante;
                repoContacto.Update(patrocinante.Contacto[0]);

                IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
                foreach (var telefono in patrocinante.Contacto[0].ListaTelefonos)
                {
                    telefono.IdContacto = patrocinante.Contacto[0].IdContacto;
                    if (telefono.CodigoInt != 0 && telefono.CodigoLoc != 0 && telefono.Numero != 0)
                        if (telefono.IdTelefono != 0)
                            repoTelefono.Update(telefono);
                        else
                            repoTelefono.Save(telefono);
                }

                repoImagen.Update(patrocinante.Imagene);

                return RedirectToAction("Index");
            }
            // Si llegamos a este punto, es que se ha producido un error y volvemos a mostrar el formulario
            while (patrocinante.Contacto[0].ListaTelefonos.Count < 4)
            {
                patrocinante.Contacto[0].ListaTelefonos.Add(new Telefono());
            }
            return View(patrocinante);
        }
        public ActionResult Edit(int id)
        {
            IRepositorio<Patrocinante> repoPatrocinante = new PatrocinanteRepositorio();
            IList<Patrocinante> patrocinantesAux = new List<Patrocinante>();
            Patrocinante patrocinante = repoPatrocinante.GetById(id);

            IRepositorio<Telefono> repoTelefono = new TelefonoRepositorio();
            IList<Telefono> TodosTelefonos = repoTelefono.GetAll();
            IList<Telefono> telefonos = new List<Telefono>();

            IRepositorio<Contacto> repoContacto = new ContactoRepositorio();
            IList<Contacto> TodosContactos = repoContacto.GetAll();
            IList<Contacto> contactos = new List<Contacto>();

            IRepositorio<Imagene> repoImagen = new ImageneRepositorio();
            IList<Imagene> imagenes = repoImagen.GetAll();

            foreach (var contacto in TodosContactos)
            {
                if (contacto.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    foreach (var telefono in TodosTelefonos)
                    {
                        if (telefono.IdContacto == contacto.IdContacto)
                        {
                            telefonos.Add(telefono);
                        }
                    }
                    contacto.ListaTelefonos = telefonos;
                    contactos.Add(contacto);
                }
            }
            patrocinante.Contacto = contactos;
            foreach (var imagene in imagenes)
            {
                if (imagene.IdPatrocinante == patrocinante.IdPatrocinante)
                {
                    patrocinante.Imagene = imagene;
                }
            }
            while (patrocinante.Contacto[0].ListaTelefonos.Count < 4)
            {
                patrocinante.Contacto[0].ListaTelefonos.Add(new Telefono());
            }
            return View(patrocinante);
        }