Esempio n. 1
0
        /// <summary>
        /// Obtiene las PK de los autores que han participado en un determinado OC
        /// </summary>
        /// <returns></returns>
        public async Task <List <int> > GetPKAutoresByCollateLatin1(string nombre, int oc)
        {
            try
            {
                PersonasRepository persona = new PersonasRepository();
                var clavesPersona          = await persona.GetAllClavesByLikeNombreLatin1(nombre); //obtenemos las claves de las personas

                var resultados = await _db.DbSetAutores.Where(e => clavesPersona.Contains(e.clave) && e.idOC == oc).Select(e => e.ContenidoId).ToListAsync();

                return(resultados);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Esempio n. 2
0
        public async Task <IHttpActionResult> GetAllIdByLikeFullNameLatin1(String id)
        {
            var likeName = id;

            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                var personas = await _repository.GetAllClavesByLikeNombreLatin1(likeName);

                return(Ok(personas));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task <IEnumerable <Object> > GetConsultaCompendio(ProductoGI parametros)
        {
            try
            {
                var fechaActual = DateTime.Now;

                var entities = dbGI.DbSetProductoGI
                               .Where(e => e.EstadoFlujoComite == 18)
                               .Where(e => e.VoBoDuenio == true)
                               .AsNoTracking()
                               .Include(x => x.FactorInnovacion)
                               .Include(x => x.Proyecto);

                if (entities != null)
                {
                    if (!String.IsNullOrEmpty(parametros.JefeProyecto))    //busqueda por jefe de proyecto
                    {
                        PersonasRepository persona = new PersonasRepository();
                        var fkspersonas            = await persona.GetAllClavesByLikeNombreLatin1(parametros.JefeProyecto);

                        entities = entities.Where(e => fkspersonas.Contains(e.Proyecto.NumjefeProyecto)); ////<====== Revisar
                    }
                    if (!String.IsNullOrEmpty(parametros.ProyectoId))                                     //busqueda por numero de proyecto
                    {
                        entities = entities.Where(e => e.ProyectoId == parametros.ProyectoId);
                    }
                    if (!String.IsNullOrEmpty(parametros.UnidadOrganizacionalId))  //busqueda por gerencia
                    {
                        entities = entities.Where(e => e.UnidadOrganizacionalId == parametros.UnidadOrganizacionalId);
                    }
                    if (!String.IsNullOrEmpty(parametros.ClaveFactorInnovacion))  //busqueda por clave de factor de innovacion
                    {
                        var id = Convert.ToInt32(parametros.ClaveFactorInnovacion);
                        entities = entities.Where(e => e.FactorInnovacionId == id);
                    }
                    if (parametros.Periodo != 0)  //busqueda por periodo
                    {
                        var fechaMinComparacion = new DateTime(parametros.Periodo, 1, 1);
                        var fechaMaxComparacion = new DateTime(parametros.Periodo, 12, 31);
                        var fksproductos        = await dbGI.DbSetProductoGISolicitud.Where(e => DbFunctions.TruncateTime(e.FechaRegistro) >= DbFunctions.TruncateTime(fechaMinComparacion) &&
                                                                                            DbFunctions.TruncateTime(e.FechaRegistro) <= DbFunctions.TruncateTime(fechaMaxComparacion))
                                                  .AsNoTracking().Select(x => x.ProductoId).ToListAsync();

                        entities = entities.Where(e => fksproductos.Contains(e.ProductoId));
                    }

                    var datos = entities.Select(x => new {
                        ProductoId       = x.ProductoId,
                        ClavePersona     = x.ClavePersona,
                        FactorInnovacion = x.FactorInnovacion.Descripcion,
                        FechaRegistro    = dbGI.DbSetProductoGISolicitud.Where(ps => ps.ProductoId == x.ProductoId).Select(ps => ps.FechaRegistro).FirstOrDefault(),
                        NombreTecnico    = x.NombreTecnico,
                        ProyectoId       = x.ProyectoId,
                        Proyecto         = x.Proyecto.Nombre,
                        JefeProyecto     = x.Proyecto.NombreJefeProyecto,
                        CveJefeProyecto  = x.Proyecto.NumjefeProyecto,

                        UnidadOrganizacional =
                            (from unidad in dbGI.DbSetUnidadOrganizacional
                             where x.UnidadOrganizacionalId.Equals(unidad.ClaveUnidad) &&
                             unidad.FechaEfectiva == dbGI.DbSetUnidadOrganizacional.Where(
                                 p => p.FechaEfectiva <= fechaActual &&
                                 p.ClaveUnidad == unidad.ClaveUnidad
                                 ).Max(e => e.FechaEfectiva)
                             select unidad.NombreUnidad).FirstOrDefault()
                    })
                                .ToList();

                    return(datos);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <IEnumerable <Object> > GetConsultaIdeas(IdeaInnovadora parametros)
        {
            try
            {
                var entities = dbGI.DbSetIdeaInnovadora
                               .Include(e => e.EstadoFlujo)
                               .AsNoTracking();

                if (entities != null)
                {
                    /***Seccion [Buscar idea innovadora]**/
                    if (!String.IsNullOrEmpty(parametros.busqueda))//busqueda en general (seccion buscar 'idea innovadora')
                    {
                        entities = entities.Where(e => e.EstadoFlujoId == 10);
                    }
                    /***Seccion [Mis ideas innovadoras]**/
                    if (!String.IsNullOrEmpty(parametros.ClavePersona))//busqueda por los registros de la persona
                    {
                        var fksautores = await dbGI.DbSetAutoresIdea.Where(e => e.ClavePersona == parametros.ClavePersona).AsNoTracking().Select(x => x.IdeaInnovadoraId).ToListAsync();

                        entities = entities.Where(e => fksautores.Contains(e.IdeaInnovadoraId) || e.ClavePersona == parametros.ClavePersona);
                    }

                    /***Criterios de busqueda en general de ambos formularios**/
                    if (!String.IsNullOrEmpty(parametros.NombreIdea))//busqueda por el nombre de la idea innovadora
                    {
                        var fksideas = await GetIdeasLikeNombreLatin1(parametros.NombreIdea);

                        entities = entities.Where(e => fksideas.Contains(e.IdeaInnovadoraId));
                    }
                    if (!String.IsNullOrEmpty(parametros.busquedaFecha))  //busqueda por fechas
                    {
                        entities = entities.Where(e => (DbFunctions.TruncateTime(e.FechaRegistro) >= DbFunctions.TruncateTime(parametros.fechaInicioComparacion) && DbFunctions.TruncateTime(e.FechaRegistro) <= DbFunctions.TruncateTime(parametros.fechaFinalComparacion)));
                    }
                    if (!String.IsNullOrEmpty(parametros.proponenteNombre))  //busqueda por proponentes
                    {
                        PersonasRepository p = new PersonasRepository();
                        var claves           = await p.GetAllClavesByLikeNombreLatin1(parametros.proponenteNombre);

                        var fksproponentes = await dbGI.DbSetAutoresIdea.Where(e => claves.Contains(e.ClavePersona) && e.ContribucionProponenteId == 0).AsNoTracking().Select(x => x.IdeaInnovadoraId).ToListAsync();

                        entities = entities.Where(x => fksproponentes.Contains(x.IdeaInnovadoraId));
                    }
                    if (!String.IsNullOrEmpty(parametros.PalabrasClave))//busqueda por las palabras clave de las ideas innovadoras
                    {
                        var fkspalabras = await GetIdeasByPalabrasClaveLikeNombreLatin1(parametros.PalabrasClave);

                        entities = entities.Where(e => fkspalabras.Contains(e.IdeaInnovadoraId));
                    }

                    var datos = entities.ToList();

                    foreach (var item in datos)
                    {
                        AutoresIdea proponente = await autores.getProponentePrincipalById(item.IdeaInnovadoraId);

                        if (proponente != null)
                        {
                            Personas autor = await _personaRepo.GetByClave(proponente.ClavePersona);

                            item.proponenteNombre         = autor.NombreCompleto;
                            item.ClaveProponentePrincipal = proponente.ClavePersona;
                        }
                        if (item.TipoAcceso == 1)
                        {
                            item.AccesoPublico = true;
                        }
                        else
                        {
                            item.AccesoPublico = false;
                        }
                    }

                    return(datos);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Esempio n. 5
0
        public async Task <IEnumerable <Object> > GetConsultaCartera(Propuesta parametros)
        {
            try
            {
                var entities = dbGI.DbSetPropuesta.AsNoTracking().
                               Include(x => x.EstadoFlujo)
                               .Include(x => x.TipoAccesoGI)
                               .Include(x => x.SegmentoMercado)
                               .Include(x => x.Empresa);
                if (entities != null)
                {
                    if (parametros.EstadoFlujoId != 0) //Consulta hecha por el publico en general
                    {
                        entities = entities.Where(e => e.EstadoFlujoId == 10);
                    }
                    if (!String.IsNullOrEmpty(parametros.ClavePersona)) //consulta hecha para obtener las propuestas por cada persona
                    {
                        entities = entities.Where(x => x.ClaveProponentePrincipal == parametros.ClavePersona || x.ClavePersona == parametros.ClavePersona);
                    }
                    if (!String.IsNullOrEmpty(parametros.NombreTecnico)) //busqueda por el nombre tecnico de una propuesta
                    {
                        var fkspropuestas = await GetPropuestasLikeNombreLatin1(parametros.NombreTecnico);

                        entities = entities.Where(e => fkspropuestas.Contains(e.Id));
                    }
                    if (!String.IsNullOrEmpty(parametros.ProductoServicio)) //busqueda por el nombre propuesto del producto o servicio
                    {
                        var fksproductos = await GetPropuestasByNombreProductoServicioLatin1(parametros.ProductoServicio);

                        entities = entities.Where(e => fksproductos.Contains(e.Id));
                    }
                    if (parametros.EmpresaPromotorClave != null)  //busqueda por empresa
                    {
                        entities = entities.Where(e => e.EmpresaPromotorClave == parametros.EmpresaPromotorClave);
                    }
                    if (parametros.SegmentoMercadoId != 0)  //busqueda por el segmento de mercado
                    {
                        entities = entities.Where(e => e.SegmentoMercadoId == parametros.SegmentoMercadoId);
                    }
                    if (!String.IsNullOrEmpty(parametros.NombreProponentePrincipal))  //busqueda por el proponente principal
                    {
                        PersonasRepository persona = new PersonasRepository();
                        var clavesInv = await persona.GetAllClavesByLikeNombreLatin1(parametros.NombreProponentePrincipal);

                        entities = entities.Where(e => clavesInv.Contains(e.ClaveProponentePrincipal));
                    }
                    if (!String.IsNullOrEmpty(parametros.UnidadOrganizacionalId))  //busqueda por la clave de la unidad organizacional
                    {
                        entities = entities.Where(e => e.UnidadOrganizacionalId == parametros.UnidadOrganizacionalId);
                    }
                    if (!String.IsNullOrEmpty(parametros.busquedaFecha))  //busqueda por fecha
                    {
                        entities = entities.Where(e => (DbFunctions.TruncateTime(e.FechaRegistro) >= DbFunctions.TruncateTime(parametros.fechaInicioComparacion) && DbFunctions.TruncateTime(e.FechaRegistro) <= DbFunctions.TruncateTime(parametros.fechaFinalComparacion) && e.FechaRegistro != null));
                    }


                    var datos = entities.Select(x => new
                    {
                        Id                       = x.Id,
                        PropuestaId              = x.PropuestaId,
                        IdeaInnovadoraId         = x.IdeaInnovadoraId,
                        IdeaInnovadoraTitulo     = x.IdeaInnovadora.NombreIdea,
                        PropuestaInterna         = x.PropuestaInterna,
                        NombreTecnico            = x.NombreTecnico,
                        ProductoServicio         = x.ProductoServicio,
                        ClaveProponentePrincipal = x.ClaveProponentePrincipal,
                        Proponente               = dbGI.DbSetPersonas
                                                   .Where(p => p.ClavePersona.Equals(x.ClaveProponentePrincipal))
                                                   .OrderByDescending(p => p.FechaEfectiva)
                                                   .Select(p => String.Concat(p.Nombre, " ", p.ApellidoPaterno, " ", p.ApellidoMaterno)).FirstOrDefault(),
                        EmpresaPromotorClave       = x.EmpresaPromotorClave,
                        EmpresaPromotorNombre      = x.Empresa.NombreEmpresa,
                        UnidadOrganizacionalId     = x.UnidadOrganizacionalId,
                        NombreUnidadOrganizacional = x.NombreUnidadOrganizacional,
                        SegmentoMercadoId          = x.SegmentoMercadoId,
                        SegmentoMercadoNombre      = x.SegmentoMercado.NomSegMerc,
                        FechaRegistro     = x.FechaRegistro,
                        ClavePersona      = x.ClavePersona,
                        FechaValidacion   = x.FechaValidacion,
                        EstadoFlujoId     = x.EstadoFlujoId,
                        EstadoFlujoNombre = x.EstadoFlujo.Descripcion,
                        TipoAcceso        = x.TipoAcceso,
                        TipoAccesoNombre  = x.TipoAccesoGI.Nombre,
                        //PlanNegocioEvolutivoId = (dbGI.DbSetPlanNegocioEvolutivo.Where(w=> w.PropuestaClave==x.Id ).Select(z=> z.PlanNegocioEvolutivoId).FirstOrDefault())
                    })
                                .ToList();

                    return(datos);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <IEnumerable <SoftwarePersonal> > getData(DataServerSide ss)
        {
            UORepository uo = new UORepository();

            try
            {
                var v = (from a in
                         _db.dbSetSoftwarePersonal
                         .Include(x => x.Proyecto)
                         .Include(x => x.TipoSoftware)
                         .Include(x => x.Autores)
                         .Include(x => x.DerechosAutor)
                         .Where(x => x.EstadoFlujoId == 3)
                         select a);
                ss.recordsTotal = v.Count();



                if (!string.IsNullOrEmpty(ss.ClaveUnidad))
                {
                    //var uni = await uo.GetByIdWithChildren(ss.ClaveUnidad);
                    //HashSet<String> clavesUnidad = null;
                    //if (uni.tipoO < 3)
                    //{
                    //    var unidades = uni.Children.Select(x => x.ClaveUnidad).ToList();
                    //    clavesUnidad = new HashSet<String>(unidades);
                    //}
                    //else
                    //{
                    //    clavesUnidad = new HashSet<String>();
                    //    clavesUnidad.Add(ss.ClaveUnidad);
                    //}

                    v = v.Where(x => x.GerenciaClave == ss.ClaveUnidad);

                    //v = v.Where(e => clavesUnidad.Contains(e.Proyecto.UnidadOrganizacionalId));
                }


                if (!String.IsNullOrEmpty(ss.Titulo)) //busqueda por titulo
                {
                    var listaDA = await GetPKTitulo(ss.Titulo);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }


                if (!String.IsNullOrEmpty(ss.proyectoId))
                {
                    var listaDA = await GetDALikeProyecto(ss.proyectoId);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }

                //if (!String.IsNullOrEmpty(ss.DerechoAutor))
                //{
                //    var listaDA = await GetPKDerechoAutor(ss.DerechoAutor);
                //    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                //}

                if (ss.DerechosAutorId != null)
                {
                    v = v.Where(x => x.DerechosAutorId == ss.DerechosAutorId);
                }

                if (!String.IsNullOrEmpty(ss.Tipo))
                {
                    v = v.Where(e => e.TipoSoftwareId.ToString().Equals(ss.Tipo));
                }

                if (!String.IsNullOrEmpty(ss.Autor))
                {
                    var listaDA = await GetPKAutor(ss.Autor);

                    v = v.Where(e => listaDA.Contains(e.SoftwarePersonalId));
                }

                if (!String.IsNullOrEmpty(ss.searchValue))
                {
                    PersonasRepository rp = new PersonasRepository();
                    var clavesPer         = await rp.GetAllClavesByLikeNombreLatin1(ss.searchValue);

                    //var autor= await
                    var softwares = await _db.dbSetAutorSoftware.AsNoTracking()
                                    .Where(x => clavesPer.Contains(x.ClaveAutor))
                                    .Select(x => x.SoftwarePersonalId)
                                    .ToListAsync();

                    var listaUnidades = await uo.GetPorNombreUnidad(ss.searchValue);

                    var titulo = await GetPKTitulo(ss.searchValue);

                    var tipoSoftware = await GetPKTipoSoftware(ss.searchValue);

                    var proyecto = await GetProyectos(ss.searchValue);

                    var proyecto2 = await GetProyectos2(ss.searchValue);

                    var listaDA = await GetDerechosAutorByCollate(ss.searchValue);

                    //var listaAutor = await GetProyectos(ss.searchValue);


                    v = v.Where(e => titulo.Contains(e.SoftwarePersonalId) ||
                                listaDA.Contains(e.DerechosAutorId) ||
                                softwares.Contains(e.SoftwarePersonalId) ||
                                listaUnidades.Contains(e.GerenciaClave) ||
                                proyecto.Contains(e.ProyectoId) ||
                                proyecto2.Contains(e.ProyectoId) ||
                                tipoSoftware.Contains(e.TipoSoftwareId)


                                );
                }


                //sort
                if (!(string.IsNullOrEmpty(ss.sortColumn) && string.IsNullOrEmpty(ss.sortColumnDir)))
                {
                    //for make sort simpler we will add Syste.Linq.Dynamic reference
                    v = v.OrderBy(ss.sortColumn + " " + ss.sortColumnDir);
                }

                ss.recordsFiltered = v.Count();
                var entities = await v.Skip(ss.skip).Take(ss.pageSize).AsNoTracking().ToListAsync();

                if (entities != null && entities.Count > 0)
                {
                    AutorSoftwareRepository aut = new AutorSoftwareRepository(_db);
                    var listaSW       = entities.Select(x => x.SoftwarePersonalId).ToList();
                    var clavesAutores = await aut.GetClavesAutorBySoftwarsIdCollection(listaSW);

                    HashSet <String> clavesEmpleado = new HashSet <string>(clavesAutores);


                    PersonasRepository p = new PersonasRepository();
                    var personas         = await p.GetAllCollectionMAXTodos(clavesEmpleado);

                    List <Personas> pers = personas.ToList();

                    //var unidadesOrgs = (await uo.GetAllCollectionMAX(entities.Where(x => x.Proyecto != null).Select(x => x.Proyecto.UnidadOrganizacionalId).ToList())).ToList();
                    foreach (var e in entities)
                    {
                        foreach (var a in e.Autores)
                        {
                            try
                            {
                                string cad = a.ClaveAutor.Trim();
                                a.ClaveAutor     = a.ClaveAutor.Trim();
                                a.NombreCompleto = pers.Find(x => x.ClavePersona == cad).NombreCompleto;
                            }
                            catch (Exception ex) { }
                        }


                        if (e.GerenciaClave != null)
                        {
                            e.NombreUnidadOrganizacional = await uo.GetNameById(e.GerenciaClave);
                        }
                    }
                }
                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <IEnumerable <Object> > getData(DataServerSide ss)
        {
            try
            {
                //Consulta que devuelve un objeto IQueryable , para mas informacion : https://stackoverflow.com/questions/1578778/using-iqueryable-with-linq/1578809#1578809
                var data = (from a in _ctx.BecarioInterno.AsNoTracking().Include(e => e.EstadoFlujo).Include(e => e.BecaInterna).Include(e => e.Institucion)
                            select a);


                if (!String.IsNullOrEmpty(ss.Tipo)) //Filtrado por estado flujo
                {
                    data = data.Where(x => x.EstadoFlujoId == 3);
                }

                ss.recordsTotal = data.Count();

                if (!String.IsNullOrEmpty(ss.Becario)) //busqueda por clave de empleado (becario)
                {
                    data = data.Where(x => x.ClavePersona.Contains(ss.Becario));
                }

                if (!string.IsNullOrEmpty(ss.Institucion))  //busqueda por institucion
                {
                    var id = Convert.ToInt32(ss.Institucion);
                    data = data.Where(x => x.InstitucionID == id);
                }

                if (ss.TipoBeca != 0)  //Tipo de beca interna
                {
                    data = data.Where(x => x.BecaInternaId == ss.TipoBeca);
                }

                if (!String.IsNullOrEmpty(ss.busquedaFecha))  //busqueda por fecha
                {
                    var fechaInicio  = Convert.ToDateTime(ss.NuevaFechaInicio);
                    var fechaTermino = Convert.ToDateTime(ss.NuevaFechaTermino);
                    data = data.Where(x => (DbFunctions.TruncateTime(x.FechaInicioBeca) >= DbFunctions.TruncateTime(fechaInicio) &&
                                            DbFunctions.TruncateTime(x.FechaTerminoBeca) <= DbFunctions.TruncateTime(fechaTermino)));
                }

                //caja
                if (!string.IsNullOrEmpty(ss.searchValue))
                {
                    var beca = await GetPorBecaTipo(ss.searchValue);

                    var institucion = await GetPorInstitucion(ss.searchValue);

                    var estados = await GetPorEstadoRegistroBusquedaColacion(ss.searchValue);

                    PersonasRepository p = new PersonasRepository();
                    var clavesPersonas   = await p.GetAllClavesByLikeNombreLatin1(ss.searchValue);

                    data = data.Where(e => e.FechaInicioBeca.ToString().Contains(ss.searchValue) ||
                                      e.FechaTerminoBeca.ToString().Contains(ss.searchValue) ||
                                      beca.Contains(e.BecaInternaId) ||
                                      institucion.Contains(e.InstitucionID) ||
                                      estados.Contains(e.EstadoFlujoId) ||
                                      e.ClavePersona.Contains(ss.searchValue) ||
                                      clavesPersonas.Contains(e.ClavePersona));
                }

                /**Esta solucion se implenta porque los registros se querian ordenar por el nombre de la persona */
                /**La coleccion de becarios internos no contiene una llave foranea, por lo que desde el inicio no se pueden traer los nombres de las personas */
                /**El objeto IQueryable (la coleccion)  no permite joins entre multiples contextos, por lo que tampoco se puede obtener de manera inicial los nombres*/
                /**La unica manera fue crear multiples objetos que fueran filtrando  la informacion de poco a poco */
                var claves   = data.Select(x => x.ClavePersona).ToList();
                var Personas = await _db.dbSetPersonas.Where(x => claves.Contains(x.ClavePersona)).AsNoTracking().ToListAsync();

                //Primero obtenemos los nombres y los agregamos a la coleccion (nota: a un objeto de tipo Iqueryable no se le pueden agregar mas objetos o propiedades, ya que es de solo lectura hasta el momento)
                var tempCollection = data.ToList();
                foreach (var item in tempCollection)
                {
                    var perso = Personas.Find(x => x.ClavePersona == item.ClavePersona);
                    if (perso != null)
                    {
                        item.NombrePersona = perso.NombreCompleto;
                    }
                }

                //Aplicamos el ordenamiento
                IEnumerable <BecarioInterno> lista = new List <BecarioInterno>();
                //sort
                if (!(string.IsNullOrEmpty(ss.sortColumn) && string.IsNullOrEmpty(ss.sortColumnDir)))
                {
                    lista = tempCollection.OrderBy(ss.sortColumn + " " + ss.sortColumnDir);  //Ordenamiento con dynamic linq
                }
                //Retornamos datos
                ss.recordsFiltered = lista.Count();
                var entities = lista.Skip(ss.skip).Take(ss.pageSize);


                //NOTA: En caso de que las condiciones del ordenamiento cambien descomentar el siguiente codigo, es mas optimo que el de arriba

                // if (!(string.IsNullOrEmpty(ss.sortColumn) && string.IsNullOrEmpty(ss.sortColumnDir)))
                // {
                //     lista = tempCollection.OrderBy(ss.sortColumn + " " + ss.sortColumnDir);

                // }

                // var claves = data.Select(x => x.ClavePersona).ToList();
                // var Personas = await _db.dbSetPersonas.Where(x => claves.Contains(x.ClavePersona)).AsNoTracking().ToListAsync();

                // foreach (var item in entities)
                // {
                //    var perso = Personas.Find(x => x.ClavePersona == item.ClavePersona);
                //    if (perso != null)
                //    {
                //        item.NombrePersona = perso.NombreCompleto;
                //    }
                // }

                // ss.recordsFiltered = data.Count();
                // var entities = data.Skip(ss.skip).Take(ss.pageSize);


                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }