Commit 787511df by Cesar Giulano Gonzalez Maqueda

merge joel

parents e343eb3f bdf3f0bf
package com.roshka.DTO;
import java.util.Date;
import com.roshka.modelo.EstadoConvocatoria;
import lombok.Data;
@Data
public class ConvocatoriaDTO {
private Long id;
private Long cargoId;
private EstadoConvocatoria estado;
private Date fechaInicio;
private Date fechaFin;
public ConvocatoriaDTO(Long id, Long cargoId, EstadoConvocatoria estado, Date fechaInicio, Date fechaFin) {
this.id = id;
this.cargoId = cargoId;
this.estado = estado;
this.fechaInicio = fechaInicio;
this.fechaFin = fechaFin;
}
public ConvocatoriaDTO() {
}
}
...@@ -48,13 +48,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -48,13 +48,11 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.authorizeRequests() .authorizeRequests()
.mvcMatchers("/").authenticated() .mvcMatchers("/").authenticated()
.mvcMatchers("/home").authenticated() .mvcMatchers("/home").authenticated()
.mvcMatchers("/cargo*").authenticated() .mvcMatchers("/cargos","/cargos/**").authenticated()
.mvcMatchers("/convocatoria*").authenticated() .mvcMatchers("/convocatorias","/convocatorias/**").authenticated()
.mvcMatchers("/convocatoria/crear/*").authenticated() .mvcMatchers("/tecnologias","/tecnologias/**").authenticated()
.mvcMatchers("/tecnologia*").authenticated()
.mvcMatchers("/postulantes","/postulantes/**").authenticated() .mvcMatchers("/postulantes","/postulantes/**").authenticated()
.mvcMatchers("/edit-user-data").authenticated() .mvcMatchers("/edit-user-data").authenticated()
.mvcMatchers("/postulantesExcel*").authenticated()
.anyRequest().permitAll() .anyRequest().permitAll()
.and() .and()
.formLogin() .formLogin()
......
...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
@Controller @Controller
@RequestMapping("/cargos")
public class CargoController { public class CargoController {
CargoRepository cargoRepo; CargoRepository cargoRepo;
...@@ -25,7 +26,7 @@ public class CargoController { ...@@ -25,7 +26,7 @@ public class CargoController {
this.cargoRepo = cargoRepo; this.cargoRepo = cargoRepo;
} }
@RequestMapping("/cargos") @RequestMapping()
public String menuCargos(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) { public String menuCargos(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) {
final Integer CANTIDAD_POR_PAGINA = 10; final Integer CANTIDAD_POR_PAGINA = 10;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id")); Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
...@@ -35,14 +36,14 @@ public class CargoController { ...@@ -35,14 +36,14 @@ public class CargoController {
model.addAttribute("pages", CargoPag.getTotalPages()); model.addAttribute("pages", CargoPag.getTotalPages());
} }
else { else {
Page<Cargo> CargoPag=cargoRepo.findByNombreContainingIgnoreCase(nombre,page); Page<Cargo> CargoPag=cargoRepo.findByNombreContainingIgnoreCase(nombre.trim(),page);
model.addAttribute("pages", CargoPag.getTotalPages()); model.addAttribute("pages", CargoPag.getTotalPages());
model.addAttribute("cargos", CargoPag.getContent()); model.addAttribute("cargos", CargoPag.getContent());
} }
return "cargos"; return "cargos";
} }
@RequestMapping(path = {"/cargo","/cargo/{id}"}, method = RequestMethod.GET) @RequestMapping(path = {"/agregar","/modificar/{id}"}, method = RequestMethod.GET)
public String formCargo(Model model,@PathVariable(required = false) Long id) { public String formCargo(Model model,@PathVariable(required = false) Long id) {
if(id == null) model.addAttribute("cargo", new Cargo()); if(id == null) model.addAttribute("cargo", new Cargo());
...@@ -50,7 +51,7 @@ public class CargoController { ...@@ -50,7 +51,7 @@ public class CargoController {
return "cargo-form"; return "cargo-form";
} }
@PostMapping(path = {"/cargo","/cargo/{id}"}) @PostMapping(path = {"/agregar","/modificar/{id}"})
public String guardarCargo(@Valid @ModelAttribute Cargo cargo, BindingResult result, @PathVariable(required = false) Long id, Model model) { public String guardarCargo(@Valid @ModelAttribute Cargo cargo, BindingResult result, @PathVariable(required = false) Long id, Model model) {
if(result.hasErrors() || (id==null && cargoRepo.existsByNombreIgnoreCase(cargo.getNombre()) )){ if(result.hasErrors() || (id==null && cargoRepo.existsByNombreIgnoreCase(cargo.getNombre()) )){
model.addAttribute("mismoNombre", true); model.addAttribute("mismoNombre", true);
......
...@@ -11,12 +11,12 @@ import org.springframework.data.domain.Pageable; ...@@ -11,12 +11,12 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
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.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.Date; import java.util.Date;
@RequestMapping("/convocatorias")
@Controller @Controller
public class ConvocatoriaController { public class ConvocatoriaController {
...@@ -29,7 +29,7 @@ public class ConvocatoriaController { ...@@ -29,7 +29,7 @@ public class ConvocatoriaController {
this.convoRepo = convoRepo; this.convoRepo = convoRepo;
} }
@RequestMapping("/convocatorias") @RequestMapping()
public String menuConvocatorias(Model model,RedirectAttributes redirectAttrs, public String menuConvocatorias(Model model,RedirectAttributes redirectAttrs,
@RequestParam(required = false) Long cargoId, @RequestParam(required = false) Long cargoId,
@RequestParam(required = false) EstadoConvocatoria estado,//1: true, 0: false @RequestParam(required = false) EstadoConvocatoria estado,//1: true, 0: false
...@@ -48,22 +48,14 @@ public class ConvocatoriaController { ...@@ -48,22 +48,14 @@ public class ConvocatoriaController {
return "convocatorias"; return "convocatorias";
} }
@PostMapping("/convocatoria") @RequestMapping("/crear/{id}")
public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result,RedirectAttributes redirectAttributes) { public String guardarConvocatoriaa(@PathVariable(required = false) Long id,RedirectAttributes redirectAttributes) {
for (ConvocatoriaCargo conv:convoRepo.findByCargoId(convocatoria.getCargoId())) { for (ConvocatoriaCargo conv:convoRepo.findByCargoId(id)) {
if(conv.getEstado()==EstadoConvocatoria.abierto){ if(conv.getEstado()==EstadoConvocatoria.abierto){
redirectAttributes.addFlashAttribute("SUCCESS_MESSAGE", "Ya existe una convocatoria Abierta con ese cargo"); redirectAttributes.addFlashAttribute("SUCCESS_MESSAGE", "Ya existe una convocatoria Abierta con ese cargo");
return "redirect:/convocatorias"; return "redirect:/convocatorias";
} }
} }
if(result.hasErrors());
convocatoria.setFechaInicio(new Date());
convocatoria.setEstado(EstadoConvocatoria.abierto);
convoRepo.save(convocatoria);
return "redirect:/convocatorias";
}
@RequestMapping("/convocatoria/crear/{id}")
public String guardarConvocatoriaa(@PathVariable(required = false) Long id) {
ConvocatoriaCargo convocatoria=new ConvocatoriaCargo(); ConvocatoriaCargo convocatoria=new ConvocatoriaCargo();
convocatoria.setCargo(cargoRepo.findByIdCargo(id)); convocatoria.setCargo(cargoRepo.findByIdCargo(id));
convocatoria.setCargoId(cargoRepo.findByIdCargo(id).getId()); convocatoria.setCargoId(cargoRepo.findByIdCargo(id).getId());
...@@ -76,36 +68,16 @@ public class ConvocatoriaController { ...@@ -76,36 +68,16 @@ public class ConvocatoriaController {
return "redirect:/convocatorias"; return "redirect:/convocatorias";
} }
/* @RequestMapping("/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());
model.addAttribute("listaConvocatoria", convoRepo.findAll());
}
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);
model.addAttribute("listaConvocatoria", convoRepo.findAll());
}
return "convocatoria-form";
}*/
@RequestMapping("/convocatoria/{id}") @RequestMapping("/cerrar/{id}")
public String guardarConvocatoria(@ModelAttribute ConvocatoriaCargo convocatoria, BindingResult result, @PathVariable(required = false) Long id,Model model) { public String cerrarConvocatoria( @PathVariable(required = false) Long id) {
if(id != null) convocatoria.setId(id);
convocatoria=convoRepo.findByIdConvocatoriaCargo(id); ConvocatoriaCargo convocatoria=convoRepo.getById(id);
if(convocatoria == null || convocatoria.getEstado() == EstadoConvocatoria.cerrado) return "error";
convocatoria.setEstado(EstadoConvocatoria.cerrado); convocatoria.setEstado(EstadoConvocatoria.cerrado);
convocatoria.setFechaFin(new Date()); convocatoria.setFechaFin(new Date());
convocatoria.getCargo().setExisteConvocatoria(false); convocatoria.getCargo().setExisteConvocatoria(false);
convoRepo.save(convocatoria); convoRepo.save(convocatoria);
return "redirect:/convocatorias"; return "redirect:/convocatorias";
} }
} }
...@@ -21,8 +21,8 @@ import org.springframework.web.servlet.view.RedirectView; ...@@ -21,8 +21,8 @@ import org.springframework.web.servlet.view.RedirectView;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
@Controller @Controller
@RequestMapping("/work-with-us")
public class PostulanteController { public class PostulanteController {
PostulanteRepository post; PostulanteRepository post;
TecnologiaRepository tecRepo; TecnologiaRepository tecRepo;
...@@ -55,7 +55,7 @@ public class PostulanteController { ...@@ -55,7 +55,7 @@ public class PostulanteController {
} }
@RequestMapping(value = "/work-with-us",method = RequestMethod.GET) @RequestMapping(method = RequestMethod.GET)
public String getFormPostulante(Model model){ public String getFormPostulante(Model model){
model.addAttribute("tecnologias", tecRepo.findAll()); model.addAttribute("tecnologias", tecRepo.findAll());
model.addAttribute("tiposDeEstudio", TipoDeEstudio.values()); model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
...@@ -77,7 +77,7 @@ public class PostulanteController { ...@@ -77,7 +77,7 @@ public class PostulanteController {
} }
@PostMapping(value = "/work-with-us",consumes = "multipart/form-data") @PostMapping(consumes = "multipart/form-data")
public RedirectView guardarPostulante(@RequestPart(name = "file",required = false) MultipartFile file,@RequestPart("postulante") Postulante postulante, RedirectAttributes redirectAttributes){ public RedirectView guardarPostulante(@RequestPart(name = "file",required = false) MultipartFile file,@RequestPart("postulante") Postulante postulante, RedirectAttributes redirectAttributes){
//Codigo encargado de modificar postulacion si se envia mismo CI //Codigo encargado de modificar postulacion si se envia mismo CI
//Codigo encargado de modificar postulacion si se envia mismo CI //Codigo encargado de modificar postulacion si se envia mismo CI
...@@ -117,7 +117,7 @@ public class PostulanteController { ...@@ -117,7 +117,7 @@ public class PostulanteController {
@GetMapping("/work-with-us/postulacion-correcta") @GetMapping("/postulacion-correcta")
public String successPostulation(Model model){ public String successPostulation(Model model){
model.addAttribute("mensaje1", "Tu informacion se ha recibido correctamente!"); model.addAttribute("mensaje1", "Tu informacion se ha recibido correctamente!");
model.addAttribute("mensaje2", " espera por que nos pongamos en contacto!"); model.addAttribute("mensaje2", " espera por que nos pongamos en contacto!");
......
...@@ -3,6 +3,7 @@ package com.roshka.controller; ...@@ -3,6 +3,7 @@ package com.roshka.controller;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.roshka.DTO.ConvocatoriaDTO;
import com.roshka.DTO.PostulanteListaDTO; import com.roshka.DTO.PostulanteListaDTO;
import com.roshka.modelo.DBFile; import com.roshka.modelo.DBFile;
import com.roshka.modelo.EstadoPostulante; import com.roshka.modelo.EstadoPostulante;
...@@ -36,9 +37,11 @@ import java.util.ArrayList; ...@@ -36,9 +37,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 java.util.stream.Collectors;
@Controller @Controller
@RequestMapping("/postulantes")
public class PostulanteRRHHController { public class PostulanteRRHHController {
PostulanteRepository post; PostulanteRepository post;
TecnologiaRepository tecRepo; TecnologiaRepository tecRepo;
...@@ -48,7 +51,7 @@ public class PostulanteRRHHController { ...@@ -48,7 +51,7 @@ public class PostulanteRRHHController {
CiudadRepository ciuRepo; CiudadRepository ciuRepo;
EstudioRepository estudioRepository; EstudioRepository estudioRepository;
PostulanteTecnologiaRepository postulanteTecnologiaRepository; PostulanteTecnologiaRepository postulanteTecnologiaRepository;
ConvocatoriaRepository cargoRepo; ConvocatoriaRepository convRepo;
CargoRepository carRepo; CargoRepository carRepo;
DBFileRepository fileRepo; DBFileRepository fileRepo;
...@@ -58,7 +61,7 @@ public class PostulanteRRHHController { ...@@ -58,7 +61,7 @@ public class PostulanteRRHHController {
InstitucionRepository institucionRepository, DepartamentoRepository depRepo, InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
CiudadRepository ciuRepo, EstudioRepository estudioRepository, CiudadRepository ciuRepo, EstudioRepository estudioRepository,
PostulanteTecnologiaRepository postulanteTecnologiaRepository, PostulanteTecnologiaRepository postulanteTecnologiaRepository,
ConvocatoriaRepository cargoRepo, CargoRepository carRepo, DBFileRepository fileRepo) { ConvocatoriaRepository convRepo, CargoRepository carRepo, DBFileRepository fileRepo) {
this.post = post; this.post = post;
this.tecRepo = tecRepo; this.tecRepo = tecRepo;
this.expRepo = expRepo; this.expRepo = expRepo;
...@@ -67,12 +70,12 @@ public class PostulanteRRHHController { ...@@ -67,12 +70,12 @@ public class PostulanteRRHHController {
this.ciuRepo = ciuRepo; this.ciuRepo = ciuRepo;
this.estudioRepository = estudioRepository; this.estudioRepository = estudioRepository;
this.postulanteTecnologiaRepository = postulanteTecnologiaRepository; this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
this.cargoRepo =cargoRepo; this.convRepo =convRepo;
this.carRepo=carRepo; this.carRepo=carRepo;
this.fileRepo = fileRepo; this.fileRepo = fileRepo;
} }
@RequestMapping("/postulantes") @RequestMapping()
public String postulantes(HttpServletRequest request, Model model, public String postulantes(HttpServletRequest request, Model model,
@RequestParam(required = false)Long tecId, @RequestParam(required = false)Long tecId,
@RequestParam(required = false)String nombre, @RequestParam(required = false)String nombre,
...@@ -93,10 +96,13 @@ public class PostulanteRRHHController { ...@@ -93,10 +96,13 @@ public class PostulanteRRHHController {
model.addAttribute("estadoP", EstadoPostulante.values()); model.addAttribute("estadoP", EstadoPostulante.values());
model.addAttribute("cargos", carRepo.findAll()); model.addAttribute("cargos", carRepo.findAll());
model.addAttribute("cargoRepo", cargoRepo);
//model.addAttribute("convocatoriaC", cargoRepo.findAll());
try { try {
model.addAttribute("convocatoriaC", new ObjectMapper().writeValueAsString(cargoRepo.findAll())); //se convierte a DTO las convocatorias
model.addAttribute("convocatoriaC", new ObjectMapper().writeValueAsString(
convRepo.findAll().stream().map(conv ->
new ConvocatoriaDTO(conv.getId(), conv.getCargoId(), conv.getEstado(), conv.getFechaInicio(), conv.getFechaFin()) )
.collect(Collectors.toList()))
);
} catch (JsonProcessingException er) { } catch (JsonProcessingException er) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
er.printStackTrace(); er.printStackTrace();
...@@ -111,7 +117,7 @@ public class PostulanteRRHHController { ...@@ -111,7 +117,7 @@ public class PostulanteRRHHController {
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.trim()+"%"),
lvlEng, lvlTec, tecId, instId,cargoId,page,estado,convId, infRange, supRange); lvlEng, lvlTec, tecId, instId,cargoId,page,estado,convId, infRange, supRange);
model.addAttribute("numeroOcurrencias", postulantesPag.getTotalElements()); model.addAttribute("numeroOcurrencias", postulantesPag.getTotalElements());
List<Postulante> postulantes = postulantesPag.getContent(); List<Postulante> postulantes = postulantesPag.getContent();
...@@ -134,7 +140,7 @@ public class PostulanteRRHHController { ...@@ -134,7 +140,7 @@ public class PostulanteRRHHController {
} }
@RequestMapping("/postulantesExcel") @RequestMapping("/excel")
public void exportPostulantesExcel(HttpServletResponse response, Model model, public void exportPostulantesExcel(HttpServletResponse response, Model model,
@RequestParam(required = false)Long tecId, @RequestParam(required = false)Long tecId,
@RequestParam(required = false)String nombre, @RequestParam(required = false)String nombre,
...@@ -186,8 +192,8 @@ public class PostulanteRRHHController { ...@@ -186,8 +192,8 @@ public class PostulanteRRHHController {
filtros.put("institucion", instId == null ? "-" : institucionRepository.findById(instId).get().getNombre()); filtros.put("institucion", instId == null ? "-" : institucionRepository.findById(instId).get().getNombre());
filtros.put("estado", estado == null ? "-" : estado.getEstado()); filtros.put("estado", estado == null ? "-" : estado.getEstado());
filtros.put("experienciaEnMeses", expInMonths == null ? "-" : expInMonths.toString()); filtros.put("experienciaEnMeses", expInMonths == null ? "-" : expInMonths.toString());
filtros.put("convocatoria", convId == null ? "-" : cargoRepo.findById(convId).get().getCargo().getNombre()); filtros.put("convocatoria", convId == null ? "-" : convRepo.findById(convId).get().getCargo().getNombre());
filtros.put("convocatoriaFecha", convId == null ? "-" : cargoRepo.findById(convId).get().getFechaInicio().toString()); filtros.put("convocatoriaFecha", convId == null ? "-" : convRepo.findById(convId).get().getFechaInicio().toString());
PostulantesExcelExporter excelExporter = new PostulantesExcelExporter(postulantesDTO, filtros); PostulantesExcelExporter excelExporter = new PostulantesExcelExporter(postulantesDTO, filtros);
...@@ -195,7 +201,7 @@ public class PostulanteRRHHController { ...@@ -195,7 +201,7 @@ public class PostulanteRRHHController {
} }
@GetMapping({"/postulantes/{postulanteId}"}) @GetMapping({"/{postulanteId}"})
public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) { public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) {
Postulante p = post.findById(postulanteId).orElse(null); Postulante p = post.findById(postulanteId).orElse(null);
model.addAttribute("postulante",p); model.addAttribute("postulante",p);
...@@ -206,7 +212,7 @@ public class PostulanteRRHHController { ...@@ -206,7 +212,7 @@ public class PostulanteRRHHController {
} }
@PostMapping({"/postulantes/{postulanteId}"}) @PostMapping({"/{postulanteId}"})
public String setPostulanteEstado(@ModelAttribute Postulante postulante, BindingResult result, @PathVariable("postulanteId") Long postulanteId) { public String setPostulanteEstado(@ModelAttribute Postulante postulante, BindingResult result, @PathVariable("postulanteId") Long postulanteId) {
//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);
...@@ -221,7 +227,7 @@ public class PostulanteRRHHController { ...@@ -221,7 +227,7 @@ public class PostulanteRRHHController {
return "redirect:/postulantes/"+postulanteId; return "redirect:/postulantes/"+postulanteId;
} }
@GetMapping("/postulantes/cvFile/{fileId}") @GetMapping("/cvFile/{fileId}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileId) { public ResponseEntity<Resource> downloadFile(@PathVariable String fileId) {
// Load file from database // Load file from database
DBFile dbFile; DBFile dbFile;
...@@ -240,7 +246,7 @@ public class PostulanteRRHHController { ...@@ -240,7 +246,7 @@ public class PostulanteRRHHController {
} }
@GetMapping("/postulantes/{id}/pdf") @GetMapping("/{id}/pdf")
public ResponseEntity<Resource> downloadPDF(@PathVariable Long id) { public ResponseEntity<Resource> downloadPDF(@PathVariable Long id) {
// Load file from database // Load file from database
PdfGenerator pdf = new PdfGenerator(); PdfGenerator pdf = new PdfGenerator();
......
...@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
@Controller @Controller
@RequestMapping("/tecnologias")
public class TecnologiaController { public class TecnologiaController {
TecnologiaRepository tecRepo; TecnologiaRepository tecRepo;
...@@ -26,7 +27,7 @@ public TecnologiaController(TecnologiaRepository tecRepo){ ...@@ -26,7 +27,7 @@ public TecnologiaController(TecnologiaRepository tecRepo){
} }
@GetMapping(path = {"/tecnologia","/tecnologia/{id}"}) @GetMapping(path = {"/agregar","/modificar/{id}"})
public String addtecnologiaView(Model model,@PathVariable(required = false) Long id) { public String addtecnologiaView(Model model,@PathVariable(required = false) Long id) {
...@@ -35,7 +36,7 @@ public String addtecnologiaView(Model model,@PathVariable(required = false) Long ...@@ -35,7 +36,7 @@ public String addtecnologiaView(Model model,@PathVariable(required = false) Long
return "tecnologia-form"; return "tecnologia-form";
} }
@RequestMapping("/tecnologias") @RequestMapping()
public String menuTecnologias(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) { public String menuTecnologias(Model model,@RequestParam(required = false) String nombre,@RequestParam(defaultValue = "0")Integer nroPagina) {
final Integer CANTIDAD_POR_PAGINA = 10; final Integer CANTIDAD_POR_PAGINA = 10;
Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id")); Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
...@@ -46,14 +47,14 @@ public String addtecnologiaView(Model model,@PathVariable(required = false) Long ...@@ -46,14 +47,14 @@ public String addtecnologiaView(Model model,@PathVariable(required = false) Long
model.addAttribute("pages", tecnologiaPag.getTotalPages()); model.addAttribute("pages", tecnologiaPag.getTotalPages());
} }
else { else {
Page<Tecnologia> tecnologiaPag=tecRepo.findByNombreContainingIgnoreCase(nombre,page); Page<Tecnologia> tecnologiaPag=tecRepo.findByNombreContainingIgnoreCase(nombre.trim(),page);
model.addAttribute("pages", tecnologiaPag.getTotalPages()); model.addAttribute("pages", tecnologiaPag.getTotalPages());
model.addAttribute("tecnologias", tecnologiaPag.getContent()); model.addAttribute("tecnologias", tecnologiaPag.getContent());
} }
return "tecnologias"; return "tecnologias";
} }
@PostMapping(path = {"/tecnologia","/tecnologia/{id}"}) @PostMapping(path = {"/agregar","/modificar/{id}"})
public String addtecnologia(@Valid @ModelAttribute Tecnologia tecnologia, BindingResult result, @PathVariable(required = false) Long id, Model model) { public String addtecnologia(@Valid @ModelAttribute Tecnologia tecnologia, BindingResult result, @PathVariable(required = false) Long id, Model model) {
if(result.hasErrors() || (id==null && tecRepo.existsByNombreIgnoreCase(tecnologia.getNombre()))){ if(result.hasErrors() || (id==null && tecRepo.existsByNombreIgnoreCase(tecnologia.getNombre()))){
model.addAttribute("mismoNombre", true); model.addAttribute("mismoNombre", true);
......
...@@ -16,7 +16,7 @@ spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true ...@@ -16,7 +16,7 @@ spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
#server.port=8888 #server.port=8888
spring.mvc.view.prefix=/jsp/ spring.mvc.view.prefix=/jsp/
spring.mvc.view.suffix=.jsp spring.mvc.view.suffix=.jsp
server.error.whitelabel.enabled=false
spring.mail.host=smtp.gmail.com spring.mail.host=smtp.gmail.com
spring.mail.username=fpunascrumkanban@gmail.com spring.mail.username=fpunascrumkanban@gmail.com
spring.mail.password=fpunascrumkanban123 spring.mail.password=fpunascrumkanban123
...@@ -24,8 +24,6 @@ spring.mail.port=587 ...@@ -24,8 +24,6 @@ spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.enable=true
jsp-inheritance-prefix=/jsp/layouts/
jsp-inheritance-suffix=.jsp
## MULTIPART (MultipartProperties) ## MULTIPART (MultipartProperties)
# Enable multipart uploads # Enable multipart uploads
......
...@@ -30,5 +30,9 @@ ...@@ -30,5 +30,9 @@
{ {
"id": 8, "id": 8,
"nombre": "sqlserver" "nombre": "sqlserver"
},
{
"id": 9,
"nombre": "java"
} }
] ]
\ No newline at end of file
...@@ -256,77 +256,3 @@ label:hover { ...@@ -256,77 +256,3 @@ label:hover {
-moz-appearance: textfield; -moz-appearance: textfield;
} }
.pointer {cursor: pointer;} .pointer {cursor: pointer;}
/*
.size-placeholder::placeholder{
background-size: 18px 18px;
background-repeat: no-repeat;
background-position: right center;
}
/*Nombre
.nombre-ph::placeholder{
background-image: url(../img/placeholder/name_ph.png);
}
Apellido
#apellido::placeholder{
background-image: url(../img/placeholder/lastname_ph.png);
}
Email
#correo::placeholder{
background-image: url(../img/placeholder/email_ph.png);
}
Numero de documento*/
/*
.nroDocument-ph::placeholder{
background-image: url(../img/placeholder/nroDocumento_ph.png);
margin-left: 5px;
}
Direccion
#direccion::placeholder{
background-image: url(../img/placeholder/adress_ph.png);
background-size: 14px 14px;
}*/
/*Telefono*/
/*
.telefono-ph::placeholder{
background-image: url(../img/placeholder/telephone_ph.png);
}
/*Modal Estudio
#institucionEstudio::placeholder{
background-image: url(../img/placeholder/studios_ph.png);
}
#temaDeEstudio::placeholder{
background-image: url(../img/placeholder/studios_ph.png);
}
#institucionExperiencia::placeholder{
background-image: url(../img/placeholder/studios_ph.png);
}
#cargo::placeholder{
background-image: url(../img/placeholder/cargo_ph.png);
}
#descripcion::placeholder{
background-image: url(../img/placeholder/description_ph.png);
}
#refNombre::placeholder{
background-image: url(../img/placeholder/name_ph.png);
}*/
/*
.telefono-ph::placeholder{
background-image: url(../img/placeholder/telephone_ph.png);
}
#motivoSalida::placeholder{
background-image: url(../img/placeholder/motivoSalida_ph.png);
}
#relacion::placeholder{
background-image: url(../img/placeholder/relacion_ph.png);
}
*/
/*Prueba Font Awesome*/
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<h5>Cargo</h5> <h5>Cargo</h5>
</div> </div>
<form:form <form:form
action="/cargo/${cargo.id == null ? '' : cargo.id}" action="/cargos/${cargo.id == null ? 'agregar' : 'modificar/'.concat(cargo.id)}"
method="post" method="post"
modelAttribute="cargo" modelAttribute="cargo"
class="d-flex flex-column" class="d-flex flex-column"
......
...@@ -50,10 +50,10 @@ contentType="text/html;charset=UTF-8" language="java" %> ...@@ -50,10 +50,10 @@ contentType="text/html;charset=UTF-8" language="java" %>
>Ver Convocatorias</a >Ver Convocatorias</a
> >
</td> </td>
<td><a href="/cargo/${cargo.id}">Editar cargo</a></td> <td><a href="/cargos/modificar/${cargo.id}">Editar cargo</a></td>
<td> <td>
<c:if test="${!cargo.isExisteConvocatoria()}"> <c:if test="${!cargo.isExisteConvocatoria()}">
<a class="btn btn-secondary" href="/convocatoria/crear/${cargo.id}">Abrir Convocatoria</a> <a class="btn btn-secondary" href="/convocatorias/crear/${cargo.id}">Abrir Convocatoria</a>
</c:if> </c:if>
</td> </td>
</tr> </tr>
......
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
<td><a href="/postulantes?convId=${convocatoria.id}">Ver postulantes</a></td> <td><a href="/postulantes?convId=${convocatoria.id}">Ver postulantes</a></td>
<td> <td>
<c:if test="${convocatoria.getEstado() != 'cerrado'}"> <c:if test="${convocatoria.getEstado() != 'cerrado'}">
<a class="btn btn-secondary" href="/convocatoria/${convocatoria.id}">Cerrar convocatoria</a> <a class="btn btn-secondary" href="/convocatorias/cerrar/${convocatoria.id}">Cerrar convocatoria</a>
</c:if> </c:if>
</td> </td>
</tr> </tr>
......
...@@ -390,49 +390,49 @@ ...@@ -390,49 +390,49 @@
</div> </div>
</div> </div>
<layout:put block="scripts" type="APPEND">
<script src="../valEdad.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
document.querySelector('#pdf').addEventListener("click", async ()=>{ </layout:put>
var buttonsRow = document.querySelector('#buttonRow'); <layout:put block="scripts" type="APPEND">
var element = document.getElementById('element-to-print');
var carousels = document.querySelectorAll(".pdf-carousel"); <script src="/js/valEdad.js"></script>
var hrs = document.querySelectorAll(".lineas-pdf"); <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js" integrity="sha512-GsLlZN/3F2ErC5ifS5QtgpiJtWd43JWSuIgh7mbzZ8zBps+dvLusV+eNQATqgA/HdeKFVgA5v3S/cIrLF7QnIg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
var opt = { <script>
margin: [1, 1, 1, 1], document.querySelector('#pdf').addEventListener("click", async ()=>{
filename: 'myfile.pdf', var buttonsRow = document.querySelector('#buttonRow');
image: { type: 'jpeg', quality: 0.98 }, var element = document.getElementById('element-to-print');
html2canvas: { scale: 1, height: 1400, width: 1300 }, var carousels = document.querySelectorAll(".pdf-carousel");
jsPDF: { unit: 'in', format: 'a2', orientation: 'portrait' } var hrs = document.querySelectorAll(".lineas-pdf");
}; var opt = {
buttonsRow.style.display = "none"; margin: [1, 1, 1, 1],
carousels.forEach((element)=>{ filename: 'myfile.pdf',
element.classList.remove('carousel-item') image: { type: 'jpeg', quality: 0.98 },
}); html2canvas: { scale: 1, height: 1400, width: 1300 },
hrs.forEach((element)=>{ jsPDF: { unit: 'in', format: 'a2', orientation: 'portrait' }
element.style.display = "block" };
}); buttonsRow.style.display = "none";
await html2pdf().set(opt).from(element).toPdf().save(); carousels.forEach((element)=>{
buttonsRow.style.display = "block"; element.classList.remove('carousel-item')
carousels.forEach((element)=>{ });
element.classList.add('carousel-item') hrs.forEach((element)=>{
}); element.style.display = "block"
hrs.forEach((element)=>{ });
element.style.display = "none" await html2pdf().set(opt).from(element).toPdf().save();
}); buttonsRow.style.display = "block";
}) carousels.forEach((element)=>{
element.classList.add('carousel-item')
<%--location.replace("/postulantes/${postulante.id}/")--%> });
</script> hrs.forEach((element)=>{
element.style.display = "none"
</layout:put> });
})
<%--location.replace("/postulantes/${postulante.id}/")--%>
</script>
</layout:put> </layout:put>
</layout:extends> </layout:extends>
<%@ 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" %>
<html>
<head>
<link href="https://fonts.googleapis.com/css?family=Nunito+Sans:400,400i,700,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
<link rel="icon" href="/img/LogoRoshka.ico">
</head>
<style>
body {
text-align: center;
padding: 40px 0;
background: #EBF0F5;
}
h1 {
color: #ff0000;
font-family: "Nunito Sans", "Helvetica Neue", sans-serif;
font-weight: 900;
font-size: 40px;
margin-bottom: 10px;
}
p {
color: #404F5E;
font-family: "Nunito Sans", "Helvetica Neue", sans-serif;
font-size:20px;
margin: 0;
}
i {
color: #ff0000;
font-size: 100px;
line-height: 200px;
margin-left:-15px;
}
.card {
background: white;
padding: 60px;
border-radius: 4px;
box-shadow: 0 2px 3px #C8D0D8;
display: inline-block;
margin: 0 auto;
}
</style>
<body>
<div class="card">
<h1>
<i class="bi bi-emoji-smile-upside-down"></i>
</h1>
<h1>Oops!</h1>
<p>Ha ocurrido un error.<br/>Ponganse en contacto con los bootcampers.</p>
</div>
</body>
</html>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<html> <html>
<head> <head>
<link href="https://fonts.googleapis.com/css?family=Nunito+Sans:400,400i,700,900&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Nunito+Sans:400,400i,700,900&display=swap" rel="stylesheet">
<link rel="icon" href="../img/LogoRoshka.ico"> <link rel="icon" href="/img/LogoRoshka.ico">
</head> </head>
<style> <style>
body { body {
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%> <%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<layout:extends name="layouts/base.jsp"> <layout:extends name="layouts/base.jsp">
<layout:put block="cssDeclaracion" type="REPLACE"> <layout:put block="cssDeclaracion" type="REPLACE">
<link href="../css/indexStyle.css" rel="stylesheet" type="text/css"/> <link href="/css/indexStyle.css" rel="stylesheet" type="text/css"/>
<link rel="icon" href="../img/LogoRoshka.ico"> <link rel="icon" href="/img/LogoRoshka.ico">
</layout:put> </layout:put>
<layout:put block="contents" type="REPLACE"> <layout:put block="contents" type="REPLACE">
<body> <body>
......
...@@ -9,10 +9,10 @@ ...@@ -9,10 +9,10 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link rel="icon" href="../img/LogoRoshka.ico"> <link rel="icon" href="/img/LogoRoshka.ico">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
<layout:block name="cssDeclaracion"> <layout:block name="cssDeclaracion">
<link href="../css/cargoStyle.css" rel="stylesheet" type="text/css"/> <link href="/css/cargoStyle.css" rel="stylesheet" type="text/css"/>
</layout:block> </layout:block>
<title>RRHH</title> <title>RRHH</title>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
Cargos Cargos
</a> </a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<li><a class="dropdown-item" href="/cargo">Agregar Cargo</a></li> <li><a class="dropdown-item" href="/cargos/agregar">Agregar Cargo</a></li>
<li><a class="dropdown-item" href="/cargos">Listar cargos</a></li> <li><a class="dropdown-item" href="/cargos">Listar cargos</a></li>
<li><a class="dropdown-item" href="/convocatorias">Listar convocatorias</a></li> <li><a class="dropdown-item" href="/convocatorias">Listar convocatorias</a></li>
</ul> </ul>
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
Tecnologías Tecnologías
</a> </a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<li><a class="dropdown-item" href="/tecnologia">Agregar</a></li> <li><a class="dropdown-item" href="/tecnologias/agregar">Agregar</a></li>
<li><a class="dropdown-item" href="/tecnologias">Listar</a></li> <li><a class="dropdown-item" href="/tecnologias">Listar</a></li>
</ul> </ul>
</li> </li>
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
<title>Login</title> <title>Login</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link href="https://getbootstrap.com/docs/4.0/examples/signin/signin.css" rel="stylesheet" crossorigin="anonymous"> <link href="https://getbootstrap.com/docs/4.0/examples/signin/signin.css" rel="stylesheet" crossorigin="anonymous">
<link href="../css/style.css" rel="stylesheet" type="text/css"/> <link href="/css/style.css" rel="stylesheet" type="text/css"/>
<link rel="icon" href="../img/LogoRoshka.ico"> <link rel="icon" href="/img/LogoRoshka.ico">
</head> </head>
<body> <body>
<jsp:include page="alerts.jsp"/> <jsp:include page="alerts.jsp"/>
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<form:form method="post" action="/login"> <form:form method="post" action="/login">
<h3>Ingresar</h3> <h3>Ingresar</h3>
<div align="center"> <div>
<img src="../img/LogoRoshka.ico" class="rounded img-fluid" id="image" style="width:auto;height:auto;" alt=""/> <img src="/img/LogoRoshka.ico" class="rounded img-fluid" id="image" style="width:auto;height:auto;" alt=""/>
</div> </div>
<div class="form-outline mb-4"> <div class="form-outline mb-4">
<input type="email" id="typeEmailX-2" class="form-control form-control-lg" name="email" placeholder="example@example.com"/> <input type="email" id="typeEmailX-2" class="form-control form-control-lg" name="email" placeholder="example@example.com"/>
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
<!-- Bootstrap CSS --> <!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <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> <title>Curriculum</title>
<link href="../css/formPostulanteStyle.css" rel="stylesheet" type="text/css"/> <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"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
<link rel="icon" href="../img/LogoRoshka.ico"> <link rel="icon" href="/img/LogoRoshka.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Shippori+Antique+B1"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Shippori+Antique+B1">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
...@@ -519,6 +519,6 @@ ...@@ -519,6 +519,6 @@
<script> <script>
var ciudades = ${ciudades}; var ciudades = ${ciudades};
</script> </script>
<script src="./main.js"></script> <script src="/js/main.js"></script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%> <%@ taglib uri="http://kwonnam.pe.kr/jsp/template-inheritance" prefix="layout"%>
<layout:extends name="layouts/base.jsp"> <layout:extends name="layouts/base.jsp">
<layout:put block="cssDeclaracion" type="APPEND"> <layout:put block="cssDeclaracion" type="APPEND">
<link href="../css/PostulanteStyle.css" rel="stylesheet" type="text/css"/> <link href="/css/PostulanteStyle.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
</layout:put> </layout:put>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<button class="btn btn-primary">Buscar</button> <button class="btn btn-primary">Buscar</button>
</div> </div>
<div class="col" style="float: left;"> <div class="col" style="float: left;">
<a href="/postulantesExcel?${query}" type="button" class="btn btn-light float-end"> <a href="/postulantes/excel?${query}" type="button" class="btn btn-light float-end">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-excel-fill" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-excel-fill" viewBox="0 0 16 16">
<path d="M9.293 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.707A1 1 0 0 0 13.707 4L10 .293A1 1 0 0 0 9.293 0zM9.5 3.5v-2l3 3h-2a1 1 0 0 1-1-1zM5.884 6.68 8 9.219l2.116-2.54a.5.5 0 1 1 .768.641L8.651 10l2.233 2.68a.5.5 0 0 1-.768.64L8 10.781l-2.116 2.54a.5.5 0 0 1-.768-.641L7.349 10 5.116 7.32a.5.5 0 1 1 .768-.64z"></path> <path d="M9.293 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.707A1 1 0 0 0 13.707 4L10 .293A1 1 0 0 0 9.293 0zM9.5 3.5v-2l3 3h-2a1 1 0 0 1-1-1zM5.884 6.68 8 9.219l2.116-2.54a.5.5 0 1 1 .768.641L8.651 10l2.233 2.68a.5.5 0 0 1-.768.64L8 10.781l-2.116 2.54a.5.5 0 0 1-.768-.641L7.349 10 5.116 7.32a.5.5 0 1 1 .768-.64z"></path>
</svg> </svg>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
<script> <script>
var convocatorias = ${convocatoriaC}; var convocatorias = ${convocatoriaC};
</script> </script>
<script src="./Convo.js"></script> <script src="/js/Convo.js"></script>
<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
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<h5>Tecnología</h5> <h5>Tecnología</h5>
</div> </div>
<form:form <form:form
action="/tecnologia/${tecnologia.id == null ? '' : tecnologia.id}" action="/tecnologias/${tecnologia.id == null ? 'agregar' : 'modificar/'.concat(tecnologia.id)}"
method="post" method="post"
modelAttribute="tecnologia" modelAttribute="tecnologia"
class="d-flex flex-column" class="d-flex flex-column"
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<th scope="row">${sta.index+1}</th> <th scope="row">${sta.index+1}</th>
<td>${tecnologia.getNombre()}</td> <td>${tecnologia.getNombre()}</td>
<td><a href="/tecnologia/${tecnologia.id}"><i class="bi bi-pencil-fill"></i></a></td> <td><a href="/tecnologias/modificar/${tecnologia.id}"><i class="bi bi-pencil-fill"></i></a></td>
</tr> </tr>
</c:forEach> </c:forEach>
......
### TalentoHumano
Talento humano es una aplicación web desarrollada con Java Spring Boot, jsp, css, javascript, postgreSQL, ayudara a Recursos Humanos de Roshka con la recepción de curriculum de un persona que quiere postularse a un puesto vacante en Roshka, mediante la recolección de Datos de un formulario, donde también se podrá adjuntar su curriculum en formato pdf o word, el postulante deberá completar un formulario y los encargados de la revisión de estos podrán visualizar los datos de cada Postulante que haya llenado y enviado el formulario, desde la misma aplicación Web podrá descargar el Curriculum del postulante en formato pdf así también podrá descargar el Curriculum adjuntado por el postulante.
# Uso de la Aplicación web
## Uso del Postulante
El Postulante deberá completar los datos Requeridos para poder enviar el formulario
# <img alt="YAP" src="https://i.imgur.com/lgoRaKe.png">
## Uso Recurso Humanos
El Usuario de Recurso Humanos dispondrá de una cuenta con el cual podrá loguearse.
# <img alt="YAP" src="https://imgur.com/oIyrrVp.png">
Una vez Logueado el Usuario se le abrirá el Home de la Aplicación.
# <img alt="YAP" src="https://imgur.com/12Qs1Ff.png">
Desde el Home podrá seleccionar a donde quiere ir.
# <img alt="YAP" src="https://imgur.com/9bXeYAO.png">
Opción de agregar cargo, donde podrá ingresar un cargo en la empresa.
# <img alt="YAP" src="https://imgur.com/fCXL9je.png">
Opción listar cargos, desde donde tendrá la posibilidad de abrir una convocatoria para un cargo, editar el nombre del cargo, podrá visualizar las convocatorias abiertas y cerradas del cargo en específico que seleccione y también podrá filtrar una búsqueda de un cargo en específico por su nombre.
# <img alt="YAP" src="https://imgur.com/ieQQYRk.png">
Opción de Listar Convocatorias, desde ahí podrá visualizar todas las convocatorias que se han abierto o cerrado independientemente del cargo, también podrá cerrar una convocatoria abierta y filtrar por cargo y estado(abierto o cerrado).
# <img alt="YAP" src="https://imgur.com/Nyvpr5A.png">
Opción de cargar tecnologías al igual que cargar cargos el usuario podrá ingresar una nueva tecnología para cargarla a la base de datos.
# <img alt="YAP" src="https://imgur.com/Wnmsq4U.png">
Opción de listar tecnologías donde podrá visualizar todas las tecnologías cargadas y filtrar de por nombre.
# <img alt="YAP" src="https://imgur.com/SdiYI1A.png">
Opción de visualizar Postulantes, donde podrá ver a todos los postulantes que llenaron el formulario, tendrá la opción de filtrar datos para realizar una búsqueda en específico, descargar un Excel de todos los postulantes cargos o los postulantes filtrados.
# <img alt="YAP" src="https://imgur.com/ApA7A5a.png">
## Diagrama de la base de datos
# <img alt="YAP" src="./db_diagram.png">
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