From 55d9f7f36dbe465be6488499f3fea3f87ed2ab0e Mon Sep 17 00:00:00 2001 From: willgonzz Date: Fri, 12 Nov 2021 09:29:44 -0300 Subject: [PATCH] Estados y comentariosrrhh para postulante --- curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java | 12 ++++++++++-- curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulante.java | 14 ++++++++++++++ curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulanteConverter.java | 35 +++++++++++++++++++++++++++++++++++ curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java | 20 ++++++++++++++++++++ curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java | 24 ++++++++++++++++++++++-- curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp | 33 +++++++++++++++++++++++++++++++-- curriculumsearch/src/main/webapp/jsp/postulantes.jsp | 11 ++++++++++- 8 files changed, 206 insertions(+), 55 deletions(-) create mode 100644 curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulante.java create mode 100644 curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulanteConverter.java diff --git a/curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java b/curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java index 50f80c0..f8613c7 100644 --- a/curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java +++ b/curriculumsearch/src/main/java/com/roshka/DTO/PostulanteListaDTO.java @@ -3,6 +3,7 @@ package com.roshka.DTO; import java.util.List; import com.roshka.modelo.Disponibilidad; +import com.roshka.modelo.EstadoPostulante; import com.roshka.modelo.PostulanteTecnologia; public class PostulanteListaDTO { @@ -13,8 +14,9 @@ public class PostulanteListaDTO { private Long nivelIngles; private Long experienciaMeses; private List tecnologias; + private EstadoPostulante estado; public PostulanteListaDTO(Long id, String nombre, String apellido, Disponibilidad disponibilidad, - Long nivelIngles, Long experienciaMeses, List tecnologias) { + Long nivelIngles, Long experienciaMeses, List tecnologias,EstadoPostulante estado) { this.id = id; this.nombre = nombre; this.apellido = apellido; @@ -22,6 +24,7 @@ public class PostulanteListaDTO { this.nivelIngles = nivelIngles; this.experienciaMeses = experienciaMeses; this.tecnologias = tecnologias; + this.estado=estado; } public Long getId() { return id; @@ -65,7 +68,12 @@ public class PostulanteListaDTO { public void setTecnologias(List tecnologias) { this.tecnologias = tecnologias; } - + public EstadoPostulante getEstado(){ + return estado; + } + public void setEstado(EstadoPostulante estado){ + this.estado=estado; + } } diff --git a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java index 0398649..8182d80 100644 --- a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java +++ b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java @@ -14,6 +14,7 @@ import com.roshka.modelo.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.roshka.modelo.Disponibilidad; +import com.roshka.modelo.EstadoPostulante; import com.roshka.modelo.EstadoCivil; import com.roshka.modelo.Nacionalidad; import com.roshka.modelo.Postulante; @@ -42,6 +43,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; @@ -90,6 +92,7 @@ public class PostulanteController { public String postulantes(Model model, @RequestParam(required = false)Long tecId, @RequestParam(required = false)String nombre, + @RequestParam(required = false)EstadoPostulante estado, @RequestParam(required = false)Disponibilidad dispo, @RequestParam(required = false)Long lvlEng, @RequestParam(required = false)Long lvlTec, @@ -103,7 +106,8 @@ public class PostulanteController { model.addAttribute("tecnologias", tecRepo.findAll()); model.addAttribute("disponibilidades", Disponibilidad.values()); model.addAttribute("institucionesEducativas", institucionRepository.findAll()); - Page postulantesPag = post.postulantesMultiFiltro(nombre == null || nombre.trim().isEmpty() ? new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"), dispo, lvlEng, lvlTec, tecId, instId,cargoId,page); + model.addAttribute("estadoP", EstadoPostulante.values()); + Page postulantesPag = post.postulantesMultiFiltro(nombre == null || nombre.trim().isEmpty() ? new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"),dispo, lvlEng, lvlTec, tecId, instId,cargoId,page,estado); List postulantes = postulantesPag.getContent(); List postulantesDTO = new ArrayList<>(); @@ -115,14 +119,14 @@ public class PostulanteController { expTotal += Helper.getMonthsDifference(experiencia.getFechaDesde(), experiencia.getFechaHasta()); } if(expInMonths != null && expInMonths > expTotal) continue; - postulantesDTO.add(new PostulanteListaDTO(postulante.getId(), postulante.getNombre(), postulante.getApellido(), postulante.getDisponibilidad(), postulante.getNivelIngles(), expTotal, postulante.getTecnologias())); + postulantesDTO.add(new PostulanteListaDTO(postulante.getId(), postulante.getNombre(), postulante.getApellido(), postulante.getDisponibilidad(), postulante.getNivelIngles(), expTotal, postulante.getTecnologias(),postulante.getEstadoPostulante())); } model.addAttribute("pages", postulantesPag.getTotalPages()); model.addAttribute("postulantes", postulantesDTO); return "postulantes"; } - + @RequestMapping("/postulante") public String getFormPostulante(Model model){ model.addAttribute("tecnologias", tecRepo.findAll()); @@ -140,10 +144,10 @@ public class PostulanteController { er.printStackTrace(); } model.addAttribute("departamentos", depRepo.findAll()); - + return "postulante-form"; } - + @PostMapping(value = "/postulante",consumes = "application/json") public String guardarPostulante(@RequestBody Postulante postulante){ //Codigo encargado de modificar postulacion si se envia mismo CI @@ -155,31 +159,31 @@ public class PostulanteController { postulante.setId(postulantex.getId()); } postulante.getTecnologias().stream().filter( - tec -> tec.getTecnologia().getId() != 0 + tec -> tec.getTecnologia().getId() != 0 ).forEach( - tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId())) - ); - /* for (int i = 0; i < postulante.getPostulaciones().size(); i++) { - postulante.getPostulaciones().set(i, cargoRepo.getById(postulante.getPostulaciones().get(i).getId())); - } - */ - - for(Estudio estudio: postulante.getEstudios()){ - String nombreIns = ""; - nombreIns = estudio.getInstitucion().getNombre().toLowerCase(); - Institucion institucion = institucionRepository.findByNombre(nombreIns); - if(institucion==null){ - institucionRepository.save(estudio.getInstitucion()); - }else{ - estudio.setInstitucion(institucion); + tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId())) + ); + /* for (int i = 0; i < postulante.getPostulaciones().size(); i++) { + postulante.getPostulaciones().set(i, cargoRepo.getById(postulante.getPostulaciones().get(i).getId())); + } + */ + + for(Estudio estudio: postulante.getEstudios()){ + String nombreIns = ""; + nombreIns = estudio.getInstitucion().getNombre().toLowerCase(); + Institucion institucion = institucionRepository.findByNombre(nombreIns); + if(institucion==null){ + institucionRepository.save(estudio.getInstitucion()); + }else{ + estudio.setInstitucion(institucion); + } + } + post.save(postulante); + return "redirect:/postulacion-correcta"; } - } - post.save(postulante); - return "redirect:/postulacion-correcta"; - } - @GetMapping("/postulacion-correcta") - public String successPostulation(Model model){ + @GetMapping("/postulacion-correcta") + public String successPostulation(Model model){ model.addAttribute("mensaje1", "Tu informacion se ha recibido correctamente!"); model.addAttribute("mensaje2", " espera por que nos pongamos en contacto!"); return "exitoRegistro"; @@ -188,26 +192,38 @@ public class PostulanteController { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler({MethodArgumentNotValidException.class}) public ResponseEntity handleValidationExceptions( - MethodArgumentNotValidException ex) { + MethodArgumentNotValidException ex) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) .body(ex.getMessage()); - } - - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({ConstraintViolationException.class}) - public ResponseEntity handleValidationExceptions2( - ConstraintViolationException ex) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(ex.getMessage()); - } - - - - @GetMapping({"/postulante/{postulanteId}"}) - public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) { - Postulante p = post.findById(postulanteId).orElse(null); - model.addAttribute("postulante",p); - return "detallepostulante"; - - } - } + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({ConstraintViolationException.class}) + public ResponseEntity handleValidationExceptions2( + ConstraintViolationException ex) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(ex.getMessage()); + } + + + + @GetMapping({"/postulante/{postulanteId}"}) + public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) { + Postulante p = post.findById(postulanteId).orElse(null); + model.addAttribute("postulante",p); + model.addAttribute("estadoP", EstadoPostulante.values()); + return "detallepostulante"; + + } + @PostMapping({"/postulante/{postulanteId}"}) + public String setPostulanteEstado(@ModelAttribute Postulante postulante, BindingResult result, @PathVariable("postulanteId") Long postulanteId) { + //post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(),postulante.getComentarioRRHH(), postulante.getId()); + Postulante postulanteVd = post.getById(postulanteId); + postulanteVd.setEstadoPostulante(postulante.getEstadoPostulante()); + postulanteVd.setComentarioRRHH(postulante.getComentarioRRHH()); + post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(), postulante.getComentarioRRHH(), postulanteId); + //post.save(postulanteVd); + return "redirect:/postulante/"+postulanteId; + } + } + \ No newline at end of file diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulante.java b/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulante.java new file mode 100644 index 0000000..04983e6 --- /dev/null +++ b/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulante.java @@ -0,0 +1,14 @@ +package com.roshka.modelo; + +public enum EstadoPostulante { + NUEVO("Nuevo"), CONTACTADO("Contactado"), RECHAZADO("Rechazado"), CONTRADADO("Contradado"), VOLVERLLAMAR ("Volver a llamar"); + private final String estado; + + EstadoPostulante(String estado){ + this.estado=estado; + } + + public String getEstado(){ + return this.estado; + } +} diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulanteConverter.java b/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulanteConverter.java new file mode 100644 index 0000000..b2b550d --- /dev/null +++ b/curriculumsearch/src/main/java/com/roshka/modelo/EstadoPostulanteConverter.java @@ -0,0 +1,35 @@ +package com.roshka.modelo; + +import java.util.Arrays; + +import javax.persistence.AttributeConverter; +import javax.persistence.Converter; + +@Converter(autoApply = true) +public class EstadoPostulanteConverter implements AttributeConverter, org.springframework.core.convert.converter.Converter { + + @Override + public String convertToDatabaseColumn(EstadoPostulante modalidad) { + if (modalidad == null) { + return null; + } + return modalidad.getEstado(); + } + + @Override + public EstadoPostulante convertToEntityAttribute(String estado) { + if (estado == null) { + return null; + } + + return Arrays.stream(EstadoPostulante.values()) + .filter(c -> c.getEstado().equals(estado)) + .findFirst() + .orElseThrow(IllegalArgumentException::new); + } + + @Override + public EstadoPostulante convert(String arg0) { + return convertToEntityAttribute(arg0); + } +} diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java b/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java index 1d99bb5..92b61cd 100644 --- a/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java +++ b/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java @@ -72,6 +72,13 @@ public class Postulante { @Column(name="estado_civil") @NotNull private EstadoCivil estadoCivil; + + @Column(name="estado_postulante") + @NotNull + private EstadoPostulante estadoPostulante=EstadoPostulante.NUEVO; + @Column(name="comentario_rrhh") + private String comentarioRRHH; + @Column(name="nacionalidad", length = 2) @NotNull @@ -271,4 +278,17 @@ public class Postulante { public List getReferencias() { return referencias; } + public EstadoPostulante getEstadoPostulante() { + return this.estadoPostulante; + } + + public void setEstadoPostulante(EstadoPostulante estadoPostulante) { + this.estadoPostulante = estadoPostulante; + } + public String getComentarioRRHH(){ + return comentarioRRHH; + } + public void setComentarioRRHH(String comentarioRRHH){ + this.comentarioRRHH=comentarioRRHH; + } } diff --git a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java index b10de4c..539d072 100644 --- a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java +++ b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java @@ -2,13 +2,17 @@ package com.roshka.repositorio; import java.util.List; +import javax.transaction.Transactional; + import org.hibernate.jpa.TypedParameterValue; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import com.roshka.modelo.Disponibilidad; +import com.roshka.modelo.EstadoPostulante; import com.roshka.modelo.Postulante; @@ -55,7 +59,23 @@ public interface PostulanteRepository extends JpaRepository { "and (pt.nivel >= ?4 or ?4 is null) "+ "and (pt.tecnologia.id = ?5 or ?5 is null) "+ " and (e.institucion.id = ?6 or ?6 is null ) "+ - " and (conv.cargoId = ?7 or ?7 is null ) ") - public Page postulantesMultiFiltro(TypedParameterValue nombre, Disponibilidad disponibilidad, Long nivelInges, Long nivel, Long tecnoId, Long instId,Long cargoId, Pageable pageable); + " and (conv.cargoId = ?7 or ?7 is null ) "+ + "and (p.estadoPostulante = ?8 or ?8 is null) " ) + public Page postulantesMultiFiltro(TypedParameterValue nombre, Disponibilidad disponibilidad, Long nivelInges, Long nivel, Long tecnoId, Long instId,Long cargoId, Pageable pageable, EstadoPostulante estado); + + @Transactional + @Modifying + @Query("UPDATE Postulante p SET p.estadoPostulante = ?1 , p.comentarioRRHH = ?2 WHERE p.id = ?3") + void setPostulanteEstadoAndComentario(EstadoPostulante eP, String comentario, Long Id); + + /*@Transactional + @Modifying + @Query("UPDATE Postulante p SET p.estadoPostulante = ?1 WHERE p.id = ?2") + void setPostulanteEstadoPostulante(EstadoPostulante eP, Long Id); + + @Transactional + @Modifying + @Query("UPDATE Postulante p SET p.comentarioRRHH = ?1 WHERE p.id = ?2") + void setPostulanteEstadoComentario( String comentario, Long Id);*/ } diff --git a/curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp b/curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp index c6bead7..fc4d9c7 100644 --- a/curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp +++ b/curriculumsearch/src/main/webapp/jsp/detallepostulante.jsp @@ -27,8 +27,9 @@


-
- +
+
+


@@ -75,7 +76,35 @@ +
+

Cambiar Estado del Postulante y Comentario de RRHH

+ + Estado +
+ + + + + + + ${estadoPostulante.getEstado()} + + + + +
+
+ ComentarioRRHH + +
+ +
+ + + +
+ \ No newline at end of file diff --git a/curriculumsearch/src/main/webapp/jsp/postulantes.jsp b/curriculumsearch/src/main/webapp/jsp/postulantes.jsp index 0af78b5..1bb9c7f 100644 --- a/curriculumsearch/src/main/webapp/jsp/postulantes.jsp +++ b/curriculumsearch/src/main/webapp/jsp/postulantes.jsp @@ -18,6 +18,13 @@
+ +