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


4
import java.io.IOException;
willgonzz committed
5
import java.util.Date;
6 7


8
import javax.validation.ConstraintViolationException;
9

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
import com.roshka.modelo.TipoExperiencia;
18
import com.roshka.repositorio.*;
19
import com.roshka.repositorio.CiudadRepository;
willgonzz committed
20
import com.roshka.repositorio.ConvocatoriaRepository;
21
import com.roshka.repositorio.DepartamentoRepository;
22
import com.roshka.repositorio.ExperienciaRepository;
23
import com.roshka.repositorio.InstitucionRepository;
24
import com.roshka.repositorio.PostulanteRepository;
25
import com.roshka.repositorio.TecnologiaRepository;
Joel Florentin committed
26
import com.roshka.utils.Helper;
27

28
import org.hibernate.jpa.TypedParameterValue;
willgonzz committed
29 30
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
31
import org.springframework.beans.factory.annotation.Autowired;
32 33
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
34 35
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
36
import org.springframework.stereotype.Controller;
37
import org.springframework.ui.Model;
38
import org.springframework.util.StringUtils;
39 40
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
41
import org.springframework.web.multipart.MultipartFile;
42 43
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;
44 45


46 47
@Controller
public class PostulanteController {
48
    PostulanteRepository post;
49
    TecnologiaRepository tecRepo;
50
    ExperienciaRepository expRepo;
51
    InstitucionRepository institucionRepository;
52
    DepartamentoRepository depRepo;
53
    CiudadRepository ciuRepo;
54 55
    EstudioRepository estudioRepository;
    PostulanteTecnologiaRepository postulanteTecnologiaRepository;
56
    ConvocatoriaRepository convoRepo;
willgonzz committed
57
    CargoRepository carRepo;
58

59
    @Autowired
60 61 62
    public PostulanteController(
            PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo,
            InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
63
            CiudadRepository ciuRepo, EstudioRepository estudioRepository,
64
            PostulanteTecnologiaRepository postulanteTecnologiaRepository,
65
            ConvocatoriaRepository convoRepo, 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;
72 73
        this.estudioRepository = estudioRepository;
        this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
74
        this.convoRepo =convoRepo;
willgonzz committed
75
        this.carRepo=carRepo;
76
    }
77

78
    
79
    @RequestMapping(value = "/work-with-us",method = RequestMethod.GET)
80 81
    public String getFormPostulante(Model model){
        model.addAttribute("tecnologias", tecRepo.findAll());
82
        model.addAttribute("disponibilidades", Disponibilidad.values());
83 84
        model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
        model.addAttribute("estadosEstudio", EstadoEstudio.values());
85 86 87
        model.addAttribute("estadosCiviles", EstadoCivil.values());
        model.addAttribute("nacionalidades", Nacionalidad.values());
        model.addAttribute("tiposExperencia", TipoExperiencia.values());
88 89
        model.addAttribute("CargosDisponibles", 
                convoRepo.findByCargoAndEstado(null, EstadoConvocatoria.abierto, PageRequest.of(0,Integer.MAX_VALUE,Sort.by("id"))).getContent());
90 91
        try {
            model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
willgonzz committed
92
        } catch (JsonProcessingException er) {
93
            // TODO Auto-generated catch block
willgonzz committed
94
            er.printStackTrace();
95 96
        }
        model.addAttribute("departamentos", depRepo.findAll());
97
        
98 99
        return "postulante-form";
    }
100

Joel Florentin committed
101
    
102
    @PostMapping(value = "/work-with-us",consumes = "multipart/form-data")
103 104
    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
105
        //Codigo encargado de modificar postulacion si se envia mismo CI
106
        RedirectView redirectView = new RedirectView("/work-with-us/postulacion-correcta",true);
107
        Postulante postulantex = post.findByNroDocument(postulante.getNroDocument());
108
        if(postulantex != null){
Javier Ferreira committed
109
            postulante.setEstadoPostulante(postulantex.getEstadoPostulante());
110
            postulante.setComentarioRRHH(postulantex.getComentarioRRHH()); 
111 112 113 114 115
            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());
        }
116
        if(file!=null){
Joel Florentin committed
117
            DBFile cv = Helper.createFile(file);
118 119
            if(cv!=null) cv.setPostulante(postulante);
            postulante.setCvFile(cv);
120
        }        
121 122 123 124 125 126 127 128
        for(Estudio estudio: postulante.getEstudios()){
            String nombreIns = "";
            nombreIns = estudio.getInstitucion().getNombre().toLowerCase();
            Institucion institucion = institucionRepository.findByNombre(nombreIns);
            if(institucion==null){
                institucionRepository.save(estudio.getInstitucion());
            }else{
                estudio.setInstitucion(institucion);
129
            }
130
        }
131 132 133 134 135
        if(postulante.getPostulaciones().isEmpty() || postulante.getTecnologias().isEmpty()){
            redirectView.setUrl("/postulante");
            redirectAttributes.addFlashAttribute("error", "Datos invalidos");
            return redirectView;
        }
136
        post.save(postulante);
137
        return redirectView;
138
    }
139

140 141 142
    
    
    @GetMapping("/work-with-us/postulacion-correcta")
Joel Florentin committed
143
    public String successPostulation(Model model){
144 145 146
        model.addAttribute("mensaje1", "Tu informacion se ha recibido correctamente!");
        model.addAttribute("mensaje2", " espera por que nos pongamos en contacto!");
        return "exitoRegistro";
147 148
    }

149 150 151
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public ResponseEntity<String> handleValidationExceptions(
152
        MethodArgumentNotValidException ex) {
153 154
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                .body(ex.getMessage());
155
    }
156
            
157 158 159 160 161 162 163 164 165 166
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({ConstraintViolationException.class})
    public ResponseEntity<String> handleValidationExceptions2(
        ConstraintViolationException ex) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST)
            .body(ex.getMessage());
        }



167
    
168
}
169