Postulante.java 4.96 KB
Newer Older
1 2
package com.roshka.modelo;

willgonzz committed
3
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
4
import com.fasterxml.jackson.annotation.JsonIgnore;
5
import com.fasterxml.jackson.annotation.JsonManagedReference;
willgonzz committed
6
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
7
import com.roshka.utils.Helper;
8 9
import lombok.Data;

10 11
import javax.persistence.*;
import javax.validation.constraints.*;
12
import java.util.ArrayList;
13
import java.util.Date;
14
import java.util.List;
15

16 17 18

@Entity
@Table(name="postulante")
willgonzz committed
19
@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property="@UUID")
20
@Data
21
public class Postulante {
22
    @Id
23
    @GeneratedValue(strategy = GenerationType.IDENTITY)
24
    @Column(name="id") 
25 26
    private long id;

27
    @Column(name="nombre")
28
    @NotBlank(message = "Este campo no puede estar vacio")
29
    @Size(max = 255)
30 31
    private String nombre;

32
    @Column(name = "apellido")
33
    @NotBlank(message = "Este campo no puede estar vacio")
34
    @Size(max = 255)
35

36 37
    private String apellido;

38
    @Column(name = "nro_document")
39
    @NotBlank(message = "Este campo no puede estar vacio")
40
    @Size(max = 120)
41

42
    private String nroDocument;
43

44
    @Column(name = "correo")
45
    @NotBlank(message = "Este campo no puede estar vacio")
46
    @Email(message = "Formato incorrecto de correo")
47

48 49
    private String correo;

50 51 52 53 54
    @ManyToOne(targetEntity = Ciudad.class,fetch = FetchType.EAGER)
    @JoinColumn(name="ciudad_id",insertable = false, updatable = false)
    private Ciudad ciudad;
    @Column(name="ciudad_id")
    private Long ciudadId;
55

56
    @Column(name = "telefono")
57
    @NotBlank(message = "Este campo no puede estar vacio")
58 59
    private String telefono;

60
    @Column(name = "fecha_nacimiento")
61 62
    @NotNull(message = "Este campo no puede estar vacio")
    @Past(message = "Este campo no puede estar en el futuro")
63 64
    private Date fechaNacimiento;

65 66
    @Column(name = "direccion")
    private String direccion;
67

68
    @Column(name = "nivel_ingles")
69 70
    @Min(value = 1)
    @Max(value = 5)
71
    private Long nivelIngles;
72 73


willgonzz committed
74
    @Column(name="estado_civil")
75
    @NotNull
76
    private EstadoCivil estadoCivil;
77 78 79

    @Column(name="estado_postulante")
    @NotNull
80
    private EstadoPostulante estadoPostulante;
81 82 83
    @Column(name="comentario_rrhh")
    private String comentarioRRHH;    

84 85
   
    @Column(name="nacionalidad", length = 2)
86
    @NotNull
87
    private Nacionalidad nacionalidad;
88

89
    @Column(name = "tipo_documento",length = 4)
90 91
    @NotNull
    private TipoDocumento tipoDocumento;
92

93 94


95 96 97
    @Column(name = "tecnologia_otros")
    private String tecnologiaOtros;

98
    @JsonManagedReference(value = "postulantetecnologia-postulante")
99
    @OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL)
100 101
    private List<PostulanteTecnologia> tecnologias;
    
102
    @JsonManagedReference(value = "experiencia-postulante")
103
    @OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL)
104
    private List<Experiencia> experiencias = new ArrayList<>();
105

106
    @JsonManagedReference(value = "estudio-postulante")
107
    @OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL)
108 109
    private List<Estudio> estudios;

110 111 112 113
    @JsonManagedReference
    @OneToMany(mappedBy = "postulante",cascade = CascadeType.ALL)
    private List<ReferenciaPersonal> referencias;

114
    @ManyToMany()
115 116 117 118 119 120
    @JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {"postulante_id","convocatoria_cargo_id"}),
                joinColumns = @JoinColumn(name="postulante_id", referencedColumnName="id"),
                inverseJoinColumns= @JoinColumn(name="convocatoria_cargo_id", referencedColumnName="id")
    )
    private List<ConvocatoriaCargo> postulaciones;

121 122 123 124
    @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name = "cvfile_id",referencedColumnName = "id")
    @JsonIgnore
    private DBFile cvFile;
125
   
126 127
    @Column(name = "fecha_creacion")
    private Date fechaCreacion;
128

129 130 131 132 133
    @Column(name = "fecha_actualizacion")
    private Date fechaActualizacion;

    @Column(name = "fecha_contratado")
    private Date fechaContratado;
134 135 136

    @Column(name = "meses_de_exp")
    private Long mesesDeExperiencia;
137
    
138
    public void setFechaNacimiento(String fechaNacimiento) {
139
        this.fechaNacimiento = Helper.convertirFecha(fechaNacimiento);
140
    }
141

142 143


144 145
    @PrePersist
    public void precargarFechas(){
146 147
        this.fechaCreacion = new Date();
        this.fechaActualizacion = this.fechaCreacion;
148 149 150
        this.estadoPostulante = EstadoPostulante.NUEVO;
        this.comentarioRRHH = null;
    }
151 152 153 154 155 156 157 158 159 160 161

    @PostPersist
    private void calcularExperienciaEnMese(){
        long expTotal = 0;
        //expTotal = postulante.getExperiencias().stream().mapToLong(e -> Helper.getMonthsDifference(e.getFechaDesde(), e.getFechaHasta())).sum();
        for (Experiencia experiencia : this.experiencias) {
            expTotal +=  Helper.getMonthsDifference(experiencia.getFechaDesde(), experiencia.getFechaHasta());
        }
        this.mesesDeExperiencia = expTotal;
    }

162 163
    @PreUpdate
    public void actualizarFecha(){
164
        this.fechaActualizacion= new Date();
165
    }
166
  
167
   
168
}