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