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

3
import javax.persistence.*;
4
import javax.validation.constraints.*;
5

willgonzz committed
6
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
7
import com.fasterxml.jackson.annotation.JsonIgnore;
8
import com.fasterxml.jackson.annotation.JsonManagedReference;
willgonzz committed
9
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
10
import com.roshka.utils.Helper;
11

12 13
import lombok.Data;

14
import java.util.ArrayList;
15
import java.util.Date;
16
import java.util.List;
17

18 19 20

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

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

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

38 39
    private String apellido;

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

44
    private String nroDocument;
45

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

50 51
    private String correo;

52 53 54 55 56
    @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;
57

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

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

67 68
    @Column(name = "direccion")
    private String direccion;
69

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


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

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

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

91 92 93
    @Column(name = "tipo_documento",length = 3)
    @NotNull
    private TipoDocumento tipoDocumento;
94

95 96


97 98 99
    @Column(name = "tecnologia_otros")
    private String tecnologiaOtros;

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

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

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

116
    @ManyToMany()
117 118 119 120 121 122
    @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;

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

131 132 133 134 135
    @Column(name = "fecha_actualizacion")
    private Date fechaActualizacion;

    @Column(name = "fecha_contratado")
    private Date fechaContratado;
136 137 138

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

144 145


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

    @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;
    }

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