public ApiResponse <IList <DTOReporteDinamico> > GetReporteDinamico(DTOReporteDinamico reporteDinamico)
        {
            ApiResponse <IList <DTOReporteDinamico> > apiResponse = new ApiResponse <IList <DTOReporteDinamico> >();

            try
            {
                GenericDataRepository <CatMotivosViaje> motivosViajeRepository = new GenericDataRepository <CatMotivosViaje>();

                apiResponse.Data = (from encuesta in _encuestaRepository.GetList(x => x.FechaAplicacion >= reporteDinamico.FechaInicio.Date && x.FechaAplicacion.Date <= reporteDinamico.FechaFin.Date)
                                    from derechohabiente in _derechohabienteRepository.GetList(x => x.IdDerechohabiente == encuesta.IdDerechohabiente).Take(1).DefaultIfEmpty()
                                    from tipoDestino in _tiposDestinoRepository.GetList(x => x.IdTipoDestino == encuesta.IdTipoDestino).Take(1).DefaultIfEmpty()
                                    from temporada in _temporadasRepository.GetList(x => x.IdTemporada == encuesta.IdTemporada).Take(1).DefaultIfEmpty()
                                    from viaje in _tiposViajeRepository.GetList(x => x.IdTipoViaje == encuesta.IdTipoViaje).Take(1).DefaultIfEmpty()
                                    from motivo in motivosViajeRepository.GetList(x => x.IdMotivoViaje == encuesta.IdMotivoViaje).Take(1).DefaultIfEmpty()
                                    from genero in _generoRepository.GetList(x => x.IdGenero == derechohabiente.IdGenero).Take(1).DefaultIfEmpty()
                                    from estado in _estadoRepository.GetList(x => x.IdEstado == derechohabiente.IdEstado).Take(1).DefaultIfEmpty()
                                    select new DTOReporteDinamico
                {
                    Destino = tipoDestino.Nombre,
                    TemporadaVacacional = temporada.Nombre,
                    Viaje = viaje.Nombre,
                    Motivo = motivo.Nombre,
                    Nombre = string.Join(" ", new[] { derechohabiente.Nombre, derechohabiente.ApellidoPaterno, derechohabiente.ApellidoMaterno }),
                    Lada = derechohabiente.Lada,
                    Telefono = derechohabiente.Telefono,
                    CorreoElectronico = derechohabiente.CorreoElectronico,
                    Genero = genero.Genero,
                    Edad = DateTime.Now.Year - derechohabiente.FechaNacimiento.Year,
                    Estado = estado.Nombre,
                    Derechohabiente = derechohabiente.TipoDerechohabiente,
                    Afiliacion = derechohabiente.Afiliacion,
                    RecibirInformacion = derechohabiente.RecibirInformacion == true ? "SI" : "NO"
                }).ToList();

                if (apiResponse.Data != null)
                {
                    apiResponse.Result  = (int)ApiResult.Success;
                    apiResponse.Message = Resources.ConsultaExitosa;
                }

                else
                {
                    apiResponse.Result  = (int)ApiResult.Failure;
                    apiResponse.Message = Resources.ConsultaFallida;
                }
            }
            catch (Exception ex)
            {
                apiResponse.Result  = (int)ApiResult.Exception;
                apiResponse.Message = ex.Message;
            }

            return(apiResponse);
        }
        public MemoryStream GetReporteDinamico(DTOReporteDinamico reporteDinamico, string fileName)
        {
            MemoryStream memoryStream = null;

            try
            {
                GenericDataRepository <CatMotivosViaje> motivosViajeRepository = new GenericDataRepository <CatMotivosViaje>();

                IList <DTOReporteDinamico> reporteDinamicoList = (from encuesta in _encuestaRepository.GetList(x => x.FechaAplicacion >= reporteDinamico.FechaInicio.Date && x.FechaAplicacion.Date <= reporteDinamico.FechaFin.Date)
                                                                  from derechohabiente in _derechohabienteRepository.GetList(x => x.IdDerechohabiente == encuesta.IdDerechohabiente).Take(1).DefaultIfEmpty()
                                                                  from tipoDestino in _tiposDestinoRepository.GetList(x => x.IdTipoDestino == encuesta.IdTipoDestino).Take(1).DefaultIfEmpty()
                                                                  from temporada in _temporadasRepository.GetList(x => x.IdTemporada == encuesta.IdTemporada).Take(1).DefaultIfEmpty()
                                                                  from viaje in _tiposViajeRepository.GetList(x => x.IdTipoViaje == encuesta.IdTipoViaje).Take(1).DefaultIfEmpty()
                                                                  from motivo in motivosViajeRepository.GetList(x => x.IdMotivoViaje == encuesta.IdMotivoViaje).Take(1).DefaultIfEmpty()
                                                                  from genero in _generoRepository.GetList(x => x.IdGenero == derechohabiente.IdGenero).Take(1).DefaultIfEmpty()
                                                                  from estado in _estadoRepository.GetList(x => x.IdEstado == derechohabiente.IdEstado).Take(1).DefaultIfEmpty()
                                                                  select new DTOReporteDinamico
                {
                    Destino = tipoDestino.Nombre,
                    TemporadaVacacional = temporada.Nombre,
                    Viaje = viaje.Nombre,
                    Motivo = motivo.Nombre,
                    Nombre = derechohabiente.Nombre + " " + derechohabiente.ApellidoPaterno + " " + derechohabiente.ApellidoMaterno,
                    Genero = genero.Genero,
                    Edad = DateTime.Now.Year - derechohabiente.FechaNacimiento.Year,
                    Estado = estado.Nombre,
                    Derechohabiente = derechohabiente.TipoDerechohabiente,
                    Afiliacion = derechohabiente.Afiliacion
                })
                                                                 .ToList();

                DataTable reporteDinamicoDataTable = ToDataTable.IListToDataTable(new List <DTOReporteDinamico>(reporteDinamicoList));

                memoryStream = ToExcel.ExportToExcel(reporteDinamicoDataTable, fileName);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(memoryStream);
        }
 public async Task <ApiResponse <IList <DTOReporteDinamico> > > GetReporteDinamico(DTOReporteDinamico reporteDinamico)
 {
     return(await Task.Run(() => _repository.GetReporteDinamico(reporteDinamico)));
 }