public async Task EnviarNotificacion(TimeLineNotificaciones notificacionParaEnviar) { if (_hubConnection != null && _hubConnection.State == ConnectionState.Connected) { await _policy.ExecuteAsync(async() => await _hubProxy.Invoke("SendNotification", notificacionParaEnviar)); } }
public void ReproducirNotificacionFake(TimeLineNotificaciones notificacionParaEnviarFake) { if (NotificacionRecibida != null) { NotificacionRecibida(this, new TimeLineNotificacionesArgs(notificacionParaEnviarFake)); } }
public async Task <TimeLineNotificaciones> VerificarSiPagoEstaAprobadoYTraerNotificacion(HistorialPagosPersonas pagoParaVerificar) { using (SportsGoEntities context = new SportsGoEntities(false)) { PagosRepository pagosRepo = new PagosRepository(context); int?codigoEstado = await pagosRepo.BuscarEstadoDeUnPago(pagoParaVerificar); if (!codigoEstado.HasValue) { throw new InvalidOperationException("No se pudo encontrar el estado del pago"); } TimeLineNotificaciones timeLineNotificacion = null; if (codigoEstado.Value == (int)EstadoDeLosPagos.Aprobado) { Notificaciones notificacionDelPago = await pagosRepo.BuscarNotificacionDeUnPago(pagoParaVerificar); PersonasRepository personaRepo = new PersonasRepository(context); int codigoIdioma = await personaRepo.BuscarCodigoIdiomaDeLaPersona(notificacionDelPago.CodigoPersonaDestinoAccion.Value); notificacionDelPago.CodigoIdiomaUsuarioBase = codigoIdioma; NoticiasRepository noticiasRepo = new NoticiasRepository(context); timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacionDelPago)); DateTimeHelperNoPortable helper = new DateTimeHelperNoPortable(); timeLineNotificacion.CreacionNotificacion = helper.ConvertDateTimeFromAnotherTimeZone(pagoParaVerificar.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, timeLineNotificacion.CreacionNotificacion); } return(timeLineNotificacion); } }
public async Task <Tuple <WrapperSimpleTypesDTO, TimeLineNotificaciones> > EliminarContacto(Contactos contactoParaEliminar) { using (SportsGoEntities context = new SportsGoEntities(false)) { ChatsRepository chatsRepo = new ChatsRepository(context); Contactos contactoFiltro = new Contactos { Consecutivo = contactoParaEliminar.Consecutivo }; chatsRepo.EliminarContacto(contactoFiltro); Tuple <Contactos, int?> tupleBusqueda = await chatsRepo.BuscarConsecutivoContactoContrario(contactoParaEliminar); Contactos contactoOwner = tupleBusqueda.Item1; int? consecutivoContrarioBuscado = tupleBusqueda.Item2; if (!consecutivoContrarioBuscado.HasValue) { throw new InvalidOperationException("No existe el contacto contrario de esta persona!."); } Contactos contactoParaBorrar = new Contactos { Consecutivo = consecutivoContrarioBuscado.Value }; chatsRepo.EliminarContacto(contactoParaBorrar); NoticiasRepository noticiasRepo = new NoticiasRepository(context); Notificaciones notificacion = new Notificaciones { CodigoTipoNotificacion = (int)TipoNotificacionEnum.PersonaEliminada, CodigoPersonaOrigenAccion = contactoOwner.CodigoPersonaOwner, CodigoPersonaDestinoAccion = contactoOwner.CodigoPersonaContacto, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); WrapperSimpleTypesDTO wrapperEliminarContacto = new WrapperSimpleTypesDTO(); TimeLineNotificaciones timeLineNotificacion = null; wrapperEliminarContacto.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperEliminarContacto.NumeroRegistrosAfectados > 0) { wrapperEliminarContacto.Exitoso = true; if (notificacion.Consecutivo > 0) { timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacion)); } } return(Tuple.Create(wrapperEliminarContacto, timeLineNotificacion)); } }
public async Task <Tuple <WrapperSimpleTypesDTO, TimeLineNotificaciones> > ModificarUsuario(Usuarios usuarioParamodificar) { using (SportsGoEntities context = new SportsGoEntities(false)) { AdministracionRepository adminRepo = new AdministracionRepository(context); Usuarios usuarioExistente = await adminRepo.ModificarUsuario(usuarioParamodificar); Notificaciones notificacion = null; if (usuarioExistente.PlanesUsuarios.CodigoPlan != usuarioParamodificar.PlanesUsuarios.CodigoPlanDeseado) { PlanesBusiness planBusiness = new PlanesBusiness(); // Cambio el plan para esa persona await planBusiness.CambiarDePlanUsuario(usuarioParamodificar.PlanesUsuarios); // Armamos una notificacion para el nuevo plan NoticiasRepository noticiasRepo = new NoticiasRepository(context); notificacion = new Notificaciones { CodigoTipoNotificacion = (int)TipoNotificacionEnum.PlanAprobado, CodigoPlanNuevo = usuarioParamodificar.PlanesUsuarios.CodigoPlanDeseado, CodigoPersonaDestinoAccion = usuarioExistente.Personas.First().Consecutivo, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); } WrapperSimpleTypesDTO wrapperModificarUsuario = new WrapperSimpleTypesDTO(); TimeLineNotificaciones timeLineNotificacion = null; wrapperModificarUsuario.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperModificarUsuario.NumeroRegistrosAfectados > 0) { wrapperModificarUsuario.Exitoso = true; if (notificacion != null && notificacion.Consecutivo > 0) { NoticiasRepository noticiasRepo = new NoticiasRepository(context); if (notificacion.CodigoPersonaDestinoAccion.HasValue && notificacion.CodigoPersonaDestinoAccion > 0) { PersonasRepository personaRepo = new PersonasRepository(context); int codigoIdioma = await personaRepo.BuscarCodigoIdiomaDeLaPersona(notificacion.CodigoPersonaDestinoAccion.Value); notificacion.CodigoIdiomaUsuarioBase = codigoIdioma; } timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacion)); } } return(Tuple.Create(wrapperModificarUsuario, timeLineNotificacion)); } }
public void SendNotification(TimeLineNotificaciones timeLineNotificaciones) { try { Clients.Group(_prefixChatGroupName + timeLineNotificaciones.CodigoPersonaDestino.ToString()).receiveNotification(timeLineNotificaciones); } catch (Exception) { // The error may be because the target person is not connected } }
public async Task PagosBusiness_VerificarSiPagoEstaAprobado_ShouldVerify() { PagosBusiness pagosBusiness = new PagosBusiness(); HistorialPagosPersonas historial = new HistorialPagosPersonas { Consecutivo = 42 }; TimeLineNotificaciones timeLineNotificacion = await pagosBusiness.VerificarSiPagoEstaAprobadoYTraerNotificacion(historial); Assert.IsNotNull(timeLineNotificacion); }
public async Task <Tuple <WrapperSimpleTypesDTO, TimeLineNotificaciones> > CrearContacto(Contactos contactoParaCrear) { using (SportsGoEntities context = new SportsGoEntities(false)) { ChatsRepository chatsRepo = new ChatsRepository(context); int codigoPersonaContacto = contactoParaCrear.CodigoPersonaContacto; int codigoPersonaOwner = contactoParaCrear.CodigoPersonaOwner; chatsRepo.CrearContacto(contactoParaCrear); Contactos contactoSegundoParaCrear = new Contactos { CodigoPersonaContacto = codigoPersonaOwner, CodigoPersonaOwner = codigoPersonaContacto }; chatsRepo.CrearContacto(contactoSegundoParaCrear); NoticiasRepository noticiasRepo = new NoticiasRepository(context); Notificaciones notificacion = new Notificaciones { CodigoTipoNotificacion = (int)TipoNotificacionEnum.PersonaAgregada, CodigoPersonaOrigenAccion = codigoPersonaOwner, CodigoPersonaDestinoAccion = codigoPersonaContacto, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); WrapperSimpleTypesDTO wrapperCrearContacto = new WrapperSimpleTypesDTO(); TimeLineNotificaciones timeLineNotificacion = null; wrapperCrearContacto.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperCrearContacto.NumeroRegistrosAfectados > 0) { wrapperCrearContacto.Exitoso = true; wrapperCrearContacto.ConsecutivoCreado = contactoParaCrear.Consecutivo; if (notificacion.Consecutivo > 0) { timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacion)); } } return(Tuple.Create(wrapperCrearContacto, timeLineNotificacion)); } }
public async Task <TimeLineNotificaciones> VerificarSiPagoEstaAprobadoYTraerNotificacion(HistorialPagosPersonasDTO pagoParaVerificar) { if (pagoParaVerificar == null) { throw new ArgumentNullException("No puedes verificar un pago si pagoParaVerificar es nulo!."); } if (pagoParaVerificar.Consecutivo <= 0) { throw new ArgumentException("pagoParaVerificar vacio y/o invalido!."); } IHttpClient client = ConfigurarHttpClient(); TimeLineNotificaciones timeLineNotificacion = await client.PostAsync <HistorialPagosPersonasDTO, TimeLineNotificaciones>("Pagos/VerificarSiPagoEstaAprobadoYTraerNotificacion", pagoParaVerificar); return(timeLineNotificacion); }
public async Task <IHttpActionResult> VerificarSiPagoEstaAprobadoYTraerNotificacion(HistorialPagosPersonas pagoParaVerificar) { if (pagoParaVerificar == null || pagoParaVerificar.Consecutivo <= 0) { return(BadRequest("pagoParaVerificar vacio y/o invalido!.")); } try { TimeLineNotificaciones timeLineNotificacion = await _pagosBusiness.VerificarSiPagoEstaAprobadoYTraerNotificacion(pagoParaVerificar); return(Ok(timeLineNotificacion)); } catch (Exception ex) { return(InternalServerError(ex)); } }
public async Task <Tuple <WrapperSimpleTypesDTO, TimeLineNotificaciones> > CrearGruposEventosAsistentes(GruposEventosAsistentes grupoEventoAsistentesParaCrear) { using (SportsGoEntities context = new SportsGoEntities(false)) { GruposRepository grupoRepository = new GruposRepository(context); grupoRepository.CrearGruposEventosAsistentes(grupoEventoAsistentesParaCrear); int?codigoPersonaGrupo = await grupoRepository.BuscarCodigoPersonaDeUnGrupo(grupoEventoAsistentesParaCrear.CodigoEvento); if (!codigoPersonaGrupo.HasValue) { throw new InvalidOperationException("No se pudo hallar el codigo persona del grupo dueño de este evento, BUUUUUUGGG!.."); } NoticiasRepository noticiasRepo = new NoticiasRepository(context); Notificaciones notificacion = new Notificaciones { CodigoEvento = grupoEventoAsistentesParaCrear.CodigoEvento, CodigoPersonaDestinoAccion = codigoPersonaGrupo.Value, CodigoPersonaOrigenAccion = grupoEventoAsistentesParaCrear.CodigoPersona, CodigoTipoNotificacion = (int)TipoNotificacionEnum.InscripcionEventoUsuario, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); WrapperSimpleTypesDTO wrapperCrearGrupoEventoAsistentes = new WrapperSimpleTypesDTO(); TimeLineNotificaciones timeLineNotificacion = null; wrapperCrearGrupoEventoAsistentes.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperCrearGrupoEventoAsistentes.NumeroRegistrosAfectados > 0) { wrapperCrearGrupoEventoAsistentes.Exitoso = true; wrapperCrearGrupoEventoAsistentes.ConsecutivoCreado = grupoEventoAsistentesParaCrear.Consecutivo; if (notificacion.Consecutivo > 0) { timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacion)); } } return(Tuple.Create(wrapperCrearGrupoEventoAsistentes, timeLineNotificacion)); } }
protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); TimeLineNotificaciones item = BindingContext as TimeLineNotificaciones; if (item == null) { return; } UrlArchivo.Source = null; if (!string.IsNullOrWhiteSpace(item.UrlArchivo)) { UrlArchivo.Source = item.UrlArchivo; } else { UrlArchivo.Source = App.Current.Resources["RutaDefaultImagenPerfil"] as string; } }
public TimeLineNotificacionesArgs(TimeLineNotificaciones timeLineNotificacionRecibido) { NotificacionRecibida = timeLineNotificacionRecibido; }
public TimeLineNotificaciones BuildearNotificacionesTraducidas(TimeLineNotificaciones notificacion) { if (!string.IsNullOrWhiteSpace(notificacion.Titulo) && notificacion.Titulo.Length > 85) { notificacion.Titulo = notificacion.Titulo.Substring(0, 85) + "..."; } if (!string.IsNullOrWhiteSpace(notificacion.Descripcion) && notificacion.Descripcion.Length > 135) { notificacion.Descripcion = notificacion.Descripcion.Substring(0, 135) + "..."; } switch (notificacion.TipoDeLaNotificacion) { case TipoNotificacionEnum.NuevoPlan: notificacion.Titulo = SportsGoResources.HayUnNuevoPlanTitulo; string descripcionTemporalNuevoPlan = SportsGoResources.HayUnNuevoPlanDescripcion; descripcionTemporalNuevoPlan = descripcionTemporalNuevoPlan.Replace(AppConstants.PlaceNombrePlan, notificacion.DescripcionPlan); notificacion.Descripcion = descripcionTemporalNuevoPlan; break; case TipoNotificacionEnum.PersonaAgregada: notificacion.Titulo = SportsGoResources.AgregadoPersonaTitulo; string descripcionTemporalAgregadoPersona = SportsGoResources.AgregadoPersonaDescripcion; descripcionTemporalAgregadoPersona = descripcionTemporalAgregadoPersona.Replace(AppConstants.PlaceNombrePersona, notificacion.NombreApellidoPersona); notificacion.Descripcion = descripcionTemporalAgregadoPersona; break; case TipoNotificacionEnum.PersonaEliminada: notificacion.Titulo = SportsGoResources.EliminadoPersonaTitulo; string descripcionTemporalEliminadoPersona = SportsGoResources.EliminadoPersonaDescripcion; descripcionTemporalEliminadoPersona = descripcionTemporalEliminadoPersona.Replace(AppConstants.PlaceNombrePersona, notificacion.NombreApellidoPersona); notificacion.Descripcion = descripcionTemporalEliminadoPersona; break; case TipoNotificacionEnum.EstaPorVencersePlan: notificacion.Titulo = SportsGoResources.PlanEstaPorVencerseTitulo; string descripcionTemporalEstaPorVencerPlan = SportsGoResources.PlanEstaPorVencerseDescripcion; descripcionTemporalEstaPorVencerPlan = descripcionTemporalEstaPorVencerPlan.Replace(AppConstants.PlaceNombrePlan, notificacion.DescripcionPlan); descripcionTemporalEstaPorVencerPlan = descripcionTemporalEstaPorVencerPlan.Replace(AppConstants.PlaceFechaVencimientoPlan, notificacion.FechaVencimientoPlan.ToString("d")); notificacion.Descripcion = descripcionTemporalEstaPorVencerPlan; break; case TipoNotificacionEnum.SeVencioPlan: notificacion.Titulo = SportsGoResources.PlanSeHaVencidoTitulo; string descripcionTemporalSeVencioPlan = SportsGoResources.PlanSeHaVencidoDescripcion; descripcionTemporalSeVencioPlan = descripcionTemporalSeVencioPlan.Replace(AppConstants.PlaceNombrePlan, notificacion.DescripcionPlan); descripcionTemporalSeVencioPlan = descripcionTemporalSeVencioPlan.Replace(AppConstants.PlaceFechaVencimientoPlan, notificacion.FechaVencimientoPlan.ToString("d")); notificacion.Descripcion = descripcionTemporalSeVencioPlan; break; case TipoNotificacionEnum.PlanAprobado: notificacion.Titulo = SportsGoResources.PlanFueAprobadoTitulo; string descripcionTemporalPlanAprobado = SportsGoResources.PlanFueAprobadoDescripcion; descripcionTemporalSeVencioPlan = descripcionTemporalPlanAprobado.Replace(AppConstants.PlaceNombrePlan, notificacion.DescripcionPlan); notificacion.Descripcion = descripcionTemporalSeVencioPlan; break; case TipoNotificacionEnum.PlanRechazado: notificacion.Titulo = SportsGoResources.PlanFueRechazadoTitulo; string descripcionTemporalPlanRechazado = SportsGoResources.PlanFueRechazadoDescripcion; descripcionTemporalSeVencioPlan = descripcionTemporalPlanRechazado.Replace(AppConstants.PlaceNombrePlan, notificacion.DescripcionPlan); notificacion.Descripcion = descripcionTemporalSeVencioPlan; break; case TipoNotificacionEnum.InscripcionEventoUsuario: notificacion.Titulo = SportsGoResources.InscripcionEventoTitulo; string descripcionTemporalInscripcionEventoUsuario = SportsGoResources.InscripcionEventoDescripcion; descripcionTemporalInscripcionEventoUsuario = descripcionTemporalInscripcionEventoUsuario.Replace(AppConstants.PlaceNombrePersona, notificacion.NombreApellidoPersona); descripcionTemporalInscripcionEventoUsuario = descripcionTemporalInscripcionEventoUsuario.Replace(AppConstants.PlaceTituloEvento, notificacion.TituloEvento); notificacion.Descripcion = descripcionTemporalInscripcionEventoUsuario; break; case TipoNotificacionEnum.DesuscripcionEventoUsuario: notificacion.Titulo = SportsGoResources.DesuscripcionEventoTitulo; string descripcionTemporalDesuscripcionEventoUsuario = SportsGoResources.DesuscripcionEventoDescripcion; descripcionTemporalDesuscripcionEventoUsuario = descripcionTemporalDesuscripcionEventoUsuario.Replace(AppConstants.PlaceNombrePersona, notificacion.NombreApellidoPersona); descripcionTemporalDesuscripcionEventoUsuario = descripcionTemporalDesuscripcionEventoUsuario.Replace(AppConstants.PlaceTituloEvento, notificacion.TituloEvento); notificacion.Descripcion = descripcionTemporalDesuscripcionEventoUsuario; break; case TipoNotificacionEnum.RssFeed: notificacion.UrlArchivo = "RssIconFeed.png"; break; } return(notificacion); }
public async Task <Tuple <WrapperSimpleTypesDTO, TimeLineNotificaciones> > ModificarEstadoPagoPersona(HistorialPagosPersonas historialPagoParaModificar) { using (SportsGoEntities context = new SportsGoEntities(false)) { PagosRepository pagosRepo = new PagosRepository(context); Notificaciones notificacion = null; // Modifico el estado y la fecha de pago de este historial HistorialPagosPersonas historialPagoExistente = await pagosRepo.ModificarEstadoPagoPersona(historialPagoParaModificar); // Si el pago fue aprobado if (historialPagoParaModificar.EstadoDelPago == EstadoDeLosPagos.Aprobado) { PlanesRepository planRepo = new PlanesRepository(context); // Busco el codigo de plan de la persona asignado cuando se registro // Tabla PlanUsuarios, no es el plan en si, es el registro que lleva el control del plan para ese usuario int?codigoPlanUsuario = await planRepo.BuscarCodigoPlanUsuarioPorCodigoPersona(historialPagoExistente.CodigoPersona); PlanesBusiness planBusiness = new PlanesBusiness(); // Armo la entidad del nuevo plan PlanesUsuarios planUsuario = new PlanesUsuarios { Consecutivo = codigoPlanUsuario.Value, CodigoPlanDeseado = historialPagoExistente.CodigoPlan }; // Cambio el plan para esa persona await planBusiness.CambiarDePlanUsuario(planUsuario); // Si el pago que me es mandando esta marcado como PayU // Actualizo las observaciones y la referencia del pago ya que es todo en uno if (historialPagoParaModificar.EsPagoPorPayU) { historialPagoExistente.ReferenciaPago = historialPagoParaModificar.ReferenciaPago; historialPagoExistente.ObservacionesCliente = historialPagoParaModificar.ObservacionesCliente; } // Armamos una notificacion para el nuevo plan NoticiasRepository noticiasRepo = new NoticiasRepository(context); notificacion = new Notificaciones { CodigoTipoNotificacion = (int)TipoNotificacionEnum.PlanAprobado, CodigoPlanNuevo = historialPagoExistente.CodigoPlan, CodigoPersonaDestinoAccion = historialPagoExistente.CodigoPersona, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); } else if (historialPagoParaModificar.EstadoDelPago == EstadoDeLosPagos.Rechazado) { historialPagoExistente.ObservacionesAdministrador = historialPagoParaModificar.ObservacionesAdministrador; NoticiasRepository noticiasRepo = new NoticiasRepository(context); notificacion = new Notificaciones { CodigoTipoNotificacion = (int)TipoNotificacionEnum.PlanRechazado, CodigoPlanNuevo = historialPagoParaModificar.CodigoPlan, CodigoPersonaDestinoAccion = historialPagoParaModificar.CodigoPersona, Creacion = DateTime.Now }; noticiasRepo.CrearNotificacion(notificacion); } else if (historialPagoParaModificar.EstadoDelPago == EstadoDeLosPagos.PendientePorAprobar) { if (string.IsNullOrWhiteSpace(historialPagoParaModificar.ReferenciaPago) || historialPagoParaModificar.CodigoArchivo <= 0) { throw new InvalidOperationException("No puedes reportar el pago de un plan si no ofreces la referencia del pago y/o el archivo"); } historialPagoExistente.ReferenciaPago = historialPagoParaModificar.ReferenciaPago; historialPagoExistente.CodigoArchivo = historialPagoParaModificar.CodigoArchivo; historialPagoExistente.ObservacionesCliente = historialPagoParaModificar.ObservacionesCliente; } WrapperSimpleTypesDTO wrapperModificarEstadoPagoPersona = new WrapperSimpleTypesDTO(); TimeLineNotificaciones timeLineNotificacion = null; wrapperModificarEstadoPagoPersona.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperModificarEstadoPagoPersona.NumeroRegistrosAfectados > 0) { wrapperModificarEstadoPagoPersona.Exitoso = true; if (notificacion != null && notificacion.Consecutivo > 0) { NoticiasRepository noticiasRepo = new NoticiasRepository(context); if (notificacion.CodigoPersonaDestinoAccion.HasValue && notificacion.CodigoPersonaDestinoAccion > 0) { PersonasRepository personaRepo = new PersonasRepository(context); int codigoIdioma = await personaRepo.BuscarCodigoIdiomaDeLaPersona(notificacion.CodigoPersonaDestinoAccion.Value); notificacion.CodigoIdiomaUsuarioBase = codigoIdioma; } timeLineNotificacion = new TimeLineNotificaciones(await noticiasRepo.BuscarNotificacion(notificacion)); } } return(Tuple.Create(wrapperModificarEstadoPagoPersona, timeLineNotificacion)); } }
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); } }