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


4
import java.util.ArrayList;
5 6
import java.util.List;

7
import javax.validation.ConstraintViolationException;
8

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

26 27
import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.StringType;
28
import org.springframework.beans.factory.annotation.Autowired;
29 30
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
31
import org.springframework.stereotype.Controller;
32
import org.springframework.ui.Model;
33 34
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
35

36 37


38 39
@Controller
public class PostulanteController {
40
    PostulanteRepository post;
41
    TecnologiaRepository tecRepo;
42
    ExperienciaRepository expRepo;
43
    InstitucionRepository institucionRepository;
44
    DepartamentoRepository depRepo;
45
    CiudadRepository ciuRepo;
46

47
    @Autowired
48
    public PostulanteController(PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo, InstitucionRepository institucionRepository, DepartamentoRepository depRepo, CiudadRepository ciuRepo) {
49 50 51 52
        this.post = post;
        this.tecRepo = tecRepo;
        this.expRepo = expRepo;
        this.institucionRepository = institucionRepository;
53 54
        this.depRepo = depRepo;
        this.ciuRepo = ciuRepo;
55
    }
56

57

58
    @RequestMapping("/")
59
    public String index() {
60
      
61

62
      return "index";
63 64
    }

Joel Florentin committed
65
    @RequestMapping("/postulantes")
Joel Florentin committed
66
    public String postulantes(Model model,
67 68 69 70 71 72 73 74
                            @RequestParam(required = false)Long tecId,
                            @RequestParam(required = false)String nombre,
                            @RequestParam(required = false)Disponibilidad dispo,
                            @RequestParam(required = false)Integer lvlEng,
                            @RequestParam(required = false)Integer lvlTec,
                            @RequestParam(required = false)Long instId,
                            @RequestParam(required = false)Long expInMonths
                            ) {
Joel Florentin committed
75
        model.addAttribute("tecnologias", tecRepo.findAll());
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
        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
93 94 95
        return "postulantes";
    }

96
    @RequestMapping("/postulante")
97 98
    public String getFormPostulante(Model model){
        model.addAttribute("tecnologias", tecRepo.findAll());
99
        model.addAttribute("disponibilidades", Disponibilidad.values());
100 101
        model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
        model.addAttribute("estadosEstudio", EstadoEstudio.values());
102 103 104 105 106 107 108 109 110 111
        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());
112

113 114
        return "postulante-form";
    }
115

116 117
    @PostMapping(value = "/postulante",consumes = "application/json")
    public String guardarPostulante(@RequestBody Postulante postulante){
118
        System.out.println("hola");
119 120 121 122 123
        postulante.getTecnologias().stream().filter(
                    tec -> tec.getTecnologia().getId() != 0 
            ).forEach(
                    tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId()))
                    );
124
        for(Estudio estudio: postulante.getEstudios()){
125 126
            Institucion institucion = institucionRepository.findByNombre(estudio.getInstitucion().getNombre());
            if(institucion==null){
127
                institucionRepository.save(estudio.getInstitucion());
128 129
            }else{
                estudio.setInstitucion(institucion);
130 131 132
            }
        }
        System.out.println("hola");
133
        post.save(postulante);
134
        return "redirect:/";
135 136
    }

137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
    @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());
    }
152 153
    

154

155

156
}