Commit 029bb203 by Joaquin Elias Baranda Ayala

Merge branch 'giuli_001' of https://phoebe.roshka.com/gitlab/hshah/TalentoHumano into joaquin

parents c5671df7 b2a47f91
...@@ -2,6 +2,7 @@ package com.roshka; ...@@ -2,6 +2,7 @@ package com.roshka;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
...@@ -9,11 +10,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -9,11 +10,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.roshka.modelo.*; import com.roshka.modelo.*;
import com.roshka.repositorio.*; import com.roshka.repositorio.*;
import org.hibernate.PersistentObjectException;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
...@@ -28,7 +31,7 @@ public class CurriculumsearchApplication { ...@@ -28,7 +31,7 @@ public class CurriculumsearchApplication {
@Bean @Bean
CommandLineRunner runner(PostulanteRepository postRepo, TecnologiaRepository tecRepo, DepartamentoRepository depR, CommandLineRunner runner(PostulanteRepository postRepo, TecnologiaRepository tecRepo, DepartamentoRepository depR,
CiudadRepository ciudR, RRHHUserRepository rrhhUserRepository) { CiudadRepository ciudR, RRHHUserRepository rrhhUserRepository, CargoRepository cargoR, ConvocatoriaRepository convR) {
return args -> { return args -> {
try { try {
// read json and write to db // read json and write to db
...@@ -43,9 +46,35 @@ public class CurriculumsearchApplication { ...@@ -43,9 +46,35 @@ public class CurriculumsearchApplication {
List<Ciudad> ciudades= mapper.readValue(inputStream,typeReference2); List<Ciudad> ciudades= mapper.readValue(inputStream,typeReference2);
ciudR.saveAll(ciudades); ciudR.saveAll(ciudades);
System.out.println("Cuidad Saved!"); System.out.println("Cuidad Saved!");
TypeReference<List<Cargo>> typeReference3 = new TypeReference<List<Cargo>>(){};
inputStream = TypeReference.class.getResourceAsStream("/json/cargo.json");
List<Cargo> cargos= mapper.readValue(inputStream,typeReference3);
cargoR.saveAll(cargos);
cargoR.flush();
System.out.println("Cargos Saved!");
/* TypeReference<List<Tecnologia>> typeReference5 = new TypeReference<List<Tecnologia>>(){};
inputStream = TypeReference.class.getResourceAsStream("/json/tecnologia.json");
List<Tecnologia> tecnologias= mapper.readValue(inputStream,typeReference5);
tecRepo.saveAll(tecnologias);
tecRepo.flush();
System.out.println("Cargos Saved!"); */
TypeReference<List<ConvocatoriaCargo>> typeReference4 = new TypeReference<List<ConvocatoriaCargo>>(){};
inputStream = TypeReference.class.getResourceAsStream("/json/convocatoria.json");
List<ConvocatoriaCargo> convocatorias= mapper.readValue(inputStream,typeReference4);
convocatorias = convR.saveAll(convocatorias);
convR.flush();
System.out.println("convocatorias Saved!");
TypeReference<List<Postulante>> typeReference = new TypeReference<List<Postulante>>(){}; TypeReference<List<Postulante>> typeReference = new TypeReference<List<Postulante>>(){};
inputStream = TypeReference.class.getResourceAsStream("/json/postulante.json"); inputStream = TypeReference.class.getResourceAsStream("/json/postulante.json");
List<Postulante> postulantes = mapper.readValue(inputStream,typeReference); List<Postulante> postulantes = mapper.readValue(inputStream,typeReference);
/* for (Postulante postulante : postulantes) {
for (int i = 0; i < postulante.getPostulaciones().size(); i++) {
postulante.getPostulaciones().set(i, convR.getById(postulante.getPostulaciones().get(i).getId()));
}
} */
postRepo.saveAll(postulantes); postRepo.saveAll(postulantes);
System.out.println("postulantes Saved!"); System.out.println("postulantes Saved!");
String password = new BCryptPasswordEncoder().encode("test"); String password = new BCryptPasswordEncoder().encode("test");
...@@ -58,7 +87,17 @@ public class CurriculumsearchApplication { ...@@ -58,7 +87,17 @@ public class CurriculumsearchApplication {
System.out.println("Usuario Test: \nEmail: test@test.com\nPassword: test"); System.out.println("Usuario Test: \nEmail: test@test.com\nPassword: test");
} catch (IOException e){ } catch (IOException e){
System.out.println("Unable to save tecnologias: " + e.getMessage()); System.out.println("Unable to save: " + e.getMessage());
}
catch(PersistentObjectException ex){
System.out.println("Unable to save: " + ex.getMessage());
ex.printStackTrace();
}
catch(Exception ex){
System.out.println("Unable to save: " + ex.getMessage());
ex.printStackTrace();
} }
...@@ -67,5 +106,21 @@ public class CurriculumsearchApplication { ...@@ -67,5 +106,21 @@ public class CurriculumsearchApplication {
}; };
} }
public static <Q,T extends JpaRepository<Q,Long>> void guardarJson(T repo,String srcJson ) {
ObjectMapper mapper = new ObjectMapper();
TypeReference<List<Q>> typeReference1 = new TypeReference<List<Q>>(){};
InputStream inputStream = TypeReference.class.getResourceAsStream(srcJson);
List<Q> listaAguardar;
try {
listaAguardar = mapper.readValue(inputStream,typeReference1);
repo.saveAll(listaAguardar);
repo.flush();
System.out.println(srcJson+" Saved!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
...@@ -10,11 +10,11 @@ public class PostulanteListaDTO { ...@@ -10,11 +10,11 @@ public class PostulanteListaDTO {
private String nombre; private String nombre;
private String apellido; private String apellido;
private Disponibilidad disponibilidad; private Disponibilidad disponibilidad;
private Integer nivelIngles; private Long nivelIngles;
private Long experienciaMeses; private Long experienciaMeses;
private List<PostulanteTecnologia> tecnologias; private List<PostulanteTecnologia> tecnologias;
public PostulanteListaDTO(Long id, String nombre, String apellido, Disponibilidad disponibilidad, public PostulanteListaDTO(Long id, String nombre, String apellido, Disponibilidad disponibilidad,
Integer nivelIngles, Long experienciaMeses, List<PostulanteTecnologia> tecnologias) { Long nivelIngles, Long experienciaMeses, List<PostulanteTecnologia> tecnologias) {
this.id = id; this.id = id;
this.nombre = nombre; this.nombre = nombre;
this.apellido = apellido; this.apellido = apellido;
...@@ -47,10 +47,10 @@ public class PostulanteListaDTO { ...@@ -47,10 +47,10 @@ public class PostulanteListaDTO {
public void setDisponibilidad(Disponibilidad disponibilidad) { public void setDisponibilidad(Disponibilidad disponibilidad) {
this.disponibilidad = disponibilidad; this.disponibilidad = disponibilidad;
} }
public Integer getNivelIngles() { public Long getNivelIngles() {
return nivelIngles; return nivelIngles;
} }
public void setNivelIngles(Integer nivelIngles) { public void setNivelIngles(Long nivelIngles) {
this.nivelIngles = nivelIngles; this.nivelIngles = nivelIngles;
} }
public Long getExperienciaMeses() { public Long getExperienciaMeses() {
......
...@@ -2,6 +2,7 @@ package com.roshka.controller; ...@@ -2,6 +2,7 @@ package com.roshka.controller;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
...@@ -19,6 +20,7 @@ import com.roshka.modelo.Postulante; ...@@ -19,6 +20,7 @@ import com.roshka.modelo.Postulante;
import com.roshka.modelo.TipoExperiencia; import com.roshka.modelo.TipoExperiencia;
import com.roshka.repositorio.*; import com.roshka.repositorio.*;
import com.roshka.repositorio.CiudadRepository; import com.roshka.repositorio.CiudadRepository;
import com.roshka.repositorio.ConvocatoriaRepository;
import com.roshka.repositorio.DepartamentoRepository; import com.roshka.repositorio.DepartamentoRepository;
import com.roshka.repositorio.ExperienciaRepository; import com.roshka.repositorio.ExperienciaRepository;
import com.roshka.repositorio.InstitucionRepository; import com.roshka.repositorio.InstitucionRepository;
...@@ -29,7 +31,13 @@ import com.roshka.utils.Helper; ...@@ -29,7 +31,13 @@ import com.roshka.utils.Helper;
import org.hibernate.jpa.TypedParameterValue; import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.StringType; import org.hibernate.type.StringType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
...@@ -47,18 +55,28 @@ public class PostulanteController { ...@@ -47,18 +55,28 @@ public class PostulanteController {
InstitucionRepository institucionRepository; InstitucionRepository institucionRepository;
DepartamentoRepository depRepo; DepartamentoRepository depRepo;
CiudadRepository ciuRepo; CiudadRepository ciuRepo;
EstudioRepository estudioRepository;
PostulanteTecnologiaRepository postulanteTecnologiaRepository;
ConvocatoriaRepository cargoRepo;
CargoRepository carRepo;
@Autowired @Autowired
public PostulanteController( public PostulanteController(
PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo, PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo,
InstitucionRepository institucionRepository, DepartamentoRepository depRepo, InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
CiudadRepository ciuRepo) { CiudadRepository ciuRepo, EstudioRepository estudioRepository,
PostulanteTecnologiaRepository postulanteTecnologiaRepository,
ConvocatoriaRepository cargoRepo, CargoRepository carRepo) {
this.post = post; this.post = post;
this.tecRepo = tecRepo; this.tecRepo = tecRepo;
this.expRepo = expRepo; this.expRepo = expRepo;
this.institucionRepository = institucionRepository; this.institucionRepository = institucionRepository;
this.depRepo = depRepo; this.depRepo = depRepo;
this.ciuRepo = ciuRepo; this.ciuRepo = ciuRepo;
this.estudioRepository = estudioRepository;
this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
this.cargoRepo =cargoRepo;
this.carRepo=carRepo;
} }
@RequestMapping("home") @RequestMapping("home")
...@@ -76,12 +94,17 @@ public class PostulanteController { ...@@ -76,12 +94,17 @@ public class PostulanteController {
@RequestParam(required = false)Long lvlEng, @RequestParam(required = false)Long lvlEng,
@RequestParam(required = false)Long lvlTec, @RequestParam(required = false)Long lvlTec,
@RequestParam(required = false)Long instId, @RequestParam(required = false)Long instId,
@RequestParam(required = false)Long expInMonths @RequestParam(required = false)Long expInMonths,
@RequestParam(required = false)Long cargoId,
@RequestParam(defaultValue = "0")Integer nroPagina
) { ) {
final Integer CANTIDAD_POR_PAGINA = 5;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
model.addAttribute("tecnologias", tecRepo.findAll()); model.addAttribute("tecnologias", tecRepo.findAll());
model.addAttribute("disponibilidades", Disponibilidad.values()); model.addAttribute("disponibilidades", Disponibilidad.values());
model.addAttribute("institucionesEducativas", institucionRepository.findAll()); model.addAttribute("institucionesEducativas", institucionRepository.findAll());
List<Postulante> postulantes = post.postulantesMultiFiltro(nombre == null || nombre.trim().isEmpty() ? new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"), dispo, lvlEng, lvlTec, tecId, instId); Page<Postulante> 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);
List<Postulante> postulantes = postulantesPag.getContent();
List<PostulanteListaDTO> postulantesDTO = new ArrayList<>(); List<PostulanteListaDTO> postulantesDTO = new ArrayList<>();
for (Postulante postulante : postulantes) { for (Postulante postulante : postulantes) {
...@@ -95,6 +118,7 @@ public class PostulanteController { ...@@ -95,6 +118,7 @@ public class PostulanteController {
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()));
} }
model.addAttribute("pages", postulantesPag.getTotalPages());
model.addAttribute("postulantes", postulantesDTO); model.addAttribute("postulantes", postulantesDTO);
return "postulantes"; return "postulantes";
} }
...@@ -108,11 +132,12 @@ public class PostulanteController { ...@@ -108,11 +132,12 @@ public class PostulanteController {
model.addAttribute("estadosCiviles", EstadoCivil.values()); model.addAttribute("estadosCiviles", EstadoCivil.values());
model.addAttribute("nacionalidades", Nacionalidad.values()); model.addAttribute("nacionalidades", Nacionalidad.values());
model.addAttribute("tiposExperencia", TipoExperiencia.values()); model.addAttribute("tiposExperencia", TipoExperiencia.values());
model.addAttribute("CargosDisponibles", cargoRepo.f1ndByCargoAndEstado(new TypedParameterValue(LongType.INSTANCE, null), new Date(), new TypedParameterValue(IntegerType.INSTANCE, 1)));
try { try {
model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll())); model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
} catch (JsonProcessingException e) { } catch (JsonProcessingException er) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); er.printStackTrace();
} }
model.addAttribute("departamentos", depRepo.findAll()); model.addAttribute("departamentos", depRepo.findAll());
...@@ -121,11 +146,24 @@ public class PostulanteController { ...@@ -121,11 +146,24 @@ public class PostulanteController {
@PostMapping(value = "/postulante",consumes = "application/json") @PostMapping(value = "/postulante",consumes = "application/json")
public String guardarPostulante(@RequestBody Postulante postulante){ 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( postulante.getTecnologias().stream().filter(
tec -> tec.getTecnologia().getId() != 0 tec -> tec.getTecnologia().getId() != 0
).forEach( ).forEach(
tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId())) 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()){ for(Estudio estudio: postulante.getEstudios()){
String nombreIns = ""; String nombreIns = "";
nombreIns = estudio.getInstitucion().getNombre().toLowerCase(); nombreIns = estudio.getInstitucion().getNombre().toLowerCase();
......
...@@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonManagedReference; ...@@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonManagedReference;
@Table(name = "cargo") @Table(name = "cargo")
public class Cargo { public class Cargo {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@NotBlank @NotBlank
...@@ -47,4 +47,7 @@ public class Cargo { ...@@ -47,4 +47,7 @@ public class Cargo {
public void setConvocatorias(List<ConvocatoriaCargo> convocatorias) { public void setConvocatorias(List<ConvocatoriaCargo> convocatorias) {
this.convocatorias = convocatorias; this.convocatorias = convocatorias;
} }
public static Object values() {
return null;
}
} }
...@@ -15,13 +15,16 @@ import javax.persistence.Table; ...@@ -15,13 +15,16 @@ import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.roshka.utils.Helper; import com.roshka.utils.Helper;
@Entity @Entity
@Table(name = "convocatoria_cargo") @Table(name = "convocatoria_cargo")
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class ConvocatoriaCargo { public class ConvocatoriaCargo {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@ManyToOne() @ManyToOne()
......
...@@ -15,7 +15,7 @@ import com.roshka.utils.Helper; ...@@ -15,7 +15,7 @@ import com.roshka.utils.Helper;
@Table(name="estudio") @Table(name="estudio")
public class Estudio { public class Estudio {
@Id @Id
@GeneratedValue(strategy=GenerationType.AUTO) @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id") @Column(name="id")
private long id; private long id;
......
...@@ -23,7 +23,7 @@ import javax.validation.constraints.Past; ...@@ -23,7 +23,7 @@ import javax.validation.constraints.Past;
@Table(name = "experiencia") @Table(name = "experiencia")
public class Experiencia { public class Experiencia {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; private long id;
@Column(name = "institucion") @Column(name = "institucion")
......
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
@Table(name = "institucion") @Table(name = "institucion")
public class Institucion { public class Institucion {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id") @Column(name = "id")
private long id; private long id;
......
...@@ -3,8 +3,10 @@ package com.roshka.modelo; ...@@ -3,8 +3,10 @@ package com.roshka.modelo;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.roshka.utils.Helper; import com.roshka.utils.Helper;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -14,9 +16,10 @@ import java.util.List; ...@@ -14,9 +16,10 @@ import java.util.List;
@Entity @Entity
@Table(name="postulante") @Table(name="postulante")
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class Postulante { public class Postulante {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id") @Column(name="id")
private long id; private long id;
...@@ -61,7 +64,7 @@ public class Postulante { ...@@ -61,7 +64,7 @@ public class Postulante {
@Column(name = "nivel_ingles") @Column(name = "nivel_ingles")
@Min(value = 1) @Min(value = 1)
@Max(value = 5) @Max(value = 5)
private Integer nivelIngles; private Long nivelIngles;
@Column(name = "curriculum") @Column(name = "curriculum")
private String curriculum; private String curriculum;
...@@ -98,12 +101,11 @@ public class Postulante { ...@@ -98,12 +101,11 @@ public class Postulante {
@OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL) @OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL)
private List<ReferenciaPersonal> referencias; private List<ReferenciaPersonal> referencias;
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany()
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {"postulante_id","convocatoria_cargo_id"}), @JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {"postulante_id","convocatoria_cargo_id"}),
joinColumns = @JoinColumn(name="postulante_id", referencedColumnName="id"), joinColumns = @JoinColumn(name="postulante_id", referencedColumnName="id"),
inverseJoinColumns= @JoinColumn(name="convocatoria_cargo_id", referencedColumnName="id") inverseJoinColumns= @JoinColumn(name="convocatoria_cargo_id", referencedColumnName="id")
) )
@JsonIgnore
private List<ConvocatoriaCargo> postulaciones; private List<ConvocatoriaCargo> postulaciones;
...@@ -175,11 +177,11 @@ public class Postulante { ...@@ -175,11 +177,11 @@ public class Postulante {
this.resumen = resumen; this.resumen = resumen;
} }
public Integer getNivelIngles() { public Long getNivelIngles() {
return nivelIngles; return nivelIngles;
} }
public void setNivelIngles(Integer nivelIngles) { public void setNivelIngles(Long nivelIngles) {
this.nivelIngles = nivelIngles; this.nivelIngles = nivelIngles;
} }
......
...@@ -21,7 +21,7 @@ uniqueConstraints=@UniqueConstraint(columnNames={"postulante_id", "tecnologia_id ...@@ -21,7 +21,7 @@ uniqueConstraints=@UniqueConstraint(columnNames={"postulante_id", "tecnologia_id
public class PostulanteTecnologia { public class PostulanteTecnologia {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id") @Column(name="id")
private long id ; private long id ;
...@@ -29,12 +29,13 @@ public class PostulanteTecnologia { ...@@ -29,12 +29,13 @@ public class PostulanteTecnologia {
@Min(value = 1) @Min(value = 1)
@Max(value = 5) @Max(value = 5)
private Long nivel; private Long nivel;
@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},optional = false) @ManyToOne(cascade = {CascadeType.PERSIST},optional = false)
@JoinColumn @JoinColumn
private Tecnologia tecnologia; private Tecnologia tecnologia;
@ManyToOne() @ManyToOne()
@JoinColumn @JoinColumn
@JsonBackReference(value = "postulantetecnologia-postulante") @JsonBackReference(value = "postulantetecnologia-postulante")
private Postulante postulante; private Postulante postulante;
......
...@@ -6,7 +6,7 @@ import javax.persistence.*; ...@@ -6,7 +6,7 @@ import javax.persistence.*;
@Table(name = "recursos_humanos_user") @Table(name = "recursos_humanos_user")
public class RRHHUser { public class RRHHUser {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@Column(nullable = false, unique = true, length = 45) @Column(nullable = false, unique = true, length = 45)
......
package com.roshka.modelo; package com.roshka.modelo;
import javax.persistence.Column; import javax.persistence.*;
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.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
...@@ -16,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonBackReference; ...@@ -16,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
@Table(name = "referencia_personal") @Table(name = "referencia_personal")
public class ReferenciaPersonal { public class ReferenciaPersonal {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@NotBlank @NotBlank
...@@ -31,7 +24,7 @@ public class ReferenciaPersonal { ...@@ -31,7 +24,7 @@ public class ReferenciaPersonal {
@Column(name = "relacion") @Column(name = "relacion")
private String relacion; private String relacion;
@ManyToOne(optional = false) @ManyToOne(cascade = CascadeType.ALL, optional = false)
@JoinColumn @JoinColumn
@JsonBackReference @JsonBackReference
private Postulante postulante; private Postulante postulante;
......
...@@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank; ...@@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank;
@Entity @Entity
@Table(name="tecnologia") @Table(name="tecnologia")
public class Tecnologia { public class Tecnologia {
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Id @Id
@Column(name="id") @Column(name="id")
private long id; private long id;
......
...@@ -11,7 +11,8 @@ import org.springframework.data.jpa.repository.Query; ...@@ -11,7 +11,8 @@ import org.springframework.data.jpa.repository.Query;
public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> { public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> {
public List<ConvocatoriaCargo> findByCargoId(Long cargoId); public List<ConvocatoriaCargo> findByCargoId(Long cargoId);
//@Query(value="selec x from ConvocatoriaCargo x where (x.fechaFinal > ?1)",nativeQuery = true)
//public List<ConvocatoriaCargo> findConvocatoriaCargoByCargo(Date fechaFinal);
@Query("select c from ConvocatoriaCargo c where ( ?1 is null and ?3 is null) or ( ( ( (c.fechaFin > ?2 and ?3 = 1) or (c.fechaFin < ?2 and ?3 = 0)) or ?3 is null ) and (c.cargoId = ?1 or ?1 is null) )") @Query("select c from ConvocatoriaCargo c where ( ?1 is null and ?3 is null) or ( ( ( (c.fechaFin > ?2 and ?3 = 1) or (c.fechaFin < ?2 and ?3 = 0)) or ?3 is null ) and (c.cargoId = ?1 or ?1 is null) )")
public List<ConvocatoriaCargo> f1ndByCargoAndEstado(TypedParameterValue cargoId, Date fecha, TypedParameterValue isOpen); public List<ConvocatoriaCargo> f1ndByCargoAndEstado(TypedParameterValue cargoId, Date fecha, TypedParameterValue isOpen);
} }
package com.roshka.repositorio; package com.roshka.repositorio;
import com.roshka.modelo.Postulante;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import com.roshka.modelo.Estudio; import com.roshka.modelo.Estudio;
import java.util.List;
public interface EstudioRepository extends JpaRepository<Estudio,Long>{ public interface EstudioRepository extends JpaRepository<Estudio,Long>{
public List<Estudio> findByPostulante(Postulante postulante);
} }
package com.roshka.repositorio; package com.roshka.repositorio;
import com.roshka.modelo.Postulante;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
...@@ -9,4 +10,6 @@ import com.roshka.modelo.Experiencia; ...@@ -9,4 +10,6 @@ import com.roshka.modelo.Experiencia;
public interface ExperienciaRepository extends JpaRepository<Experiencia,Long> { public interface ExperienciaRepository extends JpaRepository<Experiencia,Long> {
public List<Experiencia> findByCargoLike(String cargo); public List<Experiencia> findByCargoLike(String cargo);
public List<Experiencia> findByPostulante(Postulante postulante);
} }
...@@ -3,6 +3,8 @@ package com.roshka.repositorio; ...@@ -3,6 +3,8 @@ package com.roshka.repositorio;
import java.util.List; import java.util.List;
import org.hibernate.jpa.TypedParameterValue; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
...@@ -12,6 +14,8 @@ import com.roshka.modelo.Postulante; ...@@ -12,6 +14,8 @@ import com.roshka.modelo.Postulante;
public interface PostulanteRepository extends JpaRepository<Postulante,Long> { public interface PostulanteRepository extends JpaRepository<Postulante,Long> {
public Postulante findByNroDocument(String ci);
@Query("select p from Postulante p join p.estudios e on e.institucion.nombre LIKE %?1%") @Query("select p from Postulante p join p.estudios e on e.institucion.nombre LIKE %?1%")
public List<Postulante> findByInstitucionEstudio(String institucion); public List<Postulante> findByInstitucionEstudio(String institucion);
...@@ -41,15 +45,17 @@ public interface PostulanteRepository extends JpaRepository<Postulante,Long> { ...@@ -41,15 +45,17 @@ public interface PostulanteRepository extends JpaRepository<Postulante,Long> {
@Query(value = "select DISTINCT p " + @Query(value = "select DISTINCT p " +
"from Postulante p join p.experiencias x " + "from Postulante p left join p.experiencias x " +
"join p.estudios e " + "left join p.estudios e " +
"join p.tecnologias pt " + "left join p.tecnologias pt " +
"left join p.postulaciones conv " +
"where (?1 is null or lower(p.nombre) LIKE lower(?1) or lower(p.apellido) LIKE lower(?1) ) " + "where (?1 is null or lower(p.nombre) LIKE lower(?1) or lower(p.apellido) LIKE lower(?1) ) " +
"and (p.disponibilidad = ?2 or ?2 is null) " + "and (p.disponibilidad = ?2 or ?2 is null) " +
"and (p.nivelIngles >= ?3 or ?3 is null) "+ "and (p.nivelIngles >= ?3 or ?3 is null) "+
"and (pt.nivel >= ?4 or ?4 is null) "+ "and (pt.nivel >= ?4 or ?4 is null) "+
"and (pt.tecnologia.id = ?5 or ?5 is null) "+ "and (pt.tecnologia.id = ?5 or ?5 is null) "+
" and (e.institucion.id = ?6 or ?6 is null ) ") " and (e.institucion.id = ?6 or ?6 is null ) "+
public List<Postulante> postulantesMultiFiltro(TypedParameterValue nombre, Disponibilidad disponibilidad, Long nivelInges, Long nivel, Long tecnoId, Long instId); " and (conv.cargoId = ?7 or ?7 is null ) ")
public Page<Postulante> postulantesMultiFiltro(TypedParameterValue nombre, Disponibilidad disponibilidad, Long nivelInges, Long nivel, Long tecnoId, Long instId,Long cargoId, Pageable pageable);
} }
package com.roshka.repositorio; package com.roshka.repositorio;
import com.roshka.modelo.Postulante;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import com.roshka.modelo.PostulanteTecnologia; import com.roshka.modelo.PostulanteTecnologia;
public interface PostulanteTecnologiaRepository extends JpaRepository<PostulanteTecnologia,Long>{ import java.util.List;
public interface PostulanteTecnologiaRepository extends JpaRepository<PostulanteTecnologia,Long>{
public List<PostulanteTecnologia> findByPostulante(Postulante postulante);
} }
[
{
"id": 1,
"nombre": "dev java"
},
{
"id": 2,
"nombre": "dev php"
}
]
\ No newline at end of file
[
{
"id": 1,
"cargoId": 1,
"fechaInicio": "2021-11-01",
"fechaFin": "2021-11-30",
"cupos": 20
},
{
"id": 2,
"cargoId": 2,
"fechaInicio": "2021-11-01",
"fechaFin": "2021-11-30",
"cupos": 20
}
]
\ No newline at end of file
[ [
{ {
"resumen": "In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit.", "resumen": "In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Taylor", "nombre": "Taylor",
"apellido": "Obrien", "apellido": "Obrien",
"correo": "gladysalexander@dadabase.com", "correo": "gladysalexander@dadabase.com",
...@@ -13,13 +14,13 @@ ...@@ -13,13 +14,13 @@
"fechaNacimiento": "2021-08-16", "fechaNacimiento": "2021-08-16",
"nivelIngles": 1, "nivelIngles": 1,
"disponibilidad": "C", "disponibilidad": "C",
"experiencias": [ "experiencias": [
{ {
"institucion": "Fanfare", "institucion": "Fanfare",
"fechaDesde": "2014-09-10", "fechaDesde": "2014-09-10",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"tipoExperiencia":"Trabajo Normal", "tipoExperiencia": "Trabajo Normal",
"cargo": "dba", "cargo": "dba",
"descripcion": "Enim qui Lorem ut magna.", "descripcion": "Enim qui Lorem ut magna.",
"nombreReferencia": "Marissa", "nombreReferencia": "Marissa",
...@@ -29,8 +30,8 @@ ...@@ -29,8 +30,8 @@
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-08-28", "fechaDesde": "2014-08-28",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "analista" "temaDeEstudio": "analista"
...@@ -59,9 +60,10 @@ ...@@ -59,9 +60,10 @@
}, },
{ {
"resumen": "Do nostrud aliqua adipisicing in sunt aute id do elit ut dolor ad aliquip.", "resumen": "Do nostrud aliqua adipisicing in sunt aute id do elit ut dolor ad aliquip.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Hopkins", "nombre": "Hopkins",
"apellido": "Parks", "apellido": "Parks",
"correo": "grahamgriffith@zilidium.com", "correo": "grahamgriffith@zilidium.com",
...@@ -80,15 +82,15 @@ ...@@ -80,15 +82,15 @@
"cargo": "developer frontend", "cargo": "developer frontend",
"descripcion": "Consequat fugiat qui sint deserunt ullamco.", "descripcion": "Consequat fugiat qui sint deserunt ullamco.",
"nombreReferencia": "Iva", "nombreReferencia": "Iva",
"tipoExperiencia":"Trabajo Normal", "tipoExperiencia": "Trabajo Normal",
"telefonoReferencia": "(947) 580-2363" "telefonoReferencia": "(947) 580-2363"
} }
], ],
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-07-08", "fechaDesde": "2014-07-08",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "lic inf" "temaDeEstudio": "lic inf"
...@@ -105,9 +107,10 @@ ...@@ -105,9 +107,10 @@
}, },
{ {
"resumen": "Occaecat non cupidatat amet reprehenderit consectetur ullamco et.", "resumen": "Occaecat non cupidatat amet reprehenderit consectetur ullamco et.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Alejandra", "nombre": "Alejandra",
"apellido": "Riggs", "apellido": "Riggs",
"correo": "ruthrobertson@homelux.com", "correo": "ruthrobertson@homelux.com",
...@@ -124,7 +127,7 @@ ...@@ -124,7 +127,7 @@
"fechaDesde": "2014-08-26", "fechaDesde": "2014-08-26",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"cargo": "dba", "cargo": "dba",
"tipoExperiencia":"Trabajo Normal", "tipoExperiencia": "Trabajo Normal",
"descripcion": "Aute culpa ea mollit adipisicing dolore dolore amet adipisicing occaecat commodo enim cillum.", "descripcion": "Aute culpa ea mollit adipisicing dolore dolore amet adipisicing occaecat commodo enim cillum.",
"nombreReferencia": "Rose", "nombreReferencia": "Rose",
"telefonoReferencia": "(853) 471-2006" "telefonoReferencia": "(853) 471-2006"
...@@ -133,8 +136,8 @@ ...@@ -133,8 +136,8 @@
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-02-13", "fechaDesde": "2014-02-13",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "lic inf" "temaDeEstudio": "lic inf"
...@@ -151,9 +154,10 @@ ...@@ -151,9 +154,10 @@
}, },
{ {
"resumen": "Qui ullamco excepteur velit ad ullamco id id nisi irure dolore cupidatat mollit ullamco veniam.", "resumen": "Qui ullamco excepteur velit ad ullamco id id nisi irure dolore cupidatat mollit ullamco veniam.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Angelina", "nombre": "Angelina",
"apellido": "Wallace", "apellido": "Wallace",
"correo": "christiwalls@capscreen.com", "correo": "christiwalls@capscreen.com",
...@@ -173,14 +177,14 @@ ...@@ -173,14 +177,14 @@
"descripcion": "Aliquip occaecat minim dolor enim commodo.", "descripcion": "Aliquip occaecat minim dolor enim commodo.",
"nombreReferencia": "Elba", "nombreReferencia": "Elba",
"telefonoReferencia": "(881) 568-2597", "telefonoReferencia": "(881) 568-2597",
"tipoExperiencia":"Trabajo Normal" "tipoExperiencia": "Trabajo Normal"
} }
], ],
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-12-22", "fechaDesde": "2014-12-22",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "ing inf" "temaDeEstudio": "ing inf"
...@@ -197,9 +201,10 @@ ...@@ -197,9 +201,10 @@
}, },
{ {
"resumen": "Deserunt tempor ut et eiusmod et labore Lorem.", "resumen": "Deserunt tempor ut et eiusmod et labore Lorem.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Rivas", "nombre": "Rivas",
"apellido": "Owens", "apellido": "Owens",
"correo": "shirleyguzman@equitox.com", "correo": "shirleyguzman@equitox.com",
...@@ -219,14 +224,14 @@ ...@@ -219,14 +224,14 @@
"descripcion": "Dolore nulla deserunt fugiat est reprehenderit tempor qui excepteur.", "descripcion": "Dolore nulla deserunt fugiat est reprehenderit tempor qui excepteur.",
"nombreReferencia": "Crawford", "nombreReferencia": "Crawford",
"telefonoReferencia": "(903) 568-2045", "telefonoReferencia": "(903) 568-2045",
"tipoExperiencia":"Trabajo Normal" "tipoExperiencia": "Trabajo Normal"
} }
], ],
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-08-03", "fechaDesde": "2014-08-03",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "lic inf" "temaDeEstudio": "lic inf"
...@@ -243,8 +248,9 @@ ...@@ -243,8 +248,9 @@
}, },
{ {
"resumen": "Aliqua est adipisicing do exercitation sit laborum aliquip aliqua adipisicing enim aute.", "resumen": "Aliqua est adipisicing do exercitation sit laborum aliquip aliqua adipisicing enim aute.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI", "tipoDocumento": "CI",
"nombre": "Estelle", "nombre": "Estelle",
"apellido": "Gamble", "apellido": "Gamble",
...@@ -265,14 +271,14 @@ ...@@ -265,14 +271,14 @@
"descripcion": "Do do est ad ea pariatur aliquip sit ipsum in duis laborum velit magna.", "descripcion": "Do do est ad ea pariatur aliquip sit ipsum in duis laborum velit magna.",
"nombreReferencia": "Schultz", "nombreReferencia": "Schultz",
"telefonoReferencia": "(903) 420-3902", "telefonoReferencia": "(903) 420-3902",
"tipoExperiencia":"Trabajo Normal" "tipoExperiencia": "Trabajo Normal"
} }
], ],
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-07-13", "fechaDesde": "2014-07-13",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "ing inf" "temaDeEstudio": "ing inf"
...@@ -289,9 +295,10 @@ ...@@ -289,9 +295,10 @@
}, },
{ {
"resumen": "Officia eiusmod ut reprehenderit tempor consequat elit amet ex voluptate aute anim do.", "resumen": "Officia eiusmod ut reprehenderit tempor consequat elit amet ex voluptate aute anim do.",
"nacionalidad":"Paraguayo", "nacionalidad": "Paraguayo",
"estadoCivil":"Soltero", "postulaciones": [{ "id": 1 }],
"tipoDocumento":"CI", "estadoCivil": "Soltero",
"tipoDocumento": "CI",
"nombre": "Mariana", "nombre": "Mariana",
"apellido": "Ratliff", "apellido": "Ratliff",
"correo": "loramiddleton@musanpoly.com", "correo": "loramiddleton@musanpoly.com",
...@@ -311,15 +318,14 @@ ...@@ -311,15 +318,14 @@
"descripcion": "Anim labore anim veniam deserunt ex aute.", "descripcion": "Anim labore anim veniam deserunt ex aute.",
"nombreReferencia": "Francesca", "nombreReferencia": "Francesca",
"telefonoReferencia": "(961) 420-2150", "telefonoReferencia": "(961) 420-2150",
"tipoExperiencia":"Trabajo Normal" "tipoExperiencia": "Trabajo Normal"
} }
], ],
"estudios": [ "estudios": [
{ {
"tipoDeEstudio": "TERCIARIO", "tipoDeEstudio": "TERCIARIO",
"estado": "SUSPENDIDO", "estado": "SUSPENDIDO",
"institucion": {"nombre":"UNA"}, "institucion": { "nombre": "UNA" },
"fechaDesde": "2014-10-03", "fechaDesde": "2014-10-03",
"fechaHasta": "2016-01-01", "fechaHasta": "2016-01-01",
"temaDeEstudio": "ing inf" "temaDeEstudio": "ing inf"
...@@ -334,4 +340,4 @@ ...@@ -334,4 +340,4 @@
} }
] ]
} }
] ]
\ No newline at end of file
var cont_experiencia = 0; var cont_experiencia = 0;
let cont_estudios = 0; let cont_estudios = 0;
let cont_tecnologia = 0; let cont_tecnologia = 0;
let cont_cargo = 0;
const experiencias = []; const experiencias = [];
const estudios = []; const estudios = [];
const tecnologias = []; const tecnologias = [];
let noValidateFlag = false;
const postulaciones = [];
var cont_referencias=0 ;
const referencias= [];
const formValidator = function () { const formValidator = function () {
'use strict' 'use strict'
...@@ -20,6 +30,7 @@ const formValidator = function () { ...@@ -20,6 +30,7 @@ const formValidator = function () {
if (!form.checkValidity()) { if (!form.checkValidity()) {
event.preventDefault() event.preventDefault()
event.stopPropagation() event.stopPropagation()
noValidateFlag = true;
} }
form.classList.add('was-validated') form.classList.add('was-validated')
...@@ -191,6 +202,9 @@ function serializeJSON (form) { ...@@ -191,6 +202,9 @@ function serializeJSON (form) {
pairs["experiencias"] = experiencias.filter(exp => exp)//eliminacion de nulos pairs["experiencias"] = experiencias.filter(exp => exp)//eliminacion de nulos
pairs["estudios"] = estudios.filter(est => est)//eliminacion de nulos pairs["estudios"] = estudios.filter(est => est)//eliminacion de nulos
pairs["tecnologias"] = tecnologias.filter(tec => tec)//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 the JSON string
return JSON.stringify(pairs, null, 2); return JSON.stringify(pairs, null, 2);
...@@ -225,15 +239,18 @@ form.addEventListener("submit",(evt)=>{ ...@@ -225,15 +239,18 @@ form.addEventListener("submit",(evt)=>{
// evt.stopPropagation() // evt.stopPropagation()
// } // }
// form.classList.add('was-validated') // form.classList.add('was-validated')
postData('postulante', serializeJSON(form)) if(!noValidateFlag){
.then(response => { postData('postulante', serializeJSON(form))
if(response.status==200 || response.status==302){ .then(response => {
location.replace(response.url); if(response.status==200 || response.status==302){
}else{ location.replace(response.url);
console.log(response.text().then(value => console.log(value))) }else{
} console.log(response.text().then(value => console.log(value)))
}); }
evt.preventDefault(); });
evt.preventDefault();
}
noValidateFlag = false
} ); } );
document.querySelector("#btn-new-tech").addEventListener('click',()=>{document.querySelector("#tecnologia-nombre").classList.remove('d-none')}) document.querySelector("#btn-new-tech").addEventListener('click',()=>{document.querySelector("#tecnologia-nombre").classList.remove('d-none')})
...@@ -318,13 +335,95 @@ function agregarFieldEstudio(){ ...@@ -318,13 +335,95 @@ function agregarFieldEstudio(){
} }
function eliminarEstudio(event) { function eliminarEstudio(event) {
//eliminar del array //eliminar del array
estudios[event.target.parentElement.id.split("-")[1]]=null estudios[event.target.parentElement.id.split("-")[1]]=null
//eliminar en html //eliminar en html
event.target.parentElement.remove() event.target.parentElement.remove()
} }
/*--------------------------------------------------------------------*/
function agregarFieldCargo(){
//recoger del form
const pairs = {};
const formcar = document.querySelector("[name=cargo-form]");
const formData = new FormData(formcar);
//Validacion
let returnFlag = false;
let requiredValues = ["nombre"]
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<requiredValues.length;i++){
message+=", "+requiredValues[i];
}
message += " como minimo."
alert(message);
return;
}
for (const [name, value] of formData){
pairs[name] = value
}
console.log(pairs)
for(let i=0;i<cont_cargo;i++){
if(postulaciones[i]!==null){
if(postulaciones[i]["id"]===pairs["cargo-id"]){
alert("Ya has agregado ese cargo!")
cont_cargo--;
return;
}
}
}
postulaciones[cont_cargo]={}
postulaciones[cont_cargo]["id"]=pairs["cargo-id"]
//postulaciones[cont_cargo]["cargo"]=pairs["cargo-id"]=="-1"?{nombre: pairs["cargo-nombre"]}:{id: pairs["cargo-id"],nombre:document.querySelector('[name=cargo-id] > option[value="'+pairs["cargo-id"]+'"]').innerHTML}
console.log(postulaciones)
formcar.reset();
//imprimir lista actualizada
const div = document.querySelector("#cargos")
const div1 = document.createElement('div');
let content1='<ul>'
for (let index = 0; index < postulaciones.length; index++) {
const car = postulaciones[index];
if(car==null) continue;
content1 += `
<li id="car-${index}">
${document.querySelector('[name=cargo-id] > option[value="'+car.id+'"]').innerHTML}
<button type="button" onclick="eliminarCargoPostulante(event)">Eliminar</button>
</li>
`
}
content1 += "</ul>"
div1.innerHTML = content1
div.innerHTML = '';
div.appendChild(div1);
cont_cargo++;
}
/*---------------------------------------------------------------------------------------------------*/
function eliminarCargoPostulante(event) {
//eliminar del array
postulaciones[event.target.parentElement.id.split("-")[1]]=null
//eliminar en html
event.target.parentElement.remove()
}
/*--------------------------------------------------------------------*/
//evento para cambio de ciudad segun departamento //evento para cambio de ciudad segun departamento
...@@ -351,3 +450,82 @@ function listarCiudades(depId){ ...@@ -351,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<requiredValues.length;i++){
message+=", "+requiredValues[i];
}
message += " como minimo."
alert(message);
return;
}
for (const [name, value] of formData){
pos_rec = name.split("-");//rec-nombre-index
if (pos_rec.length > 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='<ul>'
for (let index = 0; index < referencias.length; index++) {
const exp = referencias[index];
if(exp==null) continue;
content += `
<li id="exp-${index}">
${exp.nombre}
<button type="button" onclick="eliminarReferencia(event)"> <span class="glyphicon glyphicon-trash"></span> Tras</button>
</li>
`
}
content += "</ul>"
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()
}
/*----------------------------------------------------------------- */
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<label>Nombre: ${postulante.nombre}</label><br> <label>Nombre: ${postulante.nombre}</label><br>
<label>Apellido ${postulante.apellido}</label><br> <label>Apellido ${postulante.apellido}</label><br>
<label>Tipo de documento: ${postulante.tipoDocumento}</label><br> <label>Tipo de documento: ${postulante.tipoDocumento}</label><br>
<label>Cedula: ${postulante.ci}</label><br> <label>Cedula: ${postulante.nroDocument}</label><br>
<label>Correo: ${postulante.correo}</label><br> <label>Correo: ${postulante.correo}</label><br>
<label>Departamento: ${postulante.getCiudad().getDepartamento().getNombre()}</label><br> <label>Departamento: ${postulante.getCiudad().getDepartamento().getNombre()}</label><br>
<label>Ciudad: ${postulante.getCiudad().getNombre()}</label><br> <label>Ciudad: ${postulante.getCiudad().getNombre()}</label><br>
...@@ -67,6 +67,12 @@ ...@@ -67,6 +67,12 @@
<label>Telefono: ${detalle_referencias.getTelefono()}</label><br> <label>Telefono: ${detalle_referencias.getTelefono()}</label><br>
</c:forEach> </c:forEach>
<br><label>CARGOS AL CUAL POSTULA</label><br>
<c:forEach items="${postulante.postulaciones}" var="convocatoria">
<label>Nombre: ${convocatoria.getCargo().getNombre()}</label><br>
</c:forEach>
</div> </div>
......
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
<option value="36">Mayor a 3 años</option> <option value="36">Mayor a 3 años</option>
<option value="60">Mayor a 5 años</option> <option value="60">Mayor a 5 años</option>
</select> </select>
</form> </form>
</div> </div>
<table class="table"> <table class="table">
...@@ -91,7 +92,17 @@ ...@@ -91,7 +92,17 @@
<td><a href="/postulante/${postulante.id}">Ver</a></td> <td><a href="/postulante/${postulante.id}">Ver</a></td>
</tr> </tr>
</c:forEach> </c:forEach>
</tbody>
</table>
<div>
<nav aria-label="Page navigation example">
<ul class="pagination">
<c:forEach begin="1" end="${pages}" var="nro">
<li class="page-item ${(param.nroPagina == null and nro == 1) or param.nroPagina == nro-1 ? 'active' : ''}"><a class="page-link" href="javascript:buscarPagina(${nro})">${nro}</a></li>
</c:forEach>
</ul>
</nav>
</div> </div>
<script> <script>
function habilitarLvlTec(){ function habilitarLvlTec(){
...@@ -102,10 +113,21 @@ ...@@ -102,10 +113,21 @@
} }
} }
function buscarPagina(nro){
nro--
const aBuscar = 'nroPagina='+nro
if(!location.search) location.search = "?"+aBuscar
const inicial = location.search.search(aBuscar);
if(inicial==-1){//si no se encuentra y hay otros queries
location.search = "&"+aBuscar
}
location.search.replace('nroPagina=',aBuscar)
}
const tecId = document.querySelector("#tecId"); const tecId = document.querySelector("#tecId");
const lvlTec = document.querySelector("#lvlTec"); const lvlTec = document.querySelector("#lvlTec");
tecId.addEventListener('change',habilitarLvlTec); tecId.addEventListener('change',habilitarLvlTec);
habilitarLvlTec() habilitarLvlTec()
</script> </script>
</body> </body>
</html> </html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment