public async Task <List <TimeLineNotificaciones> > ListaTimeLineNotificaciones(BuscadorDTO buscador) { using (SportsGoEntities context = new SportsGoEntities(false)) { NoticiasRepository noticiaRepo = new NoticiasRepository(context); DateTimeHelperNoPortable helper = new DateTimeHelperNoPortable(); if (buscador.FechaFiltroBase != DateTime.MinValue) { buscador.FechaFiltroBase = helper.ConvertDateTimeFromAnotherTimeZone(buscador.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, buscador.FechaFiltroBase); } List <NoticiasDTO> listaNoticias = await noticiaRepo.ListarNoticiasNotificaciones(buscador); List <NotificacionesDTO> listarNotificaciones = await noticiaRepo.ListarNotificaciones(buscador); List <TimeLineNotificaciones> listaTimeLineNotificacion = TimeLineNotificaciones.CrearListaTimeLineNotificaciones(listaNoticias, listarNotificaciones); // Si no es minValue significa que estoy refrescando y no busco feed if (buscador.FechaFiltroBase == DateTime.MinValue) { RssFeeds rssBuscado = await noticiaRepo.BuscarRssFeedPorCodigoIdioma(buscador.CodigoIdiomaUsuarioBase); if (rssBuscado != null && !string.IsNullOrWhiteSpace(rssBuscado.UrlFeed)) { FeedReader reader = new FeedReader(); IEnumerable <FeedItem> items = reader.RetrieveFeed(rssBuscado.UrlFeed); if (items != null && items.Count() > 0) { IEnumerable <FeedItem> itemsFiltrados = items.Skip(buscador.SkipIndexBase).Take(buscador.TakeIndexBase); if (itemsFiltrados != null && itemsFiltrados.Count() > 0) { foreach (FeedItem item in itemsFiltrados) { string url = item.Uri != null ? item.Uri.AbsoluteUri : string.Empty; TimeLineNotificaciones timeLineRss = new TimeLineNotificaciones(item.Title, item.Summary, url, string.Empty, TipoNotificacionEnum.RssFeed); listaTimeLineNotificacion.Insert(0, timeLineRss); } } } } } // Cuando Skip este en 0 significa que es la primera consulta, asi no repito su cosa de validar el plan // si "FechaFiltroBase" tiene un valor significa que es pull to refresh y no debo agregar las validaciones del plan if (buscador.SkipIndexBase == 0 && buscador.FechaFiltroBase == DateTime.MinValue) { PlanesRepository planRepo = new PlanesRepository(context); AdministracionRepository adminRepo = new AdministracionRepository(context); PlanesUsuarios planUsuario = new PlanesUsuarios { Consecutivo = buscador.CodigoPlanUsuario, IdiomaBase = buscador.IdiomaBase }; PlanesUsuariosDTO planDelUsuarioValidado = await planRepo.BuscarPlanUsuario(planUsuario); ImagenesPerfilAdministradores imagenperfil = await adminRepo.BuscarPrimeraImagenPerfilAdministrador(); long mesesFaltantesParaQueSeVenza = DateTimeHelper.DiferenciaEntreDosFechas(planDelUsuarioValidado.Vencimiento, DateTime.Now); if (mesesFaltantesParaQueSeVenza == 1 && planDelUsuarioValidado.Planes.PlanDefault != 1) { TimeLineNotificaciones timeLineCasiVence = new TimeLineNotificaciones { CodigoArchivo = imagenperfil.CodigoArchivo, UrlArchivo = imagenperfil.UrlImagenPerfil, DescripcionPlan = planDelUsuarioValidado.Planes.DescripcionIdiomaBuscado, FechaVencimientoPlan = planDelUsuarioValidado.Vencimiento, TipoDeLaNotificacion = TipoNotificacionEnum.EstaPorVencersePlan, CreacionNotificacion = DateTime.Now }; listaTimeLineNotificacion.Insert(0, timeLineCasiVence); } else if (mesesFaltantesParaQueSeVenza < 0 && planDelUsuarioValidado.Planes.PlanDefault != 1) { TimeLineNotificaciones timeLineVencio = new TimeLineNotificaciones { CodigoArchivo = imagenperfil.CodigoArchivo, UrlArchivo = imagenperfil.UrlImagenPerfil, DescripcionPlan = planDelUsuarioValidado.Planes.DescripcionIdiomaBuscado, FechaVencimientoPlan = planDelUsuarioValidado.Vencimiento, TipoDeLaNotificacion = TipoNotificacionEnum.SeVencioPlan, CreacionNotificacion = DateTime.Now }; listaTimeLineNotificacion.Insert(0, timeLineVencio); } } if (listaTimeLineNotificacion != null && listaTimeLineNotificacion.Count > 0) { foreach (var notificacion in listaTimeLineNotificacion) { notificacion.CreacionNotificacion = helper.ConvertDateTimeFromAnotherTimeZone(buscador.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, notificacion.CreacionNotificacion); notificacion.FechaInicioEvento = helper.ConvertDateTimeFromAnotherTimeZone(buscador.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, notificacion.FechaInicioEvento); notificacion.FechaTerminacionEvento = helper.ConvertDateTimeFromAnotherTimeZone(buscador.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, notificacion.FechaTerminacionEvento); notificacion.FechaVencimientoPlan = helper.ConvertDateTimeFromAnotherTimeZone(buscador.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, notificacion.FechaVencimientoPlan); } } return(listaTimeLineNotificacion); } }