Commit eb3b4588 by willgonzz

merge con Joel y modificacion de cantidad de elementos por paginas en las listas

parents b549d351 f35018b6
......@@ -68,6 +68,13 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
......
......@@ -34,7 +34,7 @@ public class CargoController {
@RequestMapping("/cargos")
public String menuCargos(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) {
final Integer CANTIDAD_POR_PAGINA = 1;
final Integer CANTIDAD_POR_PAGINA = 10;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
Page<Cargo> CargoPag=cargoRepo.findAllCargo(page);
List<Cargo> cargo = CargoPag.getContent();
......
......@@ -95,13 +95,6 @@ public class PostulanteController {
return "postulante-form";
}
/* @PostMapping("/uploadCVPostulante")
public String uploadFile(@RequestParam("file") MultipartFile file) {
dbFileRepository.save(storeFile(file));
DBFile dbFile = dbFileRepository.save(storeFile(file));
return "{\"id\": "+dbFile.getId()+"}";
} */
private DBFile createFile(MultipartFile file) {
// Normalize file name
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
......
......@@ -91,7 +91,7 @@ public class PostulanteRRHHController {
@RequestParam(required = false)Long convId,
@RequestParam(defaultValue = "0")Integer nroPagina
) {
final Integer CANTIDAD_POR_PAGINA = 5;
final Integer CANTIDAD_POR_PAGINA = 10;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
model.addAttribute("tecnologias", tecRepo.findAll());
model.addAttribute("disponibilidades", Disponibilidad.values());
......
......@@ -45,7 +45,7 @@ public String addtecnologiaView(Model model,@PathVariable(required = false) Long
@RequestMapping("/tecnologias")
public String menuTecnologias(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) {
final Integer CANTIDAD_POR_PAGINA = 5;
final Integer CANTIDAD_POR_PAGINA = 10;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
Page<Tecnologia> tecnologiaPag=tecRepo.findAllTecnologia(page);
List<Tecnologia> tecnologia = tecnologiaPag.getContent();
......
......@@ -13,7 +13,9 @@ import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
import lombok.Data;
@Entity @Data
@Table(name = "cargo")
public class Cargo {
@Id
......@@ -28,19 +30,6 @@ public class Cargo {
@JsonManagedReference
private List<ConvocatoriaCargo> convocatorias;
public Long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public void setId(Long id) {
this.id = id;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public List<ConvocatoriaCargo> getConvocatorias() {
return convocatorias;
}
......
......@@ -14,8 +14,10 @@ import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.Data;
@Entity
@Entity @Data
@Table(name="ciudad")
public class Ciudad{
@Id
......@@ -40,7 +42,7 @@ public class Ciudad{
@JsonBackReference
private Departamento departamento;
/*
public Long getId() {
return this.id;
}
......@@ -56,7 +58,7 @@ public class Ciudad{
public void setNombre(String nombre) {
this.nombre = nombre;
}
*/
public Departamento getDepartamento() {
return this.departamento;
}
......
......@@ -19,8 +19,10 @@ import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.roshka.utils.Helper;
import lombok.Data;
@Entity
@Table(name = "convocatoria_cargo")
@Table(name = "convocatoria_cargo") @Data
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
public class ConvocatoriaCargo {
@Id
......@@ -55,30 +57,14 @@ public class ConvocatoriaCargo {
@ManyToMany(mappedBy = "postulaciones")
private List<Postulante> postulantes;
public Long getId() {
return id;
}
public Cargo getCargo() {
return cargo;
}
public int getCupos() {
return cupos;
}
public Date getFechaFin() {
return fechaFin;
}
public Date getFechaInicio() {
return fechaInicio;
}
public void setId(Long id) {
this.id = id;
}
public void setCargo(Cargo cargo) {
this.cargo = cargo;
}
public void setCupos(int cupos) {
this.cupos = cupos;
}
public void setFechaFin(Date fechaFin) {
this.fechaFin = fechaFin;
}
......
......@@ -11,7 +11,9 @@ import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
import lombok.Data;
@Entity @Data
@Table(name="departamento")
public class Departamento {
@Id
......@@ -26,22 +28,6 @@ public class Departamento {
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public List<Ciudad> getCiudad() {
return this.ciudad;
}
......
......@@ -14,12 +14,14 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.roshka.utils.Helper;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
@Entity
@Entity @Data
@Table(name = "experiencia")
public class Experiencia {
@Id
......@@ -61,45 +63,17 @@ public class Experiencia {
@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;
}
public void setId(long id) {
this.id = id;
}
public String getInstitucion() {
return institucion;
}
public void setInstitucion(String institucion) {
this.institucion = institucion;
}
public void setFechaDesde(String fechaDesde) {
this.fechaDesde = Helper.convertirFecha(fechaDesde);
}
......@@ -112,24 +86,6 @@ public class Experiencia {
public void setFechaHasta(String fechaHasta) {
this.fechaHasta = Helper.convertirFecha(fechaHasta);
}
public String getNombreReferencia() {
return nombreReferencia;
}
public String getTelefonoReferencia() {
return telefonoReferencia;
}
public void setNombreReferencia(String nombreReferencia) {
this.nombreReferencia = nombreReferencia;
}
public void setTelefonoReferencia(String telefonoReferencia) {
this.telefonoReferencia = telefonoReferencia;
}
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
public void setPostulante(Postulante postulante) {
this.postulante = postulante;
}
......
......@@ -2,11 +2,13 @@ package com.roshka.modelo;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.Data;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Entity
@Entity @Data
@Table(name = "institucion")
public class Institucion {
@Id
......@@ -26,30 +28,6 @@ public class Institucion {
@JsonManagedReference
private List<Estudio> estudioList;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getSubNombre() {
return subNombre;
}
public void setSubNombre(String subNombre) {
this.subNombre = subNombre;
}
public List<Estudio> getEstudioList() {
return estudioList;
}
......
......@@ -3,7 +3,7 @@ package com.roshka.modelo;
import com.fasterxml.jackson.annotation.JsonValue;
public enum Nacionalidad {
PY("Paraguayo"),EX("Extranjero");
PY("Paraguaya"),EX("Extranjera");
private String descripcion;
......
......@@ -9,6 +9,8 @@ import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.roshka.utils.Helper;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -17,6 +19,7 @@ import java.util.List;
@Entity
@Table(name="postulante")
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
@Data
public class Postulante {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
......@@ -31,16 +34,19 @@ public class Postulante {
@Column(name = "apellido")
@NotBlank(message = "Este campo no puede estar vacio")
@Size(max = 255)
private String apellido;
@Column(name = "nro_document")
@NotBlank(message = "Este campo no puede estar vacio")
@Size(max = 120)
private String nroDocument;
@Column(name = "correo")
@NotBlank(message = "Este campo no puede estar vacio")
@Email(message = "Formato incorrecto de correo")
private String correo;
@ManyToOne(targetEntity = Ciudad.class,fetch = FetchType.EAGER)
......@@ -119,175 +125,13 @@ public class Postulante {
private DBFile cvFile;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public void setnroDocument(String nroDocument) {
this.nroDocument = nroDocument;
}
public String getCorreo() {
return correo;
}
public void setCorreo(String correo) {
this.correo = correo;
}
public String getTelefono() {
return telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public Date getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public void setFechaNacimiento(String fechaNacimiento) {
this.fechaNacimiento = Helper.convertirFecha(fechaNacimiento);
}
public String getResumen() {
return resumen;
}
public void setResumen(String resumen) {
this.resumen = resumen;
}
public Long getNivelIngles() {
return nivelIngles;
}
public void setNivelIngles(Long nivelIngles) {
this.nivelIngles = nivelIngles;
}
public Disponibilidad getDisponibilidad() {
return disponibilidad;
}
public Ciudad getCiudad() {
return this.ciudad;
}
public void setCiudad(Ciudad ciudad) {
this.ciudad = ciudad;
}
public Long getCiudadId() {
return this.ciudadId;
}
public void setCiudadId(Long ciudadId) {
this.ciudadId = ciudadId;
}
public void setEstadoCivil(EstadoCivil estadoCivil) {
this.estadoCivil = estadoCivil;
}
public void setTipoDocumento(TipoDocumento tipoDocumento) {
this.tipoDocumento = tipoDocumento;
}
public EstadoCivil getEstadoCivil() {
return estadoCivil;
}
public TipoDocumento getTipoDocumento() {
return tipoDocumento;
}
public Nacionalidad getNacionalidad() {
return nacionalidad;
}
public void setNacionalidad(Nacionalidad nacionalidad) {
this.nacionalidad = nacionalidad;
}
public void setDisponibilidad(Disponibilidad disponibilidad) {
this.disponibilidad = disponibilidad;
}
public List<PostulanteTecnologia> getTecnologias() {
return tecnologias;
}
public void setTecnologias(List<PostulanteTecnologia> tecnologias) {
this.tecnologias = tecnologias;
}
public List<Estudio> getEstudios() {
return estudios;
}
public List<Experiencia> getExperiencias() {
return experiencias;
}
public void setEstudios(List<Estudio> estudios) {
this.estudios = estudios;
}
public void setExperiencias(List<Experiencia> experiencias) {
this.experiencias = experiencias;
}
public List<ConvocatoriaCargo> getPostulaciones() {
return postulaciones;
}
public void setPostulaciones(List<ConvocatoriaCargo> postulaciones) {
this.postulaciones = postulaciones;
}
public void setReferencias(List<ReferenciaPersonal> referencias) {
this.referencias = referencias;
}
public List<ReferenciaPersonal> getReferencias() {
return referencias;
}
public EstadoPostulante getEstadoPostulante() {
return this.estadoPostulante;
}
public void setEstadoPostulante(EstadoPostulante estadoPostulante) {
this.estadoPostulante = estadoPostulante;
}
public String getComentarioRRHH(){
return comentarioRRHH;
}
public void setComentarioRRHH(String comentarioRRHH){
this.comentarioRRHH=comentarioRRHH;
}
public DBFile getCvFile() {
return cvFile;
}
public String getNroDocument() {
return nroDocument;
}
public void setCvFile(DBFile cvFile) {
this.cvFile = cvFile;
}
}
......@@ -15,7 +15,9 @@ import javax.validation.constraints.Min;
import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
import lombok.Data;
@Entity @Data
@Table(name="postulante_tecnologia",
uniqueConstraints=@UniqueConstraint(columnNames={"postulante_id", "tecnologia_id"}))
......@@ -39,18 +41,6 @@ public class PostulanteTecnologia {
@JsonBackReference(value = "postulantetecnologia-postulante")
private Postulante postulante;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Long getNivel() {
return nivel;
}
public void setNivel(Long nivel) {
this.nivel = nivel;
}
public Tecnologia getTecnologia() {
return tecnologia;
}
......
......@@ -2,7 +2,9 @@ package com.roshka.modelo;
import javax.persistence.*;
@Entity
import lombok.Data;
@Entity @Data
@Table(name = "recursos_humanos_user")
public class RRHHUser {
@Id
......@@ -24,51 +26,5 @@ public class RRHHUser {
@Column(name = "reset_password_token")
private String resetPasswordToken;
public String getResetPasswordToken() {
return resetPasswordToken;
}
public void setResetPasswordToken(String resetPasswordToken) {
this.resetPasswordToken = resetPasswordToken;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
......@@ -5,7 +5,9 @@ import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
import lombok.Data;
@Entity @Data
@Table(name = "referencia_personal")
public class ReferenciaPersonal {
@Id
......@@ -29,42 +31,9 @@ public class ReferenciaPersonal {
@JsonBackReference
private Postulante postulante;
public Long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public String getRelacion() {
return relacion;
}
public String getTelefono() {
return telefono;
}
public Postulante getPostulante() {
return postulante;
}
public void setId(Long id) {
this.id = id;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setRelacion(String relacion) {
this.relacion = relacion;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
public void setPostulante(Postulante postulante) {
this.postulante = postulante;
}
......
......@@ -8,8 +8,10 @@ import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import lombok.Data;
@Entity
@Entity @Data
@Table(name="tecnologia")
public class Tecnologia {
@GeneratedValue(strategy = GenerationType.IDENTITY)
......@@ -21,21 +23,4 @@ public class Tecnologia {
@NotBlank(message = "Este campo no puede estar vacio")
private String nombre;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
[
{
"resumen": "In irure aliquip qui cillum veniam sint amet amet sint ex proident anim mollit.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -60,7 +60,7 @@
},
{
"resumen": "Do nostrud aliqua adipisicing in sunt aute id do elit ut dolor ad aliquip.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -107,7 +107,7 @@
},
{
"resumen": "Occaecat non cupidatat amet reprehenderit consectetur ullamco et.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -154,7 +154,7 @@
},
{
"resumen": "Qui ullamco excepteur velit ad ullamco id id nisi irure dolore cupidatat mollit ullamco veniam.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -201,7 +201,7 @@
},
{
"resumen": "Deserunt tempor ut et eiusmod et labore Lorem.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -248,7 +248,7 @@
},
{
"resumen": "Aliqua est adipisicing do exercitation sit laborum aliquip aliqua adipisicing enim aute.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......@@ -295,7 +295,7 @@
},
{
"resumen": "Officia eiusmod ut reprehenderit tempor consequat elit amet ex voluptate aute anim do.",
"nacionalidad": "Paraguayo",
"nacionalidad": "Paraguaya",
"postulaciones": [{ "id": 1 }],
"estadoCivil": "Soltero",
"tipoDocumento": "CI",
......
......@@ -13,7 +13,18 @@ const postulaciones = [];
var cont_referencias=0 ;
const referencias= [];
form = document.querySelector("form");
const depSelect = document.querySelector("#departamentos");
console.log("saddsa", bootstrap)
const modalCargo = bootstrap.Modal.getOrCreateInstance(document.getElementById('cargoForm'))
const modalExperiencia = bootstrap.Modal.getOrCreateInstance(document.getElementById('experienciaForm'))
const modalTecnologia = bootstrap.Modal.getOrCreateInstance(document.getElementById('tecnologiaForm'))
const modalEstudio = bootstrap.Modal.getOrCreateInstance(document.getElementById('estudioForm'))
const modalReferencia = bootstrap.Modal.getOrCreateInstance(document.getElementById('referenciaForm'))
//variable ciudades esta declarada en el jsp
/*-----------------Definicion de funciones de poblacion de elementos y validaciones----------------------------------------*/
const formValidator = function () {
'use strict'
......@@ -37,114 +48,66 @@ const formValidator = function () {
}, false)
})
}
function carg(elemento) {
var element = document.getElementById('descripcion');
if(elemento == "otro"){
element.style.display='block';
}else{
element.style.display='none';
}
}
function agregarFieldExpierncia(event){
//recoger del form
const pairs = {};
const formexp = document.querySelector("[name=experiencia-form]");
formexp.classList.add('was-validated')
const formData = new FormData(formexp);
let error=validarfecha(formData.get("fechaDesde"), formData.get("fechaHasta"))
let appendTo = "Hasta";
if (error) {
if(error.includes("desde")) appendTo = "Desde";
formexp.querySelector(".errorfecha"+appendTo)
formexp['fecha'+appendTo].setCustomValidity(error)
document.querySelector(".errorfecha"+appendTo).innerHTML = error;
console.log(error);
function fechasMaxMin(){
var today = new Date();
var dd = today.getDate()-1;
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd;
}
else{
formexp.fechaDesde.setCustomValidity('')
formexp.fechaHasta.setCustomValidity('')
if (mm < 10) {
mm = '0' + mm;
}
const reconocimientos = [{},{},{}];
let pos_rec;
let returnFlag = false;
today = yyyy + '-' + mm + '-' + dd;
let requiredValues = ["institucion", "cargo", "fechaDesde"]
formData.forEach((value, key)=>{
if(requiredValues.includes(key)
&& value==="" && returnFlag == false){
console.log(key, value)
returnFlag = true;
}
});
let fechaDesdeEstudio = document.querySelector("#fechaDesdeEstudio");
let fechaDesdeExperiencia = document.querySelector("#fechaDesdeExperiencia");
let fechaHastaEstudio = document.querySelector("#fechaHastaEstudio");
let fechaHastaExperiencia = document.querySelector("#fechaHastaExperiencia");
let fechaNacimiento = document.querySelector("#fechaNacimiento");
let fechas = [fechaDesdeEstudio,fechaDesdeExperiencia,fechaHastaEstudio,fechaHastaExperiencia,fechaNacimiento]
fechas.forEach(fch => fch.addEventListener('keydown',()=>false))//no dejar cargar manualmente fechas
if(returnFlag===true){
let message = "Rellene "
for(let i=0;i<requiredValues.length;i++){
message+=", "+requiredValues[i];
}
message += " como minimo."
alert(message);
return;
}
fechaDesdeEstudio.setAttribute("max", today);
fechaDesdeExperiencia.setAttribute("max", today);
fechaNacimiento.setAttribute("max", today);
for (const [name, value] of formData){
pos_rec = name.split("-");//rec-nombre-index
if (pos_rec.length > 1) {
reconocimientos[pos_rec[2]][pos_rec[1]] = value
}
else{
pairs[name] = value
}
fechaDesdeExperiencia.addEventListener("change", ()=>{
fechaHastaExperiencia.setAttribute("min", fechaDesdeExperiencia.value)
})
fechaDesdeEstudio.addEventListener("change", ()=>{
fechaHastaEstudio.setAttribute("min", fechaDesdeEstudio.value)
})
}
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)
}
pairs["reconocimientos"] = reconocimientos.filter(rec => rec.nombre);
experiencias[cont_experiencia] = pairs;
formexp.reset();
formexp.classList.remove('was-validated')
//imprimir lista actualizada
const div = document.querySelector("#experiencias")
const div1 = document.createElement('div');
let content='';
for (let index = 0; index < experiencias.length; index++) {
const exp = experiencias[index];
if(exp==null) continue;
content += `
<div class="col border border-3" id="exp-${index}">
<h4><center>Experiencia</center></h4>
<label><b>Institucion:</b> ${exp.institucion}</label><br>
<label><b>Fecha Inicio:</b> ${exp.fechaDesde}</label><br>
<label><b>Fecha Fin:</b> ${exp.fechaHasta}</label><br>
<label><b>Referencia:</b> ${exp.nombreReferencia}</label><br>
<label><b>Telefono de la referencia:</b> ${exp.telefonoReferencia}</label><br>
<label><b>Cargo:</b> ${exp.cargo}</label><br>
<label><b>Motivo de salida:</b> ${exp.motivoSalida}</label><br>
ciudad.replaceChildren(frag);
<button type="button" class="btn btn-primary" onclick="eliminarExperiencia(event)"> <span class="glyphicon glyphicon-trash"></span>Eliminar</button>
</div>
`
}
//content += "</ul>"
div.innerHTML = content
//div.innerHTML = '';
//div.appendChild(div1);
cont_experiencia++;
}
function validarfecha(fechaDesde, fechaHasta){
let fechadehoy= new Date().toISOString().slice(0,10);
if(fechaDesde>fechadehoy ){
return "la fecha desde no puede ser mayor a la fecha actual" ;
}
if(fechaHasta =! null && fechaHasta>fechadehoy){
return "la fecha hasta no puede ser mayor a la fecha actual" ;
}
if(fechaHasta =! null && fechaDesde>fechaHasta){
return "la fecha desde no puede ser mayor a la fecha hasta";
......@@ -152,7 +115,7 @@ function validarfecha(fechaDesde, fechaHasta){
return false
}
/*--------------------------------------------------------------------*/
/*-----------------Tecnologia----------------------------------------*/
function agregarFieldTecnologia(){
//recoger del form
const pairs = {};
......@@ -201,11 +164,11 @@ function agregarFieldTecnologia(){
const tecn = tecnologias[index];
if(tecn==null) continue;
content1 += `
<div class="col border border-3" id="tecn-${index}">
<label>${tecn.tecnologia.nombre}</label><br>
<label><progress value="${tecn.nivel}" max="5"></progress></label> <br>
<button type="button" class="btn btn-primary" onclick="eliminarTecnologia(event)">Eliminar</button>
<br>
<div class="col-auto" id="tecn-${index}">
${tecn.tecnologia.nombre} ( ${tecn.nivel} <i class="bi bi-star-fill"></i> ) &nbsp; <i class="bi bi-trash-fill" onclick="eliminarTecnologia(event)"></i>
</div>
`
......@@ -216,147 +179,138 @@ function agregarFieldTecnologia(){
//div.appendChild(div1);
cont_tecnologia++;
document.querySelector("#no-valid-tecno").style.display = "none";
modalTecnologia.hide()
}
/*--------------------------------------------------------------------*/
function eliminarExperiencia(event) {
//eliminar del array
experiencias[event.target.parentElement.id.split("-")[1]]=null
//eliminar en html
event.target.parentElement.remove()
}
/*----------------------------------------------------------------- */
function eliminarTecnologia(event) {
//eliminar del array
tecnologias[event.target.parentElement.id.split("-")[1]]=null
//eliminar en html
event.target.parentElement.remove()
}
/*----------------------------------------------------------------- */
function serializeJSON (form) {
// Create a new FormData object
const formData = new FormData(form);
if(formData.get('fechaNacimiento')>=new Date().toISOString().slice(0,10)){
form['fechaNacimiento'].setCustomValidity('Fecha de nacimiento debe ser menor que actual')
noValidateFlag = true;
return;
}
else{
form['fechaNacimiento'].setCustomValidity('')
}
/*----------------Experiencia-----------------------------------------*/
function agregarFieldExpierncia(event){
//recoger del form
const pairs = {};
const formexp = document.querySelector("[name=experiencia-form]");
formexp.classList.add('was-validated')
const formData = new FormData(formexp);
let error=validarfecha(formData.get("fechaDesde"), formData.get("fechaHasta"))
let appendTo = "Hasta";
if (error) {
if(error.includes("desde")) appendTo = "Desde";
// Create an object to hold the name/value pairs
const pairs = {};
// Add each name/value pair to the object
for (const [name, value] of formData) {
pairs[name] = value
}
pairs["experiencias"] = experiencias.filter(exp => exp)//eliminacion de nulos
pairs["estudios"] = estudios.filter(est => est)//eliminacion de nulos
pairs["tecnologias"] = tecnologias.filter(tec => tec)//eliminacion de nulos
pairs["postulaciones"] = postulaciones.filter(car => car)//eliminacion de nulos
pairs["referencias"] = referencias.filter(tec => tec)
if(pairs["postulaciones"].length<1){
document.querySelector("#no-valid-cargo").style.display = "block";
noValidateFlag = true;
}else{
document.querySelector("#no-valid-cargo").style.display = "none";
}
console.log(pairs["tecnologias"])
if(pairs["tecnologias"].length<1){
document.querySelector("#no-valid-tecno").style.display = "block";
noValidateFlag = true;
}else{
document.querySelector("#no-valid-tecno").style.display = "none";
formexp['fecha'+appendTo].setCustomValidity(error)
formexp.querySelector(".errorFecha"+appendTo).innerHTML = error;
console.log(error);
}
if(noValidateFlag){
return;
else{
formexp.fechaDesde.setCustomValidity('')
formexp.fechaHasta.setCustomValidity('')
}
noValidateFlag = false
// Return the JSON string
return JSON.stringify(pairs, null, 2);
}
const reconocimientos = [{},{},{}];
let pos_rec;
let returnFlag = false;
function obtenerCV(){
let input = document.querySelector('#cvFile')
return input.files[0];
let requiredValues = ["institucion", "cargo", "fechaDesde"]
}
formData.forEach((value, key)=>{
if(requiredValues.includes(key)
&& value==="" && returnFlag == false){
console.log(key, value)
returnFlag = true;
}
});
async function postData(url = '', data = {}) {
var token = document.querySelector("meta[name='_csrf']").content;
var headerxs = document.querySelector("meta[name='_csrf_header']").content;
// Default options are marked with *
let senddata = {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
//'Content-Type': undefined//'application/json',
// 'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
body: data // body data type must match "Content-Type" header
if(returnFlag===true){
let message = "Rellene "
for(let i=0;i<requiredValues.length;i++){
message+=", "+requiredValues[i];
}
senddata["headers"][headerxs] = token;
let response = null
if(!noValidateFlag){
response = await fetch(url, senddata);
message += " como minimo."
//alert(message);
return;
}
return response; // parses JSON response into native JavaScript objects
}
function formatearJsonWithFile(json, file){
formData = new FormData();
formData.append("file", file);
formData.append('postulante', new Blob([json], {
type: "application/json"
}));
return formData
}
formValidator()
form = document.querySelector("form");
form.addEventListener("submit",(evt)=>{
// if (!form.checkValidity()) {
// evt.preventDefault()
// evt.stopPropagation()
// }
// form.classList.add('was-validated')
evt.preventDefault();
let formSerialized = serializeJSON(form);
let fileCV = obtenerCV();
if(!noValidateFlag){
postData('work-with-us', formatearJsonWithFile(formSerialized,fileCV))
.then(response => {
if(response.status==200 || response.status==302){
location.replace(response.url);
}else{
console.log(response.text().then(value => console.log(value)))
for (const [name, value] of formData){
pos_rec = name.split("-");//rec-nombre-index
if (pos_rec.length > 1) {
reconocimientos[pos_rec[2]][pos_rec[1]] = value
}
});
else{
pairs[name] = value
}
noValidateFlag = false
} );
}
pairs["reconocimientos"] = reconocimientos.filter(rec => rec.nombre);
experiencias[cont_experiencia] = pairs;
formexp.reset();
formexp.classList.remove('was-validated')
//imprimir lista actualizada
const div = document.querySelector("#experiencias")
const div1 = document.createElement('div');
let content='';
for (let index = 0; index < experiencias.length; index++) {
const exp = experiencias[index];
if(exp==null) continue;
content += `
<div class="col border border-3" id="exp-${index}">
<center><h4>Experiencia <i class="bi bi-trash-fill" onclick="eliminarExperiencia(${index})"></i></h4></center>
<label><b>Institucion:</b> ${exp.institucion}</label><br>
<label><b>Fecha Inicio:</b> ${exp.fechaDesde}</label><br>
<label><b>Fecha Fin:</b> ${exp.fechaHasta}</label><br>
<label><b>Referencia:</b> ${exp.nombreReferencia}</label><br>
<label><b>Telefono de la referencia:</b> ${exp.telefonoReferencia}</label><br>
<label><b>Cargo:</b> ${exp.cargo}</label><br>
<label><b>Motivo de salida:</b> ${exp.motivoSalida}</label><br>
//Metodos para Estudios
</div>
`
}
//content += "</ul>"
div.innerHTML = content
//div.innerHTML = '';
//div.appendChild(div1);
cont_experiencia++;
modalExperiencia.hide()
}
function eliminarExperiencia(index) {
//eliminar del array
experiencias[index]=null
//eliminar en html
document.getElementById("exp-"+index).remove()
//event.target.parentElement.remove()
}
/*---------------Estudios---------------------------*/
function agregarFieldEstudio(){
//recoger del form
let pairs = {};
const formest = document.querySelector("[name=estudio-form]");
const formData = new FormData(formest);
formest.classList.add('was-validated')
let error=validarfecha(formData.get("fechaDesde"), formData.get("fechaHasta"))
let appendTo = "Hasta";
if (error) {
if(error.includes("desde")) appendTo = "Desde";
formest['fecha'+appendTo].setCustomValidity(error)
formest.querySelector(".errorFecha"+appendTo).innerHTML = error;
console.log(error);
}
else{
formest.fechaDesde.setCustomValidity('')
formest.fechaHasta.setCustomValidity('')
}
//Validacion
let returnFlag = false;
......@@ -377,7 +331,7 @@ function agregarFieldEstudio(){
message+=", "+requiredValues[i];
}
message += " como minimo."
alert(message);
//alert(message);
return;
}
......@@ -413,14 +367,14 @@ function agregarFieldEstudio(){
if(est==null) continue;
content += `
<div class="col border border-3" id="est-${index}">
<h4><center>Estudio</center></h4>
<center><h4>Estudio <i class="bi bi-trash-fill" onclick="eliminarEstudio(${index})"></i></h4></center>
<label><b>Institucion:</b> ${est.institucion.nombre}</label><br>
<label><b>Tipo de estudio:</b> ${est.tipoDeEstudio}</label><br>
<label><b>Carrera:</b> ${est.temaDeEstudio}</label><br>
<label><b>Fecha Inicio:</b> ${est.fechaDesde}</label><br>
<label><b>Fecha Fin:</b> ${est.fechaHasta}</label><br>
<label><b>Estado:</b> ${est.estado}</label><br>
<button type="button" class="btn btn-primary" onclick="eliminarEstudio(event)">Eliminar</button>
</div>
`
......@@ -430,20 +384,17 @@ function agregarFieldEstudio(){
//div.innerHTML = '';
//div.appendChild(div1);
cont_estudios++;
formest.classList.remove('was-validated')
modalEstudio.hide()
}
function eliminarEstudio(event) {
function eliminarEstudio(index) {
//eliminar del array
estudios[event.target.parentElement.id.split("-")[1]]=null
estudios[index]=null
//eliminar en html
event.target.parentElement.remove()
document.getElementById("est-"+index).remove()
}
/*--------------------------------------------------------------------*/
/*------------Cargos----------------------------------------*/
function agregarFieldCargo(){
//recoger del form
const pairs = {};
......@@ -500,9 +451,9 @@ function agregarFieldCargo(){
const car = postulaciones[index];
if(car==null) continue;
content1 += `
<div class="col border border-3" id="car-${index}" style="text-transform: uppercase;">
<label>${document.querySelector('[name=cargo-id] > option[value="'+car.id+'"]').innerHTML}</label><br>
<button type="button" class="btn btn-primary" onclick="eliminarCargoPostulante(event)">Eliminar</button><br>
<div class="col-auto" id="car-${index}" style="text-transform: uppercase;">
${document.querySelector('[name=cargo-id] > option[value="'+car.id+'"]').innerHTML}<i class="bi bi-trash-fill" onclick="eliminarCargoPostulante(event)"></i>
</div>
`
......@@ -513,49 +464,21 @@ function agregarFieldCargo(){
//div.appendChild(div1);
cont_cargo++;
document.querySelector("#no-valid-cargo").style.display = "none";
modalCargo.hide()
}
/*---------------------------------------------------------------------------------------------------*/
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
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);
}
/*--------------Referencias----------------------------- */
function agregarFieldReferencia(event){
//recoger del form
const pairs = {};
const formexp = document.querySelector("[name=referencia-form]");
formexp.classList.add('was-validated')
const formData = new FormData(formexp);
const referenciaPersonal = [{},{},{}];
let pos_rec;
......@@ -577,7 +500,7 @@ function agregarFieldReferencia(event){
message+=", "+requiredValues[i];
}
message += " como minimo."
alert(message);
//alert(message);
return;
}
......@@ -602,12 +525,13 @@ function agregarFieldReferencia(event){
const exp = referencias[index];
if(exp==null) continue;
content += `
<div class="col border border-3" id="exp-${index}">
<h4><center>Referencia Personal</center></h4>
<div class="col border border-3" id="ref-${index}">
<center><h4>Referencia Personal <i class="bi bi-trash-fill" onclick="eliminarReferencia(${index})"></i></h4></center>
<label><b>Nombre:</b> ${exp.nombre}</label><br>
<label><b>Telefono:</b> ${exp.telefono}</label><br>
<label><b>Relacion:</b> ${exp.relacion}</label><br>
<button type="button" class="btn btn-primary" onclick="eliminarReferencia(event)"> <span class="glyphicon glyphicon-trash"></span>Eliminar</button>
</div>
`
......@@ -617,71 +541,147 @@ function agregarFieldReferencia(event){
//div.innerHTML = '';
//div.appendChild(div1);
cont_referencias++;
formexp.classList.remove('was-validated')
modalReferencia.hide()
}
/*----------------------------------------------------------------- */
function eliminarReferencia(event) {
function eliminarReferencia(index) {
//eliminar del array
referencias[event.target.parentElement.id.split("-")[1]]=null
referencias[index]=null
//eliminar en html
event.target.parentElement.remove()
document.getElementById("ref-"+index).remove()
}
/*--------------Form submit----------------------------- */
function serializeJSON (form) {
// Create a new FormData object
const formData = new FormData(form);
if(formData.get('fechaNacimiento')>=new Date().toISOString().slice(0,10)){
form['fechaNacimiento'].setCustomValidity('Fecha de nacimiento debe ser menor que actual')
noValidateFlag = true;
return;
}
else{
form['fechaNacimiento'].setCustomValidity('')
}
// Create an object to hold the name/value pairs
const pairs = {};
// Add each name/value pair to the object
for (const [name, value] of formData) {
pairs[name] = value
}
pairs["experiencias"] = experiencias.filter(exp => exp)//eliminacion de nulos
pairs["estudios"] = estudios.filter(est => est)//eliminacion de nulos
pairs["tecnologias"] = tecnologias.filter(tec => tec)//eliminacion de nulos
pairs["postulaciones"] = postulaciones.filter(car => car)//eliminacion de nulos
pairs["referencias"] = referencias.filter(tec => tec)
if(pairs["postulaciones"].length<1){
document.querySelector("#no-valid-cargo").style.display = "block";
noValidateFlag = true;
}else{
document.querySelector("#no-valid-cargo").style.display = "none";
}
console.log(pairs["tecnologias"])
if(pairs["tecnologias"].length<1){
document.querySelector("#no-valid-tecno").style.display = "block";
noValidateFlag = true;
}else{
document.querySelector("#no-valid-tecno").style.display = "none";
}
if(noValidateFlag){
return;
}
noValidateFlag = false
// Return the JSON string
return JSON.stringify(pairs, null, 2);
}
function obtenerCV(){
let input = document.querySelector('#cvFile')
return input.files[0];
}
/*----------------------------------------------------------------- */
/*--------------------------------------------------------------------------------------------------------- */
// $(function(){
// $("#wizard").steps({
// headerTag: "h4",
// bodyTag: "section",
// transitionEffect: "fade",
// enableAllSteps: true,
// transitionEffectSpeed: 500,
// onStepChanging: function (event, currentIndex, newIndex) {
// if ( newIndex === 1 ) {
// $('.steps ul').addClass('step-2');
// } else {
// $('.steps ul').removeClass('step-2');
// }
// if ( newIndex === 2 ) {
// $('.steps ul').addClass('step-3');
// } else {
// $('.steps ul').removeClass('step-3');
// }
//
// if ( newIndex === 3 ) {
// $('.steps ul').addClass('step-4');
// $('.actions ul').addClass('step-last');
// } else {
// $('.steps ul').removeClass('step-4');
// $('.actions ul').removeClass('step-last');
// }
// return true;
// },
// labels: {
// finish: "Order again",
// next: "Next",
// previous: "Previous"
// }
// });
// // Custom Steps Jquery Steps
// $('.wizard > .steps li a').click(function(){
// $(this).parent().addClass('checked');
// $(this).parent().prevAll().addClass('checked');
// $(this).parent().nextAll().removeClass('checked');
// });
// // Custom Button Jquery Steps
// $('.forward').click(function(){
// $("#wizard").steps('next');
// })
// $('.backward').click(function(){
// $("#wizard").steps('previous');
// })
// // Checkbox
// $('.checkbox-circle label').click(function(){
// $('.checkbox-circle label').removeClass('active');
// $(this).addClass('active');
// })
// })
/*--------------------------------------------------------------------------------------------------------- */
\ No newline at end of file
async function postData(url = '', data = {}) {
var token = document.querySelector("meta[name='_csrf']").content;
var headerxs = document.querySelector("meta[name='_csrf_header']").content;
// Default options are marked with *
let senddata = {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
mode: 'cors', // no-cors, *cors, same-origin
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
credentials: 'same-origin', // include, *same-origin, omit
headers: {
//'Content-Type': undefined//'application/json',
// 'Content-Type': 'application/x-www-form-urlencoded',
},
redirect: 'follow', // manual, *follow, error
referrerPolicy: 'no-referrer', // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
body: data // body data type must match "Content-Type" header
}
senddata["headers"][headerxs] = token;
let response = null
if(!noValidateFlag){
response = await fetch(url, senddata);
}
return response; // parses JSON response into native JavaScript objects
}
function formatearJsonWithFile(json, file){
formData = new FormData();
formData.append("file", file);
formData.append('postulante', new Blob([json], {
type: "application/json"
}));
return formData
}
/*--------------Llamar funciones y agregar listeners----------------------------- */
formValidator();
fechasMaxMin();
listarCiudades(depSelect.value);
form.addEventListener("submit",(evt)=>{
// if (!form.checkValidity()) {
// evt.preventDefault()
// evt.stopPropagation()
// }
// form.classList.add('was-validated')
evt.preventDefault();
let formSerialized = serializeJSON(form);
let fileCV = obtenerCV();
if(!noValidateFlag){
postData('work-with-us', formatearJsonWithFile(formSerialized,fileCV))
.then(response => {
if(response.status==200 || response.status==302){
location.replace(response.url);
}else{
errorDispatcher(response.text().then(value => console.log(value)));
}
},(reason)=>{
errorDispatcher(reason);
});
}
noValidateFlag = false
} );
function errorDispatcher(reason){
const errorSection = document.querySelector("#errorSection")
errorSection.innerHTML = `
<div class="alert alert-warning alert-dismissible fade show " role="alert">
<strong>Ha ocurrido un error</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>`;
console.log(reason)
errorSection.focus()
}
//evento para cambio de ciudad segun departamento
depSelect.addEventListener("change",evt => listarCiudades(evt.target.value))
//Convertir DOB to Age
window.onload= init;
function init(){
contarEdad();
//fechaFormat();
}
function contarEdad() {
let today = new Date();
let dob = document.getElementById("dob").value;
let current_datetime = new Date(dob);
let month = current_datetime.getMonth();
let day = current_datetime.getDate();
let formatted_date = current_datetime.getDate() + "/" + (current_datetime.getMonth() + 1) + "/" + current_datetime.getFullYear();
//console.log(formatted_date); ver Fecha del form en formato dd/mm/yyy
let date2=new Date(dob);
let pattern = /^\d{1,2}\/\d{1,2}\/\d{4}$/; //Regex to validate date format (dd/mm/yyyy)
let age = today.getFullYear() - current_datetime.getFullYear();
if (pattern.test(formatted_date)) {
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day))
{
age--;
}
// console.log(age); ver edad
let anio = document.getElementById("edad").innerHTML=age+" años";
} else {
alert("Invalid date format. Please Input in (dd/mm/yyyy) format!");
}
/*
function fechaFormat(){
//EXPERIENCIA
let fechaInicioExp = document.getElementById("fechaInicioExp2").value;
let fie =new Date(fechaInicioExp);
// let formatted_fie = fie.getDate() + "/" + (fie.getMonth() + 1) + "/" + fie.getFullYear();
let fechaFinExp = document.getElementById("fechaFinExp2").value;
let ffe =new Date(fechaFinExp);
// let formatted_ffe = ffe.getDate() + "/" + (ffe.getMonth() + 1) + "/" + ffe.getFullYear();
// Validacion de ceros Fecha inicio
if(((fie.getMonth() + 1) < 10) && (fie.getDate() < 10) ){
let formatted_fie = "0"+ fie.getDate() + "/0" + (fie.getMonth() + 1) + "/" + fie.getFullYear();
let mostrar1 = document.getElementById("fiemostrar").innerHTML = formatted_fie;
console.log(mostrar1);
}else{
if((fie.getMonth() + 1) < 10){
let formatted_fie = fie.getDate() + "/0" + (fie.getMonth() + 1) + "/" + fie.getFullYear();
mostrar1 = document.getElementById("fiemostrar").innerHTML = formatted_fie;
console.log(mostrar1);
}else{
if(fie.getDate() < 10){
let formatted_fie ="0"+ fie.getDate() + "/" + (fie.getMonth() + 1) + "/" + fie.getFullYear();
mostrar1 = document.getElementById("fiemostrar").innerHTML = formatted_fie;
console.log(mostrar1);
}else{
let formatted_fie = fie.getDate() + "/" + (fie.getMonth() + 1) + "/" + fie.getFullYear();
mostrar1 = document.getElementById("fiemostrar2").innerHTML = formatted_fie;
console.log(mostrar1);
}
}
}
// Validacion de ceros Fecha fin
if(((ffe.getMonth() + 1) < 10) && (ffe.getDate() < 10) ){
let formatted_ffe = "0"+ ffe.getDate() + "/0" + (ffe.getMonth() + 1) + "/" + ffe.getFullYear();
let mostrar2 = document.getElementById("ffemostrar").innerHTML = formatted_ffe;
console.log(mostrar2);
}else{
if((ffe.getMonth() + 1) < 10){
let formatted_ffe = ffe.getDate() + "/0" + (ffe.getMonth() + 1) + "/" + ffe.getFullYear();
mostrar2 = document.getElementById("ffemostrar").innerHTML = formatted_ffe;
console.log(mostrar2);
}else{
if(ffe.getDate() < 10){
let formatted_ffe ="0"+ ffe.getDate() + "/" + (ffe.getMonth() + 1) + "/" + ffe.getFullYear();
mostrar2 = document.getElementById("ffemostrar").innerHTML = formatted_ffe;
console.log(mostrar2);
}else{
let formatted_ffe = ffe.getDate() + "/" + (ffe.getMonth() + 1) + "/" + ffe.getFullYear();
mostrar2 = document.getElementById("ffemostrar").innerHTML = formatted_ffe;
console.log(mostrar2);
}
}
}
//ESTUDIOS//////////
let fechaInicioEst = document.getElementById("fechaInicioEst").value;
let fies =new Date(fechaInicioEst);
let formatted_fies = fies.getDate() + "/" + (fies.getMonth() + 1) + "/" + fies.getFullYear();
let fechaFinEst = document.getElementById("fechaFinEst").value;
let ffes =new Date(fechaFinEst);
let formatted_ffes = ffes.getDate() + "/" + (ffes.getMonth() + 1) + "/" + ffes.getFullYear();
// Validacion de ceros Fecha fin
if(((ffes.getMonth() + 1) < 10) && (ffes.getDate() < 10) ){
let formatted_ffes = "0"+ ffes.getDate() + "/0" + (ffes.getMonth() + 1) + "/" + ffes.getFullYear();
let mostrar3 = document.getElementById("ffesmostrar").innerHTML = formatted_ffes;
}else{
if((ffes.getMonth() + 1) < 10){
let formatted_ffes = ffes.getDate() + "/0" + (ffes.getMonth() + 1) + "/" + ffes.getFullYear();
mostrar3 = document.getElementById("ffesmostrar").innerHTML = formatted_ffes;
}else{
if(ffes.getDate() < 10){
let formatted_ffes ="0"+ ffes.getDate() + "/" + (ffes.getMonth() + 1) + "/" + ffes.getFullYear();
mostrar3 = document.getElementById("ffesmostrar").innerHTML = formatted_ffes;
}else{
let formatted_ffes = ffes.getDate() + "/" + (ffes.getMonth() + 1) + "/" + ffes.getFullYear();
mostrar3 = document.getElementById("ffesmostrar").innerHTML = formatted_ffes;
}
}
}
// Validacion de ceros Fecha inicio
if(((fies.getMonth() + 1) < 10) && (fies.getDate() < 10) ){
let formatted_fies = "0"+ fies.getDate() + "/0" + (fies.getMonth() + 1) + "/" + fies.getFullYear();
let mostrar4 = document.getElementById("fiesmostrar").innerHTML = formatted_fies;
}else{
if((fies.getMonth() + 1) < 10){
let formatted_fies = fies.getDate() + "/0" + (fies.getMonth() + 1) + "/" + fies.getFullYear();
mostrar4 = document.getElementById("fiesmostrar").innerHTML = formatted_fies;
}else{
if(fies.getDate() < 10){
let formatted_fies ="0"+ fies.getDate() + "/" + (fies.getMonth() + 1) + "/" + fies.getFullYear();
mostrar4 = document.getElementById("fiesmostrar").innerHTML = formatted_fies;
}else{
let formatted_fies = fies.getDate() + "/" + (fies.getMonth() + 1) + "/" + fies.getFullYear();
mostrar4 = document.getElementById("fiesmostrar").innerHTML = formatted_fies;
}
}
}
}*/
}
\ No newline at end of file
......@@ -2,6 +2,8 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<layout:extends name="layouts/base.jsp">
<layout:put block="contents" type="REPLACE">
<h2 style="text-align: center;">
......@@ -58,11 +60,10 @@
<hr>
<div class="row">
<div class="col-sm-3">
<h6 class="mb-0">Fecha de nacimiento</h6>
</div>
<div class="col-sm-9 text-secondary">
${postulante.fechaNacimiento}
<h6 class="mb-0">Edad</h6>
</div>
<div id="edad" class="col-sm-9 text-secondary"></div>
<input style="display: none;" id="dob" value="${postulante.fechaNacimiento}">
</div>
<hr>
<div class="row">
......@@ -194,11 +195,16 @@
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Fecha Inicio</h6>
<span class="text-secondary">${detalle_experiencia.getFechaDesde()}</span>
<span class="text-secondary"><fmt:formatDate value="${detalle_experiencia.getFechaDesde()}" pattern="dd-MM-yyyy" /></span>
<!-- <input style="display:none;" id="fechaInicioExp" value="${detalle_experiencia.getFechaDesde()}">
<span style="display: none;" class="text-secondary" id="fechaInicioExp2">${detalle_experiencia.getFechaDesde()}</span>-->
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Fecha Fin</h6>
<span class="text-secondary">${detalle_experiencia.getFechaHasta()}</span>
<span class="text-secondary"><fmt:formatDate value="${detalle_experiencia.getFechaHasta()}" pattern="dd-MM-yyyy" /></span>
<!-- <input style="display:none;" id="fechaFinExp" value="${detalle_experiencia.getFechaHasta()}">
<span style="display: none;" class="text-secondary" id="fechaFinExp2">${detalle_experiencia.getFechaHasta()}</span>-->
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Referencia</h6>
......@@ -256,11 +262,16 @@
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Fecha Inicio</h6>
<span class="text-secondary">${detalle_estudios.getFechaDesde()}</span>
<span class="text-secondary"><fmt:formatDate value="${detalle_estudios.getFechaDesde()}" pattern="dd-MM-yyyy" /></span>
<!-- <input style="display:none;" id="fechaInicioEst" value="${detalle_estudios.getFechaDesde()}">-->
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Fecha Fin</h6>
<span class="text-secondary">${detalle_estudios.getFechaHasta()}</span>
<span class="text-secondary"><fmt:formatDate value="${detalle_estudios.getFechaHasta()}" pattern="dd-MM-yyyy" /></span>
<!-- <input style="display:none;" id="fechaFinEst" value="${detalle_estudios.getFechaHasta()}">-->
</li>
<li class="list-group-item d-flex justify-content-between align-items-center flex-wrap">
<h6 class="mb-0">Tipo de Estudio</h6>
......@@ -364,6 +375,8 @@
<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 src="../valEdad.js"></script>
</layout:put>
......
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
</head>
<body>
<div>
${postulante.id}<br>
${postulante.nombre}<br>
${postulante.apellido}<br>
${postulante.ci}<br>
${postulante.correo}<br>
${postulante.ciudadId}<br>
${postulante.telefono}<br>
${postulante.fechaNacimiento}<br>
${postulante.resumen}<br>
${postulante.nivelIngles}<br>
${postulante.curriculum}<br>
${postulante.estadoCivil}<br>
${postulante.nacionalidad}<br>
${postulante.tipoDocumento}<br>
${postulante.disponibilidad}<br><br><br>
${postulante.getCiudad().getNombre()}<br>
<c:forEach items="${postulante.tecnologias}" var="detalle_tecnologia" >
${detalle_tecnologia.getTecnologia().getNombre()}
</c:forEach>
</div>
</body>
</html>
\ No newline at end of file
......@@ -12,49 +12,42 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<title>Curriculum</title>
<link href="../css/formPostulanteStyle.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
</head>
<body class="container">
<div class="row">
<div id="errorSection" class="col" tabindex="-1">
</div>
</div>
<form name="postulante" method="post" class="needs-validation" novalidate>
<div class="container mt-3">
<div class="card p-3 text-center">
<div class="d-flex flex-row justify-content-center mb-3">
</div>
<h4>Curriculum</h4>
<h4>Datos Personales</h4>
<div class="row">
<div class="about-inputs mb-3 col-md-12 center">
<label for="resumen" class="form-label">Resumen</label>
<textarea class="form-control center " name="resumen" id="resumen" required > </textarea>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="nombre" class="form-label">Nombre</label>
<input type="text" name="nombre" class="form-control " id="nombre" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="apellido" class="form-label">Apellido</label>
<input type="text" name="apellido" class="form-control " id="apellido" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="correo" class="form-label">Email address</label>
<label for="correo" class="form-label">Email</label>
<input type="email" name="correo" class="form-control " id="correo" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
......@@ -68,7 +61,7 @@
<div class="inputs mb-3 col-md-6">
<label for="tipoDocumento" class="form-label"> Tipo de documento</label>
<select name="tipoDocumento" id="tipoDocumento" class="bg-light" required onchange='carg(this.value);'>
<select name="tipoDocumento" id="tipoDocumento" class="bg-light" required>
<option value='CI' selected>C.I</option>
<option value='PAS'>Pasport</option>
<option value='Otro'>Otro</option>
......@@ -78,9 +71,7 @@
<div class="inputs mb-3 col-md-6">
<label for="nroDocument" class="form-label">Numero de Documento</label>
<input type="number" name="nroDocument" class="form-control " id="nroDocument" required>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
......@@ -103,21 +94,24 @@
<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>
<div class="valid-feedback">
Luce Bien!
</div>
</div>
<div class="inputs mb-3 col-md-6">
<label for="fechaNacimiento" class="form-label">Fecha de nacimiento</label>
<input type="date" name="fechaNacimiento" class="form-control " id="fechaNacimiento" required>
<div class="valid-feedback">
Luce Bien!
</div>
<div class="about-inputs mb-3 col-md-12 center">
<label for="resumen" class="form-label">Resumen</label>
<textarea class="form-control center " name="resumen" id="resumen" required > </textarea>
</div>
<div class="inputs mb-3 col-md-4"> <label for="nivelIngles" class="form-label"> Nivel de ingles</label>
<div class="inputs mb-3 col-md-3"> <label for="nivelIngles" class="form-label"> Nivel de ingles</label>
<select name="nivelIngles" id="nivelIngles" class="content-select">
<option value="1" selected>Ingles muy basico</option>
<option value="2" >Comprendo algunas cosas y puedo leer con la ayuda del traductor</option>
......@@ -127,7 +121,7 @@
</select>
</div>
<div class="inputs mb-3 col-md-4">
<div class="inputs mb-3 col-md-3">
<label for="disponibilidad" class="form-label"> Disponibilidad</label>
<select name="disponibilidad" id="disponibilidad" class="content-select">
<c:forEach items="${disponibilidades}" var="disponibilidad">
......@@ -136,7 +130,7 @@
</select> </div>
<div class="inputs mb-3 col-md-4">
<div class="inputs mb-3 col-md-3">
<label for="estadoCivil" class="form-label"> Estado Civil</label>
<select name="estadoCivil" id="estadoCivil" class="content-select">
<c:forEach items="${estadosCiviles}" var="estadoCivil">
......@@ -144,43 +138,119 @@
</c:forEach>
</select>
</div>
<div class="inputs mb-3 col-md-4">
<div class="inputs mb-3 col-md-3">
<label for="formFile" class="form-label">Cargar cv</label>
<input class="form-control" type="file" id="cvFile">
</div>
<!-- Button Agregar Cargo al que postulas -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#cargoForm"><span class="add-experience"><i class="fa fa-plus"></i>&nbsp;Agregar Cargo al que postulas</span></button><br>
<div class="inputs mb-3 col-md-12">
<div class="row w-100 p-3 gy-2 border mx-auto">
<div class="col-12">
<h3>Cargos <i class="bi bi-plus-circle-fill" data-bs-toggle="modal" data-bs-target="#cargoForm"></i></h3>
</div>
<div class="col-12">
<div class="mt-3 gap-2 row row-cols-4" style="display: flex;" id="cargos">
</div>
</div>
<div class="col-12">
<p id="no-valid-cargo" style="display: none; color: darkred; border: solid 1px darkred; border-radius: 25px; width: 75%" class="m-3">
*Agrega por lo menos un cargo
</p>
<div class="mt-3 gap-2 row row-cols-4" style="display: flex;" id="cargos"></div>
</div>
</div>
</div>
<!-- Button Agregar Experiencia -->
<button type="button" class="btn btn-primary"><span class="add-experience" data-toggle="modal" data-target="#experienciaForm"><i class="fa fa-plus"></i>&nbsp;Agregar Experiencia</span></button><br>
<div class="mt-3 gap-2 row row-cols-4" id="experiencias"></div>
<div class="inputs mb-3 col-md-12">
<div class="row w-100 p-3 gy-2 border mx-auto">
<div class="col-12">
<h3>Experiencias <i class="bi bi-plus-circle-fill" data-bs-toggle="modal" data-bs-target="#experienciaForm"></i></h3>
</div>
<div class="col-12">
<div class="mt-3 gap-2 row row-cols-4" id="experiencias">
</div>
</div>
</div>
</div>
<!-- Button Agregar Estudio -->
<button type="button" class="btn btn-primary"><span class="add-experience" data-toggle="modal" data-target="#estudioForm"><i class="fa fa-plus"></i>&nbsp;Agregar Estudio</span></button><br>
<div class="mt-3 gap-2 row row-cols-4" id="estudios"></div>
<div class="inputs mb-3 col-md-12">
<div class="row w-100 p-3 gy-2 border mx-auto">
<div class="col-12">
<h3>Estudios <i class="bi bi-plus-circle-fill" data-bs-toggle="modal" data-bs-target="#estudioForm"></i></h3>
</div>
<div class="col-12">
<div class="mt-3 gap-2 row row-cols-4" id="estudios">
</div>
</div>
</div>
</div>
<!-- Button Agregar Tecnologia -->
<button type="button" class="btn btn-primary"><span class="add-experience" data-toggle="modal" data-target="#tecnologiaForm"><i class="fa fa-plus"></i>&nbsp;Agregar Tecnologia</span></button><br>
<div class="inputs mb-3 col-md-12">
<div class="row w-100 p-3 gy-2 border mx-auto">
<div class="col-12">
<h3>Tecnologias <i class="bi bi-plus-circle-fill" data-bs-toggle="modal" data-bs-target="#tecnologiaForm"></i></h3>
</div>
<div class="col-12">
<div class="mt-3 gap-2 row row-cols-5" style="display: flex;" id="tecnologias">
</div>
</div>
<div class="col-12">
<p id="no-valid-tecno" style="display: none; color: darkred; border: solid 1px darkred; border-radius: 25px; width: 75%" class="m-3">
*Agrega por lo menos una tecnologia
</p>
<div class="mt-3 gap-2 row row-cols-5" style="display: flex;" id="tecnologias">
</div>
</div>
</div>
<!-- Button Agregar Refencia personal -->
<button type="button" class="btn btn-primary"><span class="add-experience" data-toggle="modal" data-target="#referenciaForm"><i class="fa fa-plus"></i>&nbsp;Agregar Referencia Personal</span></button><br>
<div class="mt-3 gap-2 row row-cols-4" id="referencia"></div>
<div class="inputs mb-3 col-md-12">
<div class="row w-100 p-3 gy-2 border mx-auto">
<div class="col-12">
<h3>Referencia Personal <i class="bi bi-plus-circle-fill" data-bs-toggle="modal" data-bs-target="#referenciaForm"></i></h3>
</div>
<div class="col-12">
<div class="mt-3 gap-2 row row-cols-4" id="referencia">
</div>
</div>
</div>
</div>
<div class="mt-3 gap-2 d-flex justify-content-end">
<a class="px-3 btn btn-sm btn-outline-primary" href="/postulante">Cancelar</a>
<a class="px-3 btn btn-sm btn-outline-primary" href="/work-with-us">Cancelar</a>
<button class="px-3 btn btn-sm btn-primary" type="submit">Guardar</button>
</div>
</div>
......@@ -188,12 +258,12 @@
</div>
</form>
<!---------------------------------------Modal de Cargos disponibles---------------------------------------------------------------->
<div class="modal fade" id="cargoForm" tabindex="-2" role="dialog" aria-labelledby="cargoForm" aria-hidden="true">
<div class="modal fade" id="cargoForm" tabindex="-1" 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">
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -202,7 +272,7 @@
<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>>
......@@ -211,8 +281,8 @@
</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>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldCargo()">Agregar</button>
</div>
</div>
</div>
......@@ -225,7 +295,7 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Experiencia</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -288,19 +358,19 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button id="agregar-exp" type="button" class="btn btn-primary" onclick="agregarFieldExpierncia()" data-dismiss="modal">Agregar</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button id="agregar-exp" type="button" class="btn btn-primary" onclick="agregarFieldExpierncia()">Agregar</button>
</div>
</div>
</div>
</div>
<!--------------------------------------------------------------------------------------->
<div class="modal fade" id="tecnologiaForm" tabindex="-2" role="dialog" aria-labelledby="tecnologiaForm" aria-hidden="true">
<div class="modal fade" id="tecnologiaForm" tabindex="-1" role="dialog" aria-labelledby="tecnologiaForm" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel" >tecnologia</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -309,7 +379,7 @@
<label for="tecnologia-nombre" class="form-label">Tecnologia</label>
<div class="input-group mb-3">
<select class="form-select" name="tecnologia-id" aria-label="Default select example" required>
<option value="-1" selected>Open this select menu</option>
<c:forEach items="${tecnologias}" var="tecnologia">
<option value="${tecnologia.id}">${tecnologia.nombre}</option>
</c:forEach>
......@@ -323,8 +393,8 @@
</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="agregarFieldTecnologia()" data-dismiss="modal">Agregar</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldTecnologia()">Agregar</button>
</div>
</div>
</div>
......@@ -338,7 +408,7 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Estudios</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -349,7 +419,7 @@
<div class="form-group">
<label for="tipoDeEstudio">Tipo de Estudio</label>
<select name="tipoDeEstudio" id="tipoDeEstudio" required>
<option value="-1" selected disabled hidden>Seleccionar</option>
<c:forEach items="${tiposDeEstudio}" var="tipo">
<option value="${tipo}">${tipo.name}</option>
</c:forEach>
......@@ -368,7 +438,7 @@
<div class="form-group">
<label for="estado">Estado</label>
<select name="estado" id="estado" required>
<option value="-1" selected disabled hidden>Seleccionar</option>
<c:forEach items="${estadosEstudio}" var="estado">
<option value="${estado}">${estado.name}</option>
</c:forEach>
......@@ -377,18 +447,24 @@
<div class="form-group">
<label for="fechaDesdeEstudio" class="form-label">Fecha Desde</label>
<input type="date" class="form-control " name="fechaDesde" id="fechaDesdeEstudio" required>
<div class="invalid-feedback errorFechaDesde">
</div>
</div>
<div class="form-group">
<label for="fechaHastaEstudio" class="form-label">Fecha Hasta</label>
<input type="date" class="form-control " name="fechaHasta" id="fechaHastaEstudio" >
<div class="invalid-feedback errorFechaHasta">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldEstudio()" data-dismiss="modal">Agregar</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldEstudio()">Agregar</button>
</div>
</div>
</div>
......@@ -401,7 +477,7 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Referencias Personales</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
......@@ -427,8 +503,8 @@
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldReferencia()" data-dismiss="modal">Agregar</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
<button type="button" class="btn btn-primary" onclick="agregarFieldReferencia()">Agregar</button>
</div>
</div>
</div>
......@@ -436,48 +512,10 @@
<!-- Optional JavaScript; choose one of the two! -->
<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 src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
<script>
var ciudades = ${ciudades};
(function(){
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd;
}
if (mm < 10) {
mm = '0' + mm;
}
today = yyyy + '-' + mm + '-' + dd;
let fechaDesdeEstudio = document.querySelector("#fechaDesdeEstudio");
let fechaDesdeExperiencia = document.querySelector("#fechaDesdeExperiencia");
let fechaHastaEstudio = document.querySelector("#fechaHastaEstudio");
let fechaHastaExperiencia = document.querySelector("#fechaHastaExperiencia");
let fechaNacimiento = document.querySelector("#fechaNacimiento");
let fechas = [fechaDesdeEstudio,fechaDesdeExperiencia,fechaHastaEstudio,fechaHastaExperiencia,fechaNacimiento]
fechas.forEach(fch => fch.addEventListener('keydown',()=>false))//no dejar cargar manualmente fechas
fechaDesdeEstudio.setAttribute("max", today);
fechaDesdeExperiencia.setAttribute("max", today);
fechaNacimiento.setAttribute("max", today);
fechaDesdeExperiencia.addEventListener("change", ()=>{
fechaHastaExperiencia.setAttribute("min", fechaDesdeExperiencia.value)
})
fechaDesdeEstudio.addEventListener("change", ()=>{
fechaHastaEstudio.setAttribute("min", fechaDesdeEstudio.value)
})
})()
</script>
<script src="./main.js"></script>
</body>
......
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