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


4
import java.util.ArrayList;
willgonzz committed
5
import java.util.Date;
6
import java.util.List;
7
import java.util.Locale;
8 9


10
import javax.validation.ConstraintViolationException;
11

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

31

32 33
import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.type.StringType;
willgonzz committed
34 35
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
36
import org.springframework.beans.factory.annotation.Autowired;
37 38 39
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
40
import org.springframework.data.domain.Sort;
41 42
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
43
import org.springframework.stereotype.Controller;
44
import org.springframework.ui.Model;
45 46
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
47

48 49


50 51
@Controller
public class PostulanteController {
52
    PostulanteRepository post;
53
    TecnologiaRepository tecRepo;
54
    ExperienciaRepository expRepo;
55
    InstitucionRepository institucionRepository;
56
    DepartamentoRepository depRepo;
57
    CiudadRepository ciuRepo;
willgonzz committed
58 59
    ConvocatoriaRepository cargoRepo;
    CargoRepository carRepo;
60

61
    @Autowired
62 63 64
    public PostulanteController(
            PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo,
            InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
65
            CiudadRepository ciuRepo, ConvocatoriaRepository cargoRepo, CargoRepository carRepo) {
66 67 68 69
        this.post = post;
        this.tecRepo = tecRepo;
        this.expRepo = expRepo;
        this.institucionRepository = institucionRepository;
70 71
        this.depRepo = depRepo;
        this.ciuRepo = ciuRepo;
willgonzz committed
72 73
        this.cargoRepo =cargoRepo;
        this.carRepo=carRepo;
74
    }
75

76
    @RequestMapping("home")
77
    public String index() {
78
      
79

80
      return "index";
81 82
    }

Joel Florentin committed
83
    @RequestMapping("/postulantes")
Joel Florentin committed
84
    public String postulantes(Model model,
85 86 87
                            @RequestParam(required = false)Long tecId,
                            @RequestParam(required = false)String nombre,
                            @RequestParam(required = false)Disponibilidad dispo,
88 89
                            @RequestParam(required = false)Long lvlEng,
                            @RequestParam(required = false)Long lvlTec,
90
                            @RequestParam(required = false)Long instId,
91
                            @RequestParam(required = false)Long expInMonths,
92
                            @RequestParam(required = false)Long cargoId,
93
                            @RequestParam(defaultValue = "0")Integer nroPagina
94
                            ) {
95
        final Integer CANTIDAD_POR_PAGINA = 5;
96
        Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));
Joel Florentin committed
97
        model.addAttribute("tecnologias", tecRepo.findAll());
98 99
        model.addAttribute("disponibilidades", Disponibilidad.values());
        model.addAttribute("institucionesEducativas", institucionRepository.findAll());
100
        Page<Postulante> postulantesPag = post.postulantesMultiFiltro(nombre == null || nombre.trim().isEmpty() ? new TypedParameterValue(StringType.INSTANCE,null) : new TypedParameterValue(StringType.INSTANCE,"%"+nombre+"%"), dispo, lvlEng, lvlTec, tecId, instId,cargoId,page);
101
        List<Postulante> postulantes = postulantesPag.getContent();
102 103 104 105 106 107 108 109 110 111 112 113 114
        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()));
        }
        
115
        model.addAttribute("pages", postulantesPag.getTotalPages());
116
        model.addAttribute("postulantes", postulantesDTO);
Joel Florentin committed
117 118 119
        return "postulantes";
    }

120
    @RequestMapping("/postulante")
121 122
    public String getFormPostulante(Model model){
        model.addAttribute("tecnologias", tecRepo.findAll());
123
        model.addAttribute("disponibilidades", Disponibilidad.values());
124 125
        model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
        model.addAttribute("estadosEstudio", EstadoEstudio.values());
126 127 128
        model.addAttribute("estadosCiviles", EstadoCivil.values());
        model.addAttribute("nacionalidades", Nacionalidad.values());
        model.addAttribute("tiposExperencia", TipoExperiencia.values());
willgonzz committed
129
        model.addAttribute("CargosDisponibles", cargoRepo.f1ndByCargoAndEstado(new TypedParameterValue(LongType.INSTANCE, null), new Date(), new TypedParameterValue(IntegerType.INSTANCE, 1)));
130 131
        try {
            model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
willgonzz committed
132
        } catch (JsonProcessingException er) {
133
            // TODO Auto-generated catch block
willgonzz committed
134
            er.printStackTrace();
135 136
        }
        model.addAttribute("departamentos", depRepo.findAll());
137

138 139
        return "postulante-form";
    }
140

141 142
    @PostMapping(value = "/postulante",consumes = "application/json")
    public String guardarPostulante(@RequestBody Postulante postulante){
143 144 145 146
        postulante.getTecnologias().stream().filter(
                    tec -> tec.getTecnologia().getId() != 0 
            ).forEach(
                    tec -> tec.setTecnologia(tecRepo.getById(tec.getTecnologia().getId()))
147
                    ); 
willgonzz committed
148 149

        
150
        /* for (int i = 0; i < postulante.getPostulaciones().size(); i++) {
willgonzz committed
151 152
            postulante.getPostulaciones().set(i, cargoRepo.getById(postulante.getPostulaciones().get(i).getId()));
        }
153
         */
154
        for(Estudio estudio: postulante.getEstudios()){
155 156 157
            String nombreIns = "";
            nombreIns = estudio.getInstitucion().getNombre().toLowerCase();
            Institucion institucion = institucionRepository.findByNombre(nombreIns);
158
            if(institucion==null){
159
                institucionRepository.save(estudio.getInstitucion());
160 161
            }else{
                estudio.setInstitucion(institucion);
162 163
            }
        }
164
        post.save(postulante);
165 166 167 168 169 170 171 172
        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";
173 174
    }

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
    @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());
    }
190 191
    

192

193 194 195
   @GetMapping({"/postulante/{postulanteId}"})
  	public String getPostulanteDetalle(Model model, @PathVariable("postulanteId") Long postulanteId) {
 		Postulante p = post.findById(postulanteId).orElse(null);
196 197 198
  		model.addAttribute("postulante",p);				
  		return "detallepostulante";
   
199
    }
200
   }