Commit ee6c61fc by willgonzz

Merge branch 'joel-001' of https://phoebe.roshka.com/gitlab/hshah/TalentoHumano into William_001

parents 7c5d55bc 9c2b22fe
package com.roshka.controller; package com.roshka.controller;
import com.roshka.modelo.Cargo; import com.roshka.modelo.Cargo;
import com.roshka.modelo.ConvocatoriaCargo;
import com.roshka.repositorio.CargoRepository; import com.roshka.repositorio.CargoRepository;
import com.roshka.repositorio.ConvocatoriaRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
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.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@Controller @Controller
public class CargoController { public class CargoController {
CargoRepository cargoRepo; CargoRepository cargoRepo;
ConvocatoriaRepository convoRepo;
@Autowired @Autowired
public CargoController(CargoRepository cargoRepo, ConvocatoriaRepository convoRepo) { public CargoController(CargoRepository cargoRepo) {
this.cargoRepo = cargoRepo; this.cargoRepo = cargoRepo;
this.convoRepo = convoRepo;
} }
@RequestMapping("/cargos") @RequestMapping("/cargos")
public String menuCargos(Model model,@RequestParam(required = false) Long cargoId) { public String menuCargos(Model model,
@RequestParam(required = false) String nombre
model.addAttribute("cargos", cargoRepo.findAll()); ) {
model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId)); if(nombre == null || nombre.trim().isEmpty()) model.addAttribute("cargos", cargoRepo.findAll());
return "cargo"; else model.addAttribute("cargos", cargoRepo.findByNombreContainingIgnoreCase(nombre));
return "cargos";
} }
@RequestMapping("/cargo") @RequestMapping(path = {"/cargo","/cargo/{id}"}, method = RequestMethod.GET)
public String formCargo(Model model) { public String formCargo(Model model,@PathVariable(required = false) Long id) {
model.addAttribute("cargo", new Cargo());
if(id == null) model.addAttribute("cargo", new Cargo());
else model.addAttribute("cargo", cargoRepo.getById(id));
return "cargo-form"; return "cargo-form";
} }
@PostMapping("/cargo") @PostMapping(path = {"/cargo","/cargo/{id}"})
public String guardarCargo(@ModelAttribute Cargo cargo, BindingResult result) { public String guardarCargo(@ModelAttribute Cargo cargo, BindingResult result, @PathVariable(required = false) Long id) {
if(result.hasErrors()); if(result.hasErrors());
if(id != null ) cargo.setId(id);
cargoRepo.save(cargo); cargoRepo.save(cargo);
System.out.println(cargo.getNombre()); System.out.println(cargo.getNombre());
return "redirect:/cargos"; return "redirect:/cargos";
} }
@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) {
if(result.hasErrors());
convoRepo.save(convocatoria);
System.out.println(convocatoria.getFechaInicio());
return "redirect:/cargos";
}
} }
package com.roshka.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.roshka.modelo.ConvocatoriaCargo;
import com.roshka.repositorio.CargoRepository;
import com.roshka.repositorio.ConvocatoriaRepository;
import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ConvocatoriaController {
CargoRepository cargoRepo;
ConvocatoriaRepository convoRepo;
@Autowired
public ConvocatoriaController(CargoRepository cargoRepo, ConvocatoriaRepository convoRepo) {
this.cargoRepo = cargoRepo;
this.convoRepo = convoRepo;
}
@RequestMapping("/convocatorias")
public String menuConvocatorias(Model model,
@RequestParam(required = false) Long cargoId,
@RequestParam(required = false) Integer isOpen//1: true, 0: false
) {
model.addAttribute("cargos", cargoRepo.findAll());
model.addAttribute("convocatorias", convoRepo.f1ndByCargoAndEstado(new TypedParameterValue(LongType.INSTANCE, cargoId), new Date(), new TypedParameterValue(IntegerType.INSTANCE, isOpen)));
//model.addAttribute("convocatorias",cargoId==null? convoRepo.findAll() : convoRepo.findByCargoId(cargoId));
return "convocatorias";
}
@RequestMapping(path = {"/convocatoria","/convocatoria/{id}"})
public String formConvocatoria(Model model,@PathVariable(required = false) Long id) {
model.addAttribute("cargos", cargoRepo.findAll());
if(id == null) model.addAttribute("convocatoria", new ConvocatoriaCargo());
else {
ConvocatoriaCargo cc = convoRepo.getById(id);
cc.setFechaFinS(new SimpleDateFormat("yyyy-MM-dd").format((cc.getFechaFin())));
cc.setFechaInicioS(new SimpleDateFormat("yyyy-MM-dd").format((cc.getFechaInicio())));
model.addAttribute("convocatoria", cc);
}
return "convocatoria-form";
}
@PostMapping(path = {"/convocatoria","/convocatoria/{id}"})
public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result, @PathVariable(required = false) Long id) {
if(result.hasErrors());
if(id != null) convocatoria.setId(id);
convoRepo.save(convocatoria);
System.out.println(convocatoria.getFechaInicio());
return "redirect:/convocatorias";
}
}
...@@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonManagedReference; ...@@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonManagedReference;
public class Cargo { public class Cargo {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private long id; private Long id;
@NotBlank @NotBlank
@Column(name = "nombre") @Column(name = "nombre")
...@@ -28,13 +28,13 @@ public class Cargo { ...@@ -28,13 +28,13 @@ public class Cargo {
@JsonManagedReference @JsonManagedReference
private List<ConvocatoriaCargo> convocatorias; private List<ConvocatoriaCargo> convocatorias;
public long getId() { public Long getId() {
return id; return id;
} }
public String getNombre() { public String getNombre() {
return nombre; return nombre;
} }
public void setId(long id) { public void setId(Long id) {
this.id = id; this.id = id;
} }
public void setNombre(String nombre) { public void setNombre(String nombre) {
......
...@@ -22,7 +22,7 @@ import com.roshka.utils.Helper; ...@@ -22,7 +22,7 @@ import com.roshka.utils.Helper;
public class ConvocatoriaCargo { public class ConvocatoriaCargo {
@Id @Id
@GeneratedValue(strategy = GenerationType.AUTO) @GeneratedValue(strategy = GenerationType.AUTO)
private long id; private Long id;
@ManyToOne() @ManyToOne()
@JoinColumn(name = "cargo_id",insertable = false, updatable = false) @JoinColumn(name = "cargo_id",insertable = false, updatable = false)
...@@ -41,18 +41,18 @@ public class ConvocatoriaCargo { ...@@ -41,18 +41,18 @@ public class ConvocatoriaCargo {
@Column(name = "cupos") @Column(name = "cupos")
private int cupos; private int cupos;
//para serializar en el form como string //para deserializar desde el form como string
@Transient @Transient
private String fechaFinS; private String fechaFinS;
//para serializar en el form como string //para deserializar desde el form como string
@Transient @Transient
private String fechaInicioS; private String fechaInicioS;
@ManyToMany(mappedBy = "postulaciones") @ManyToMany(mappedBy = "postulaciones")
private List<Postulante> postulantes; private List<Postulante> postulantes;
public long getId() { public Long getId() {
return id; return id;
} }
public Cargo getCargo() { public Cargo getCargo() {
...@@ -67,7 +67,7 @@ public class ConvocatoriaCargo { ...@@ -67,7 +67,7 @@ public class ConvocatoriaCargo {
public Date getFechaInicio() { public Date getFechaInicio() {
return fechaInicio; return fechaInicio;
} }
public void setId(long id) { public void setId(Long id) {
this.id = id; this.id = id;
} }
public void setCargo(Cargo cargo) { public void setCargo(Cargo cargo) {
......
package com.roshka.repositorio; package com.roshka.repositorio;
import java.util.List;
import com.roshka.modelo.Cargo; import com.roshka.modelo.Cargo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface CargoRepository extends JpaRepository<Cargo,Long>{ public interface CargoRepository extends JpaRepository<Cargo,Long>{
public List<Cargo> findByNombreContainingIgnoreCase(String nombre);
} }
package com.roshka.repositorio; package com.roshka.repositorio;
import java.util.Date;
import java.util.List; import java.util.List;
import com.roshka.modelo.ConvocatoriaCargo; import com.roshka.modelo.ConvocatoriaCargo;
import org.hibernate.jpa.TypedParameterValue;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> { public interface ConvocatoriaRepository extends JpaRepository<ConvocatoriaCargo,Long> {
public List<ConvocatoriaCargo> findByCargoId(Long cargoId); public List<ConvocatoriaCargo> findByCargoId(Long cargoId);
@Query("select c from ConvocatoriaCargo c where ( ?1 is null and ?3 is null) or ( ( ( (c.fechaFin > ?2 and ?3 = 1) or (c.fechaFin < ?2 and ?3 = 0)) or ?3 is null ) and (c.cargoId = ?1 or ?1 is null) )")
public List<ConvocatoriaCargo> f1ndByCargoAndEstado(TypedParameterValue cargoId, Date fecha, TypedParameterValue isOpen);
} }
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<form:form action="/cargo" method="post" modelAttribute="cargo" class="row row-cols-lg-auto g-3 align-items-center"> <form:form action="/cargo/${cargo.id == null ? '' : cargo.id}" method="post" modelAttribute="cargo" class="row row-cols-lg-auto g-3 align-items-center">
<div class="col-12"> <div class="col-12">
<form:label class="form-label visually-hidden" path="nombre">Nombre del cargo </form:label> <form:label class="form-label visually-hidden" path="nombre">Nombre del cargo </form:label>
<form:input type="text" path="nombre" class="form-control" placeholder="Nombre del cargo"/> <form:input type="text" path="nombre" class="form-control" placeholder="Nombre del cargo"/>
......
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cargo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
</head>
<body class="container">
<div>
<form>
<label for="cargos">Nombre:</label>
<input type="text" name="nombre" id="nombre" value="${param.nombre}"/>
<input type="submit" value="Buscar">
</form>
<a href="/cargo">Agregar Nuevo Cargo</a>
</div>
<div>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Cargo</th>
</tr>
</thead>
<tbody>
<c:forEach items="${cargos}" var="cargo" varStatus="sta">
<tr>
<th scope="row">${sta.index+1}</th>
<td>${cargo.getNombre()}</td>
<td><a href="/convocatorias?cargoId=${cargo.id}">Ver Convocatorias</a></td>
<td><a href="/cargo/${cargo.id}">Editar cargo</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</body>
</html>
\ No newline at end of file
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<form:form action="/convocatoria" method="post" modelAttribute="convocatoria"> <form:form action="/convocatoria/${convocatoria.id == null ? '' : convocatoria.id}" method="post" modelAttribute="convocatoria">
<div class="mb-3"> <div class="mb-3">
<form:label path="fechaInicioS" class="form-label">Fecha inicial</form:label> <form:label path="fechaInicioS" class="form-label">Fecha inicial</form:label>
<form:input type="date" class="form-control" path="fechaInicioS"/> <form:input type="date" class="form-control" path="fechaInicioS"/>
...@@ -37,9 +37,6 @@ ...@@ -37,9 +37,6 @@
</div> </div>
<button type="submit" class="btn btn-primary">Guardar</button> <button type="submit" class="btn btn-primary">Guardar</button>
</form:form> </form:form>
</div> </div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -13,14 +13,23 @@ ...@@ -13,14 +13,23 @@
</head> </head>
<body class="container"> <body class="container">
<div> <div>
Cargos: <form>
<select class="form-select" name="cargos" id="cargos"> <label for="cargos">Cargos:</label>
<option value="-1">Todos los cargos</option> <select class="form-select" name="cargoId" id="cargos">
<c:forEach items="${cargos}" var="cargo"> <option value="">Todos los cargos</option>
<option value="${cargo.id}" ${param.cargoId == cargo.id ? "selected" : ""} >${cargo.nombre}</option> <c:forEach items="${cargos}" var="cargo">
</c:forEach> <option value="${cargo.id}" ${param.cargoId == cargo.id ? "selected" : ""} >${cargo.nombre}</option>
</select> </c:forEach>
<a href="/cargo">Agregar Nuevo Cargo</a> </select>
Estado:
<input type="radio" id="cualquiera" name="isOpen" checked value="">
<label for="abierto">Cualquiera</label><br>
<input type="radio" id="abierto" name="isOpen" value="1">
<label for="abierto">Abierto</label><br>
<input type="radio" id="cerrado" name="isOpen" value="0">
<label for="cerrado">Cerrado</label><br>
<input type="submit" value="Buscar">
</form>
</div> </div>
<div> <div>
<a href="/convocatoria">Agregar Nueva Convocatoria</a> <a href="/convocatoria">Agregar Nueva Convocatoria</a>
...@@ -28,6 +37,7 @@ ...@@ -28,6 +37,7 @@
<thead> <thead>
<tr> <tr>
<th scope="col">#</th> <th scope="col">#</th>
<th scope="col">Cargo</th>
<th scope="col">Fecha Desde</th> <th scope="col">Fecha Desde</th>
<th scope="col">Fecha Hasta</th> <th scope="col">Fecha Hasta</th>
<th scope="col">Vacantes</th> <th scope="col">Vacantes</th>
...@@ -38,10 +48,12 @@ ...@@ -38,10 +48,12 @@
<c:forEach items="${convocatorias}" var="convocatoria" varStatus="sta"> <c:forEach items="${convocatorias}" var="convocatoria" varStatus="sta">
<tr> <tr>
<th scope="row">${sta.index+1}</th> <th scope="row">${sta.index+1}</th>
<td>${convocatoria.getCargo().getNombre()}</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>${convocatoria.getCupos()}</td>
<td>Ver Postulantes</td> <td>Ver Postulantes</td>
<td><a href="/convocatoria/${convocatoria.id}">Editar</a></td>
</tr> </tr>
</c:forEach> </c:forEach>
...@@ -49,13 +61,8 @@ ...@@ -49,13 +61,8 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<script>
document.querySelector("#cargos").addEventListener("change",evt=>{
const cargoId = evt.target.value;
if(cargoId == -1) location.assign("/cargos");
else location.assign("/cargos?cargoId="+cargoId)
})
</script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -8,5 +8,9 @@ ...@@ -8,5 +8,9 @@
</head> </head>
<body> <body>
<a href="postulante">Form postulante</a> <a href="postulante">Form postulante</a>
<a href="postulantes">Lista de postulantes</a>
<a href="#">Tecnologias</a>
<a href="convocatorias">Lista de convocatorias</a>
<a href="cargos">Lista de cargos</a>
</body> </body>
</html> </html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment