Commit fc14b503 by Cesar Giulano Gonzalez Maqueda

Merge con william

parents 532441cf e03ab869
...@@ -2,9 +2,12 @@ package com.roshka.controller; ...@@ -2,9 +2,12 @@ package com.roshka.controller;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
import com.roshka.modelo.Cargo; import com.roshka.modelo.Cargo;
import com.roshka.modelo.ConvocatoriaCargo; import com.roshka.modelo.ConvocatoriaCargo;
import com.roshka.modelo.EstadoConvocatoria;
import com.roshka.modelo.EstadoConvocatoriaConverter;
import com.roshka.repositorio.CargoRepository; import com.roshka.repositorio.CargoRepository;
import com.roshka.repositorio.ConvocatoriaRepository; import com.roshka.repositorio.ConvocatoriaRepository;
...@@ -14,6 +17,7 @@ import org.hibernate.jpa.TypedParameterValue; ...@@ -14,6 +17,7 @@ import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.IntegerType; import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType; import org.hibernate.type.LongType;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
...@@ -22,6 +26,7 @@ import org.springframework.web.bind.annotation.PathVariable; ...@@ -22,6 +26,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller @Controller
public class ConvocatoriaController { public class ConvocatoriaController {
...@@ -36,7 +41,7 @@ public class ConvocatoriaController { ...@@ -36,7 +41,7 @@ public class ConvocatoriaController {
} }
@RequestMapping("/convocatorias") @RequestMapping("/convocatorias")
public String menuConvocatorias(Model model, public String menuConvocatorias(Model model,RedirectAttributes redirectAttrs,
@RequestParam(required = false) Long cargoId, @RequestParam(required = false) Long cargoId,
@RequestParam(required = false) Integer isOpen//1: true, 0: false @RequestParam(required = false) Integer isOpen//1: true, 0: false
) { ) {
...@@ -47,15 +52,36 @@ public class ConvocatoriaController { ...@@ -47,15 +52,36 @@ public class ConvocatoriaController {
//model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId)); //model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId));
return "convocatorias"; return "convocatorias";
} }
@RequestMapping("/convocatoria")
public String formConvocatoria(Model model) {
model.addAttribute("cargos", cargoRepo.findAll());
model.addAttribute("convocatoria", new ConvocatoriaCargo());
return "convocatoria-form";
}
@PostMapping("/convocatoria")
public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result,RedirectAttributes redirectAttributes) {
for (ConvocatoriaCargo conv:convoRepo.findByCargoId(convocatoria.getCargoId())) {
if(conv.getEstado()==EstadoConvocatoria.abierto){
redirectAttributes.addFlashAttribute("SUCCESS_MESSAGE", "Ya existe una convocatoria Abierta con ese cargo");
return "redirect:/convocatorias";
}
}
if(result.hasErrors());
convocatoria.setFechaInicio(new Date());
convocatoria.setEstado(EstadoConvocatoria.abierto);
convoRepo.save(convocatoria);
System.out.println(convocatoria.getFechaInicio());
return "redirect:/convocatorias";
}
@RequestMapping(path = {"/convocatoria","/convocatoria/{id}"}) /* @RequestMapping("/convocatoria/{id}")
public String formConvocatoria(Model model,@PathVariable(required = false) Long id) { public String formConvocatoria(Model model,@PathVariable(required = false) Long id) {
model.addAttribute("cargos", cargoRepo.findAll()); model.addAttribute("cargos", cargoRepo.findAll());
if(id == null){ if(id == null){
model.addAttribute("convocatoria", new ConvocatoriaCargo()); model.addAttribute("convocatoria", new ConvocatoriaCargo());
model.addAttribute("listaConvocatoria", convoRepo.findAll()); model.addAttribute("listaConvocatoria", convoRepo.findAll());
} }
else { else {
ConvocatoriaCargo cc = convoRepo.getById(id); ConvocatoriaCargo cc = convoRepo.getById(id);
...@@ -67,12 +93,16 @@ public class ConvocatoriaController { ...@@ -67,12 +93,16 @@ public class ConvocatoriaController {
} }
return "convocatoria-form"; return "convocatoria-form";
} }*/
@PostMapping(path = {"/convocatoria","/convocatoria/{id}"}) @RequestMapping("/convocatoria/{id}")
public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result, @PathVariable(required = false) Long id,Model model) { public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result, @PathVariable(required = false) Long id,Model model) {
if(result.hasErrors());
if(id != null) convocatoria.setId(id); if(id != null) convocatoria.setId(id);
convocatoria=convoRepo.findByIdConvocatoriaCargo(id);
convocatoria.setEstado(EstadoConvocatoria.cerrado);
convocatoria.setFechaFin(new Date());
convoRepo.save(convocatoria);
/*if(id != null) convocatoria.setId(id);
//System.out.println(convoRepo.filtrarConvocatoriasPorCargo(convocatoria.getCargoId())); //System.out.println(convoRepo.filtrarConvocatoriasPorCargo(convocatoria.getCargoId()));
for(ConvocatoriaCargo c: convoRepo.filtrarConvocatoriasPorCargo(convocatoria.getCargoId())){ for(ConvocatoriaCargo c: convoRepo.filtrarConvocatoriasPorCargo(convocatoria.getCargoId())){
...@@ -91,7 +121,7 @@ public class ConvocatoriaController { ...@@ -91,7 +121,7 @@ public class ConvocatoriaController {
break; break;
} }
} }*/
return "redirect:/convocatorias"; return "redirect:/convocatorias";
......
...@@ -109,10 +109,6 @@ public class PostulanteController { ...@@ -109,10 +109,6 @@ public class PostulanteController {
expRepo.findByPostulante(postulantex).forEach(x -> expRepo.delete(x)); expRepo.findByPostulante(postulantex).forEach(x -> expRepo.delete(x));
postulanteTecnologiaRepository.findByPostulante(postulantex).forEach(x -> postulanteTecnologiaRepository.delete(x)); postulanteTecnologiaRepository.findByPostulante(postulantex).forEach(x -> postulanteTecnologiaRepository.delete(x));
postulante.setId(postulantex.getId()); postulante.setId(postulantex.getId());
} else{
postulante.setEstadoPostulante(EstadoPostulante.NUEVO);
postulante.setComentarioRRHH(null);
} }
if(file!=null){ if(file!=null){
DBFile cv = Helper.createFile(file); DBFile cv = Helper.createFile(file);
......
...@@ -8,11 +8,11 @@ import java.util.ArrayList; ...@@ -8,11 +8,11 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.roshka.DTO.PostulanteListaDTO; import com.roshka.DTO.PostulanteListaDTO;
import com.roshka.modelo.*; import com.roshka.modelo.*;
import com.roshka.modelo.Disponibilidad; import com.roshka.modelo.Disponibilidad;
...@@ -105,12 +105,21 @@ public class PostulanteRRHHController { ...@@ -105,12 +105,21 @@ public class PostulanteRRHHController {
model.addAttribute("disponibilidades", Disponibilidad.values()); model.addAttribute("disponibilidades", Disponibilidad.values());
model.addAttribute("institucionesEducativas", institucionRepository.findAll()); model.addAttribute("institucionesEducativas", institucionRepository.findAll());
model.addAttribute("estadoP", EstadoPostulante.values()); model.addAttribute("estadoP", EstadoPostulante.values());
model.addAttribute("convocatoriaC", cargoRepo.findAll());
model.addAttribute("cargos", carRepo.findAll());
model.addAttribute("cargoRepo", cargoRepo);
//model.addAttribute("convocatoriaC", cargoRepo.findAll());
try {
model.addAttribute("convocatoriaC", new ObjectMapper().writeValueAsString(cargoRepo.findAll()));
} catch (JsonProcessingException er) {
// TODO Auto-generated catch block
er.printStackTrace();
}
Page<Postulante> postulantesPag = post.postulantesMultiFiltro( Page<Postulante> postulantesPag = post.postulantesMultiFiltro(
nombre == null || nombre.trim().isEmpty() ? nombre == null || nombre.trim().isEmpty() ?
new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,null) :
new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"), new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"),
dispo, lvlEng, lvlTec, tecId, instId,cargoId,page,estado,convId); dispo, lvlEng, lvlTec, tecId, instId,cargoId,page,estado,convId);
model.addAttribute("numeroOcurrencias", postulantesPag.getTotalElements()); model.addAttribute("numeroOcurrencias", postulantesPag.getTotalElements());
List<Postulante> postulantes = postulantesPag.getContent(); List<Postulante> postulantes = postulantesPag.getContent();
List<PostulanteListaDTO> postulantesDTO = new ArrayList<>(); List<PostulanteListaDTO> postulantesDTO = new ArrayList<>();
...@@ -210,6 +219,10 @@ public class PostulanteRRHHController { ...@@ -210,6 +219,10 @@ public class PostulanteRRHHController {
//post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(),postulante.getComentarioRRHH(), postulante.getId()); //post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(),postulante.getComentarioRRHH(), postulante.getId());
Postulante postulanteVd = post.getById(postulanteId); Postulante postulanteVd = post.getById(postulanteId);
postulanteVd.setEstadoPostulante(postulante.getEstadoPostulante()); postulanteVd.setEstadoPostulante(postulante.getEstadoPostulante());
//si se le contrata, actualizar la fecha actual
if(postulanteVd.getEstadoPostulante() == EstadoPostulante.CONTRATADO){
postulanteVd.setFechaContratado(new Date());
}
postulanteVd.setComentarioRRHH(postulante.getComentarioRRHH()); postulanteVd.setComentarioRRHH(postulante.getComentarioRRHH());
post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(), postulante.getComentarioRRHH(), postulanteId); post.setPostulanteEstadoAndComentario(postulante.getEstadoPostulante(), postulante.getComentarioRRHH(), postulanteId);
//post.save(postulanteVd); //post.save(postulanteVd);
......
...@@ -26,6 +26,22 @@ public class Cargo { ...@@ -26,6 +26,22 @@ public class Cargo {
@Column(name = "nombre") @Column(name = "nombre")
private String nombre; private String nombre;
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;
}
@OneToMany(mappedBy = "cargo") @OneToMany(mappedBy = "cargo")
@JsonManagedReference @JsonManagedReference
private List<ConvocatoriaCargo> convocatorias; private List<ConvocatoriaCargo> convocatorias;
......
...@@ -36,6 +36,9 @@ public class ConvocatoriaCargo { ...@@ -36,6 +36,9 @@ public class ConvocatoriaCargo {
@Column(name = "cargo_id") @Column(name = "cargo_id")
private Long cargoId; private Long cargoId;
@Column(name = "estado")
private EstadoConvocatoria estado;
@Column(name = "fecha_inicio") @Column(name = "fecha_inicio")
private Date fechaInicio; private Date fechaInicio;
...@@ -43,8 +46,6 @@ public class ConvocatoriaCargo { ...@@ -43,8 +46,6 @@ public class ConvocatoriaCargo {
@Column(name = "fecha_fin") @Column(name = "fecha_fin")
private Date fechaFin; private Date fechaFin;
@Column(name = "cupos")
private int cupos;
//para deserializar desde el form como string //para deserializar desde el form como string
@Transient @Transient
...@@ -104,4 +105,28 @@ public class ConvocatoriaCargo { ...@@ -104,4 +105,28 @@ public class ConvocatoriaCargo {
setFechaInicio(fechaInicioS); setFechaInicio(fechaInicioS);
} }
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Cargo getCargo() {
return this.cargo;
}
public void setCargo(Cargo cargo) {
this.cargo = cargo;
}
public EstadoConvocatoria getEstado() {
return this.estado;
}
public void setEstado(EstadoConvocatoria estado) {
this.estado = estado;
}
} }
package com.roshka.modelo;
public enum EstadoConvocatoria {
abierto("abierto"), cerrado("cerrado");
private String descripcion;
private EstadoConvocatoria(String descripcion){
this.descripcion = descripcion;
}
public String getDescripcion() {
return descripcion;
}
}
package com.roshka.modelo;
import java.util.Arrays;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class EstadoConvocatoriaConverter implements AttributeConverter<EstadoConvocatoria, String>, org.springframework.core.convert.converter.Converter<String,EstadoConvocatoria> {
@Override
public String convertToDatabaseColumn(EstadoConvocatoria modalidad) {
if (modalidad == null) {
return null;
}
return modalidad.getDescripcion();
}
@Override
public EstadoConvocatoria convert(String arg0) {
return convertToEntityAttribute(arg0);
}
@Override
public EstadoConvocatoria convertToEntityAttribute(String estado) {
if (estado == null) {
return null;
}
return Arrays.stream(EstadoConvocatoria.values())
.filter(c -> c.getDescripcion().equals(estado))
.findFirst()
.orElseThrow(IllegalArgumentException::new);
}
}
...@@ -79,7 +79,7 @@ public class Postulante { ...@@ -79,7 +79,7 @@ public class Postulante {
@Column(name="estado_postulante") @Column(name="estado_postulante")
@NotNull @NotNull
private EstadoPostulante estadoPostulante=EstadoPostulante.NUEVO; private EstadoPostulante estadoPostulante;
@Column(name="comentario_rrhh") @Column(name="comentario_rrhh")
private String comentarioRRHH; private String comentarioRRHH;
...@@ -123,15 +123,31 @@ public class Postulante { ...@@ -123,15 +123,31 @@ public class Postulante {
@JoinColumn(name = "cvfile_id",referencedColumnName = "id") @JoinColumn(name = "cvfile_id",referencedColumnName = "id")
@JsonIgnore @JsonIgnore
private DBFile cvFile; private DBFile cvFile;
@Column(name = "fecha_creacion")
private Date fechaCreacion;
@Column(name = "fecha_actualizacion")
private Date fechaActualizacion;
@Column(name = "fecha_contratado")
private Date fechaContratado;
public void setFechaNacimiento(String fechaNacimiento) { public void setFechaNacimiento(String fechaNacimiento) {
this.fechaNacimiento = Helper.convertirFecha(fechaNacimiento); this.fechaNacimiento = Helper.convertirFecha(fechaNacimiento);
} }
@PrePersist
public void precargarFechas(){
this.fechaCreacion = new Date();
this.fechaActualizacion = this.fechaCreacion;
this.estadoPostulante = EstadoPostulante.NUEVO;
this.comentarioRRHH = null;
}
@PreUpdate
public void actualizarFecha(){
this.fechaActualizacion= new Date();
}
} }
...@@ -10,10 +10,12 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -10,10 +10,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> { public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> {
@Query(value = "SELECT c FROM ConvocatoriaCargo c WHERE c.id=?1")
public ConvocatoriaCargo findByIdConvocatoriaCargo(Long id);
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) //@Query(value="selec x from ConvocatoriaCargo x where (x.fechaFinal > ?1)",nativeQuery = true)
//public List<ConvocatoriaCargo> findConvocatoriaCargoByCargo(Date fechaFinal); //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 or c.fechaFin=null) 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);
@Query("SELECT c FROM ConvocatoriaCargo c WHERE (cargoId=?1)") @Query("SELECT c FROM ConvocatoriaCargo c WHERE (cargoId=?1)")
public List<ConvocatoriaCargo> filtrarConvocatoriasPorCargo(Long cargoId); public List<ConvocatoriaCargo> filtrarConvocatoriasPorCargo(Long cargoId);
......
...@@ -7,6 +7,7 @@ import java.time.YearMonth; ...@@ -7,6 +7,7 @@ import java.time.YearMonth;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Date; import java.util.Date;
import java.util.concurrent.TimeUnit;
import com.roshka.modelo.DBFile; import com.roshka.modelo.DBFile;
...@@ -31,12 +32,18 @@ public class Helper { ...@@ -31,12 +32,18 @@ public class Helper {
} }
} }
/**
* Diferencia en meses entre 2 fechas.
* @param date1 La fecha inicial. No puede ser nulo
* @param date2 La fecha final. Si es nulo, se asume a la fecha de hoy
* @return
*/
public static final long getMonthsDifference(Date date1, Date date2) { public static final long getMonthsDifference(Date date1, Date date2) {
if(date2==null) date2 = new Date(); if(date2==null) date2 = new Date();
YearMonth m1 = YearMonth.from(date1.toInstant().atZone(ZoneOffset.UTC)); long diffInMillies = Math.abs(date2.getTime() - date1.getTime());
YearMonth m2 = YearMonth.from(date2.toInstant().atZone(ZoneOffset.UTC)); long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
return m1.until(m2, ChronoUnit.MONTHS) + 1; return Math.round(diff/30.d) ;
} }
public static DBFile createFile(MultipartFile file) { public static DBFile createFile(MultipartFile file) {
......
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
{ {
"id": 1, "id": 1,
"cargoId": 1, "cargoId": 1,
"estado":0,
"fechaInicio": "2021-11-01", "fechaInicio": "2021-11-01",
"fechaFin": "2021-11-30", "fechaFin": "2021-11-30"
"cupos": 20
}, },
{ {
"id": 2, "id": 2,
"cargoId": 2, "cargoId": 2,
"estado":0,
"fechaInicio": "2021-11-01", "fechaInicio": "2021-11-01",
"fechaFin": "2021-11-30", "fechaFin": "2021-11-30"
"cupos": 20
} }
] ]
\ No newline at end of file
const cargoSelect = document.querySelector("#cargoId");
function listarConvocatorias(id){
const ConvocatoriaAmostrar = convocatorias.filter(c=>c.cargoId==id);
const convocatoria = document.querySelector("select[name=convId]");
const frag = document.createDocumentFragment();
let optionDefault = document.createElement("option");
optionDefault.value = "";
optionDefault.innerHTML = "Seleccione una opcion";
frag.appendChild(optionDefault);
for (const conv of ConvocatoriaAmostrar) {
const opt = document.createElement("option");
opt.value = conv.id;
if(conv.fechaFin!=null){
opt.innerHTML ="Desde :"+new Date(conv.fechaInicio)+"-"+" Hasta :"+new Date(conv.fechaFin);
}else{
opt.innerHTML ="Desde :"+new Date(conv.fechaInicio)
}
opt.setAttribute("data-CargoId",conv.cargoId);
frag.appendChild(opt)
}
convocatoria.replaceChildren(frag);
}
listarConvocatorias(cargoSelect.value);
cargoSelect.addEventListener("change",evt => listarConvocatorias(evt.target.value))
...@@ -575,7 +575,7 @@ function eliminarReferencia(index) { ...@@ -575,7 +575,7 @@ function eliminarReferencia(index) {
document.getElementById("ref-"+index).remove() document.getElementById("ref-"+index).remove()
} }
/*--------------Form submit----------------------------- */ /*--------------Form submit----------------------------- */
function serializeJSON (form) { function serializeJSON (form,excluded_input=['cargo-id']) {
// Create a new FormData object // Create a new FormData object
const formData = new FormData(form); const formData = new FormData(form);
...@@ -594,8 +594,19 @@ function serializeJSON (form) { ...@@ -594,8 +594,19 @@ function serializeJSON (form) {
// Add each name/value pair to the object // Add each name/value pair to the object
for (const [name, value] of formData) { for (const [name, value] of formData) {
if(excluded_input.includes(name)) continue;
pairs[name] = value pairs[name] = value
} }
let cargos = document.getElementsByName("cargo-id");
cont_cargo = 0;
const postulaciones=[];
for (let i = 0; i < cargos.length; i++) {
if(cargos[i].checked){
postulaciones[cont_cargo] = {}
postulaciones[cont_cargo]["id"] = cargos[i].value;
cont_cargo++;
}
}
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
......
...@@ -9,25 +9,6 @@ ...@@ -9,25 +9,6 @@
<div class="p-3 mb-2 bg-light text-dark bg-transparent "> <div class="p-3 mb-2 bg-light text-dark bg-transparent ">
<form:form action="/convocatoria/${convocatoria.id == null ? '' : convocatoria.id}" method="post" modelAttribute="convocatoria"> <form:form action="/convocatoria/${convocatoria.id == null ? '' : convocatoria.id}" method="post" modelAttribute="convocatoria">
<div class="mb-3 col-3"> <div class="mb-3 col-3">
<form:label path="fechaInicioS" class="form-label ">Fecha inicial</form:label>
<form:input type="date" path="fechaInicioS" required="true" class="form-control ${ existeFecha ? 'is-invalid' : ''}" placeholder="Fecha requerida" requiered="true" />
<div id="validationServerUsernameFeedback1" class="invalid-feedback">
Esta fecha ya existe
</div>
</div>
<div class="mb-3 col-3">
<form:label path="fechaFinS" class="form-label">Fecha Fin</form:label>
<form:input type="date" path="fechaFinS" required="true" class="form-control ${existeFecha ? 'is-invalid': '' }" placeholder="Fecha requerida" requiered="true" />
<div id="validationServerUsernameFeedback2" class="invalid-feedback">
Esta fecha ya existe
</div>
</div>
<div class="mb-3 col-3">
<form:label path="cupos" class="form-label">Cupos:</form:label>
<form:input type="number" class="form-control" path="cupos" required="true"/>
</div>
<div class="mb-3 col-3">
<form:label path="cargoId" class="form-label">Cargo</form:label> <form:label path="cargoId" class="form-label">Cargo</form:label>
<form:select class="form-select" path="cargoId"> <form:select class="form-select" path="cargoId">
<c:forEach items="${cargos}" var="cargo"> <c:forEach items="${cargos}" var="cargo">
...@@ -35,7 +16,7 @@ ...@@ -35,7 +16,7 @@
</c:forEach> </c:forEach>
</form:select> </form:select>
</div> </div>
<button type="submit" class="btn btn-primary">Guardar</button> <button type="submit" class="btn btn-primary">Abrir Convocatoria</button>
</form:form> </form:form>
</div> </div>
</layout:put> </layout:put>
......
...@@ -27,14 +27,17 @@ ...@@ -27,14 +27,17 @@
</div> </div>
<div> <div>
<a href="/convocatoria">Agregar Nueva Convocatoria</a> <a href="/convocatoria">Agregar Nueva Convocatoria</a>
<c:if test="${SUCCESS_MESSAGE != null}">
<div id="status_message">${SUCCESS_MESSAGE}</div>
</c:if>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th scope="col">#</th> <th scope="col">#</th>
<th scope="col">Cargo</th> <th scope="col">Cargo</th>
<th scope="col">Fecha Desde</th> <th scope="col">Estado</th>
<th scope="col">Fecha Hasta</th> <th scope="col">Fecha Abierta</th>
<th scope="col">Vacantes</th> <th scope="col">Fecha Cerrada</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
...@@ -43,11 +46,11 @@ ...@@ -43,11 +46,11 @@
<tr> <tr>
<th scope="row">${sta.index+1}</th> <th scope="row">${sta.index+1}</th>
<td>${convocatoria.getCargo().getNombre()}</td> <td>${convocatoria.getCargo().getNombre()}</td>
<td>${convocatoria.getEstado().getDescripcion()}</td>
<td>${convocatoria.getFechaInicio().toString().split(" ")[0]}</td> <td>${convocatoria.getFechaInicio().toString().split(" ")[0]}</td>
<td>${convocatoria.getFechaFin().toString().split(" ")[0]}</td> <td>${convocatoria.getFechaFin().toString().split(" ")[0]}</td>
<td>${convocatoria.getCupos()}</td>
<td>Ver Postulantes</td> <td>Ver Postulantes</td>
<td><a href="/convocatoria/${convocatoria.id}">Editar</a></td> <td><button onclick=window.location.href="/convocatoria/${convocatoria.id}">Cerrar convocatoria</button></td>
</tr> </tr>
</c:forEach> </c:forEach>
...@@ -57,8 +60,14 @@ ...@@ -57,8 +60,14 @@
</table> </table>
</div> </div>
</layout:put> </layout:put>
<layout:put block="scripts" type="APPEND"> <layout:put block="scripts" type="APPEND">
<script language="JavaScript">
let mostrar=document.querySelector(convocatoria.getFechaFin())
if(mostrar!=null){
}
</script>
</layout:put> </layout:put>
</layout:extends> </layout:extends>
...@@ -148,18 +148,28 @@ ...@@ -148,18 +148,28 @@
</div> </div>
<!-- Button Agregar Cargo al que postulas --> <!-- Button Agregar Cargo al que postulas -->
<hr> <hr>
<div class="inputs mb-3 col-md-12"> <div class="mb-3 col-md-12">
<div class="row w-100 gy-2 mx-auto"> <div class="row w-100 gy-2 mx-auto">
<div class="col-12 px-0"> <div class="col-12 px-0">
<h4 class="text-start">Cargos <i class="bi bi-plus-square" data-bs-toggle="modal" data-bs-target="#cargoForm"></i></h4> <h4 class="text-start">Cargos</h4>
</div> </div>
<div class="col-12"> <div class="col-12">
<div class="mt-3 gap-2 row row-cols-4" style="display: flex;" id="cargos"> <div class="mt-3 gap-2 row" id="cargos">
<c:forEach items="${CargosDisponibles}" var="convocatoria">
<div class="form-check form-check-inline col-2">
<div class="row">
<input class="form-check-input col-auto ms-1" type="checkbox" name="cargo-id" id="cargo-${convocatoria.getId()}" value="${convocatoria.getId()}">
<label class="col text-start" for="cargo-${convocatoria.getId()}">${convocatoria.getCargo().getNombre()}</label>
</div>
</div>
</c:forEach>
</div> </div>
</div> </div>
<div class="col-12"> <div class="col-12">
<p id="no-valid-cargo" style="display: none; color: red;" class="text-center"> <p id="no-valid-cargo" style="display: none; color: yellow;" class="text-center">
*Agrega por lo menos un cargo *Agrega por lo menos un cargo
</p> </p>
</div> </div>
...@@ -199,7 +209,7 @@ ...@@ -199,7 +209,7 @@
</div> </div>
<div class="col-12"> <div class="col-12">
<p id="no-valid-tecno" style="display: none; color: red;" class="text-center"> <p id="no-valid-tecno" style="display: none; color: yellow;" class="text-center">
*Agrega por lo menos una tecnologia *Agrega por lo menos una tecnologia
</p> </p>
</div> </div>
......
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%> <%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
...@@ -151,20 +152,32 @@ ...@@ -151,20 +152,32 @@
<div class="col"> <div class="col">
<div class="row"> <div class="row">
<div class="col-auto col-md-4"> <div class="col-auto col-md-4">
<label class="form-label" for="convId">Convocatoria</label> <label class="form-label" for="cargoId">Cargo</label>
</div> </div>
<div class="col-auto col-md-8"> <div class="col-auto col-md-8">
<select class="form-select form-select-sm " name="convId" id="convId"> <select class="form-select form-select-sm " name="cargoId" id="cargoId">
<option value="">Seleccione una opcion</option> <option value="">Seleccione una opcion</option>
<c:forEach items="${convocatoriaC}" var="convo"> <c:forEach items="${cargos}" var="cargo">
<option value="${convo.id}" ${param.convId == convo.id ? "selected" : ""}>${convo.getCargo().getNombre()}</option> <option value="${cargo.id}" ${param.cargoId == cargo.id ? "selected" : ""}>${cargo.getNombre()}</option>
</c:forEach> </c:forEach>
</select> </select>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="col">
</form> <div class="row">
<div class="col-auto col-md-4">
<label class="form-label" for="convId">Convocatoria</label>
</div>
<div class="col-auto col-md-8">
<select class="form-select form-select-sm " name="convId" id="convId">
<option value="">Seleccione una opcion</option>
</select>
</div>
</div>
</div>
</div>
</form>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<a href="/postulantesExcel?${query}" type="button" class="btn btn-light float-end"> <a href="/postulantesExcel?${query}" type="button" class="btn btn-light float-end">
...@@ -200,7 +213,20 @@ ...@@ -200,7 +213,20 @@
<td>${postulante.nombre} ${postulante.apellido}</td> <td>${postulante.nombre} ${postulante.apellido}</td>
<td>${postulante.disponibilidad.getDescripcion()}</td> <td>${postulante.disponibilidad.getDescripcion()}</td>
<td>${postulante.nivelIngles}</td> <td>${postulante.nivelIngles}</td>
<td>${postulante.experienciaMeses}<op></td> <td><c:choose>
<c:when test = "${postulante.experienciaMeses < 12}">
${postulante.experienciaMeses} mes<c:if test="${postulante.experienciaMeses > 1}">es</c:if>
</c:when>
<c:when test = "${postulante.experienciaMeses > 12}">
<fmt:parseNumber var="j" integerOnly="true" type="number" value="${postulante.experienciaMeses / 12}" />
<fmt:parseNumber var="k" integerOnly="true" type="number" value="${postulante.experienciaMeses % 12}" />
${j} año<c:if test="${postulante.experienciaMeses >= 24}">s</c:if> <c:if test="${k > 0}"> y ${k} mes<c:if test="${k > 1}">es</c:if></c:if>
</c:when>
</c:choose>
</td>
<td> <td>
<c:forEach items="${postulante.tecnologias}" var="detalle_tecnologia" varStatus="staTec"> <c:forEach items="${postulante.tecnologias}" var="detalle_tecnologia" varStatus="staTec">
${detalle_tecnologia.getTecnologia().getNombre()}${not staTec.last ? "," : ""} ${detalle_tecnologia.getTecnologia().getNombre()}${not staTec.last ? "," : ""}
...@@ -236,10 +262,15 @@ ...@@ -236,10 +262,15 @@
</div> </div>
</div> </div>
</layout:put> </layout:put>
<layout:put block="scripts" type="APPEND"> <layout:put block="scripts" type="APPEND">
<script> <script>
var convocatorias = ${convocatoriaC};
</script>
<script src="./Convo.js"></script>
<script>
function habilitarLvlTec(){ function habilitarLvlTec(){
//si se selecciono una tecnologia entonces permitir seleccionar un nivel //si se selecciono una tecnologia entonces permitir seleccionar un nivel
lvlTec.disabled = tecId.value == false lvlTec.disabled = tecId.value == false
...@@ -248,6 +279,7 @@ ...@@ -248,6 +279,7 @@
} }
} }
function buscarPagina(nro){ function buscarPagina(nro){
nro-- nro--
const aBuscar = 'nroPagina='+nro const aBuscar = 'nroPagina='+nro
...@@ -263,6 +295,8 @@ ...@@ -263,6 +295,8 @@
const lvlTec = document.querySelector("#lvlTec"); const lvlTec = document.querySelector("#lvlTec");
tecId.addEventListener('change',habilitarLvlTec); tecId.addEventListener('change',habilitarLvlTec);
habilitarLvlTec() habilitarLvlTec()
</script> </script>
</layout:put> </layout:put>
</layout:extends> </layout:extends>
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