package br.gov.al.saude.srv.model;
import static br.gov.al.saude.framework.core.util.DataUtils.converterDataParaString;
import static br.gov.al.saude.framework.core.util.VerificadorUtil.estaNulo;
import static br.gov.al.saude.framework.core.util.VerificadorUtil.naoEstaNulo;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
import org.hibernate.envers.NotAudited;
import org.hibernate.envers.RelationTargetAuditMode;
import br.gov.al.saude.framework.core.generic.identidade.Identidade;
import br.gov.al.saude.framework.core.interfaces.Alterar;
import br.gov.al.saude.framework.core.interfaces.Cadastrar;
import br.gov.al.saude.srv.model.enums.TipoObjetoEventoServidor;
import br.gov.al.saude.srv.model.enums.TipoPublicacao;
import br.gov.al.saude.srv.model.enums.TipoRemocao;
import br.gov.al.saude.srv.model.enums.TipoSituacaoEvento;
@Audited
@AuditTable
(value=
"srv_hist_evento_servdadofunc", schema=
"sc_srv")
@
Entity
@Table
(name=
"srv_evento_servdadofunc", schema=
"sc_srv")
public class EventoServidorDadoFuncional
implements Serializable, Identidade
{
private static final long serialVersionUID = 1L
;
private Long sequencial
;
private Evento evento
;
private String tipoSituacaoEvento
;
private ServidorDadoFuncional servidorDadoFuncional
;
private Date dataEvento
;
private String observacao
;
private Boolean indicadorEventoRetroativo
;
private Set<EventoServidorDadoFuncionalDocumento
> eventoServidorDadoFuncionalDocumentos =
new HashSet<EventoServidorDadoFuncionalDocumento
>();
private Set<EventoServidorDadoFuncionalExigePublicacao
> eventoServidorDadoFuncionaisExigePublicacoes =
new HashSet<EventoServidorDadoFuncionalExigePublicacao
>();
private EventoServidorDadoFuncionalExigeProcesso eventoServidorDadoFuncionalExigeProcesso
;
private EventoServidorDadoFuncionalExigeVigencia eventoServidorDadoFuncionalExigeVigencia
;
private EventoServidorDadoFuncionalTransferenciaReconducao eventoServidorDadoFuncionalTransferenciaReconducao
;
private EventoServidorDadoFuncionalRemocao eventoServidorDadoFuncionalRemocao
;
private EventoServidorDadoFuncionalRedistribuicaoCessao eventoServidorDadoFuncionalRedistribuicaoCessao
;
private EventoServidorDadoFuncionalAcesso eventoServidorDadoFuncionalAcesso
;
private EventoServidorDadoFuncionalProgressaoFuncionalHorizontal EventoServidorDadoFuncionalProgressaoFuncionalHorizontal
;
private EventoServidorDadoFuncionalProgressaoFuncionalVertical eventoServidorDadoFuncionalProgressaoFuncionalVertical
;
@Id
@Column
(name=
"seq_evento_servdadofunc", nullable=
false)
@GeneratedValue
(generator =
"EVENTO_SERVIDOR_DADO_FUNCIONAL_GENERATOR", strategy = GenerationType.
SEQUENCE)
@SequenceGenerator
(name =
"EVENTO_SERVIDOR_DADO_FUNCIONAL_GENERATOR", sequenceName =
"sc_srv.sq_eveserdadfun", initialValue =
1, allocationSize =
1)
public Long getSequencial
() {
return sequencial
;
}
public void setSequencial
(Long sequencial
) {
this.
sequencial = sequencial
;
}
@Audited
(targetAuditMode = RelationTargetAuditMode.
NOT_AUDITED)
@ManyToOne
@JoinColumn
(name=
"cod_evento", referencedColumnName=
"cod_evento", nullable=
false)
@NotNull
(message=
"Obrigatório informar evento.", groups=
{Cadastrar.
class})
public Evento getEvento
() {
return evento
;
}
public void setEvento
(Evento evento
) {
this.
evento = evento
;
}
@Column
(name=
"tip_situacao_evento", length=
1, nullable=
false)
public String getTipoSituacaoEvento
() {
return tipoSituacaoEvento
;
}
public void setTipoSituacaoEvento
(String tipoSituacaoEvento
) {
this.
tipoSituacaoEvento = tipoSituacaoEvento
;
}
@Transient
public TipoSituacaoEvento getEnumTipoSituacao
() {
return TipoSituacaoEvento.
parse(tipoSituacaoEvento
);
}
@Transient
public String getTipoSituacaoEventoDescricao
() {
return TipoSituacaoEvento.
parse(tipoSituacaoEvento
).
getDescricao();
}
public void setTipoSituacaoEvento
(TipoSituacaoEvento tipoSituacaoEvento
) {
this.
tipoSituacaoEvento = estaNulo
(tipoSituacaoEvento
) ? null : tipoSituacaoEvento.
getValue();
}
@Audited
(targetAuditMode = RelationTargetAuditMode.
NOT_AUDITED)
@ManyToOne
(cascade=CascadeType.
MERGE)
@JoinColumn
(name=
"seq_servidor_dadofuncional", referencedColumnName=
"seq_servidor_dadofuncional", nullable=
false)
public ServidorDadoFuncional getServidorDadoFuncional
() {
return servidorDadoFuncional
;
}
public void setServidorDadoFuncional
(ServidorDadoFuncional servidorDadoFuncional
) {
this.
servidorDadoFuncional = servidorDadoFuncional
;
}
@Temporal
(TemporalType.
DATE)
@Column
(name=
"dat_evento", nullable=
false)
@NotNull
(message=
"Obrigatório informar data do evento.", groups=
{Cadastrar.
class, Alterar.
class})
public Date getDataEvento
() {
return dataEvento
;
}
public void setDataEvento
(Date dataEvento
) {
this.
dataEvento = dataEvento
;
}
@Column
(name=
"dsc_observacao")
public String getObservacao
() {
return observacao
;
}
public void setObservacao
(String observacao
) {
this.
observacao = observacao
;
}
@Column
(name=
"ind_evento_retroativo", nullable=
false)
@NotNull
(message=
"Obrigatório informar indicador retroativo.", groups=
{Cadastrar.
class, Alterar.
class})
public Boolean getIndicadorEventoRetroativo
() {
return indicadorEventoRetroativo
;
}
public void setIndicadorEventoRetroativo
(Boolean indicadorEventoRetroativo
) {
this.
indicadorEventoRetroativo = indicadorEventoRetroativo
;
}
@Valid
@NotAudited
@OneToMany
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public Set<EventoServidorDadoFuncionalDocumento
> getEventoServidorDadoFuncionalDocumentos
() {
return eventoServidorDadoFuncionalDocumentos
;
}
public void setEventoServidorDadoFuncionalDocumentos
(Set<EventoServidorDadoFuncionalDocumento
> eventoServidorDadoFuncionalDocumentos
) {
this.
eventoServidorDadoFuncionalDocumentos = eventoServidorDadoFuncionalDocumentos
;
}
@OneToMany
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public Set<EventoServidorDadoFuncionalExigePublicacao
> getEventoServidorDadoFuncionaisExigePublicacoes
() {
return eventoServidorDadoFuncionaisExigePublicacoes
;
}
public void setEventoServidorDadoFuncionaisExigePublicacoes
(Set<EventoServidorDadoFuncionalExigePublicacao
> eventoServidorDadoFuncionaisExigePublicacoes
) {
this.
eventoServidorDadoFuncionaisExigePublicacoes = eventoServidorDadoFuncionaisExigePublicacoes
;
}
@Transient
public EventoServidorDadoFuncionalExigePublicacao getEventoServidorDadoFuncionalExigePortaria
() {
for(EventoServidorDadoFuncionalExigePublicacao eventoServidorDadoFuncionalExigePublicacao : eventoServidorDadoFuncionaisExigePublicacoes
) {
if(TipoPublicacao.
PORTARIA.
getValue().
equals(eventoServidorDadoFuncionalExigePublicacao.
getTipoPublicacao())) {
return eventoServidorDadoFuncionalExigePublicacao
;
}
}
return null;
}
@Transient
public EventoServidorDadoFuncionalExigePublicacao getEventoServidorDadoFuncionalExigeDecreto
() {
for(EventoServidorDadoFuncionalExigePublicacao eventoServidorDadoFuncionalExigePublicacao : eventoServidorDadoFuncionaisExigePublicacoes
) {
if(TipoPublicacao.
DECRETO.
getValue().
equals(eventoServidorDadoFuncionalExigePublicacao.
getTipoPublicacao())) {
return eventoServidorDadoFuncionalExigePublicacao
;
}
}
return null;
}
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalExigeProcesso getEventoServidorDadoFuncionalExigeProcesso
() {
return eventoServidorDadoFuncionalExigeProcesso
;
}
public void setEventoServidorDadoFuncionalExigeProcesso
(EventoServidorDadoFuncionalExigeProcesso eventoServidorDadoFuncionalExigeProcesso
) {
this.
eventoServidorDadoFuncionalExigeProcesso = eventoServidorDadoFuncionalExigeProcesso
;
}
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalExigeVigencia getEventoServidorDadoFuncionalExigeVigencia
() {
return eventoServidorDadoFuncionalExigeVigencia
;
}
public void setEventoServidorDadoFuncionalExigeVigencia
(EventoServidorDadoFuncionalExigeVigencia eventoServidorDadoFuncionalExigeVigencia
) {
this.
eventoServidorDadoFuncionalExigeVigencia = eventoServidorDadoFuncionalExigeVigencia
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalTransferenciaReconducao getEventoServidorDadoFuncionalTransferenciaReconducao
() {
return eventoServidorDadoFuncionalTransferenciaReconducao
;
}
public void setEventoServidorDadoFuncionalTransferenciaReconducao
(EventoServidorDadoFuncionalTransferenciaReconducao eventoServidorDadoFuncionalTransferenciaReconducao
) {
this.
eventoServidorDadoFuncionalTransferenciaReconducao = eventoServidorDadoFuncionalTransferenciaReconducao
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalRemocao getEventoServidorDadoFuncionalRemocao
() {
return eventoServidorDadoFuncionalRemocao
;
}
public void setEventoServidorDadoFuncionalRemocao
(EventoServidorDadoFuncionalRemocao eventoServidorDadoFuncionalRemocao
) {
this.
eventoServidorDadoFuncionalRemocao = eventoServidorDadoFuncionalRemocao
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalRedistribuicaoCessao getEventoServidorDadoFuncionalRedistribuicaoCessao
() {
return eventoServidorDadoFuncionalRedistribuicaoCessao
;
}
public void setEventoServidorDadoFuncionalRedistribuicaoCessao
(EventoServidorDadoFuncionalRedistribuicaoCessao eventoServidorDadoFuncionalRedistribuicaoCessao
) {
this.
eventoServidorDadoFuncionalRedistribuicaoCessao = eventoServidorDadoFuncionalRedistribuicaoCessao
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalAcesso getEventoServidorDadoFuncionalAcesso
() {
return eventoServidorDadoFuncionalAcesso
;
}
public void setEventoServidorDadoFuncionalAcesso
(EventoServidorDadoFuncionalAcesso eventoServidorDadoFuncionalAcesso
) {
this.
eventoServidorDadoFuncionalAcesso = eventoServidorDadoFuncionalAcesso
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalProgressaoFuncionalHorizontal getEventoServidorDadoFuncionalProgressaoFuncionalHorizontal
() {
return EventoServidorDadoFuncionalProgressaoFuncionalHorizontal
;
}
public void setEventoServidorDadoFuncionalProgressaoFuncionalHorizontal
(EventoServidorDadoFuncionalProgressaoFuncionalHorizontal eventoServidorDadoFuncionalProgressaoFuncionalHorizontal
) {
EventoServidorDadoFuncionalProgressaoFuncionalHorizontal = eventoServidorDadoFuncionalProgressaoFuncionalHorizontal
;
}
@Valid
@OneToOne
(mappedBy=
"eventoServidorDadoFuncional", cascade=CascadeType.
ALL, orphanRemoval=
true)
public EventoServidorDadoFuncionalProgressaoFuncionalVertical getEventoServidorDadoFuncionalProgressaoFuncionalVertical
() {
return eventoServidorDadoFuncionalProgressaoFuncionalVertical
;
}
public void setEventoServidorDadoFuncionalProgressaoFuncionalVertical
(EventoServidorDadoFuncionalProgressaoFuncionalVertical eventoServidorDadoFuncionalProgressaoFuncionalVertical
) {
this.
eventoServidorDadoFuncionalProgressaoFuncionalVertical = eventoServidorDadoFuncionalProgressaoFuncionalVertical
;
}
@Transient
public String getIdenticadorProcesso
() {
return naoEstaNulo
(getEventoServidorDadoFuncionalExigeProcesso
()) ? getEventoServidorDadoFuncionalExigeProcesso
().
getIdentificador() :
"";
}
@Transient
public String getNumeroPortaria
() {
return naoEstaNulo
(getEventoServidorDadoFuncionalExigePortaria
()) ? getEventoServidorDadoFuncionalExigePortaria
().
getNumeroPublicacao() :
"";
}
@Transient
public String getNumeroDecreto
() {
return naoEstaNulo
(getEventoServidorDadoFuncionalExigeDecreto
()) ? getEventoServidorDadoFuncionalExigeDecreto
().
getNumeroPublicacao() :
"";
}
@Transient
public String getDataInicialVigencia
() {
return naoEstaNulo
(getEventoServidorDadoFuncionalExigeVigencia
()) ? converterDataParaString
(getEventoServidorDadoFuncionalExigeVigencia
().
getDataInicial()) :
"";
}
@Transient
public String getDataFinalVigencia
() {
return naoEstaNulo
(getEventoServidorDadoFuncionalExigeVigencia
()) ? converterDataParaString
(getEventoServidorDadoFuncionalExigeVigencia
().
getDataFinal()) :
"";
}
@Transient
public String getCampoEspecifico
() {
return naoEstaNulo
(getTipoObjetoEventoServidor
()) ? getTipoObjetoEventoServidor
().
getValue() :
"";
}
@Transient
public String getValorOrigemCampoEspecifico
() {
TipoObjetoEventoServidor tipoEventoServidor = getTipoObjetoEventoServidor
();
if(estaNulo
(tipoEventoServidor
)) return "";
switch(tipoEventoServidor
) {
case TRANSFERENCIA_RECONDUCAO:
return getEventoServidorDadoFuncionalTransferenciaReconducao
().
getCargoOrigem().
getDescricao();
case REMOCAO_OFICIOSA:
case REMOCAO_OFICIAL:
return getEventoServidorDadoFuncionalRemocao
().
getUnidadeOrigem().
getDescricao();
case REDISTRIBUICAO_CESSAO:
return getEventoServidorDadoFuncionalRedistribuicaoCessao
().
getOrgaoOrigem().
getDescricao();
case ACESSO:
return getEventoServidorDadoFuncionalAcesso
().
getFuncaoOrigem().
getDescricao();
case PROGRESSAO_FUNCIONAL_HORIZONTAL:
return getEventoServidorDadoFuncionalProgressaoFuncionalHorizontal
().
getTipoClasseCarreiraOrigemValor();
case PROGRESSAO_FUNCIONAL_VERTICAL:
return getEventoServidorDadoFuncionalProgressaoFuncionalVertical
().
getTipoNivelCarreiraOrigemValor();
default:
return null;
}
}
@Transient
public String getValorDestinoCampoEspecifico
() {
TipoObjetoEventoServidor tipoEventoServidor = getTipoObjetoEventoServidor
();
if(estaNulo
(tipoEventoServidor
)) return "";
switch(tipoEventoServidor
) {
case TRANSFERENCIA_RECONDUCAO:
return getEventoServidorDadoFuncionalTransferenciaReconducao
().
getCargoDestino().
getDescricao();
case REMOCAO_OFICIOSA:
case REMOCAO_OFICIAL:
return getEventoServidorDadoFuncionalRemocao
().
getUnidadeDestino().
getDescricao();
case REDISTRIBUICAO_CESSAO:
return getEventoServidorDadoFuncionalRedistribuicaoCessao
().
getOrgaoDestino().
getDescricao();
case ACESSO:
return getEventoServidorDadoFuncionalAcesso
().
getFuncaoDestino().
getDescricao();
case PROGRESSAO_FUNCIONAL_HORIZONTAL:
return getEventoServidorDadoFuncionalProgressaoFuncionalHorizontal
().
getTipoClasseCarreiraDestinoValor();
case PROGRESSAO_FUNCIONAL_VERTICAL:
return getEventoServidorDadoFuncionalProgressaoFuncionalVertical
().
getTipoNivelCarreiraDestinoValor();
default:
return null;
}
}
@Transient
private TipoObjetoEventoServidor getTipoObjetoEventoServidor
() {
if(naoEstaNulo
(getEventoServidorDadoFuncionalTransferenciaReconducao
())) return TipoObjetoEventoServidor.
TRANSFERENCIA_RECONDUCAO;
if(naoEstaNulo
(getEventoServidorDadoFuncionalRemocao
())) return getEventoServidorDadoFuncionalRemocao
().
getEnumTipoRemocao().
equals(TipoRemocao.
OFICIOSA) ?
TipoObjetoEventoServidor.
REMOCAO_OFICIOSA :
(getEventoServidorDadoFuncionalRemocao
().
getEnumTipoRemocao().
equals(TipoRemocao.
OFICIAL) ?
TipoObjetoEventoServidor.
REMOCAO_OFICIAL :
null);
if(naoEstaNulo
(getEventoServidorDadoFuncionalRedistribuicaoCessao
())) return TipoObjetoEventoServidor.
REDISTRIBUICAO_CESSAO;
if(naoEstaNulo
(getEventoServidorDadoFuncionalAcesso
())) return TipoObjetoEventoServidor.
ACESSO;
if(naoEstaNulo
(getEventoServidorDadoFuncionalProgressaoFuncionalHorizontal
())) return TipoObjetoEventoServidor.
PROGRESSAO_FUNCIONAL_HORIZONTAL;
if(naoEstaNulo
(getEventoServidorDadoFuncionalProgressaoFuncionalVertical
())) return TipoObjetoEventoServidor.
PROGRESSAO_FUNCIONAL_VERTICAL;
return null;
}
@
Override
public void setId
(Object id
) {
this.
sequencial =
(Long) id
;
}
@Transient
@
Override
public Object getId
() {
return this.
sequencial;
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result
+
((sequencial ==
null) ? 0 : sequencial.
hashCode());
return result
;
}
@
Override
public boolean equals
(Object obj
) {
if (this == obj
)
return true;
if (obj ==
null)
return false;
if (!(obj
instanceof EventoServidorDadoFuncional
))
return false;
EventoServidorDadoFuncional other =
(EventoServidorDadoFuncional
) obj
;
if (sequencial ==
null) {
if (other.
sequencial !=
null)
return false;
} else if (!sequencial.
equals(other.
sequencial))
return false;
return true;
}
}