Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package br.gov.al.saude.scs.tipo;
2
 
3
import java.util.Date;
4
import java.util.Set;
5
 
6
import br.gov.al.saude.framework.core.util.DataUtils;
7
import br.gov.al.saude.framework.core.util.VerificadorUtil;
8
import br.gov.al.saude.scs.model.Turma;
9
import br.gov.al.saude.scs.model.TurmaPeriodo;
10
import br.gov.al.saude.scs.model.dto.TurmaDTO;
11
 
12
public enum TipoSituacaoTurma {
13
 
14
        NAO_INICIADA("N", "Não Iniciada"),
15
        EM_ANDAMENTO("E", "Em Andamento"),
16
        CONCLUIDA("C", "Concluída");
17
 
18
        private String tipo;
19
        private String descricao;
20
 
21
        private TipoSituacaoTurma(String tipo, String descricao) {
22
                this.tipo = tipo;
23
                this.descricao = descricao;
24
        }
25
 
26
        public String getValor() {
27
                return tipo;
28
        }
29
 
30
        public String getDescricao() {
31
                return descricao;
32
        }
33
 
34
        public static TipoSituacaoTurma parse(String tipo) {
35
                for (TipoSituacaoTurma item : TipoSituacaoTurma.values()) {
36
                        if (item.getValor().equals(tipo)) {
37
                                return item;
38
                        }
39
                }
40
                return null;
41
        }
42
 
43
        public static TipoSituacaoTurma parse(TurmaDTO turmaDTO) {
44
                if(VerificadorUtil.naoEstaNulo(turmaDTO)){
45
                        if(isDataAtualPosteriorAhDataInformada(turmaDTO.getDataFinal())){
46
                                return TipoSituacaoTurma.CONCLUIDA;
47
                        }
48
                        else if((isDataAtualPosteriorAhDataInformada(turmaDTO.getDataInicial()) ||
49
                                         isDataAtualIgualAhDataInformada(turmaDTO.getDataInicial()))  &&
50
                                        (isDataAtualIgualAhDataInformada(turmaDTO.getDataFinal()) ||
51
                                         isDataAtualAnteriorAhDataInformada(turmaDTO.getDataFinal()))){
52
                                return TipoSituacaoTurma.EM_ANDAMENTO;
53
                        }
54
                        else if(isDataAtualAnteriorAhDataInformada(turmaDTO.getDataInicial())){
55
                                return TipoSituacaoTurma.NAO_INICIADA;
56
                        }
57
                }
58
                return null;
59
        }
60
 
61
        private static boolean isDataAtualAnteriorAhDataInformada(Date data) {
62
                return DataUtils.getDataAtual().before(data);
63
        }
64
 
65
        private static boolean isDataAtualPosteriorAhDataInformada(Date data) {
66
                return DataUtils.getDataAtual().after(data);
67
        }
68
 
69
        private static boolean isDataAtualIgualAhDataInformada(Date data) {
70
                return DataUtils.getDataAtual().equals(data);
71
        }
72
 
73
        public static String recuperarTipoSituacao(Turma turma, Date dataAtual){
74
                Set<TurmaPeriodo> periodos = turma.getPeriodos();
75
                Date menorDataInicial = null;
76
                Date maiorDataFinal = null;
77
                for (TurmaPeriodo turmaPeriodo : periodos) {
78
                        Date dataInicial = turmaPeriodo.getDataInicial();
79
                        Date dataFinal = turmaPeriodo.getDataFinal();
80
 
81
                        if(VerificadorUtil.estaNulo(menorDataInicial) && VerificadorUtil.estaNulo(maiorDataFinal)){
82
                                menorDataInicial = dataInicial;
83
                                maiorDataFinal = dataFinal;
84
                        }
85
 
86
                        if (dataInicial.before(menorDataInicial)) {
87
                                menorDataInicial = dataInicial;
88
                        }
89
 
90
                        if (dataFinal.after(maiorDataFinal)) {
91
                                maiorDataFinal = dataFinal;
92
                        }
93
                }
94
 
95
                if (dataAtual.before(menorDataInicial)) {
96
                        return TipoSituacaoTurma.NAO_INICIADA.getDescricao();
97
                }
98
 
99
                if ((dataAtual.equals(menorDataInicial) || dataAtual.after(menorDataInicial)) && (dataAtual.before(maiorDataFinal) || dataAtual.equals(maiorDataFinal))){
100
                        return TipoSituacaoTurma.EM_ANDAMENTO.getDescricao();
101
                }
102
 
103
                if (dataAtual.equals(maiorDataFinal) || dataAtual.after(maiorDataFinal)) {
104
                        return TipoSituacaoTurma.CONCLUIDA.getDescricao();
105
                }
106
 
107
                return TipoSituacaoTurma.CONCLUIDA.getDescricao();
108
        }
109
 
110
//      Situação da Turma
111
//      Valores possíveis: Não Iniciada, Em Andamento e Concluída.
112
//
113
//      Não Iniciada: Data atual for inferior a data e hora inicial dos períodos.
114
//      Em Andamento: Data atual estiver entre a data e hora de início e fim dos períodos.
115
//      Concluída: Data atual for superior a data e hora final dos períodos.
116
 
117
}