Subversion Repositories Integrator Subversion

Rev

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

package br.gov.al.saude.scs.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;

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.framework.core.util.DataUtils;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.scg.model.view.MunicipioView;
import br.gov.al.saude.scg.model.view.PessoaFisicaView;
import br.gov.al.saude.scg.model.view.UfView;
import br.gov.al.saude.scs.model.view.UnidadeView;
import br.gov.al.saude.scs.tipo.TipoSituacaoTurma;

@Entity
@Table(name = "scs_turma", schema = "sc_scs")
public class Turma implements Serializable, Identidade {
       
        private static final long serialVersionUID = 1L;
       
        private Long sequencial;
        private Integer anoExercicio;
        private Capacitacao capacitacao;
        private UnidadeView unidadeSolicitante;
        private Integer cargaHoraria;
        private UfView uf;
        private MunicipioView municipio;
        private String observacao;
        private String ementa;
        private Boolean indicadorAtivo;
        private Set<PessoaFisicaView> representantes = new HashSet<PessoaFisicaView>();
        private Set<TurmaParticipante> participantes = new HashSet<TurmaParticipante>();
        private Set<TurmaPeriodo> periodos = new HashSet<TurmaPeriodo>();
        private Set<TurmaProcesso> processos = new HashSet<TurmaProcesso>();
        private Set<Frequencia> frequencias = new HashSet<Frequencia>();
       
        @Id
        @GeneratedValue(generator="turma_generator", strategy=GenerationType.SEQUENCE)
        @SequenceGenerator(name="turma_generator", sequenceName="sq_turma", initialValue = 1, allocationSize = 1, schema="sc_scs")
        @Column(name="seq_turma", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @Column(name="num_ano", nullable=false, length=4)
        @NotNull(message= "Obrigatório informar o ano de exercício.", groups={Cadastrar.class, Alterar.class})
        public Integer getAnoExercicio() {
                return anoExercicio;
        }
        public void setAnoExercicio(Integer anoExercicio) {
                this.anoExercicio = anoExercicio;
        }
       
        @ManyToOne
        @JoinColumn(name="seq_capacitacao", referencedColumnName="seq_capacitacao", nullable=false)
        @NotNull(message="Obrigatório informar a capacitação.", groups={Cadastrar.class, Alterar.class})
        public Capacitacao getCapacitacao() {
                return capacitacao;
        }
        public void setCapacitacao(Capacitacao capacitacao) {
                this.capacitacao = capacitacao;
        }
       
        @ManyToOne
        @JoinColumn(name="cod_unidade_solicitante", referencedColumnName="cod_unidade", nullable=false)
        @NotNull(message="Obrigatório informar a unidade solicitante.", groups={Cadastrar.class, Alterar.class})
        public UnidadeView getUnidadeSolicitante() {
                return unidadeSolicitante;
        }
        public void setUnidadeSolicitante(UnidadeView unidadeSolicitante) {
                this.unidadeSolicitante = unidadeSolicitante;
        }
       
        @Column(name="num_carga_horaria")
        public Integer getCargaHoraria() {
                return cargaHoraria;
        }
        public void setCargaHoraria(Integer cargaHoraria) {
                this.cargaHoraria = cargaHoraria;
        }
       
        @ManyToOne
        @JoinColumn(name="cod_uf", referencedColumnName="cod_uf")
        public UfView getUf() {
                return uf;
        }
        public void setUf(UfView uf) {
                this.uf = uf;
        }
       
        @ManyToOne
        @JoinColumn(name="seq_municipio", referencedColumnName="seq_municipio")
        public MunicipioView getMunicipio() {
                return municipio;
        }
        public void setMunicipio(MunicipioView municipio) {
                this.municipio = municipio;
        }
       
        @Column(name="dsc_observacao")
        public String getObservacao() {
                return observacao;
        }
        public void setObservacao(String observacao) {
                this.observacao = observacao;
        }
       
        @Column(name="dsc_ementa")
        public String getEmenta() {
                return ementa;
        }
        public void setEmenta(String ementa) {
                this.ementa = ementa;
        }
       
        @Column(name="ind_ativo", nullable=false)
        public Boolean getIndicadorAtivo() {
                return indicadorAtivo;
        }

        public void setIndicadorAtivo(Boolean indicadorAtivo) {
                this.indicadorAtivo = indicadorAtivo;
        }
       
//      @Valid
        @ManyToMany
        @JoinTable(name="scs_turma_representante",
                joinColumns=@JoinColumn(name="seq_turma", referencedColumnName="seq_turma"),
                inverseJoinColumns=@JoinColumn(name="seq_pessoa", referencedColumnName="seq_pessoa")
        )
        public Set<PessoaFisicaView> getRepresentantes() {
                return representantes;
        }
        public void setRepresentantes(Set<PessoaFisicaView> representantes) {
                this.representantes = representantes;
        }
       
        @Transient
        public List<PessoaFisicaView> getRepresentantesAsList() {
                if(VerificadorUtil.estaNulo(representantes)) {
                        return new ArrayList<PessoaFisicaView>();
                }
                return new ArrayList<PessoaFisicaView>(representantes);
        }
       
        @OneToMany(mappedBy="turma", cascade=CascadeType.ALL, orphanRemoval = true)
        public Set<TurmaParticipante> getParticipantes() {
                return participantes;
        }
        public void setParticipantes(Set<TurmaParticipante> participantes) {
                this.participantes = participantes;
        }
       
        @Transient
        public List<TurmaParticipante> getParticipantesAsList() {
                if(VerificadorUtil.estaNulo(participantes)) {
                        return new ArrayList<TurmaParticipante>();
                }
                return new ArrayList<TurmaParticipante>(participantes);
        }
       
        @OneToMany(mappedBy="turma", cascade=CascadeType.ALL, orphanRemoval = true)
        public Set<TurmaProcesso> getProcessos() {
                return processos;
        }
        public void setProcessos(Set<TurmaProcesso> processos) {
                this.processos = processos;
        }
       
        @Transient
        public List<TurmaProcesso> getProcessosAsList() {
                if(VerificadorUtil.estaNulo(processos)) {
                        return new ArrayList<TurmaProcesso>();
                }
                return new ArrayList<TurmaProcesso>(processos);
        }
       
        @OneToMany(mappedBy="turma", cascade=CascadeType.ALL, orphanRemoval = true)
        @NotEmpty(message="Obrigatório informar um período.", groups={Cadastrar.class, Alterar.class})
        public Set<TurmaPeriodo> getPeriodos() {
                return periodos;
        }
        public void setPeriodos(Set<TurmaPeriodo> periodos) {
                this.periodos = periodos;
        }
       
        @Transient
        public List<TurmaPeriodo> getPeriodosAsList() {
                if(periodos == null) {
                        return new ArrayList<TurmaPeriodo>();
                }
                return new ArrayList<TurmaPeriodo>(periodos);
        }
       
        @OneToMany(mappedBy="turma")
        public Set<Frequencia> getFrequencias() {
                return frequencias;
        }
        public void setFrequencias(Set<Frequencia> frequencias) {
                this.frequencias = frequencias;
        }

        @Transient
        public String getSituacaoTurma(){
                return TipoSituacaoTurma.recuperarTipoSituacao(this, DataUtils.getDataAtual());
        }
       
        public void adicionarRepresentante(PessoaFisicaView representante) {
                if(representantes == null) {
                        representantes = new HashSet<PessoaFisicaView>();
                }
                representantes.add(representante);
        }
       
        public void removerRepresentante(PessoaFisicaView representante) {
                representantes.remove(representante);
        }
       
        public void adicionarProcesso(TurmaProcesso turmaProcesso) {
                if(processos == null) {
                        processos = new HashSet<TurmaProcesso>();
                }
                processos.add(turmaProcesso);
        }
       
        public void removerProcesso(TurmaProcesso turmaProcesso) {
                processos.remove(turmaProcesso);
        }
       
        public void adicionarParticipante(TurmaParticipante turmaParticipante) {
                if(participantes == null) {
                        participantes = new HashSet<TurmaParticipante>();
                }
                participantes.add(turmaParticipante);
        }
       
        public void removerParticipante(TurmaParticipante turmaParticipante) {
                participantes.remove(turmaParticipante);
        }
       
        public void adicionarTurmaPeriodo(TurmaPeriodo turmaPeriodo) {
                if(periodos == null) {
                        periodos = new HashSet<TurmaPeriodo>();
                }
                periodos.add(turmaPeriodo);
        }
       
        public void removerTurmaPeriodo(TurmaPeriodo turmaPeriodo) {
                periodos.remove(turmaPeriodo);
        }
       
        @Override
        @Transient
        public Object getId() {
                return sequencial;
        }

        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }
       
        @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 (getClass() != obj.getClass())
                        return false;
                Turma other = (Turma) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
       
}