Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

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

}