Exemplo n.º 1
0
        //public CalculadorDePorcentaje(UsuarioEmpleado usuarioEmpleado)
        //{
        //    this.Empleado = usuarioEmpleado;
        //}
        //private void CalcularPuntajeMaximo(Aviso aviso)
        //{
        //    int puntajeMaximo = 0;
        //    foreach(Tag tag in aviso.TagsBuscados)
        //    {
        //        //PuntajeMaximo += (int)aviso.TagsBuscadosPrioridad;
        //    }
        //    this.PuntajeMaximo = puntajeMaximo;
        //}
        public Coincidencia GenerarCoincidencia(UsuarioEmpleado empleado)
        {
            int          PuntajeEmpleado = 0;
            Coincidencia coincidencia;

            if (empleado.Aptitud != null && Aviso.AptitudesBuscadas != null)
            {
                foreach (AptitudPorAviso aptitudAviso in Aviso.AptitudesBuscadas)
                {
                    int i = 0;
                    while (i < empleado.Aptitud.Count && aptitudAviso.Aptitud.Id != empleado.Aptitud[i].Id)
                    {
                        i++;
                    }
                    if (i != empleado.Aptitud.Count)
                    {
                        PuntajeEmpleado += (int)aptitudAviso.Prioridad;
                    }
                }
                coincidencia = new Coincidencia((float)Math.Round((float)PuntajeEmpleado / (float)PuntajeMaximo * 100), empleado, Aviso);
            }
            else
            {
                coincidencia = null;
            }
            return(coincidencia);
        }
        public List <Coincidencia> GenerarListadoCoincidencias(Aviso avisoOrigen, IQueryable <UsuarioEmpleado> usuariosEmpleado)
        {
            //Inicialización
            List <Coincidencia>         listCoincidencias      = new List <Coincidencia>();
            CalculadorDePorcentajeAviso calculadorDePorcentaje = new CalculadorDePorcentajeAviso(avisoOrigen);

            //Se filtran todos los empleados que cumplan con los parámetros excluyentes
            List <UsuarioEmpleado> listCandidatos = usuariosEmpleado.Where(usEmp =>
                                                                           usEmp.Busqueda_Id.HasValue &&
                                                                           (avisoOrigen.HorasTrabajoPrioridad == Prioridad.Excluyente ? avisoOrigen.HorasTrabajo == usEmp.Busqueda.HorasTrabajo : true) &&
                                                                           (avisoOrigen.SueldoOfrecidoPrioridad == Prioridad.Excluyente ? avisoOrigen.SueldoOfrecido >= usEmp.Busqueda.SueldoMinimo : true) &&
                                                                           (avisoOrigen.TipoRelacionDeTrabajoPrioridad == Prioridad.Excluyente ? avisoOrigen.TipoRelacionDeTrabajo == usEmp.Busqueda.TipoRelacionDeTrabajo : true)
                                                                           ).ToList();

            listCandidatos = listCandidatos.Where(usEmp =>
                                                  avisoOrigen.AptitudesBuscadas.Where(x => x.Prioridad == Prioridad.Excluyente).Select(x => x.Aptitud).Intersect(usEmp.Aptitud).Count() == avisoOrigen.AptitudesBuscadas.Where(x => x.Prioridad == Prioridad.Excluyente).Count() &&
                                                  !avisoOrigen.UsuariosEmpleadoAprobados.Any(aviso => aviso.Id == usEmp.Id) &&
                                                  !avisoOrigen.UsuariosEmpleadoDesaprobados.Any(aviso => aviso.Id == usEmp.Id)
                                                  ).ToList();

            //Se generan las coincidencias
            foreach (var empleado in listCandidatos)
            {
                Coincidencia coincidencia = calculadorDePorcentaje.GenerarCoincidencia(empleado);
                listCoincidencias.Add(coincidencia);
            }

            //Se ordenan las coincidencias
            listCoincidencias = listCoincidencias.OrderByDescending(x => x.Porcentaje).ToList();

            return(listCoincidencias);
        }
        /// <summary>
        /// Inicia el procesado de la informacion
        /// </summary>
        public void Procesar()
        {
            XDocument doc = XDocument.Load(ruta);
            try
            {

                foreach (XElement accion in doc.Element("Acciones").Elements())
                {
                    string titulo =accion.Attribute("Titulo").Value;

                    int indice = BuscarEnLista(titulo);

                    if (indice == -1)
                    {
                        Coincidencia c = new Coincidencia();
                        c.Titulo = titulo;
                        c.NumeroApariciones = 1;
                        Resultados.Add(c);
                    }
                    else
                    {
                        Resultados.ElementAt(indice).NumeroApariciones++;
                    }
                }
            }
            catch { /*..Ignorar errores..*/  }
            finally
            {
                doc = null;
                GC.Collect();
            }
        }
        /// <summary>
        /// Genera listado de coincidencias desde una instancia de un Aviso
        /// </summary>
        /// <param name="avisoOrigen"></param>
        /// <param name="usuariosEmpleado"></param>
        /// <returns>Listado de coincidencias</returns>
        ///
        public List <Coincidencia> GenerarListadoCoincidencias(Aviso avisoOrigen, List <UsuarioEmpleado> listCandidatos)
        {
            //Inicialización
            List <Coincidencia>         listCoincidencias      = new List <Coincidencia>();
            CalculadorDePorcentajeAviso calculadorDePorcentaje = new CalculadorDePorcentajeAviso(avisoOrigen);

            //Se generan las coincidencias
            foreach (var empleado in listCandidatos)
            {
                Coincidencia coincidencia = calculadorDePorcentaje.GenerarCoincidencia(empleado);
                listCoincidencias.Add(coincidencia);
            }

            //Se ordenan las coincidencias
            listCoincidencias = listCoincidencias.OrderByDescending(x => x.Porcentaje).ToList();

            return(listCoincidencias);
        }
        public static Coincidencia BuscarCoincidencias(Estado ignorarNombres, Estado coincidirPeso, Estado coincidirBytes, Archivo archivo, Archivo archivo2)
        {
            var coincidencia = new Coincidencia();

            // Si la ubicacion es la misma, es el mismo archivo
            if (archivo.Ubicacion == archivo2.Ubicacion)
            {
                return(null);
            }

            if (ignorarNombres == Estado.Deshabilitado)
            {
                if (archivo.Nombre != archivo2.Nombre)
                {
                    return(null);
                }

                coincidencia.CoincideNombre = true;
            }

            if (coincidirPeso == Estado.Habilitado)
            {
                if (archivo.Peso != archivo2.Peso)
                {
                    return(null);
                }

                coincidencia.CoincidePeso = true;
            }

            if (coincidirBytes == Estado.Habilitado)
            {
                //Si los bytes no coinciden entonces no son iguales
                if (!BuscarCoinicidenciaEnBytes(archivo, archivo2))
                {
                    return(null);
                }

                coincidencia.CoincideBytes = true;
            }

            return(coincidencia);
        }
        /// <summary>
        /// Genera listado de coincidencias desde una instancia de un UsuarioEmpleadoOrigen
        /// </summary>
        /// <param name="usuarioEmpleadoOrigen"></param>
        /// <param name="usuariosEmpleado"></param>
        /// <returns>Listado de coincidencias</returns>
        public List <Coincidencia> GenerarListadoCoincidencias(UsuarioEmpleado usuarioEmpleadoOrigen, IQueryable <Aviso> avisos)
        {
            List <Coincidencia>       listCoincidencias = new List <Coincidencia>();
            BusquedaUsuarioPostulante busqueda          = usuarioEmpleadoOrigen.Busqueda;

            if (busqueda != null)
            {
                //Inicialización
                DateTime fechaActual = DateTime.Now;
                CalculadorDePorcentajeEmpleado calculadorDePorcentaje = new CalculadorDePorcentajeEmpleado(usuarioEmpleadoOrigen);
                List <Aviso> avisosAprobados    = usuarioEmpleadoOrigen.AvisosAprobados;
                List <Aviso> avisosDesaprobados = usuarioEmpleadoOrigen.AvisosDesaprobados;

                //Se filtran todos los avisos que cumplan con los parámetros excluyentes
                List <Aviso> listCandidatos = avisos.Where(aviso =>
                                                           aviso.FechaInicio <= fechaActual &&
                                                           (aviso.FechaFin.HasValue ? aviso.FechaFin >= fechaActual : true) &&
                                                           (busqueda.HorasTrabajoPrioridad == Prioridad.Excluyente ? busqueda.HorasTrabajo == aviso.HorasTrabajo : true) &&
                                                           (busqueda.SueldoMinimoPrioridad == Prioridad.Excluyente ? busqueda.SueldoMinimo <= aviso.SueldoOfrecido : true) &&
                                                           (busqueda.TipoRelacionDeTrabajoPrioridad == Prioridad.Excluyente ? busqueda.TipoRelacionDeTrabajo == aviso.TipoRelacionDeTrabajo : true))
                                              .ToList();
                listCandidatos = listCandidatos.Where(aviso =>
                                                      !avisosAprobados.Any(avisoAprobado => avisoAprobado.Id == aviso.Id) &&
                                                      !avisosDesaprobados.Any(avisoDesaprobado => avisoDesaprobado.Id == aviso.Id) &&
                                                      aviso.AptitudesBuscadas.Where(x => x.Prioridad == Prioridad.Excluyente).Select(x => x.Aptitud).Intersect(usuarioEmpleadoOrigen.Aptitud).Count() == aviso.AptitudesBuscadas.Where(x => x.Prioridad == Prioridad.Excluyente).Count())
                                 .ToList();

                //Se generan las coincidencias
                foreach (var aviso in listCandidatos)
                {
                    Coincidencia coincidencia = calculadorDePorcentaje.GenerarCoincidencia(aviso);
                    listCoincidencias.Add(coincidencia);
                }

                //Se ordenan las coincidencias
                listCoincidencias = listCoincidencias.OrderByDescending(x => x.Porcentaje).ToList();
            }
            return(listCoincidencias);
        }