package br.gov.al.saude.rhd.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.Valid;
import org.hibernate.annotations.SQLDelete;
import br.gov.al.saude.framework.core.generic.identidade.Identidade;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.rhd.model.view.ServidorDadoFuncionalView;
import br.gov.al.saude.rhd.model.view.ServidorView;
import br.gov.al.saude.rhd.model.view.UnidadeView;
@
Entity
@Table
(name =
"rhd_servidor_avaliacao", schema =
"sc_rhd")
@SQLDelete
(sql=
"UPDATE sc_rhd.rhd_servidor_avaliacao SET seq_grupo_avaliacao = null WHERE num_ano = ? and seq_servidor_dadofuncional = ?")
public class ServidorAvaliacao
implements Serializable, Identidade,
Comparable<ServidorAvaliacao
> {
private static final long serialVersionUID = 1L
;
private ServidorAvaliacaoId servidorAvaliacaoId
;
private ServidorDadoFuncionalView servidorDadoFuncional
;
private Cronograma cronograma
;
private String tipoEfetivoExercicio
;
private GrupoAvaliacao grupoAvaliacao
;
private Boolean participacaoAvaliado
;
private String descricaoJustificativa
;
private Boolean statusAvaliacao
;
private List<RevisaoAvaliacao
> revisoes
;
public ServidorAvaliacao
() {
servidorDadoFuncional =
new ServidorDadoFuncionalView
(new ServidorView
());
cronograma =
new Cronograma
();
participacaoAvaliado =
false;
}
public ServidorAvaliacao
(String tipoEfetivoExercicio,
Boolean participacaoAvaliado,
String descricaoJustificativa,
Long sequencialDadoFuncional,
Long numeroMatriculaDadoFuncional,
Integer numeroDigitoMatriculaDadoFuncional,
String nomeServidor,
Long numeroAnoCronograma,
Long sequencialPessoa
) {
super();
this.
tipoEfetivoExercicio = tipoEfetivoExercicio
;
this.
participacaoAvaliado = participacaoAvaliado
;
this.
descricaoJustificativa = descricaoJustificativa
;
this.
cronograma =
new Cronograma
(numeroAnoCronograma
);
this.
servidorAvaliacaoId =
new ServidorAvaliacaoId
(sequencialDadoFuncional, numeroAnoCronograma
);
this.
servidorDadoFuncional =
new ServidorDadoFuncionalView
(sequencialDadoFuncional, numeroMatriculaDadoFuncional,
numeroDigitoMatriculaDadoFuncional, nomeServidor, sequencialPessoa
);
}
@
Override
public void setId
(Object id
) {
this.
servidorAvaliacaoId =
(ServidorAvaliacaoId
) id
;
}
@
Override
@Transient
public Object getId
() {
return this.
servidorAvaliacaoId;
}
@Valid
@EmbeddedId
public ServidorAvaliacaoId getServidorAvaliacaoId
() {
return servidorAvaliacaoId
;
}
public void setServidorAvaliacaoId
(ServidorAvaliacaoId servidorAvaliacaoId
) {
this.
servidorAvaliacaoId = servidorAvaliacaoId
;
}
@ManyToOne
@JoinColumn
(name=
"seq_servidor_dadofuncional", referencedColumnName=
"seq_servidor_dadofuncional", insertable=
false, updatable=
false, nullable=
false)
public ServidorDadoFuncionalView getServidorDadoFuncional
() {
return servidorDadoFuncional
;
}
public void setServidorDadoFuncional
(ServidorDadoFuncionalView servidorDadoFuncional
) {
this.
servidorDadoFuncional = servidorDadoFuncional
;
}
@ManyToOne
@JoinColumn
(name=
"num_ano", referencedColumnName=
"num_ano", insertable=
false, updatable=
false, nullable=
false)
public Cronograma getCronograma
() {
return cronograma
;
}
public void setCronograma
(Cronograma cronograma
) {
this.
cronograma = cronograma
;
}
@Column
(name=
"tip_efetivo_exercicio", nullable=
false)
public String getTipoEfetivoExercicio
() {
return tipoEfetivoExercicio
;
}
public void setTipoEfetivoExercicio
(String tipoEfetivoExercicio
) {
this.
tipoEfetivoExercicio = tipoEfetivoExercicio
;
}
@ManyToOne
@JoinColumn
(name=
"seq_grupo_avaliacao")
public GrupoAvaliacao getGrupoAvaliacao
() {
return grupoAvaliacao
;
}
public void setGrupoAvaliacao
(GrupoAvaliacao grupoAvaliacao
) {
this.
grupoAvaliacao = grupoAvaliacao
;
}
@OneToMany
(mappedBy=
"servidorAvaliacao", fetch=FetchType.
LAZY)
public List<RevisaoAvaliacao
> getRevisoes
() {
return VerificadorUtil.
estaNulo(revisoes
)? new ArrayList<RevisaoAvaliacao
>(): revisoes
;
}
public void setRevisoes
(List<RevisaoAvaliacao
> revisoes
) {
this.
revisoes = revisoes
;
}
@Column
(name =
"ind_participacao_avaliado")
public Boolean getParticipacaoAvaliado
() {
return participacaoAvaliado
;
}
public void setParticipacaoAvaliado
(Boolean participacaoAvaliado
) {
this.
participacaoAvaliado = participacaoAvaliado
;
}
@Transient
public String getEfetivoExercicioPorExtenso
() {
if(tipoEfetivoExercicio
!=
null) {
char efetivoExercicio = tipoEfetivoExercicio.
charAt(0);
switch (efetivoExercicio
) {
case 'S':
return "Sim";
case 'N':
return "Não";
case 'P':
return "Pendente";
default:
break;
}
}
return null;
}
@Transient
public String getEfetivoExercicio
() {
if(tipoEfetivoExercicio
!=
null) {
return tipoEfetivoExercicio
;
}
return null;
}
@Column
(name=
"dsc_justificativa")
public String getDescricaoJustificativa
() {
return descricaoJustificativa
;
}
public void setDescricaoJustificativa
(String descricaoJustificativa
) {
this.
descricaoJustificativa = descricaoJustificativa
;
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result +
((servidorAvaliacaoId ==
null) ? 0 : servidorAvaliacaoId.
hashCode());
return result
;
}
@
Override
public boolean equals
(Object obj
) {
if (this == obj
)
return true;
if (obj ==
null)
return false;
if (getClass
() != obj.
getClass())
return false;
ServidorAvaliacao other =
(ServidorAvaliacao
) obj
;
if (servidorAvaliacaoId ==
null) {
if (other.
servidorAvaliacaoId !=
null)
return false;
} else if (!servidorAvaliacaoId.
equals(other.
servidorAvaliacaoId))
return false;
return true;
}
@Transient
public String getNomeServidor
() {
return getServidorDadoFuncional
().
getServidorView() !=
null ? getServidorDadoFuncional
().
getServidorView().
getNome() :
"" ;
}
@Transient
public String getCpfServidor
() {
return getServidorDadoFuncional
().
getServidorView() !=
null ? getServidorDadoFuncional
().
getServidorView().
getCpf() :
"" ;
}
@Transient
public String getMatriculaServidorConvertidaParaString
() {
return getServidorDadoFuncional
() !=
null ? getServidorDadoFuncional
().
getNumeroMatricula().
toString() :
"" ;
}
@Transient
public Long getMatriculaServidor
() {
return getServidorDadoFuncional
() !=
null ? getServidorDadoFuncional
().
getNumeroMatricula() :
null ;
}
@Transient
public Integer getDigitoMatriculaServidor
() {
return getServidorDadoFuncional
() !=
null ? getServidorDadoFuncional
().
getNumeroDigitoMatricula() :
null ;
}
@
Override
public int compareTo
(ServidorAvaliacao o
) {
return getNomeServidor
().
compareToIgnoreCase(o.
getNomeServidor());
}
public void setStatusAvaliacao
(Boolean statusAvaliacao
) {
this.
statusAvaliacao = statusAvaliacao
;
}
@Transient
public Boolean getStatusAvaliacao
() {
return statusAvaliacao
;
}
@Transient
public String getParticipacaoAvaliadoPorExtenso
() {
return getParticipacaoAvaliado
()? "Sim" :
"Não";
}
@Transient
public String getStatusAvaliacaoPorExtenso
() {
return getStatusAvaliacao
() ? "Realizado" :
"Pendente";
}
@Transient
public Long getSequencialDadoFuncionalDoServidor
() {
return getServidorAvaliacaoId
() !=
null ? getServidorAvaliacaoId
().
getSequencialDadoFuncionalServidor() :
null;
}
@Transient
public UnidadeView getUnidadeExercicioDadoFuncionalServidor
() {
return VerificadorUtil.
naoEstaNulo(getServidorDadoFuncional
()) ? getServidorDadoFuncional
().
getUnidadeExercicio() :
null;
}
@Transient
public Long getSequencialUnidadeExercicioDadoFuncionalServidor
() {
UnidadeView unidadeExercicio = getUnidadeExercicioDadoFuncionalServidor
();
return VerificadorUtil.
naoEstaNulo(unidadeExercicio
) ? unidadeExercicio.
getSequencial() :
null;
}
@Transient
public Long getNumeroAnoCronograma
() {
return VerificadorUtil.
naoEstaNulo(getCronograma
()) ? getCronograma
().
getNumeroAno() :
null;
}
}