/// <summary> /// Obtiene todos los Banner de la base de datos que cumplen con el filtro /// </summary> /// <param name="argumentosFiltrado">Argumentos para filtrar banners</param> /// <returns>Tipo de dato Lista de Banners a filtrar</returns> public virtual List <Banner> GetAll(Dictionary <Type, object> argumentosFiltrado) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { //usar tipos simple(no objetos) porque tirar error si se usan objetos string nombre = (string)argumentosFiltrado[typeof(string)]; IQueryable <Banner> result = from banner in pUnitOfWork.BannerRepository.Queryable.Include("RangosFecha").Include("Fuente") where banner.Nombre.Contains(nombre) select banner; List <Banner> resultado = new List <Banner>(); //FILTRAR FECHA if (argumentosFiltrado.ContainsKey(typeof(RangoFecha))) { RangoFecha pRF = (RangoFecha)argumentosFiltrado[typeof(RangoFecha)]; DateTime fechaI = pRF.FechaInicio.Date; DateTime fechaF = pRF.FechaFin.Date; foreach (var banner in result) { IQueryable <RangoFecha> rangoFecha = banner.RangosFecha.AsQueryable <RangoFecha>(); var auxiliar = from rf in rangoFecha where ((rf.FechaInicio.CompareTo(fechaI) <= 0 && rf.FechaFin.CompareTo(fechaI) >= 0) || ((rf.FechaInicio.CompareTo(fechaF) <= 0 && rf.FechaFin.CompareTo(fechaF) >= 0)) || (rf.FechaInicio.CompareTo(fechaI) >= 0 && rf.FechaFin.CompareTo(fechaF) <= 0)) select rf; if (auxiliar.ToList().Count != 0) { resultado.Add(banner); } } } else { resultado = result.ToList(); } //FILTRAR FUENTES if (argumentosFiltrado.ContainsKey(typeof(Fuente))) { Type pTipofuente = (Type)argumentosFiltrado[typeof(Fuente)]; for (int i = resultado.Count - 1; i >= 0; i--) { if (!(resultado[i].Fuente.GetType() == pTipofuente)) { resultado.RemoveAt(i); } } } foreach (Banner banner in resultado) { foreach (RangoFecha rangoFecha in banner.RangosFecha) { pUnitOfWork.RangoFechaRepository.Queryable.Include("RangosHorario").ToList(); } } return(resultado); } }
/// <summary> /// Obtiene una instancia de Banner /// </summary> /// <param name="pBannerCodigo">Código del Banner que se desea obtener</param> /// <returns>Tipo de dato Banner que representa el buscado por código</returns> public virtual Banner GetByCodigo(int pBannerCodigo) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { Banner banner = pUnitOfWork.BannerRepository.GetByCodigo(pBannerCodigo); foreach (RangoFecha rangoFecha in banner.RangosFecha) { RangoFecha auxiliarRangoFecha = pUnitOfWork.RangoFechaRepository.GetByCodigo(rangoFecha.Codigo); rangoFecha.RangosHorario = auxiliarRangoFecha.RangosHorario; rangoFecha.Principal = auxiliarRangoFecha.Principal; } return(banner); } }
/// <summary> /// Obtiene todos las Campañas de la base de datos que cumplen con el filtro /// </summary> /// <param name="argumentosFiltrado">Argumentos para filtrar campañas</param> /// <returns>Tipo de dato Lista de campañas a filtrar</returns> public virtual List <Campaña> GetAll(Dictionary <Type, object> argumentosFiltrado) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { string nombre = (string)argumentosFiltrado[typeof(string)]; var result = from campaña in pUnitOfWork.CampañaRepository.Queryable.Include("RangosFecha") where campaña.Nombre.Contains(nombre) select campaña; List <Campaña> resultado = new List <Campaña>(); if (argumentosFiltrado.ContainsKey(typeof(RangoFecha))) { RangoFecha pRF = (RangoFecha)argumentosFiltrado[typeof(RangoFecha)]; DateTime fechaI = pRF.FechaInicio.Date; DateTime fechaF = pRF.FechaFin.Date; foreach (var campaña in result) { IQueryable <RangoFecha> rangoFecha = campaña.RangosFecha.AsQueryable <RangoFecha>(); var auxiliar = from rf in rangoFecha where ((rf.FechaInicio.CompareTo(fechaI) <= 0 && rf.FechaFin.CompareTo(fechaI) >= 0) || ((rf.FechaInicio.CompareTo(fechaF) <= 0 && rf.FechaFin.CompareTo(fechaF) >= 0)) || (rf.FechaInicio.CompareTo(fechaI) >= 0 && rf.FechaFin.CompareTo(fechaF) <= 0)) select rf; if (auxiliar.ToList().Count != 0) { resultado.Add(campaña); } } } else { resultado = result.ToList(); /* * foreach (Campaña campaña in result) * { * resultado.Add(campaña); * } */ } //cargar Rangos Horarios foreach (Campaña campaña in resultado) { foreach (RangoFecha rangoFecha in campaña.RangosFecha) { pUnitOfWork.RangoFechaRepository.Queryable.Include("RangosHorario").ToList(); } } return(resultado); } }
/// <summary> /// Obtiene una instancia de Campaña /// </summary> /// <param name="pCampañaCodigo">Código de la Campaña que se desea obtener</param> /// <returns>Tipo de dato Campaña que representa la buscada por código</returns> public virtual Campaña GetByCodigo(int pCampañaCodigo) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { Campaña campaña = pUnitOfWork.CampañaRepository.GetByCodigo(pCampañaCodigo); foreach (RangoFecha rangoFecha in campaña.RangosFecha) { RangoFecha aux = pUnitOfWork.RangoFechaRepository.GetByCodigo(rangoFecha.Codigo); rangoFecha.RangosHorario = aux.RangosHorario; rangoFecha.Principal = aux.Principal; } return(campaña); } }
/// <summary> /// Actualiza un Banner de la base de datos /// </summary> /// <param name="pBanner">Banner a actualizar de la base de datos</param> public virtual void Update(Banner pBanner) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { Banner databaseBanner = this.GetByCodigo(pBanner.Codigo); pUnitOfWork.BannerRepository.Update(databaseBanner); pUnitOfWork.BannerRepository.ChangeValues(databaseBanner, pBanner); //Rangos Fecha List <RangoFecha> rangosFechaEliminados = ExtesionLista.GetDeleted <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha); List <RangoFecha> rangosFechaModificados = ExtesionLista.GetModified <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha); List <RangoFecha> rangosFechaAInsertar = ExtesionLista.GetNew <RangoFecha>(databaseBanner.RangosFecha, pBanner.RangosFecha); foreach (RangoFecha pRangoFecha in rangosFechaEliminados) { pRangoFecha.Principal = null; pUnitOfWork.RangoFechaRepository.DeleteWithRelated(pRangoFecha); } foreach (RangoFecha pRangoFecha in rangosFechaAInsertar) { pRangoFecha.Principal = null; pUnitOfWork.RangoFechaRepository.Insert(pRangoFecha); } foreach (RangoFecha pRangoFecha in rangosFechaModificados) { //Actualizar Rango Fecha RangoFecha rangoFechaOriginal = databaseBanner.RangosFecha.Find(x => x.Equals(pRangoFecha)); pUnitOfWork.RangoFechaRepository.ChangeValues(rangoFechaOriginal, pRangoFecha); //Rangos Horarios List <RangoHorario> rangosHorariosAInsertar = pRangoFecha.RangosHorario; for (int i = rangoFechaOriginal.RangosHorario.Count - 1; i >= 0; i--) { pUnitOfWork.RangoHorarioRepository.Delete(rangoFechaOriginal.RangosHorario[i]); } foreach (RangoHorario pRangoHorario in rangosHorariosAInsertar) { pRangoHorario.RangoFecha = null; pUnitOfWork.RangoHorarioRepository.Insert(pRangoHorario); } } pUnitOfWork.Save(); } }
/// <summary> /// Actualiza una Campaña de la base de datos /// </summary> /// <param name="pCampaña">Campaña a actualizar</param> public virtual void Update(Campaña pCampaña) { using (UnitOfWork pUnitOfWork = new UnitOfWork()) { Campaña databaseCampaña = this.GetByCodigo(pCampaña.Codigo); pUnitOfWork.CampañaRepository.Update(databaseCampaña); pUnitOfWork.CampañaRepository.ChangeValues(databaseCampaña, pCampaña); //Imágenes List <Imagen> imagenesEliminadas = ExtesionLista.GetDeleted <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes); List <Imagen> imagenesModificadas = ExtesionLista.GetModified <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes); List <Imagen> imagenesAInsertar = ExtesionLista.GetNew <Imagen>(databaseCampaña.Imagenes, pCampaña.Imagenes); foreach (Imagen pImagen in imagenesModificadas) { Imagen imagenOriginal = databaseCampaña.Imagenes.Find(x => x.Equals(pImagen)); pUnitOfWork.ImagenRepository.ChangeValues(imagenOriginal, pImagen); } foreach (Imagen pImagen in imagenesEliminadas) { //Para que no lance excepción pImagen.Campaña = null; pUnitOfWork.ImagenRepository.DeleteWithRelated(pImagen); } foreach (Imagen pImagen in imagenesAInsertar) { //Para que no cree otra campaña pImagen.Campaña = null; pUnitOfWork.ImagenRepository.Insert(pImagen); } //Rangos Fecha List <RangoFecha> rangosFechaEliminados = ExtesionLista.GetDeleted <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha); List <RangoFecha> rangosFechaModificados = ExtesionLista.GetModified <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha); List <RangoFecha> rangosFechaAInsertar = ExtesionLista.GetNew <RangoFecha>(databaseCampaña.RangosFecha, pCampaña.RangosFecha); foreach (RangoFecha pRangoFecha in rangosFechaEliminados) { pRangoFecha.Principal = null; pUnitOfWork.RangoFechaRepository.DeleteWithRelated(pRangoFecha); } foreach (RangoFecha pRangoFecha in rangosFechaAInsertar) { pRangoFecha.Principal = null; pUnitOfWork.RangoFechaRepository.Insert(pRangoFecha); } foreach (RangoFecha pRangoFecha in rangosFechaModificados) { //Actualizar Rango Fecha RangoFecha rangoFechaOriginal = databaseCampaña.RangosFecha.Find(x => x.Equals(pRangoFecha)); pUnitOfWork.RangoFechaRepository.ChangeValues(rangoFechaOriginal, pRangoFecha); //Rangos Horarios List <RangoHorario> rangosHorariosAInsertar = pRangoFecha.RangosHorario; for (int i = rangoFechaOriginal.RangosHorario.Count - 1; i >= 0; i--) { pUnitOfWork.RangoHorarioRepository.Delete(rangoFechaOriginal.RangosHorario[i]); } foreach (RangoHorario pRangoHorario in rangosHorariosAInsertar) { pRangoHorario.RangoFecha = null; pUnitOfWork.RangoHorarioRepository.Insert(pRangoHorario); } } pUnitOfWork.Save(); } }