예제 #1
0
 public async Task EnviarNotificacion(TimeLineNotificaciones notificacionParaEnviar)
 {
     if (_hubConnection != null && _hubConnection.State == ConnectionState.Connected)
     {
         await _policy.ExecuteAsync(async() => await _hubProxy.Invoke("SendNotification", notificacionParaEnviar));
     }
 }
예제 #2
0
 public void ReproducirNotificacionFake(TimeLineNotificaciones notificacionParaEnviarFake)
 {
     if (NotificacionRecibida != null)
     {
         NotificacionRecibida(this, new TimeLineNotificacionesArgs(notificacionParaEnviarFake));
     }
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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));
            }
        }
예제 #6
0
 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);
        }
예제 #8
0
        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));
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
        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));
            }
        }
예제 #11
0
        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;
            }
        }
예제 #13
0
 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);
        }
예제 #15
0
        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));
            }
        }
예제 #16
0
        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);
            }
        }