PostulanteController.java 8.18 KB
Newer Older
1 2 3
package com.roshka.controller;


4
import java.util.ArrayList;
5
import java.util.List;
6
import java.util.Locale;
7 8


9
import javax.validation.ConstraintViolationException;
10

11
import com.roshka.DTO.PostulanteListaDTO;
12
import com.roshka.modelo.*;
13 14
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
15
import com.roshka.modelo.Disponibilidad;
16 17
import com.roshka.modelo.EstadoCivil;
import com.roshka.modelo.Nacionalidad;
18
import com.roshka.modelo.Postulante;
19
import com.roshka.modelo.TipoExperiencia;
20
import com.roshka.repositorio.*;
21 22
import com.roshka.repositorio.CiudadRepository;
import com.roshka.repositorio.DepartamentoRepository;
23
import com.roshka.repositorio.ExperienciaRepository;
24
import com.roshka.repositorio.InstitucionRepository;
25
import com.roshka.repositorio.PostulanteRepository;
26
import com.roshka.repositorio.TecnologiaRepository;
27
import com.roshka.utils.Helper;
28

29

30 31
import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.StringType;
32
import org.springframework.beans.factory.annotation.Autowired;
33 34
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
35
import org.springframework.stereotype.Controller;
36
import org.springframework.ui.Model;
37 38
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
39

40 41


42 43
@Controller
public class PostulanteController {
44
    PostulanteRepository post;
45
    TecnologiaRepository tecRepo;
46
    ExperienciaRepository expRepo;
47
    InstitucionRepository institucionRepository;
48
    DepartamentoRepository depRepo;
49
    CiudadRepository ciuRepo;
50 51
    EstudioRepository estudioRepository;
    PostulanteTecnologiaRepository postulanteTecnologiaRepository;
52

53
    @Autowired
54 55 56
    public PostulanteController(
            PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo,
            InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
57 58
            CiudadRepository ciuRepo, EstudioRepository estudioRepository,
            PostulanteTecnologiaRepository postulanteTecnologiaRepository) {
59 60 61 62
        this.post = post;
        this.tecRepo = tecRepo;
        this.expRepo = expRepo;
        this.institucionRepository = institucionRepository;
63 64
        this.depRepo = depRepo;
        this.ciuRepo = ciuRepo;
65 66
        this.estudioRepository = estudioRepository;
        this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
67
    }
68

69
    @RequestMapping("home")
70
    public String index() {
71
      
72

73
      return "index";
74 75
    }

Joel Florentin committed
76
    @RequestMapping("/postulantes")
Joel Florentin committed
77
    public String postulantes(Model model,
78 79 80
                            @RequestParam(required = false)Long tecId,
                            @RequestParam(required = false)String nombre,
                            @RequestParam(required = false)Disponibilidad dispo,
81 82
                            @RequestParam(required = false)Long lvlEng,
                            @RequestParam(required = false)Long lvlTec,
83 84 85
                            @RequestParam(required = false)Long instId,
                            @RequestParam(required = false)Long expInMonths
                            ) {
Joel Florentin committed
86
        model.addAttribute("tecnologias", tecRepo.findAll());
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
        model.addAttribute("disponibilidades", Disponibilidad.values());
        model.addAttribute("institucionesEducativas", institucionRepository.findAll());
        List<Postulante> postulantes = post.postulantesMultiFiltro(nombre == null || nombre.trim().isEmpty() ? new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"), dispo, lvlEng, lvlTec, tecId, instId);
        List<PostulanteListaDTO> postulantesDTO = new ArrayList<>();
        
        for (Postulante postulante : postulantes) {
            long expTotal = 0;
            //Sumamos el tiempo de experiencia total en meses de cada postulante
            //expTotal = postulante.getExperiencias().stream().mapToLong(e -> Helper.getMonthsDifference(e.getFechaDesde(), e.getFechaHasta())).sum();
            for (Experiencia experiencia : postulante.getExperiencias()) {
                expTotal +=  Helper.getMonthsDifference(experiencia.getFechaDesde(), experiencia.getFechaHasta());
            }
            if(expInMonths != null && expInMonths > expTotal) continue;
            postulantesDTO.add(new PostulanteListaDTO(postulante.getId(), postulante.getNombre(), postulante.getApellido(), postulante.getDisponibilidad(), postulante.getNivelIngles(), expTotal, postulante.getTecnologias()));
        }
        
        model.addAttribute("postulantes", postulantesDTO);
Joel Florentin committed
104 105 106
        return "postulantes";
    }

107
    @RequestMapping("/postulante")
108 109
    public String getFormPostulante(Model model){
        model.addAttribute("tecnologias", tecRepo.findAll());
110
        model.addAttribute("disponibilidades", Disponibilidad.values());
111 112
        model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
        model.addAttribute("estadosEstudio", EstadoEstudio.values());
113 114 115 116 117 118 119 120 121 122
        model.addAttribute("estadosCiviles", EstadoCivil.values());
        model.addAttribute("nacionalidades", Nacionalidad.values());
        model.addAttribute("tiposExperencia", TipoExperiencia.values());
        try {
            model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        model.addAttribute("departamentos", depRepo.findAll());
123

124 125
        return "postulante-form";
    }
126

127 128
    @PostMapping(value = "/postulante",consumes = "application/json")
    public String guardarPostulante(@RequestBody Postulante postulante){
129 130 131 132 133 134 135 136
        //Codigo encargado de modificar postulacion si se envia mismo CI
        Postulante postulantex = post.findByNroDocument(postulante.getnroDocument());
        if(postulantex != null){
            estudioRepository.findByPostulante(postulantex).forEach(x -> estudioRepository.delete(x));
            expRepo.findByPostulante(postulantex).forEach(x -> expRepo.delete(x));
            postulanteTecnologiaRepository.findByPostulante(postulantex).forEach(x -> postulanteTecnologiaRepository.delete(x));
            postulante.setId(postulantex.getId());
        }
137 138 139 140
        postulante.getTecnologias().stream().filter(
                    tec -> tec.getTecnologia().getId() != 0 
            ).forEach(
                    tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId()))
141
        );
142
        for(Estudio estudio: postulante.getEstudios()){
143 144 145
            String nombreIns = "";
            nombreIns = estudio.getInstitucion().getNombre().toLowerCase();
            Institucion institucion = institucionRepository.findByNombre(nombreIns);
146
            if(institucion==null){
147
                institucionRepository.save(estudio.getInstitucion());
148 149
            }else{
                estudio.setInstitucion(institucion);
150 151
            }
        }
152
        post.save(postulante);
153 154 155 156 157 158 159 160
        return "redirect:/postulacion-correcta";
    }

    @GetMapping("/postulacion-correcta")
    public String successPostulation(Model model){
        model.addAttribute("mensaje1", "Tu informacion se ha recibido correctamente!");
        model.addAttribute("mensaje2", " espera por que nos pongamos en contacto!");
        return "exitoRegistro";
161 162
    }

163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public ResponseEntity<String> handleValidationExceptions(
            MethodArgumentNotValidException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                .body(ex.getMessage());
    }

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({ConstraintViolationException.class})
    public ResponseEntity<String> handleValidationExceptions2(
            ConstraintViolationException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                .body(ex.getMessage());
    }
178 179
    

180

181 182 183
   @GetMapping({"/postulante/{postulanteId}"})
  	public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) {
 		Postulante p = post.findById(postulanteId).orElse(null);
184 185 186
  		model.addAttribute("postulante",p);				
  		return "detallepostulante";
   
187
    }
188
   }