public async Task <WrapperSimpleTypesDTO> VerificarQueNoExistaUnPagoEnTramite(HistorialPagosPersonas historialPagoParaVerificar)
        {
            using (SportsGoEntities context = new SportsGoEntities(false))
            {
                PagosRepository pagosRepo         = new PagosRepository(context);
                bool            pagoEstaEnTramite = await pagosRepo.VerificarQueNoExistaUnPagoEnTramite(historialPagoParaVerificar);

                WrapperSimpleTypesDTO wrapper = new WrapperSimpleTypesDTO
                {
                    PagoEnTramite = pagoEstaEnTramite
                };

                return(wrapper);
            }
        }
        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 <HistorialPagosPersonasDTO> BuscarPagoEnTramiteDeUnaPersona(HistorialPagosPersonas historialPagoParaVerificar)
        {
            using (SportsGoEntities context = new SportsGoEntities(false))
            {
                PagosRepository           pagosRepo     = new PagosRepository(context);
                HistorialPagosPersonasDTO pagoEnTramite = await pagosRepo.BuscarPagoEnTramiteDeUnaPersona(historialPagoParaVerificar);

                if (pagoEnTramite != null)
                {
                    DateTimeHelperNoPortable helper = new DateTimeHelperNoPortable();
                    pagoEnTramite.FechaPago = helper.ConvertDateTimeFromAnotherTimeZone(historialPagoParaVerificar.ZonaHorariaGMTBase, helper.DifferenceBetweenGMTAndLocalTimeZone, pagoEnTramite.FechaPago);
                }

                return(pagoEnTramite);
            }
        }