public ActionResult DeleteConfirmed(long id)
        {
            BusquedaUsuarioPostulante busquedaUsuarioPostulante = busquedaService.GetById(id);

            busquedaService.RemoveEntity(busquedaUsuarioPostulante);
            return(RedirectToAction("Index"));
        }
 public ActionResult Edit([Bind(Include = "Id,SueldoMinimo,SueldoMinimoPrioridad,TipoRelacionDeTrabajo,TipoRelacionDeTrabajoPrioridad,HorasTrabajo,HorasTrabajoPrioridad")] BusquedaUsuarioPostulante busquedaUsuarioPostulante)
 {
     if (ModelState.IsValid)
     {
         busquedaService.UpdateEntity(busquedaUsuarioPostulante);
         return(RedirectToAction("Index", "Home"));
     }
     return(View(busquedaUsuarioPostulante));
 }
        // GET: BusquedaUsuarioPostulantes/Edit/5
        public ActionResult Edit()
        {
            string                    userid  = this.User.Identity.GetUserId();
            UsuarioEmpleado           usuario = usuariosService.GetAll().FirstOrDefault(x => x.Id == userid);
            BusquedaUsuarioPostulante busquedaUsuarioPostulante = usuario.Busqueda;

            if (busquedaUsuarioPostulante == null)
            {
                return(RedirectToAction("Create"));
            }
            return(View(busquedaUsuarioPostulante));
        }
        // GET: BusquedaUsuarioPostulantes/Delete/5
        public ActionResult Delete(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BusquedaUsuarioPostulante busquedaUsuarioPostulante = db.BusquedaUsuarioPostulantes.Find(id);

            if (busquedaUsuarioPostulante == null)
            {
                return(HttpNotFound());
            }
            return(View(busquedaUsuarioPostulante));
        }
        public ActionResult Create([Bind(Include = "Id,SueldoMinimo,SueldoMinimoPrioridad,TipoRelacionDeTrabajo,TipoRelacionDeTrabajoPrioridad,HorasTrabajo,HorasTrabajoPrioridad")] BusquedaUsuarioPostulante busquedaUsuarioPostulante)
        {
            if (ModelState.IsValid)
            {
                string          userId  = this.User.Identity.GetUserId();
                UsuarioEmpleado usuario = usuariosService.GetAll().FirstOrDefault(x => x.Id == userId);
                usuario.Busqueda = busquedaUsuarioPostulante;
                usuariosService.UpdateEntity(usuario);
                //busquedaService.AddEntity(busquedaUsuarioPostulante);
                return(RedirectToAction("Index", "Home"));
            }

            return(View(busquedaUsuarioPostulante));
        }
        // GET: BusquedaUsuarioPostulantes/Details/5
        public ActionResult Details(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            BusquedaUsuarioPostulante busquedaUsuarioPostulante = busquedaService.GetById(id.Value);

            if (busquedaUsuarioPostulante == null)
            {
                return(HttpNotFound());
            }
            return(View(busquedaUsuarioPostulante));
        }
        /// <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);
        }