Subversion Repositories Integrator Subversion

Rev

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

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

import java.util.Date;
import java.util.Set;

import br.gov.al.saude.framework.core.util.DataUtils;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.scs.model.Turma;
import br.gov.al.saude.scs.model.TurmaPeriodo;
import br.gov.al.saude.scs.model.dto.TurmaDTO;

public enum TipoSituacaoTurma {
       
        NAO_INICIADA("N", "Não Iniciada"),
        EM_ANDAMENTO("E", "Em Andamento"),
        CONCLUIDA("C", "Concluída");
       
        private String tipo;
        private String descricao;
       
        private TipoSituacaoTurma(String tipo, String descricao) {
                this.tipo = tipo;
                this.descricao = descricao;
        }
       
        public String getValor() {
                return tipo;
        }
       
        public String getDescricao() {
                return descricao;
        }
       
        public static TipoSituacaoTurma parse(String tipo) {
                for (TipoSituacaoTurma item : TipoSituacaoTurma.values()) {
                        if (item.getValor().equals(tipo)) {
                                return item;
                        }
                }
                return null;
        }
       
        public static TipoSituacaoTurma parse(TurmaDTO turmaDTO) {
                if(VerificadorUtil.naoEstaNulo(turmaDTO)){
                        if(isDataAtualPosteriorAhDataInformada(turmaDTO.getDataFinal())){
                                return TipoSituacaoTurma.CONCLUIDA;
                        }
                        else if((isDataAtualPosteriorAhDataInformada(turmaDTO.getDataInicial()) ||
                                         isDataAtualIgualAhDataInformada(turmaDTO.getDataInicial()))  &&
                                        (isDataAtualIgualAhDataInformada(turmaDTO.getDataFinal()) ||
                                         isDataAtualAnteriorAhDataInformada(turmaDTO.getDataFinal()))){
                                return TipoSituacaoTurma.EM_ANDAMENTO;
                        }
                        else if(isDataAtualAnteriorAhDataInformada(turmaDTO.getDataInicial())){
                                return TipoSituacaoTurma.NAO_INICIADA;
                        }
                }
                return null;
        }

        private static boolean isDataAtualAnteriorAhDataInformada(Date data) {
                return DataUtils.getDataAtual().before(data);
        }

        private static boolean isDataAtualPosteriorAhDataInformada(Date data) {
                return DataUtils.getDataAtual().after(data);
        }
       
        private static boolean isDataAtualIgualAhDataInformada(Date data) {
                return DataUtils.getDataAtual().equals(data);
        }
       
        public static String recuperarTipoSituacao(Turma turma, Date dataAtual){
                Set<TurmaPeriodo> periodos = turma.getPeriodos();
                Date menorDataInicial = null;
                Date maiorDataFinal = null;
                for (TurmaPeriodo turmaPeriodo : periodos) {
                        Date dataInicial = turmaPeriodo.getDataInicial();
                        Date dataFinal = turmaPeriodo.getDataFinal();
                       
                        if(VerificadorUtil.estaNulo(menorDataInicial) && VerificadorUtil.estaNulo(maiorDataFinal)){
                                menorDataInicial = dataInicial;
                                maiorDataFinal = dataFinal;
                        }
                       
                        if (dataInicial.before(menorDataInicial)) {
                                menorDataInicial = dataInicial;
                        }
                       
                        if (dataFinal.after(maiorDataFinal)) {
                                maiorDataFinal = dataFinal;
                        }
                }
               
                if (dataAtual.before(menorDataInicial)) {
                        return TipoSituacaoTurma.NAO_INICIADA.getDescricao();
                }
               
                if ((dataAtual.equals(menorDataInicial) || dataAtual.after(menorDataInicial)) && (dataAtual.before(maiorDataFinal) || dataAtual.equals(maiorDataFinal))){
                        return TipoSituacaoTurma.EM_ANDAMENTO.getDescricao();
                }
               
                if (dataAtual.equals(maiorDataFinal) || dataAtual.after(maiorDataFinal)) {
                        return TipoSituacaoTurma.CONCLUIDA.getDescricao();
                }
               
                return TipoSituacaoTurma.CONCLUIDA.getDescricao();
        }
       
//      Situação da Turma
//      Valores possíveis: Não Iniciada, Em Andamento e Concluída.
//
//      Não Iniciada: Data atual for inferior a data e hora inicial dos períodos.
//      Em Andamento: Data atual estiver entre a data e hora de início e fim dos períodos.
//      Concluída: Data atual for superior a data e hora final dos períodos.

}