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


4 5
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
6
import com.roshka.modelo.*;
7
import com.roshka.repositorio.*;
Joel Florentin committed
8
import com.roshka.utils.Helper;
9
import org.springframework.beans.factory.annotation.Autowired;
10 11
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
12 13
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
14
import org.springframework.stereotype.Controller;
15
import org.springframework.ui.Model;
16 17
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
18
import org.springframework.web.multipart.MultipartFile;
19 20
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;
21

22 23 24 25
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

26 27
import javax.validation.ConstraintViolationException;

28
@Controller
29
@RequestMapping("/work-with-us")
30
public class PostulanteController {
31
    PostulanteRepository post;
32
    TecnologiaRepository tecRepo;
33
    ExperienciaRepository expRepo;
34
    InstitucionRepository institucionRepository;
35
    DepartamentoRepository depRepo;
36
    CiudadRepository ciuRepo;
37 38
    EstudioRepository estudioRepository;
    PostulanteTecnologiaRepository postulanteTecnologiaRepository;
39
    ConvocatoriaRepository convoRepo;
willgonzz committed
40
    CargoRepository carRepo;
41

42
    @Autowired
43 44 45
    public PostulanteController(
            PostulanteRepository post, TecnologiaRepository tecRepo, ExperienciaRepository expRepo,
            InstitucionRepository institucionRepository, DepartamentoRepository depRepo,
46
            CiudadRepository ciuRepo, EstudioRepository estudioRepository,
47
            PostulanteTecnologiaRepository postulanteTecnologiaRepository,
48
            ConvocatoriaRepository convoRepo, CargoRepository carRepo) {
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
        this.estudioRepository = estudioRepository;
        this.postulanteTecnologiaRepository = postulanteTecnologiaRepository;
57
        this.convoRepo =convoRepo;
willgonzz committed
58
        this.carRepo=carRepo;
59
    }
60

61
    
62
    @RequestMapping(method = RequestMethod.GET)
63 64
    public String getFormPostulante(Model model){
        model.addAttribute("tecnologias", tecRepo.findAll());
65 66
        model.addAttribute("tiposDeEstudio", TipoDeEstudio.values());
        model.addAttribute("estadosEstudio", EstadoEstudio.values());
67 68 69
        model.addAttribute("estadosCiviles", EstadoCivil.values());
        model.addAttribute("nacionalidades", Nacionalidad.values());
        model.addAttribute("tiposExperencia", TipoExperiencia.values());
70 71
        model.addAttribute("CargosDisponibles", 
                convoRepo.findByCargoAndEstado(null, EstadoConvocatoria.abierto, PageRequest.of(0,Integer.MAX_VALUE,Sort.by("id"))).getContent());
72 73
        try {
            model.addAttribute("ciudades", new ObjectMapper().writeValueAsString(ciuRepo.findAll()));
willgonzz committed
74
        } catch (JsonProcessingException er) {
75
            // TODO Auto-generated catch block
willgonzz committed
76
            er.printStackTrace();
77 78
        }
        model.addAttribute("departamentos", depRepo.findAll());
79
        
80 81
        return "postulante-form";
    }
82

Joel Florentin committed
83
    
84
    @PostMapping(consumes = "multipart/form-data")
85 86
    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
87
        //Codigo encargado de modificar postulacion si se envia mismo CI
88
        RedirectView redirectView = new RedirectView("/work-with-us/postulacion-correcta",true);
89
        Postulante postulantex = post.findByNroDocument(postulante.getNroDocument());
90
        if(postulantex != null){
Javier Ferreira committed
91
            postulante.setEstadoPostulante(postulantex.getEstadoPostulante());
92
            postulante.setComentarioRRHH(postulantex.getComentarioRRHH()); 
93 94 95 96
            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());
97
            postulante.setFechaCreacion((postulantex.getFechaCreacion())); 
98 99 100 101 102 103 104 105 106 107 108 109 110
            //postulante.setMesesDeExperiencia(postulantex.getMesesDeExperiencia());
            ArrayList<ConvocatoriaCargo> postulaciones = new ArrayList<>();
            Set<Long> indices = new HashSet<>();
            for (ConvocatoriaCargo convocatoriaCargo : postulante.getPostulaciones()) {
                indices.add(convocatoriaCargo.getId());
                postulaciones.add(convocatoriaCargo);
            }
            for (ConvocatoriaCargo convocatoriaCargo : postulantex.getPostulaciones()) {
                if(indices.contains(convocatoriaCargo.getId())) continue;
                postulaciones.add(convocatoriaCargo);
            }
            postulante.setPostulaciones(postulaciones);
            
111
        }
112
        if(file!=null){
Joel Florentin committed
113
            DBFile cv = Helper.createFile(file);
114 115
            if(cv!=null) cv.setPostulante(postulante);
            postulante.setCvFile(cv);
116
        }        
117
        for(Estudio estudio: postulante.getEstudios()){
118 119 120
            String nombreIns = estudio.getInstitucion().getNombre();
            
            Institucion institucion = institucionRepository.findByNombreIgnoreCase(nombreIns);
121 122 123 124
            if(institucion==null){
                institucionRepository.save(estudio.getInstitucion());
            }else{
                estudio.setInstitucion(institucion);
125
            }
126
        }
127 128 129 130 131
        if(postulante.getPostulaciones().isEmpty() || postulante.getTecnologias().isEmpty()){
            redirectView.setUrl("/postulante");
            redirectAttributes.addFlashAttribute("error", "Datos invalidos");
            return redirectView;
        }
132
        post.save(postulante);
133
        return redirectView;
134
    }
135

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

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



163
    
164
}
165