Commit cc771cb7 by Joel Florentin

form con ciudad, estado civil y nacionalidad

parent fe3075a0
......@@ -5,9 +5,15 @@ import java.util.List;
import javax.validation.ConstraintViolationException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.roshka.modelo.Disponibilidad;
import com.roshka.modelo.Modalidad;
import com.roshka.modelo.EstadoCivil;
import com.roshka.modelo.Nacionalidad;
import com.roshka.modelo.Postulante;
import com.roshka.modelo.TipoExperiencia;
import com.roshka.repositorio.CiudadRepository;
import com.roshka.repositorio.DepartamentoRepository;
import com.roshka.repositorio.ExperienciaRepository;
import com.roshka.repositorio.PostulanteRepository;
import com.roshka.repositorio.TecnologiaRepository;
......@@ -32,13 +38,16 @@ public class PostulanteController {
@Autowired
ExperienciaRepository expRepo;
@Autowired
CiudadRepository ciuRepo;
@Autowired
DepartamentoRepository depRepo;
@RequestMapping("/")
public String index() {
List<Postulante> j= post.personasConExperienciaMayor(30);
for (Postulante postulante : j) {
System.out.println(postulante.getNombre());
}
return "index";
}
......@@ -54,8 +63,19 @@ public class PostulanteController {
@RequestMapping("/postulante")
public String getFormPostulante(Model model){
model.addAttribute("tecnologias", tecRepo.findAll());
model.addAttribute("modalidades", Modalidad.values());
model.addAttribute("disponibilidades", Disponibilidad.values());
//TODO:
model.addAttribute("estadosCiviles", EstadoCivil.values());
model.addAttribute("nacionalidades", Nacionalidad.values());
model.addAttribute("tiposExperencia", TipoExperiencia.values());
try {
model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
model.addAttribute("departamentos", depRepo.findAll());
return "postulante-form";
}
......
......@@ -12,6 +12,8 @@ import javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
@Table(name="ciudad")
public class Ciudad{
......@@ -34,6 +36,7 @@ public class Ciudad{
@ManyToOne(targetEntity = Departamento.class,fetch = FetchType.EAGER)
@JoinColumn(name="departamento_id",insertable = false, updatable = false)
@JsonBackReference
private Departamento departamento;
......
......@@ -9,6 +9,8 @@ import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
@Table(name="departamento")
public class Departamento {
......@@ -18,6 +20,7 @@ public class Departamento {
private String nombre;
@OneToMany(mappedBy = "departamento",cascade = CascadeType.ALL)
@JsonManagedReference
private List<Ciudad> ciudad;
......
package com.roshka.modelo;
import com.fasterxml.jackson.annotation.JsonValue;
public enum EstadoCivil {
SOLTERO("Soltero"),CONCUBINADO("Concubinado"),CASADO("Casado"),VIUDO("Viudo"),DIVORCIADO("Divorciado");
private String descripcion;
private EstadoCivil(String descripcion) {
this.descripcion = descripcion;
}
@JsonValue
public String getDescripcion() {
return descripcion;
}
}
......@@ -53,9 +53,39 @@ public class Experiencia {
@JoinColumn
private Postulante postulante;
@ManyToOne
@Column(name = "tipo_experiencia")
@NotNull
private TipoExperiencia tipoExperiencia;
@Column(name = "descripcion")
@NotBlank
private String descripcion;
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Date getFechaDesde() {
return fechaDesde;
}
public String getMotivoSalida() {
return motivoSalida;
}
public TipoExperiencia getTipoExperiencia() {
return tipoExperiencia;
}
public void setMotivoSalida(String motivoSalida) {
this.motivoSalida = motivoSalida;
}
public void setTipoExperiencia(TipoExperiencia tipoExperiencia) {
this.tipoExperiencia = tipoExperiencia;
}
public long getId() {
return id;
......
package com.roshka.modelo;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
@Table(name = "experiencia_reconocimiento")
public class ExperienciaReconocimiento {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id;
@ManyToOne(optional = false)
@JoinColumn
@JsonBackReference
private Experiencia experiencia;
@Column(name="nombre")
private String nombre;
@Column(name="certificado")
private String certificado;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Experiencia getExperiencia() {
return experiencia;
}
public void setExperiencia(Experiencia experiencia) {
this.experiencia = experiencia;
}
public String getCertificado() {
return certificado;
}
public String getNombre() {
return nombre;
}
public void setCertificado(String certificado) {
this.certificado = certificado;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
package com.roshka.modelo;
import java.util.Arrays;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class ModalidadConverter implements AttributeConverter<Modalidad, String> {
@Override
public String convertToDatabaseColumn(Modalidad modalidad) {
if (modalidad == null) {
return null;
}
return modalidad.getCode();
}
@Override
public Modalidad convertToEntityAttribute(String code) {
if (code == null) {
return null;
}
return Arrays.stream(Modalidad.values())
.filter(c -> c.getCode().equals(code))
.findFirst()
.orElseThrow(IllegalArgumentException::new);
}
}
......@@ -2,22 +2,16 @@ package com.roshka.modelo;
import com.fasterxml.jackson.annotation.JsonValue;
public enum Modalidad {
PRESENCIAL("P","Presencial"), SEMIPRESENCIAL("S","Semi Presencial"), REMOTO("R","Remoto");
public enum Nacionalidad {
PY("Paraguayo"),EX("Extranjero");
private String code;
private String descripcion;
private Modalidad(String code, String descripcion) {
this.code = code;
private Nacionalidad(String descripcion) {
this.descripcion = descripcion;
}
@JsonValue
public String getCode() {
return code;
}
public String getDescripcion() {
return descripcion;
}
......
......@@ -68,11 +68,11 @@ public class Postulante {
@Column(name="estado_civil")
@NotNull
private String estadoCivil;
private EstadoCivil estadoCivil;
@Column(name="nacionalidad", length = 2)
@NotNull
private String nacionalidad;
private Nacionalidad nacionalidad;
@Column(name = "tipo_documento", length = 2)
@NotBlank(message = "este campo debe estar completo")
......@@ -212,23 +212,23 @@ public class Postulante {
public void setCiudadId(Long ciudadId) {
this.ciudadId = ciudadId;
}
public void setEstadoCivil(String estadoCivil) {
public void setEstadoCivil(EstadoCivil estadoCivil) {
this.estadoCivil = estadoCivil;
}
public void setTipoDocumento(String tipoDocumento) {
this.tipoDocumento = tipoDocumento;
}
public String getEstadoCivil() {
public EstadoCivil getEstadoCivil() {
return estadoCivil;
}
public String getTipoDocumento() {
return tipoDocumento;
}
public String getNacionalidad() {
public Nacionalidad getNacionalidad() {
return nacionalidad;
}
public void setNacionalidad(String nacionalidad) {
public void setNacionalidad(Nacionalidad nacionalidad) {
this.nacionalidad = nacionalidad;
}
......
package com.roshka.modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import com.fasterxml.jackson.annotation.JsonValue;
import javax.persistence.Table;
public enum TipoExperiencia {
TRABAJO_NORMAL("Trabajo Normal"), PASANTIA("Pasantia");
@Entity
@Table(name = "tipo_experiencia")
public class TipoExperiencia {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id;
@Column(name = "descripcion")
private String descripcion;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
private TipoExperiencia(String descripcion){
this.descripcion = descripcion;
}
@JsonValue
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
}
package com.roshka.repositorio;
import org.springframework.data.jpa.repository.JpaRepository;
import com.roshka.modelo.ExperienciaReconocimiento;
public interface ExperienciaReconocimientoRepository extends JpaRepository<ExperienciaReconocimiento,Long> {
}
[
{
"resumen": "In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Taylor",
"apellido": "Obrien",
......@@ -19,16 +19,11 @@
"institucion": "Fanfare",
"fechaDesde": "2014-09-10",
"fechaHasta": "2016-01-01",
"tipoExperiencia":"Trabajo Normal",
"cargo": "dba",
"descripcion": "Enim qui Lorem ut magna.",
"nombreReferencia": "Marissa",
"telefonoReferencia": "(804) 471-2089",
"reconocimientos": [
{
"nombre": "ganador de x",
"certificado": "cert"
}
]
"telefonoReferencia": "(804) 471-2089"
}
],
"estudios": [
......@@ -69,8 +64,8 @@
},
{
"resumen": "Do nostrud aliqua adipisicing in sunt aute id do elit ut dolor ad aliquip.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Hopkins",
"apellido": "Parks",
......@@ -90,13 +85,8 @@
"cargo": "developer frontend",
"descripcion": "Consequat fugiat qui sint deserunt ullamco.",
"nombreReferencia": "Iva",
"telefonoReferencia": "(947) 580-2363",
"reconocimientos": [
{
"nombre": "ganador de x",
"certificado": "cert"
}
]
"tipoExperiencia":"Trabajo Normal",
"telefonoReferencia": "(947) 580-2363"
}
],
"estudios": [
......@@ -125,8 +115,8 @@
},
{
"resumen": "Occaecat non cupidatat amet reprehenderit consectetur ullamco et.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Alejandra",
"apellido": "Riggs",
......@@ -144,15 +134,10 @@
"fechaDesde": "2014-08-26",
"fechaHasta": "2016-01-01",
"cargo": "dba",
"tipoExperiencia":"Trabajo Normal",
"descripcion": "Aute culpa ea mollit adipisicing dolore dolore amet adipisicing occaecat commodo enim cillum.",
"nombreReferencia": "Rose",
"telefonoReferencia": "(853) 471-2006",
"reconocimientos": [
{
"nombre": "mejor alumno",
"certificado": "cert"
}
]
"telefonoReferencia": "(853) 471-2006"
}
],
"estudios": [
......@@ -181,8 +166,8 @@
},
{
"resumen": "Qui ullamco excepteur velit ad ullamco id id nisi irure dolore cupidatat mollit ullamco veniam.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Angelina",
"apellido": "Wallace",
......@@ -203,12 +188,7 @@
"descripcion": "Aliquip occaecat minim dolor enim commodo.",
"nombreReferencia": "Elba",
"telefonoReferencia": "(881) 568-2597",
"reconocimientos": [
{
"nombre": "ganador de x",
"certificado": "cert"
}
]
"tipoExperiencia":"Trabajo Normal"
}
],
"estudios": [
......@@ -237,8 +217,8 @@
},
{
"resumen": "Deserunt tempor ut et eiusmod et labore Lorem.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Rivas",
"apellido": "Owens",
......@@ -259,12 +239,7 @@
"descripcion": "Dolore nulla deserunt fugiat est reprehenderit tempor qui excepteur.",
"nombreReferencia": "Crawford",
"telefonoReferencia": "(903) 568-2045",
"reconocimientos": [
{
"nombre": "ganador de x",
"certificado": "cert"
}
]
"tipoExperiencia":"Trabajo Normal"
}
],
"estudios": [
......@@ -293,8 +268,8 @@
},
{
"resumen": "Aliqua est adipisicing do exercitation sit laborum aliquip aliqua adipisicing enim aute.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Estelle",
"apellido": "Gamble",
......@@ -315,12 +290,7 @@
"descripcion": "Do do est ad ea pariatur aliquip sit ipsum in duis laborum velit magna.",
"nombreReferencia": "Schultz",
"telefonoReferencia": "(903) 420-3902",
"reconocimientos": [
{
"nombre": "mejor alumno",
"certificado": "cert"
}
]
"tipoExperiencia":"Trabajo Normal"
}
],
"estudios": [
......@@ -349,8 +319,8 @@
},
{
"resumen": "Officia eiusmod ut reprehenderit tempor consequat elit amet ex voluptate aute anim do.",
"nacionalidad":"py",
"estadoCivil":"SOLTERO",
"nacionalidad":"Paraguayo",
"estadoCivil":"Soltero",
"tipoDocumento":"ci",
"nombre": "Mariana",
"apellido": "Ratliff",
......@@ -371,12 +341,8 @@
"descripcion": "Anim labore anim veniam deserunt ex aute.",
"nombreReferencia": "Francesca",
"telefonoReferencia": "(961) 420-2150",
"reconocimientos": [
{
"nombre": "ganador de x",
"certificado": "cert"
}
]
"tipoExperiencia":"Trabajo Normal"
}
],
"estudios": [
......
......@@ -253,6 +253,27 @@ function eliminarEstudio(event) {
//evento para cambio de ciudad segun departamento
const depSelect = document.querySelector("#departamentos");
depSelect.addEventListener("change",evt => listarCiudades(evt.target.value))
listarCiudades(depSelect.value);
//variable ciudades esta declarada en el jsp
/**
* Listar todas las ciudades en el select de ciudades
* @param {*} depId
*/
function listarCiudades(depId){
const ciuAmostrar = ciudades.filter(c=>c.departamentoId==depId);
const ciudad = document.querySelector("select[name=ciudadId]");
const frag = document.createDocumentFragment();
for (const ciu of ciuAmostrar) {
const opt = document.createElement("option");
opt.value = ciu.id;
opt.innerHTML = ciu.nombre;
opt.setAttribute("data-departamentoId",ciu.departamentoId);
frag.appendChild(opt)
}
ciudad.replaceChildren(frag);
}
......@@ -172,22 +172,48 @@
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="nacionalidad" class="form-label"> Nacionalidad</label>
<select name="nacionalidad" id="nacionalidad" class="bg-light">
<c:forEach items="${nacionalidades}" var="nacionalidad">
<option value="${nacionalidad.getDescripcion()}">${nacionalidad.getDescripcion()}</option>
</c:forEach>
</select> </div>
<div class="inputs mb-3 col-md-6">
<label for="ci" class="form-label">Cedula de identidad</label>
<input type="number" name="ci" class="form-control " id="ci" required>
<label for="tipoDocumento" class="form-label">Tipo de documento</label>
<input type="text" name="tipoDocumento" class="form-control " id="tipoDocumento" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label form="ciudad" class="form-label">Ciudad</label>
<input type="text" name="ciudad" class="form-control " id="ciudad" required>
<label for="ci" class="form-label">Cedula de identidad</label>
<input type="number" name="ci" class="form-control " id="ci" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="departamentos" class="form-label"> Departamentos</label>
<select id="departamentos" class="bg-light">
<c:forEach items="${departamentos}" var="departamentos">
<option value="${departamentos.getId()}">${departamentos.getNombre()}</option>
</c:forEach>
</select>
</div>
<div class="inputs mb-3 col-md-6">
<label for="ciudad" class="form-label"> Ciudad</label>
<select name="ciudadId" id="ciudad" class="bg-light">
</select>
</div>
<div class="inputs mb-3 col-md-6">
<label for="telefono" class="form-label">Telefono</label>
<input type="number" name="telefono" class="form-control " id="telefono" required>
......@@ -225,10 +251,10 @@
</select> </div>
<div class="inputs mb-3 col-md-6">
<label for="modalidad" class="form-label"> Modalidad</label>
<select name="modalidad" id="modalidad" class="bg-light">
<c:forEach items="${modalidades}" var="modalidad">
<option value="${modalidad.getCode()}">${modalidad.getDescripcion()}</option>
<label for="estadoCivil" class="form-label"> Estado Civil</label>
<select name="estadoCivil" id="estadoCivil" class="bg-light">
<c:forEach items="${estadosCiviles}" var="estadoCivil">
<option value="${estadoCivil.getDescripcion()}">${estadoCivil.getDescripcion()}</option>
</c:forEach>
......@@ -318,34 +344,21 @@
</div>
<div class="inputs">
<label class="form-label">Reconocimientos</label>
<label for="motivoSalida" class="form-label">Motivo de Salida</label>
<textarea class="form-control " name="motivoSalida" id="motivoSalida" ></textarea>
</div>
<div class="inputs">
<label for="tipoExperiencia" class="form-label"> Tipo de Experiencia</label>
<select name="tipoExperiencia" id="tipoExperiencia" class="bg-light">
<c:forEach items="${tiposExperencia}" var="tipoExperiencia">
<option value="${tipoExperiencia.getDescripcion()}">${tipoExperiencia.getDescripcion()}</option>
</c:forEach>
<div class="row mb-3">
<div class="inputs col">
<input type="text" class="form-control" name="rec-nombre-0" placeholder="Titulo del reconocimiento" aria-label="First name">
</div>
<div class=" inputs col">
<input type="text" class="form-control" name="rec-certificado-0" placeholder="Adjuntar archivo" aria-label="Last name">
</div>
</div>
<div class="row mb-3">
<div class="inputs col">
<input type="text" class="form-control" name="rec-nombre-1" placeholder="Titulo del reconocimiento" aria-label="First name">
</div>
<div class="inputs col">
<input type="text" class="form-control" name="rec-certificado-1" placeholder="Adjuntar archivo" aria-label="Last name">
</div>
</div>
<div class="row mb-3">
<div class="inputs col">
<input type="text" class="form-control" name="rec-nombre-2" placeholder="Titulo del reconocimiento" aria-label="First name">
</div>
<div class="inputs col">
<input type="text" class="form-control" name="rec-certificado-2" placeholder="Adjuntar archivo" aria-label="Last name">
</div>
</select>
</div>
</form>
</div>
<div class="modal-footer">
......@@ -460,6 +473,10 @@
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script>
var ciudades = ${ciudades};
</script>
<script src="./main.js"></script>
</body>
</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