diff --git a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java index b34392c..0398649 100644 --- a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java +++ b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java @@ -55,6 +55,8 @@ public class PostulanteController { InstitucionRepository institucionRepository; DepartamentoRepository depRepo; CiudadRepository ciuRepo; + EstudioRepository estudioRepository; + PostulanteTecnologiaRepository postulanteTecnologiaRepository; ConvocatoriaRepository cargoRepo; CargoRepository carRepo; @@ -62,13 +64,17 @@ public class PostulanteController { public PostulanteController( PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo, InstitucionRepository institucionRepository, DepartamentoRepository depRepo, - CiudadRepository ciuRepo, ConvocatoriaRepository cargoRepo, CargoRepository carRepo) { + CiudadRepository ciuRepo, EstudioRepository estudioRepository, + PostulanteTecnologiaRepository postulanteTecnologiaRepository, + ConvocatoriaRepository cargoRepo, CargoRepository carRepo) { this.post = post; this.tecRepo = tecRepo; this.expRepo = expRepo; this.institucionRepository = institucionRepository; this.depRepo = depRepo; this.ciuRepo = ciuRepo; + this.estudioRepository = estudioRepository; + this.postulanteTecnologiaRepository = postulanteTecnologiaRepository; this.cargoRepo =cargoRepo; this.carRepo=carRepo; } @@ -140,17 +146,24 @@ public class PostulanteController { @PostMapping(value = "/postulante",consumes = "application/json") public String guardarPostulante(@RequestBody Postulante postulante){ + //Codigo encargado de modificar postulacion si se envia mismo CI + Postulante postulantex = post.findByNroDocument(postulante.getnroDocument()); + if(postulantex != null){ + estudioRepository.findByPostulante(postulantex).forEach(x -> estudioRepository.delete(x)); + expRepo.findByPostulante(postulantex).forEach(x -> expRepo.delete(x)); + postulanteTecnologiaRepository.findByPostulante(postulantex).forEach(x -> postulanteTecnologiaRepository.delete(x)); + postulante.setId(postulantex.getId()); + } postulante.getTecnologias().stream().filter( 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(); diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java b/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java index b9442da..4a041c2 100644 --- a/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java +++ b/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java @@ -33,6 +33,7 @@ public class PostulanteTecnologia { @JoinColumn private Tecnologia tecnologia; + @ManyToOne() @JoinColumn @JsonBackReference(value = "postulantetecnologia-postulante") diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java b/curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java index 360f8dd..00ed654 100644 --- a/curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java +++ b/curriculumsearch/src/main/java/com/roshka/modelo/ReferenciaPersonal.java @@ -1,13 +1,6 @@ package com.roshka.modelo; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import javax.persistence.*; import javax.validation.constraints.NotBlank; import com.fasterxml.jackson.annotation.JsonBackReference; @@ -31,7 +24,7 @@ public class ReferenciaPersonal { @Column(name = "relacion") private String relacion; - @ManyToOne(optional = false) + @ManyToOne(cascade = CascadeType.ALL, optional = false) @JoinColumn @JsonBackReference private Postulante postulante; diff --git a/curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java b/curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java index 50d9336..ad25f79 100644 --- a/curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java +++ b/curriculumsearch/src/main/java/com/roshka/repositorio/EstudioRepository.java @@ -1,10 +1,14 @@ package com.roshka.repositorio; +import com.roshka.modelo.Postulante; import org.springframework.data.jpa.repository.JpaRepository; import com.roshka.modelo.Estudio; +import java.util.List; + public interface EstudioRepository extends JpaRepository{ + public List findByPostulante(Postulante postulante); } diff --git a/curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java b/curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java index cebad2a..5eadaaf 100644 --- a/curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java +++ b/curriculumsearch/src/main/java/com/roshka/repositorio/ExperienciaRepository.java @@ -1,5 +1,6 @@ package com.roshka.repositorio; +import com.roshka.modelo.Postulante; import org.springframework.data.jpa.repository.JpaRepository; @@ -9,4 +10,6 @@ import com.roshka.modelo.Experiencia; public interface ExperienciaRepository extends JpaRepository { public List findByCargoLike(String cargo); + + public List findByPostulante(Postulante postulante); } diff --git a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java index fc0d139..b10de4c 100644 --- a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java +++ b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteRepository.java @@ -14,6 +14,8 @@ import com.roshka.modelo.Postulante; public interface PostulanteRepository extends JpaRepository { + public Postulante findByNroDocument(String ci); + @Query("select p from Postulante p join p.estudios e on e.institucion.nombre LIKE %?1%") public List findByInstitucionEstudio(String institucion); diff --git a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java index 8a295b0..012f485 100644 --- a/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java +++ b/curriculumsearch/src/main/java/com/roshka/repositorio/PostulanteTecnologiaRepository.java @@ -1,12 +1,15 @@ package com.roshka.repositorio; +import com.roshka.modelo.Postulante; import org.springframework.data.jpa.repository.JpaRepository; import com.roshka.modelo.PostulanteTecnologia; -public interface PostulanteTecnologiaRepository extends JpaRepository{ +import java.util.List; +public interface PostulanteTecnologiaRepository extends JpaRepository{ + public List findByPostulante(Postulante postulante); } diff --git a/curriculumsearch/src/main/resources/static/main.js b/curriculumsearch/src/main/resources/static/main.js index 2e9fbfa..808eef0 100644 --- a/curriculumsearch/src/main/resources/static/main.js +++ b/curriculumsearch/src/main/resources/static/main.js @@ -1,12 +1,20 @@ var cont_experiencia = 0; let cont_estudios = 0; let cont_tecnologia = 0; + let cont_cargo = 0; const experiencias = []; const estudios = []; const tecnologias = []; +let noValidateFlag = false; + const postulaciones = []; +var cont_referencias=0 ; +const referencias= []; + + + const formValidator = function () { 'use strict' @@ -22,6 +30,7 @@ const formValidator = function () { if (!form.checkValidity()) { event.preventDefault() event.stopPropagation() + noValidateFlag = true; } form.classList.add('was-validated') @@ -194,6 +203,8 @@ function serializeJSON (form) { pairs["estudios"] = estudios.filter(est => est)//eliminacion de nulos pairs["tecnologias"] = tecnologias.filter(tec => tec)//eliminacion de nulos pairs["postulaciones"] = postulaciones.filter(car => car)//eliminacion de nulos + pairs["referencias"] = referencias.filter(tec => tec) + // Return the JSON string return JSON.stringify(pairs, null, 2); @@ -228,15 +239,18 @@ form.addEventListener("submit",(evt)=>{ // evt.stopPropagation() // } // form.classList.add('was-validated') - postData('postulante', serializeJSON(form)) - .then(response => { - if(response.status==200 || response.status==302){ - location.replace(response.url); - }else{ - console.log(response.text().then(value => console.log(value))) - } - }); - evt.preventDefault(); + if(!noValidateFlag){ + postData('postulante', serializeJSON(form)) + .then(response => { + if(response.status==200 || response.status==302){ + location.replace(response.url); + }else{ + console.log(response.text().then(value => console.log(value))) + } + }); + evt.preventDefault(); + } + noValidateFlag = false } ); document.querySelector("#btn-new-tech").addEventListener('click',()=>{document.querySelector("#tecnologia-nombre").classList.remove('d-none')}) @@ -321,6 +335,10 @@ function agregarFieldEstudio(){ } + + + + function eliminarEstudio(event) { //eliminar del array estudios[event.target.parentElement.id.split("-")[1]]=null @@ -361,6 +379,15 @@ function agregarFieldCargo(){ pairs[name] = value } console.log(pairs) + for(let i=0;i option[value="'+pairs["cargo-id"]+'"]').innerHTML} @@ -369,7 +396,6 @@ function agregarFieldCargo(){ //imprimir lista actualizada const div = document.querySelector("#cargos") const div1 = document.createElement('div'); - console.log(postulaciones[0]) let content1='
    ' for (let index = 0; index < postulaciones.length; index++) { @@ -424,3 +450,82 @@ function listarCiudades(depId){ } + + + +function agregarFieldReferencia(event){ + //recoger del form + const pairs = {}; + const formexp = document.querySelector("[name=referencia-form]"); + const formData = new FormData(formexp); + const referenciaPersonal = [{},{},{}]; + let pos_rec; + let returnFlag = false; + + let requiredValues = ["nombre", "relacion", "telefono"] + + formData.forEach((value, key)=>{ + if(requiredValues.includes(key) + && value==="" && returnFlag == false){ + console.log(key, value) + returnFlag = true; + } + }); + + if(returnFlag===true){ + let message = "Rellene " + for(let i=0;i 1) { + referenciaPersonal[pos_rec[2]][pos_rec[1]] = value + } + else{ + pairs[name] = value + } + + } + pairs["referenciaPersonal"] = referenciaPersonal.filter(rec => rec.nombre); + referencias[cont_referencias] = pairs; + formexp.reset(); + //imprimir lista actualizada + const div = document.querySelector("#referencia") + const div1 = document.createElement('div'); + let content='
      ' + for (let index = 0; index < referencias.length; index++) { + const exp = referencias[index]; + if(exp==null) continue; + content += ` +
    • + ${exp.nombre} + +
    • + + ` + } + content += "
    " + div1.innerHTML = content + div.innerHTML = ''; + div.appendChild(div1); + cont_referencias++; +} + +/*----------------------------------------------------------------- */ +function eliminarReferencia(event) { + //eliminar del array + referencias[event.target.parentElement.id.split("-")[1]]=null + //eliminar en html + event.target.parentElement.remove() +} +/*----------------------------------------------------------------- */ + + + + diff --git a/curriculumsearch/src/main/webapp/jsp/postulante-form.jsp b/curriculumsearch/src/main/webapp/jsp/postulante-form.jsp index 2770e58..649ba5d 100644 --- a/curriculumsearch/src/main/webapp/jsp/postulante-form.jsp +++ b/curriculumsearch/src/main/webapp/jsp/postulante-form.jsp @@ -234,11 +234,11 @@
    @@ -288,14 +288,20 @@
     Agregar Tecnologia

    +
    - + +
    +
     Referencias Personales

    +
    +
    +
    - + Cancelar
    @@ -348,22 +354,22 @@
    - - + +
    - - + +
    - - + +
    - +
    @@ -431,7 +437,7 @@ - +
    + + @@ -516,7 +560,38 @@