Commit 3a517c83 by Cesar Giulano Gonzalez Maqueda

Merge con joel-william

parents 14bbcaae 14988be1
...@@ -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;
...@@ -49,13 +57,16 @@ public class PostulanteController { ...@@ -49,13 +57,16 @@ public class PostulanteController {
CiudadRepository ciuRepo; CiudadRepository ciuRepo;
EstudioRepository estudioRepository; EstudioRepository estudioRepository;
PostulanteTecnologiaRepository postulanteTecnologiaRepository; 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, EstudioRepository estudioRepository, CiudadRepository ciuRepo, EstudioRepository estudioRepository,
PostulanteTecnologiaRepository postulanteTecnologiaRepository) { PostulanteTecnologiaRepository postulanteTecnologiaRepository,
ConvocatoriaRepository cargoRepo, CargoRepository carRepo) {
this.post = post; this.post = post;
this.tecRepo = tecRepo; this.tecRepo = tecRepo;
this.expRepo = expRepo; this.expRepo = expRepo;
...@@ -64,6 +75,8 @@ public class PostulanteController { ...@@ -64,6 +75,8 @@ public class PostulanteController {
this.ciuRepo = ciuRepo; this.ciuRepo = ciuRepo;
this.estudioRepository = estudioRepository; this.estudioRepository = estudioRepository;
this.postulanteTecnologiaRepository = postulanteTecnologiaRepository; this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
this.cargoRepo =cargoRepo;
this.carRepo=carRepo;
} }
@RequestMapping("home") @RequestMapping("home")
...@@ -81,12 +94,17 @@ public class PostulanteController { ...@@ -81,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) {
...@@ -100,6 +118,7 @@ public class PostulanteController { ...@@ -100,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";
} }
...@@ -113,11 +132,12 @@ public class PostulanteController { ...@@ -113,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());
...@@ -139,6 +159,11 @@ public class PostulanteController { ...@@ -139,6 +159,11 @@ public class PostulanteController {
).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,11 +29,12 @@ public class PostulanteTecnologia { ...@@ -29,11 +29,12 @@ 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(cascade = CascadeType.ALL)
@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)
......
...@@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonBackReference; ...@@ -9,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
......
...@@ -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);
} }
...@@ -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;
...@@ -43,15 +45,17 @@ public interface PostulanteRepository extends JpaRepository<Postulante,Long> { ...@@ -43,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);
} }
[
{
"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",
...@@ -19,7 +20,7 @@ ...@@ -19,7 +20,7 @@
"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"
......
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; let noValidateFlag = false;
const postulaciones = [];
const formValidator = function () { const formValidator = function () {
'use strict' 'use strict'
...@@ -193,6 +197,7 @@ function serializeJSON (form) { ...@@ -193,6 +197,7 @@ 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
// Return the JSON string // Return the JSON string
return JSON.stringify(pairs, null, 2); return JSON.stringify(pairs, null, 2);
...@@ -329,7 +334,85 @@ function eliminarEstudio(event) { ...@@ -329,7 +334,85 @@ function eliminarEstudio(event) {
//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
......
...@@ -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>
......
...@@ -260,6 +260,12 @@ ...@@ -260,6 +260,12 @@
</select> </div> </select> </div>
<div class="inputs p-3 py-5">
<div class=" inputs d-flex justify-content-between align-items-center experience"><span class="border px-3 p-1 add-experience" data-toggle="modal" data-target="#cargoForm"><i class="fa fa-plus"></i>&nbsp;Cargo al que postulas</span></div><br>
</div>
<div class="mt-3 gap-2 d-flex justify-content-between" id="cargos">
</div>
<div class="inputs p-3 py-5"> <div class="inputs p-3 py-5">
<div class=" inputs d-flex justify-content-between align-items-center experience"><span class="border px-3 p-1 add-experience" data-toggle="modal" data-target="#experienciaForm"><i class="fa fa-plus"></i>&nbsp;Agregar Experiencia</span></div><br> <div class=" inputs d-flex justify-content-between align-items-center experience"><span class="border px-3 p-1 add-experience" data-toggle="modal" data-target="#experienciaForm"><i class="fa fa-plus"></i>&nbsp;Agregar Experiencia</span></div><br>
...@@ -296,7 +302,37 @@ ...@@ -296,7 +302,37 @@
</div> </div>
</div> </div>
</form> </form>
<!---------------------------------------Modal de Cargos disponibles---------------------------------------------------------------->
<div class="modal fade" id="cargoForm" tabindex="-2" role="dialog" aria-labelledby="cargoForm" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel" >CargosDisponibles</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form name="cargo-form" class="needs-validation" novalidate>
<label for="cargo-nombre" class="form-label">Cargo</label>
<div class="input-group mb-3">
<select class="form-select" name="cargo-id" aria-label="Default select example" required>
<option value="-1" selected>Open this select menu</option>
<c:forEach items="${CargosDisponibles}" var="convocatoria">
<option value="${convocatoria.getId()}">${convocatoria.getCargo().getNombre()}</option>
</c:forEach>>
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldCargo()" data-dismiss="modal">Agregar</button>
</div>
</div>
</div>
</div>
<!-------------------------------------------------------------------------------------------------------------------------->
<!--Modal de Experiencia--> <!--Modal de Experiencia-->
<div class="modal fade" id="experienciaForm" tabindex="-1" role="dialog" aria-labelledby="experienciaForm" aria-hidden="true"> <div class="modal fade" id="experienciaForm" tabindex="-1" role="dialog" aria-labelledby="experienciaForm" aria-hidden="true">
......
...@@ -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