Пример #1
0
        public async Task <FondoPrograma> GetPP(int id)
        {
            try
            {
                var entities = await _db.FondoPrograma.AsNoTracking()
                               .Include("PropuestaPorFondo.Propuestas")
                               .Include("ProyectoPorFondo.Proyecto")
                               .Include(e => e.Empresa)
                               .Include(e => e.FuenteFinanciamiento)
                               .Include(e => e.SitioWebFondoPrograma)
                               .Include("TematicaPorFondoPrograma.Tematica")
                               .AsNoTracking().FirstOrDefaultAsync(e => e.FondoProgramaId == id);

                UORepository       unidad  = new UORepository(_dbGEN);
                PersonasRepository persona = new PersonasRepository(_dbGEN);
                foreach (PropuestaPorFondo objeto in entities.PropuestaPorFondo)
                {
                    objeto.Propuestas.UnidadOrganizacional = await unidad.UnidadActualWithoutStatus(objeto.Propuestas.UnidadOrganizacionalId);

                    objeto.Propuestas.Personas = await persona.GetById(objeto.Propuestas.ClaveEmpPropuesta);
                }

                foreach (ProyectoPorFondo objeto in entities.ProyectoPorFondo)
                {
                    objeto.Proyecto.UnidadOrganizacional = await unidad.UnidadActualWithoutStatus(objeto.Proyecto.UnidadOrganizacionalId);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
        public async Task <HttpResponseMessage> ReporteCaratula(String id)
        {
            //id de ITF

            try
            {
                ITFCaratula util = new ITFCaratula();

                log.Info(new MDCSet(this.ControllerContext.RouteData));
                var itf = await dbITF.GetFKs(id);

                UORepository uo       = new UORepository();
                var          gerencia = await uo.GetById(itf.ClaveUnidadOrganizacional);

                var division = await uo.GetById(gerencia.padre);

                itf.NombreUnidadOrganizacional = gerencia.NombreUnidad;
                itf.NombreUnidadPadre          = division.NombreUnidad;
                var autores = await dbITF.getAllAutoresByInformeTecnicoFinalId(itf.InformeTecnicoFinalId);

                var resultAutores = util.getAutoresOfList(autores);
                var docPDF        = util.GetITFCaratulaReport(ConfigurationManager.AppSettings["templateITFcaratula"] /*"c:\\adjuntos\\itfCompleto.dotx"*/, itf, id, Request, resultAutores);

                return(docPDF);
            }

            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, e.Message + " (del ITF " + id + ")"));
            }
        }
Пример #3
0
        /// <summary>
        /// Obtiene lista de propuestas
        /// </summary>
        /// <returns>IEnumerable<Propuestas></returns>
        public async Task <IEnumerable <Propuestas> > GetPropuestas(int anio)
        {
            DateTime     anioconsulta = new DateTime(anio, 1, 1);
            DateTime     fechafin     = anioconsulta.AddYears(1);
            UORepository uo           = new UORepository(_gen);

            List <int?> empresasenproyectos = _gen.dbSetProyectoGEN
                                              .Where(e => e.EmpresaId != null && subprogramas.subprogramas.Contains(e.SubPrograma))
                                              .Select(e => e.EmpresaId).Distinct().Distinct().ToList();

            var propuestas = await _gen.dbSetPropuesta.Include(e => e.Empresa)
                             .Where(e => (e.Fecha > anioconsulta && e.Fecha < fechafin) && empresasenproyectos.Contains(e.EmpresaId))
                             .AsNoTracking().ToListAsync();

            var listaunidadesid = propuestas.Select(e => e.UnidadOrganizacionalId).ToList();
            IEnumerable <UnidadOrganizacional> unidadorganizacional = await uo.GetAllCollectionMAX(listaunidadesid);

            foreach (var propuesta in propuestas)
            {
                if (propuesta.UnidadOrganizacionalId != null)
                {
                    propuesta.UnidadOrganizacional = unidadorganizacional
                                                     .Where(e => e.ClaveUnidad == propuesta.UnidadOrganizacionalId)
                                                     .FirstOrDefault();
                }
            }

            return(propuestas);
        }
Пример #4
0
        public async Task <IHttpActionResult> GetAllLikeNombreWithUnidad2(String id)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(id));
                IEnumerable <Proyecto> proyectos = await _proyectosRepo.GetAllLikeNombre(id);

                UORepository    uo         = new UORepository();
                List <Proyecto> listProy   = new List <Proyecto>(proyectos);
                List <String>   unidadesId = listProy.Select(x => x.UnidadOrganizacionalId).ToList();
                var             unidades   = await uo.GetAllByCollectionUnidadId(unidadesId);

                foreach (var p in proyectos)
                {
                    p.UnidadOrganizacional = unidades.Find(x => x.ClaveUnidad == p.UnidadOrganizacionalId);  //await uo.GetById(p.UnidadOrganizacionalId);
                }
                return(Ok(proyectos));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
        public async Task <PlanNegocioEvolutivo> getbyidPropuesta(int id)
        {
            try
            {
                var entities = await dbGI.DbSetPlanNegocioEvolutivo.AsNoTracking()
                               .Include(x => x.PlanNegocioEvolArchivos)
                               .Include("PlanNegocioEvolArchivos.Adjunto")
                               .Include(x => x.PlanNegocioEvolGerencias)
                               .Include(x => x.PlanNegocioEvolAutores)
                               .Include(x => x.Propuesta)
                               .Include(x => x.Proyecto)
                               .Include(x => x.TipoAccesoGI)
                               .FirstOrDefaultAsync(e => e.PropuestaClave == id);

                if (entities != null && entities.PlanNegocioEvolGerencias != null)
                {
                    UORepository uo       = new UORepository();
                    var          unidades = await uo.GetAllByCollectionCR(entities.PlanNegocioEvolGerencias.Select(x => x.ClaveUnidad).ToList());

                    foreach (var u in entities.PlanNegocioEvolGerencias)
                    {
                        var unidad = unidades.Find(x => x.ClaveUnidad.Equals(u.ClaveUnidad));
                        if (unidad != null)
                        {
                            u.NombreUnidad = unidad.NombreUnidad;
                        }
                    }
                }
                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #6
0
        public async Task <Competidor> Get(int id)
        {
            try
            {
                var entities = await _dbComp.Competidor
                               .AsNoTracking()
                               .Include(e => e.Empresa)
                               .Include(e => e.SegmentoMercado)
                               .Include(e => e.LineaDesarrolloTecnologico)
                               .Include(e => e.TamanoEmpresa)
                               .Include("AdjuntoPorCompetidor.Adjunto")
                               .Include("ServicioPorCompetidor.Servicio")
                               .Include("ProductoPorCompetidor.Producto")
                               .FirstOrDefaultAsync(e => e.CompetidorId == id);

                UORepository uo = new UORepository(_dbGEN);

                var unidadId = entities.ClaveUnidad;
                entities.UnidadOrganizacional = await uo.UnidadActualWithoutStatus(unidadId);

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #7
0
        public async Task <TecnologiaLicenciada> GetById(int id)
        {
            try
            {
                var entities = await dbGI.DbSetTecnologiaLicenciada.AsNoTracking()
                               .Include(x => x.Aliado)
                               .Include(x => x.EstadoLicenciamiento)
                               .Include(x => x.ProductoGI)
                               .Include(x => x.Proyecto)
                               .Include(x => x.Gerencias)
                               .Include(x => x.Convenio)
                               .Include("TecnologiaLicenciadaPIDA.DerechosAutor")
                               .Include("TecnologiaLicenciadaPIPIndustrial.PropiedadIndustrial.TipoPropiedadIndustrial")
                               .Include("TecnologiaLicenciadaPIDA.DerechosAutor.Rama")

                               .Include("Pagos.TipoPagos")

                               .Include(x => x.Lecciones)

                               .FirstOrDefaultAsync(e => e.TecnologiaLicenciadaId == id);

                if (entities != null)
                {
                    UORepository uniDB      = new UORepository();
                    var          unidadesId = entities.Gerencias.Select(x => x.ClaveUnidad).ToList();
                    var          unidades   = await uniDB.GetAllByCollectionCR(unidadesId);

                    foreach (var uG in entities.Gerencias)
                    {
                        var unidad = unidades.Find(x => x.ClaveUnidad.Equals(uG.ClaveUnidad));
                        if (unidad != null)
                        {
                            uG.NombreUnidad = unidad.NombreUnidad;
                        }
                    }
                }


                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #8
0
        public async Task <ActividadAdicional> GetActByIdFK(int id)
        {
            try
            {
                var entities = await _db.ActividadAdicional.AsNoTracking()
                               .Include(g => g.AreaActividadAdicional)
                               .Include("Aliado.Empresa")
                               .Include(g => g.PersonalActividadAdicional)
                               .FirstOrDefaultAsync(e => e.ActividadAdicionalId == id);

                PersonasRepository per = new PersonasRepository(_dbGEN);
                foreach (PersonalActividadAdicional ppc in entities.PersonalActividadAdicional)
                {
                    var personaId = ppc.ClavePersona;
                    ppc.Personas = await per.GetById(personaId);
                }

                //Obtiene la lista de areas en el convenio
                var areas = new List <AreaActividadAdicional>();
                areas = await(from auo in _db.AreaActividadAdicional
                              where auo.ActividadAdicionalId == id
                              select auo)
                        .AsNoTracking()
                        .ToListAsync();

                //Obtiene la lista de uos en las areasConvenio
                List <String> uos1 = new List <string>(areas.Select(x => x.ClaveUnidad.Trim()));
                UORepository  uo   = new UORepository(_dbGEN);
                List <UnidadOrganizacional> uos = new List <UnidadOrganizacional>();
                uos = await uo.GetAllByCollectionCR(uos1);

                foreach (AreaActividadAdicional ar in entities.AreaActividadAdicional)
                {
                    var unidadId = ar.ClaveUnidad;
                    ar.UnidadOrganizacional = uos.Find(x => x.ClaveUnidad == unidadId);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #9
0
        //hacer esto reduce el performance de las consultas  (O_O)!!!
        public async Task <Convocatoria> GetFKByIdWithGerencia(int id)
        {
            try
            {
                var entities = await _db.Convocatoria
                               .AsNoTracking()
                               .Include(e => e.SitioWebPorConvocatoria)
                               .Include("ContactoPorConvocatoria.Contacto")
                               //.Include(e => e.PropuestaPorConvocatoria)
                               .Include("PropuestaPorConvocatoria.Propuestas")
                               .Include("ProyectoPorConvocatoria.Proyecto")
                               .Include("AdjuntoPorConvocatoria.Adjunto")
                               .Include("FondoPrograma.FuenteFinanciamiento")
                               .Include("FondoPrograma.Empresa")
                               .Include("FondoPrograma.TematicaPorFondoPrograma.Tematica")

                               .FirstOrDefaultAsync(e => e.ConvocatoriaId == id);

                UORepository uo = new UORepository(_dbGEN);
                foreach (ProyectoPorConvocatoria ppc in entities.ProyectoPorConvocatoria)
                {
                    var unidadId = ppc.Proyecto.UnidadOrganizacionalId;
                    ppc.Proyecto.UnidadOrganizacional = await uo.UnidadActualWithoutStatus(unidadId);
                }

                UORepository       uo2 = new UORepository(_dbGEN);
                PersonasRepository per = new PersonasRepository(_dbGEN);
                foreach (PropuestaPorConvocatoria prpc in entities.PropuestaPorConvocatoria)
                {
                    var unidadId2 = prpc.Propuestas.UnidadOrganizacionalId;
                    prpc.Propuestas.UnidadOrganizacional = await uo2.UnidadActualWithoutStatus(unidadId2);

                    var personaId = prpc.Propuestas.ClaveEmpPropuesta;
                    prpc.Propuestas.Personas = await per.GetById(personaId);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #10
0
        public async Task <IHttpActionResult> GetAllLikeNombreWithUnidad(String id)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData), new InfoException(id));
                var proyectos = await _proyectosRepo.GetAllLikeNombre(id);

                UORepository uo = new UORepository();

                foreach (var p in proyectos)
                {
                    p.UnidadOrganizacional = await uo.GetById(p.UnidadOrganizacionalId);
                }
                return(Ok(proyectos));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);

                return(InternalServerError(e));
            }
        }
Пример #11
0
        public async Task <Convenio> GetConvByIdFK(int id)
        {
            try
            {
                var entities = await _db.Convenio.AsNoTracking()
                               .Include("AdjuntoPorConvenio.Adjunto")
                               .Include(g => g.AreaConvenio)
                               .Include(g => g.TipoConvenio)
                               .Include(g => g.AmbitoConv)
                               .Include("Aliado.Empresa")
                               .FirstOrDefaultAsync(e => e.ConvenioId == id);

                //Obtiene la lista de areas en el convenio
                var areas = new List <AreaConvenio>();
                areas = await(from auo in _db.AreaConvenio
                              where auo.ConvenioId == id
                              select auo)
                        .AsNoTracking()
                        .ToListAsync();

                //Obtiene la lista de uos en las areasConvenio
                List <String> uos1 = new List <string>(areas.Select(x => x.ClaveUnidad.Trim()));
                UORepository  uo   = new UORepository(_dbGEN);
                List <UnidadOrganizacional> uos = new List <UnidadOrganizacional>();
                uos = await uo.GetAllByCollectionCR(uos1);

                foreach (AreaConvenio ar in entities.AreaConvenio)
                {
                    var unidadId = ar.ClaveUnidad;
                    ar.UnidadOrganizacional = uos.Find(x => x.ClaveUnidad == unidadId);
                }

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #12
0
        public async Task <IEnumerable <Iniciativas> > GetProspectosIniciativas()
        {
            //DateTime anioconsulta = new DateTime(anio, 1, 1);
            //DateTime fechafin = anioconsulta.AddYears(1);
            UORepository uo = new UORepository(_gen);

            List <int?> empresasenproyectos = _gen.dbSetProyectoGEN
                                              .Where(e => e.EmpresaId != null && subprogramas.subprogramas.Contains(e.SubPrograma))
                                              .Select(e => e.EmpresaId).Distinct().Distinct().ToList();

            var iniciativas = await _gen.dbSetIniciativa
                              .Where(e => !empresasenproyectos.Contains(e.EmpresaId))
                              .AsNoTracking().ToListAsync();

            var listaunidadesid = iniciativas.Select(e => e.UnidadOrganizacionalId).ToList();
            var listaempresaid  = iniciativas.Select(e => e.EmpresaId);
            IEnumerable <UnidadOrganizacional> unidadorganizacional = await uo.GetAllCollectionMAX(listaunidadesid);

            IEnumerable <Empresa> empresas = await new EmpresasRepository(_cr).GetEmpresasByTrue();

            foreach (var iniciativa in iniciativas)
            {
                if (iniciativa.UnidadOrganizacionalId != null)
                {
                    iniciativa.UnidadOrganizacional = unidadorganizacional
                                                      .Where(e => e.ClaveUnidad == iniciativa.UnidadOrganizacionalId)
                                                      .FirstOrDefault();
                }
                if (iniciativa.EmpresaId != null)
                {
                    iniciativa.Empresa = empresas
                                         .Where(e => e.EmpresaId == iniciativa.EmpresaId)
                                         .FirstOrDefault();
                }
            }

            return(iniciativas);
        }
        public async Task <IHttpActionResult> GetGerenteAutorizadorByIDITF(string id)
        {
            try
            {
                log.Info(new MDCSet(this.ControllerContext.RouteData));
                var itf = await dbITF.Get(id);

                UORepository unidad = new UORepository();
                var          fecha  = DateTime.Now;
                if (itf.FechaPublicacion != null)
                {
                    fecha = itf.FechaPublicacion.Value;
                }
                else
                {
                    if (itf.AnioElaboracion != null)
                    {
                        new DateTime(itf.AnioElaboracion.Value, 2, 2);
                    }
                }

                var uni = await unidad.UnidadByFecha(fecha, itf.ClaveUnidadOrganizacional);

                if (uni == null)
                {
                    uni = await unidad.UnidadByFecha(DateTime.Now, itf.ClaveUnidadOrganizacional);
                }


                return(Ok(uni));
            }
            catch (Exception e)
            {
                log.Error(new MDCSet(this.ControllerContext.RouteData), e);
                return(InternalServerError(e));
            }
        }
Пример #14
0
        /// <summary>
        /// Obtiene todos los proyectos con unidad organizacional y empresas respectivas
        /// </summary>
        /// <returns>Object[]</returns>
        public async Task <Object[]> GetTotalProyectos()
        {
            try
            {
                UORepository       uo  = new UORepository(_gen);
                EmpresasRepository emp = new EmpresasRepository(_cr);

                var proyectos = await _gen.dbSetProyectoGEN.Where(e => e.EmpresaId != null && subprogramas.subprogramas.Contains(e.SubPrograma)).AsNoTracking().ToListAsync();

                var      unidadesId = proyectos.Select(e => e.UnidadOrganizacionalId).ToList();
                Object[] lista      = new Object[proyectos.Count];

                IEnumerable <UnidadOrganizacional> unidadOrganizacional = await uo.GetAllCollectionMAX(unidadesId);

                IEnumerable <Empresa> empresas = await emp.GetEmpresas();

                foreach (var item in proyectos)
                {
                    lista[proyectos.IndexOf(item)] = new
                    {
                        cliente    = empresas.Where(e => e.EmpresaId == item.EmpresaId).Select(e => e.NombreEmpresa).FirstOrDefault(),
                        proyectoID = item.ProyectoId,
                        nombre     = item.Nombre,
                        monto      = item.Costo,
                        fInicio    = item.FechaInicio,
                        fFinal     = item.FechaFin,
                        gerencia   = unidadOrganizacional.Where(e => e.ClaveUnidad == item.UnidadOrganizacionalId).Select(e => e.NombreUnidad).FirstOrDefault()
                    };
                }
                return(lista);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #15
0
        /// <summary>
        /// Obtiene proyectos vigentes con unidad organizacional y empresa respectivos
        /// </summary>
        /// <returns>IEnumerable<Proyecto></returns>
        public async Task <IEnumerable <Proyecto> > GetProyectosVigentes()
        {
            DateTime           hoy          = DateTime.Now;
            UORepository       uo           = new UORepository(_gen);
            EmpresasRepository empresasrepo = new EmpresasRepository(_cr);

            var proyectos = await _gen.dbSetProyectoGEN
                            .Where(e => e.FechaFin > hoy && subprogramas.subprogramas.Contains(e.SubPrograma))
                            .Include(e => e.UnidadOrganizacionalEmpresas)
                            .AsNoTracking().ToListAsync();

            var listaunidadesid = proyectos.Select(e => e.UnidadOrganizacionalId).ToList();

            var listaempresasid = proyectos
                                  .Where(e => e.EmpresaId != null)
                                  .Select(e => e.EmpresaId).ToList();

            IEnumerable <Empresa> empresas = await empresasrepo.GetEmpresas();

            IEnumerable <UnidadOrganizacional> unidadorganizacional = await uo.GetAllCollectionMAX(listaunidadesid);

            foreach (var proyecto in proyectos)
            {
                if (proyecto.UnidadOrganizacionalId != null)
                {
                    proyecto.UnidadOrganizacional = unidadorganizacional.Where(e => e.ClaveUnidad == proyecto.UnidadOrganizacionalId).FirstOrDefault();
                }
                if (proyecto.EmpresaId != null)
                {
                    proyecto.Empresa = empresas.Where(e => e.EmpresaId == proyecto.EmpresaId).FirstOrDefault();
                }
            }


            return(proyectos.OrderByDescending(e => e.FechaInicio));
        }
Пример #16
0
        /// <summary>
        ///  Hace la configuracion para el envio de correos ()
        /// </summary>
        /// <param name="ToPersonas"> Lista de personas a la cual enviar correos</param>
        /// <param name="correo"> Objeto de tipo correo con la configuracion basica, es decir, como viene desde el front end</param>
        /// <param name="conf"> Configuracion default que se tiene para el envio de correos</param>
        /// <returns>true/false</returns>
        public async Task <Boolean> Send(List <Personas> ToPersonas, Correo correo, getCorreoConfig conf)
        {
            try
            {
                var ClaveCopiaEmpleadoSolicitud = correo.ClavePersona;
                var adminCR = ConfigurationManager.AppSettings["AdministradorCR"];
                var admins  = await _rolpersonaRepo.GetAllByIdRolCH(adminCR);

                //Tipos de Correos!!!!
                // 1) Correo de Notificacion de Solicitud a Administradores de CH
                // 2) Correo de Aprobacion/Rechazo de Solicitud
                // 3) Solicitar descarga de insumos de MT

                List <RolPersona> rolesPersona = new List <RolPersona>();  //Es una lista que se usa para enviar correos a personas que no sean rol 8 (administradores, gerentes, directores, etc)
                List <Personas>   personasList = new List <Personas>();
                Personas          to           = null;

                //List<Personas> personas = new List<Personas>();
                switch (correo.TipoCorreo)
                {
                case "1":
                    var adminCH = ConfigurationManager.AppSettings["AdministradorCH"];

                    if (!String.IsNullOrEmpty(correo.ClavePersona))
                    {
                        var personaParaSindicato = await _personaRepo.GetById(correo.ClavePersona);

                        correo.Empleado = personaParaSindicato.NombreCompleto;
                        var sindicato = ConfigurationManager.AppSettings["TipoSindicalizado"];
                        if (!String.IsNullOrEmpty(personaParaSindicato.TipoPersonalId))
                        {
                            if (personaParaSindicato.TipoPersonalId.Trim().Equals(sindicato))
                            {
                                adminCH = ConfigurationManager.AppSettings["AdministradorCHsindicato"];     //SE SUPLANTA AL AdministradorCH POR AdministradorCHsindicato
                            }
                        }
                    }

                    var Admin = await _rolpersonaRepo.GetAllByIdRolCH(adminCH);

                    rolesPersona = Admin.ToList();
                    break;

                case "2":
                    var Validar = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(Validar);
                    correo.Empleado = Validar.NombreCompleto;
                    if (correo.Descripcion5 != null && Boolean.Parse(correo.Descripcion5))
                    {
                        var roladminpi = ConfigurationManager.AppSettings["AdministradorPI"];
                        var adminPI    = await _rolpersonaRepo.GetAllByIdRolCH(roladminpi);

                        var c     = adminPI.Select(x => x.ClavePersona);
                        var lista = await _personaRepo.GetAllCollectionMAX(new HashSet <string>(c));

                        personasList.AddRange(lista);
                    }
                    correo.Descripcion5 = "";

                    break;

                case "3":
                    var SolicitarAcceso = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(SolicitarAcceso);
                    break;

                case "NotificacionGerenteviaAdmin":
                    var rol = await _rolpersonaRepo.GetByRolForsolicitud(correo.SeccionID);

                    var persona = await _personaRepo.GetByClave(rol.ClavePersona);

                    var resultado = await _personaRepo.GetResponsableByClaveUnidadWithoutStatus(persona.ClaveUnidad);

                    await _correoRepo.SendNotificacion(correo, resultado.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "SolicitudGerente":
                    //var SolicitarGerente = await _rolpersonaRepo.GetByRolForsolicitud(Convert.ToInt32(correo.Descripcion1));
                    var claveUnidad = await _personaRepo.GetByClave(correo.ClavePersona);

                    var result = await _personaRepo.GetResponsableByClaveUnidadWithoutStatus(claveUnidad.ClaveUnidad);

                    await _correoRepo.SendNotificacion(correo, result.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "SolicitudGerenteViaProyecto":
                    //var SolicitarGerente = await _rolpersonaRepo.GetByRolForsolicitud(Convert.ToInt32(correo.Descripcion1));
                    var solicitudgerente = await _personaRepo.GetResponsableByClaveUnidadWithoutStatus(correo.UnidadOrganizacionalId);

                    correo.TipoCorreo = "SolicitudGerente";

                    await _correoRepo.SendNotificacion(correo, solicitudgerente.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "solicitudDeRevisionITF":
                    break;

                case "NotificacionesGerente":

                    var claves = correo.ClavePersona.Split(',');
                    foreach (var item in claves)
                    {
                        var NG = await _personaRepo.GetByClave(item);

                        personasList.Add(NG);
                    }

                    break;

                case "NotificacionResultadoCP":
                    var notificacionCP = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(notificacionCP);
                    break;

                case "SolicitudCentroPosgrado":
                    var adminCP = ConfigurationManager.AppSettings["AdministradorCP"];
                    var AdminCP = await _rolpersonaRepo.GetAllByIdRolCH(adminCP);

                    rolesPersona = AdminCP.ToList();
                    break;

                case "AprobacionRechazoEnPublicacion":
                    break;

                case "CreateSolicitudAccesoITF":
                    to = await _personaRepo.GetByClaveWithoutStatus(correo.UnidadOrganizacional.ClaveResponsable);

                    ToPersonas.Add(to);
                    break;

                case "ApruebaRechazaGerenteITF":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "EnviaSolicituITFRevisionMT":
                    var roladminMT = ConfigurationManager.AppSettings["AdministradorMT"];
                    var adminMT    = await _rolpersonaRepo.GetAllByIdRolCH(roladminMT);

                    foreach (var z in adminMT)
                    {
                        ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(z.ClavePersona));
                    }


                    break;

                case "rechazoAccesoAITF":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "AprobacionAccesoAITF":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "NotificationStart":
                    //ToPersonas
                    break;

                case "accesoGEN":
                    to = await _personaRepo.GetResponsableByClaveUnidadWithoutStatus(correo.UnidadOrganizacionalId);

                    ToPersonas.Add(to);
                    break;

                case "AceptacionRechazoJefeUnidad":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioCreate":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificaAdmin":
                    var AdminCR  = ConfigurationManager.AppSettings["AdministradorCR"];
                    var AdminCRS = await _rolpersonaRepo.GetAllByIdRolCH(AdminCR);

                    foreach (var item in AdminCRS)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificaAdminAceptada":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificarAdmonRechazoPorInvestigador":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificarAdminPorResponsable":
                    var AdminCRPr = ConfigurationManager.AppSettings["AdministradorCR"];
                    var adminis   = await _rolpersonaRepo.GetAllByIdRolCH(AdminCRPr);

                    foreach (var item in adminis)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificarEspecialistaPorResponsable":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificaAdminRechazo":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "OportunidadNegocioNotificarme":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificar":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarAceptada":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarPorResponsable":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarPorEspecialista":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarEspecialitaAceptada":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarPorUnidad":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarEspecialista":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarUnidad":
                    var fechaActual = DateTime.Now;
                    var UO          = await _db.dbSetUnidadOrganizacional.AsNoTracking()
                                      .Where(x => x.ClaveResponsable.Equals(correo.ClavePersona) && x.Estado == 1 && x.FechaEfectiva == _db.dbSetUnidadOrganizacional.Where(
                                                 p => p.FechaEfectiva <= fechaActual &&
                                                 p.ClaveUnidad == x.ClaveUnidad
                                                 ).Max(e => e.FechaEfectiva))
                                      .FirstOrDefaultAsync();

                    if (UO != null)
                    {
                        var asstente = await _ctx.Asistente.AsNoTracking()
                                       .Where(x => x.ClaveUnidad.Equals(UO.ClaveUnidad) && x.FechaEfectiva == _ctx.Asistente.Where(
                                                  p => p.FechaEfectiva <= fechaActual &&
                                                  p.ClaveUnidad == x.ClaveUnidad
                                                  ).Max(e => e.FechaEfectiva))
                                       .FirstOrDefaultAsync();

                        if (asstente != null)
                        {
                            var corr = await _personaRepo.GetByClaveWithoutStatus(asstente.ClavePersona);

                            correo.Descripcion10 = corr.Correo;
                        }
                    }

                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarEmpleado":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioRechazo":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioAcepto":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioAsignarInvestigador":
                    var fechaActualON = DateTime.Now;
                    var UOON          = await _db.dbSetUnidadOrganizacional.AsNoTracking()
                                        .Where(x => x.ClaveResponsable.Equals(correo.ClavePersona) && x.Estado == 1 && x.FechaEfectiva == _db.dbSetUnidadOrganizacional.Where(
                                                   p => p.FechaEfectiva <= fechaActualON &&
                                                   p.ClaveUnidad == x.ClaveUnidad
                                                   ).Max(e => e.FechaEfectiva))
                                        .FirstOrDefaultAsync();

                    if (UOON != null)
                    {
                        var asstente = await _ctx.Asistente.AsNoTracking()
                                       .Where(x => x.ClaveUnidad.Equals(UOON.ClaveUnidad) && x.FechaEfectiva == _ctx.Asistente.Where(
                                                  p => p.FechaEfectiva <= fechaActualON &&
                                                  p.ClaveUnidad == x.ClaveUnidad
                                                  ).Max(e => e.FechaEfectiva))
                                       .FirstOrDefaultAsync();

                        if (asstente != null)
                        {
                            var corr = await _personaRepo.GetByClaveWithoutStatus(asstente.ClavePersona);

                            correo.NombreProyecto = corr.Correo;
                        }
                    }

                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarRechazoPorUnidad":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarRechazoPorInvestigador":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "OportunidadNegocioNotificarmeRechazoPorInvestigador":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarAdministrador":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "SeguimientoNotificarResponsable":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarEmpleado":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarEspecialista":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarEstadoEmpleado":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarEstadoResponsable":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "SeguimientoNotificarEstadoAdministrador":
                    foreach (var item in admins)
                    {
                        var person = await _personaRepo.GetByClaveWithoutStatus(item.ClavePersona);

                        ToPersonas.Add(person);
                    }
                    break;

                case "SeguimientoNotificarEstadoEspecialista":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "RecuperaContrasena":
                    ToPersonas.Add(await _personaRepo.GetByClaveWithoutStatus(correo.ClavePersona));
                    break;

                case "MailtoLinkedNetwork":
                    var personasRed = await _personaRepo.getRedPersonas(correo.ClavePersona, new List <String>(conf.subprogramasTecnicos.Split(',')));

                    personasList = new List <Personas>(personasRed);
                    break;

                case "SolicitudAdminGI":
                    var adminGI = ConfigurationManager.AppSettings["AdministradorGI"];
                    if (!String.IsNullOrEmpty(correo.ClavePersona))
                    {
                        var personaParaSindicato = await _personaRepo.GetById(correo.ClavePersona);

                        var sindicato = ConfigurationManager.AppSettings["TipoSindicalizado"];
                        if (!String.IsNullOrEmpty(personaParaSindicato.TipoPersonalId))
                        {
                            if (personaParaSindicato.TipoPersonalId.Trim().Equals(sindicato))
                            {
                                adminGI = ConfigurationManager.AppSettings["AdministradorCHsindicato"];     //SE SUPLANTA AL AdministradorCH POR AdministradorCHsindicato
                            }
                        }
                    }

                    var AdministradorGI = await _rolpersonaRepo.GetAllByIdRolCH(adminGI);

                    rolesPersona = AdministradorGI.ToList();
                    break;

                case "NotificacionEvaluadoresIdeaInnovadora":
                    await _correoRepo.SendNotificacion(correo, correo.Descripcion1, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "NotificacionEvaluadoresFI":
                    await _correoRepo.SendNotificacion(correo, correo.Descripcion1, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "RechazarAprobarEditarAdminGI":       //Casos en los que el Admin de GI valida/rechaza/regresa solicitudes a los usuarios
                    var Empleado = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(Empleado);
                    if (correo.ClavePersona != correo.Descripcion1)
                    {
                        var Principal = await _personaRepo.GetByClave(correo.Descripcion1);

                        personasList.Add(Principal);
                    }
                    break;

                case "SolicitudGerenteGI":
                    //En descripcion1 viene la unidad organizacional
                    UORepository unidadRepo = new UORepository();
                    var          unidad     = await unidadRepo.UnidadByFecha(DateTime.Now, correo.Descripcion1);

                    var gerente = unidad.Responsable;
                    ToPersonas.Add(gerente);
                    break;

                case "GINotificacionPeriodoAbierto":
                    UORepository uoDB        = new UORepository();
                    var          personasObj = await uoDB.PersonasResponsablesByGetAllUniques();

                    ToPersonas = new List <Personas>(personasObj);
                    break;

                case "AprobarRechazarGerenteGI":
                    var EmpleadoGI = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(EmpleadoGI);

                    break;

                case "AprobarRechazarGerenteGIPNE":
                    var EmpleadoGIPNE = await _personaRepo.GetByClave(correo.ClavePersona);

                    personasList.Add(EmpleadoGIPNE);

                    break;

                case "NotificarEvaluadores":
                    await _correoRepo.SendNotificacion(correo, correo.Descripcion1, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);

                    break;

                case "FoliosBusquedas":      //folio que se genera cuando se realiza una busqueda de informes tecnicos finales [hasta ahora solo es para ese caso]
                    if (!String.IsNullOrEmpty(correo.copiaMandosMedios))
                    {
                        var clavesPersonas = correo.copiaMandosMedios.Split(';');
                        foreach (var p in clavesPersonas)
                        {
                            var investigador = await new PersonasRepository().GetByClave(p);
                            ToPersonas.Add(investigador);
                            //await _correoRepo.SendNotificacion(correo, correos, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                        }
                    }
                    var empleado = await new PersonasRepository().GetByClave(correo.ClavePersona);
                    ToPersonas.Add(empleado);



                    break;

                default:
                    throw new Exception("Tipo de correo invalido");
                }

                string correos = "";
                ///////////////ADRIAN ENVIO DE ACUERDO A COLLECIONES:
                if (rolesPersona != null && rolesPersona.Count > 0)
                {
                    var c     = rolesPersona.Select(x => x.ClavePersona);
                    var lista = await _personaRepo.GetAllCollectionMAX(new HashSet <string>(c));

                    //var corrs= lista.Select(x => x.Correo);
                    var corrs = new HashSet <String>(lista.Select(x => x.Correo));
                    correos = string.Join(", ", corrs.ToArray());
                    await _correoRepo.SendNotificacion(correo, correos, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (personasList != null && personasList.Count > 0)       //Copia a los autores
                {
                    var c     = personasList.Select(x => x.ClavePersona); //De la lista de personas se obtienen sus correos
                    var lista = await _personaRepo.GetAllCollectionMAX(new HashSet <string>(c));

                    var corrs = new HashSet <String>(lista.Select(x => x.Correo));
                    correos = string.Join(", ", corrs.ToArray());  //Se agregan al objeto del correo para su posterior envio

                    //Envio de correos
                    await _correoRepo.SendNotificacion(correo, correos, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (ToPersonas != null)
                {
                    foreach (var per in ToPersonas)
                    {
                        await _correoRepo.SendNotificacion(per, correo, per.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                    }
                }
                //////////////////ALAN: SECCIÓN DE COPIAS
                if (correo.TipoCorreo == "1")
                {
                    var correoCopia = await _personaRepo.GetByClave(ClaveCopiaEmpleadoSolicitud);

                    correo.TipoCorreo = "CopiaCorreoUsuarioAdmin";

                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "SolicitudGerente" || correo.TipoCorreo == "SolicitudGerenteViaProyecto")
                {
                    var correoCopia = await _personaRepo.GetByClave(ClaveCopiaEmpleadoSolicitud);

                    correo.TipoCorreo = "CopiaCorreoUsuarioGerente";

                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "SolicitudCentroPosgrado") // Siguiendo la logica de Alan
                {
                    var correoCopia = await _personaRepo.GetByClave(ClaveCopiaEmpleadoSolicitud);

                    correo.TipoCorreo = "CopiaSolicitudCentroPosgrado";

                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "SolicitudAdminGI")
                {
                    var correoCopia = await _personaRepo.GetByClave(ClaveCopiaEmpleadoSolicitud);

                    correo.TipoCorreo = "CopiaCorreoUsuarioAdminGI";
                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "SolicitudGerenteGI")
                {
                    var correoCopia = await _personaRepo.GetByClave(ClaveCopiaEmpleadoSolicitud);

                    correo.TipoCorreo = "CopiaCorreoUsuarioGerenteGI";
                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "RechazarAprobarEditarAdminGI")
                {
                    var        adminGI        = ConfigurationManager.AppSettings["AdministradorGI"];
                    RolPersona adminGIPersona = await _rolpersonaRepo.GetByRolForsolicitud(Convert.ToInt32(adminGI));

                    var correoCopia = await _personaRepo.GetByClave(adminGIPersona.ClavePersona);

                    correo.TipoCorreo = "CopiaRechazarAprobarEditarAdminGI";
                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                if (correo.TipoCorreo == "AprobarRechazarGerenteGI") // Siguiendo la logica de Alan
                {
                    var correoCopia = await _personaRepo.GetByClave(correo.Descripcion1);

                    correo.TipoCorreo = "AprobarRechazarGerenteGI";
                    correo.Empleado   = correoCopia.NombreCompleto;

                    await _correoRepo.SendNotificacion(correo, correoCopia.Correo, conf.From, conf.Password, conf.Solicitudes, conf.Subject, conf.host, conf.port, conf.enableSsl, conf.FichaPersonal, conf.EncabezadoImagen, conf.PiePaginaImagen, conf.ServidorDireccion, conf.serverlocal, conf.suplantarCorreoCH, conf.suplantarCorreoCR, conf.suplantarCorreoMT, conf.suplenteCorreoCH, conf.suplenteCorreoCR, conf.suplenteCorreoMT, conf.vCopiaOcultaATecnicosSIGCO, conf.correoTecnicosSIGCO, conf.suplantarCorreoDA, conf.suplantarCorreoPA, conf.suplantarCorreoGI, conf.suplenteCorreoDA, conf.suplenteCorreoPA, conf.suplenteCorreoGI, conf.SolicitudesGI, conf.ideasInnovadoras, conf.suplantarCorreoCP, conf.suplenteCorreoCP);
                }
                //////////FIN de copias


                return(true);
            }
            catch (Exception ex) {
                return(false);
            }
        }
Пример #17
0
                                                       public async Task <List <ProyectosFF> > GetConvocatoria(int ConvocatoriaId, string ClaveUnidad, List <ProyectosFF> ProyectosFF)
                                                       {
                                                           // List<ProyectosFF> ProyectosFFSelect = new List<ProyectosFF>();

                                                           var ProyectoPC = new List <ProyectoPorConvocatoria>();

                                                           ProyectoPC = await(from ppc in _db.ProyectoPorConvocatoria
                                                                              where ppc.ConvocatoriaId == ConvocatoriaId
                                                                              select ppc)
                                                                        .Include(e => e.Proyecto)
                                                                        .Include(e => e.Convocatoria)
                                                                        .AsNoTracking()
                                                                        .ToListAsync();

                                                           //unidades organizacionales de los proyectos en la convocatoria
                                                           List <String> uos1 = new List <string>(ProyectoPC.Select(x => x.Proyecto.UnidadOrganizacionalId.Trim()));

                                                           //Unidades organizacionales de acuerdo a la UO seleccionada en el formulario
                                                           UORepository uo       = new UORepository(_dbGen);
                                                           var          unidades = await uo.GetByIdWithChildren(ClaveUnidad);

                                                           var unidSel = await uo.UnidadActualWithoutStatus(ClaveUnidad);

                                                           List <String> uos2 = null;

                                                           if (ClaveUnidad == "")
                                                           {
                                                               uos2 = uos1;
                                                           }
                                                           else
                                                           {
                                                               uos2 = new List <string>(unidades.Children.Select(x => x.ClaveUnidad));
                                                               uos2.Add(unidSel.ClaveUnidad.ToString());
                                                           }


                                                           var ProyectoPCSelect = new List <ProyectoPorConvocatoria>();

                                                           foreach (ProyectoPorConvocatoria ppc in ProyectoPC)
                                                           {
                                                               var unidadId = ppc.Proyecto.UnidadOrganizacionalId.Trim();
                                                               var vigencia = "Inactiva";
                                                               if (uos2.Contains(unidadId))
                                                               {
                                                                   ProyectosFF obj = new ProyectosFF();
                                                                   obj.NumProy      = ppc.ProyectoId;
                                                                   obj.NombreProy   = ppc.Proyecto.Nombre;
                                                                   obj.FInicioProy  = ppc.Proyecto.FechaInicio;
                                                                   obj.FTerminoProy = ppc.Proyecto.FechaFin;
                                                                   obj.MontoProy    = ppc.Proyecto.Costo;

                                                                   var unid = await uo.UnidadActualWithoutStatus(unidadId);

                                                                   obj.Claveunidad = unidadId;
                                                                   obj.UnidadProy  = unid.NombreUnidad;

                                                                   obj.FondoProgramaId = ppc.Convocatoria.FondoProgramaId;
                                                                   var fond = await(from nfond in _db.FondoPrograma
                                                                                    where nfond.FondoProgramaId == ppc.Convocatoria.FondoProgramaId
                                                                                    select nfond).FirstOrDefaultAsync();

                                                                   obj.NombreF = fond.NombreFP;
                                                                   obj.FuenteFinanciamientoId = fond.FuenteFinanciamientoId;

                                                                   var fuent = await(from nfue in _db.FuenteFinanciamiento
                                                                                     where nfue.FuenteFinanciamientoId == fond.FuenteFinanciamientoId
                                                                                     select nfue).FirstOrDefaultAsync();

                                                                   obj.NombreFF = fuent.NombreFF;
                                                                   //obj.TipoFuenteFinanciamientoId = fuent.TipoFuenteFinanciamientoId;

                                                                   obj.NombreTipoFF = await(from ntfue in _db.TipoFuenteFinanciamiento
                                                                                            //where ntfue.TipoFuenteFinanciamientoId == fuent.TipoFuenteFinanciamientoId
                                                                                            select ntfue.Nombre).FirstOrDefaultAsync();

                                                                   obj.ConvocatoriaId = ppc.ConvocatoriaId;
                                                                   obj.NombreC        = ppc.Convocatoria.NombreConvocatoria;

                                                                   if (ppc.Convocatoria.FechaTermino > DateTime.Now)
                                                                   {
                                                                       vigencia = "Activa";
                                                                   }

                                                                   obj.VigenciaC = vigencia;
                                                                   ProyectosFF.Add(obj);
                                                               }
                                                           }

                                                           return(ProyectosFF);
                                                       }
 public UnidadOrganizacionalController()
 {
     _personasrepository = new PersonasRepository();
     _repository         = new UORepository();
 }
Пример #19
0
        //public async Task<IEnumerable<LAproy>> OtrosMetodos(){ ... }
        public async Task <IEnumerable <InformeTecnicoFinal> > getData(DataServerSide ss, int EstadoITFFlujoId)
        {
            //EstadoITFFlujoId 4 is pubicado
            try
            {
                var v = (from a in
                         _db.dbSetInformeTFs
                         .Include(x => x.Proyecto.Empresa)
                         .Include(x => x.Proyecto.UnidadOrganizacionalEmpresas)
                         .Include(x => x.LActe)
                         .Include(x => x.LAcap)
                         .Include(x => x.LAproy)
                         .Where(x => x.EstadoITFFlujoId >= EstadoITFFlujoId &&
                                (x.LAproyId != null && x.LAproyId > 0))
                         select a);
                ss.recordsTotal = v.Count();
                //search


                List <datosCliente> clientes = new List <datosCliente>();



                foreach (var obj in v)
                {
                    if (obj.Proyecto != null)
                    {
                        if (obj.Proyecto.Empresa != null)
                        {
                            string a = obj.Proyecto.Empresa.NombreEmpresa;


                            if (obj.Proyecto.UnidadOrganizacionalEmpresas != null)
                            {
                                a = a + " " + obj.Proyecto.UnidadOrganizacionalEmpresas.NombreUnidad;
                            }

                            a = a.ToLower();

                            string caduax = "";

                            caduax = a.Replace("á", "a");
                            caduax = caduax.Replace("é", "e");
                            caduax = caduax.Replace("í", "i");
                            caduax = caduax.Replace("ó", "o");
                            caduax = caduax.Replace("ú", "u");
                            caduax = caduax.Replace("\r\n", " ");

                            datosCliente itemCliente = new datosCliente(obj.LAproyId.ToString(), caduax);

                            clientes.Add(itemCliente);
                        }
                    }
                }


                if (!string.IsNullOrEmpty(ss.ClaveUnidad))
                {
                    UORepository uo  = new UORepository();
                    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);
                        var x2 = await uo.GetAllCollectionMAX(clavesUnidad);
                    }
                    else
                    {
                        clavesUnidad = new HashSet <String>();
                        clavesUnidad.Add(ss.ClaveUnidad);
                    }

                    v = v.Where(e => clavesUnidad.Contains(e.Proyecto.UnidadOrganizacionalId));
                }
                if (!String.IsNullOrEmpty(ss.searchValue))
                {
                    var listaPalabrasClave = await GetPalabrasClave(ss.searchValue);

                    var proyecto = await GetJefeProyectoProyectoID(ss.searchValue);


                    List <int?> idSeleccionados = new List <int?>();

                    foreach (var elemento in clientes)
                    {
                        string cadenabusqueda = elemento.nombreDato;



                        if (cadenabusqueda.IndexOf(ss.searchValue) > 0)
                        {
                            int valor = int.Parse(elemento.idDato);
                            idSeleccionados.Add(valor);
                        }
                    }

                    v = v.Where(e => listaPalabrasClave.Contains(e.LAproyId) || proyecto.Contains(e.LAproyId) || idSeleccionados.Contains(e.LAproyId));
                }

                if (!String.IsNullOrEmpty(ss.palabras))
                {
                    var pal = ss.palabras.Split(' ');
                    //foreach (var p in pal)
                    //  {

                    var listaPalabrasClave = await GetPalabrasClave(ss.palabras);

                    var listaInsumos = await GetInsumos(ss.palabras);

                    var listaEquipo = await GetEquipo(ss.palabras);

                    var listaGestion = await GetGestion(ss.palabras);

                    var listaCumplimiento = await GetCumplimiento(ss.palabras);


                    v = v.Where(e => listaPalabrasClave.Contains(e.LAproyId) || listaInsumos.Contains(e.LAproyId) || listaEquipo.Contains(e.LAproyId) || listaGestion.Contains(e.LAproyId) || listaCumplimiento.Contains(e.LAproyId));
                    //}
                }
                if (!String.IsNullOrEmpty(ss.proyectoId))
                {
                    v = v.Where(e => e.Proyecto.ProyectoId.Equals(ss.proyectoId));
                }
                if (!String.IsNullOrEmpty(ss.EmpresaId))
                {
                    v = v.Where(e => e.Proyecto.EmpresaId.ToString().Equals(ss.EmpresaId));
                }
                if (!String.IsNullOrEmpty(ss.NumjefeProyecto))
                {
                    v = v.Where(e => e.Proyecto.NumjefeProyecto.Equals(ss.NumjefeProyecto));
                }
                //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();

                return(entities);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }
Пример #20
0
        public async Task <IEnumerable <Insumos> > getData(DataServerSide ss)
        {
            try
            {
                int EstadoITFFlujoId = 4;
                var v = (from a in
                         _db.dbSetInsumos
                         .Include(x => x.InformeTecnicoFinal.Proyecto)
                         .Include(x => x.TipoAcceso)
                         .Include(x => x.TipoInsumo)
                         .Where(x => x.InformeTecnicoFinal.EstadoITFFlujoId == EstadoITFFlujoId)
                         select a);
                ss.recordsTotal = v.Count();


                //search
                if (!string.IsNullOrEmpty(ss.ClaveUnidad))
                {
                    UORepository uo  = new UORepository(_dbGen);
                    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);
                        var x2 = await uo.GetAllCollectionMAX(clavesUnidad);
                    }
                    else
                    {
                        clavesUnidad = new HashSet <String>();
                        clavesUnidad.Add(ss.ClaveUnidad);
                    }

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



                //BUSCAR POR
                if (!String.IsNullOrEmpty(ss.palabras))
                {
                    var listaDA0 = await GetPKInsumo(ss.palabras);

                    var listaDA2 = await GetPKInsumoUbicacion(ss.palabras);

                    var listaDA3 = await GetPKInsumoResponsable(ss.palabras);



                    v = v.Where(e =>
                                listaDA0.Contains(e.InsumosId) ||
                                listaDA2.Contains(e.InsumosId) ||
                                listaDA3.Contains(e.InsumosId)
                                );
                }


                if (!String.IsNullOrEmpty(ss.searchValue))
                {
                    var p = ss.searchValue;


                    var listaDA0 = await GetPKInsumo(ss.searchValue);

                    var listaDA2 = await GetPKInsumoUbicacion(ss.searchValue);

                    var listaDA3 = await GetPKInsumoResponsable(ss.searchValue);

                    var tipoInsumo = await GetTipoInsumo(ss.searchValue);



                    v = v.Where(e => listaDA0.Contains(e.InsumosId) ||
                                listaDA3.Contains(e.InsumosId) ||
                                listaDA2.Contains(e.InsumosId)

                                || tipoInsumo.Contains(e.TipoIns)
                                );
                }



                if (!String.IsNullOrEmpty(ss.proyectoId))
                {
                    var listaDA0 = await GetDAProyecto(ss.proyectoId);

                    v = v.Where(e => listaDA0.Contains(e.InformeTecnicoFinalId));
                }


                //TIPO DE INSUMO
                if (!String.IsNullOrEmpty(ss.Tipo))
                {
                    var listaDA0 = await GetTipoInsumoID(ss.Tipo);

                    v = v.Where(e => listaDA0.Contains(e.TipoIns));
                }


                if (!String.IsNullOrEmpty(ss.NumjefeProyecto))
                {
                    var listaDA0 = await GetJefeProyecto(ss.NumjefeProyecto);

                    v = v.Where(e => listaDA0.Contains(e.InformeTecnicoFinalId));
                }
                //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();

                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);
            }
        }