Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package br.edu.cesmac.sic.controller.beans;
2
 
3
import java.io.Serializable;
4
import java.util.ArrayList;
5
import java.util.Collections;
6
import java.util.Comparator;
7
import java.util.HashSet;
8
import java.util.List;
9
 
10
import javax.annotation.PostConstruct;
11
import javax.inject.Inject;
12
import javax.inject.Named;
13
import javax.persistence.Transient;
14
 
15
import org.primefaces.model.StreamedContent;
16
import org.springframework.context.annotation.Scope;
17
 
18
import br.edu.cesmac.core.consulta.ParametrosConsulta;
19
import br.edu.cesmac.core.generic.GenericService;
20
import br.edu.cesmac.core.util.VerificadorUtil;
21
import br.edu.cesmac.relatorio.util.RelatorioUtils;
22
import br.edu.cesmac.sca.seguranca.authentication.context.ContextoSeguranca;
23
import br.edu.cesmac.sic.controller.beans.consultademanda.ProjetoPesquisaConsultaPorDemanda;
24
import br.edu.cesmac.sic.core.domain.model.Avaliacao;
25
import br.edu.cesmac.sic.core.domain.model.Avaliador;
26
import br.edu.cesmac.sic.core.domain.model.ProjetoPesquisa;
27
import br.edu.cesmac.sic.core.domain.model.ProjetoPesquisaAvaliador;
28
import br.edu.cesmac.sic.core.domain.model.Questao;
29
import br.edu.cesmac.sic.core.domain.model.Resposta;
30
import br.edu.cesmac.sic.core.domain.model.dto.TopicoQuestaoDTO;
31
import br.edu.cesmac.sic.core.domain.model.tipo.TipoConceitoGlobal;
32
import br.edu.cesmac.sic.core.domain.model.tipo.TipoTopico;
33
import br.edu.cesmac.sic.core.domain.service.AvaliacaoService;
34
import br.edu.cesmac.sic.core.domain.service.AvaliadorService;
35
import br.edu.cesmac.sic.core.domain.service.EmissorRelatorioService;
36
import br.edu.cesmac.sic.core.domain.service.ProjetoPesquisaService;
37
import br.edu.cesmac.sic.core.domain.service.QuestaoService;
38
import br.edu.cesmac.sic.core.domain.service.RespostaService;
39
import br.edu.cesmac.web.exception.VerificadorLancamentoException;
40
import br.edu.cesmac.web.exception.VerificadorLancamentoException.CommandBean;
41
import br.edu.cesmac.web.exception.VerificadorLancamentoException.CommandRelatorioStreamedContent;
42
import br.edu.cesmac.web.generic.AbstractBean;
43
import br.edu.cesmac.web.message.LancadorMensagem;
44
import br.edu.cesmac.web.util.TipoOperacao;
45
import net.sf.jasperreports.engine.JasperPrint;
46
 
47
@Named
48
@Scope("view")
49
public class AvaliacaoBean extends AbstractBean<ProjetoPesquisa> implements Serializable {
50
 
51
        private static final long serialVersionUID = 1L;
52
 
53
        private ProjetoPesquisaConsultaPorDemanda lazy;
54
        private List<Resposta> respostas;
55
        private List<ProjetoPesquisa> projetosPesquisaDisponiveis;
56
        private Avaliacao avaliacaoSelecionada;
57
 
58
        private ProjetoPesquisaService projetoPesquisaService;
59
        private QuestaoService questaoService;
60
        private RespostaService respostaService;
61
        private AvaliacaoService avaliacaoService;
62
        private AvaliadorService avaliadorService;
63
        private EmissorRelatorioService emissorRelatorioService;
64
 
65
        private ContextoSeguranca contextoSeguranca;
66
 
67
        @Inject
68
        public AvaliacaoBean(ProjetoPesquisaConsultaPorDemanda lazy, ProjetoPesquisaService projetoPesquisaService, QuestaoService questaoService,
69
                        RespostaService respostaService, AvaliacaoService avaliacaoService, AvaliadorService avaliadorService, EmissorRelatorioService emissorRelatorioService,
70
                        ContextoSeguranca contextoSeguranca) {
71
                this.lazy = lazy;
72
                this.projetoPesquisaService = projetoPesquisaService;
73
                this.questaoService = questaoService;
74
                this.respostaService = respostaService;
75
                this.avaliacaoService = avaliacaoService;
76
                this.avaliadorService = avaliadorService;
77
                this.contextoSeguranca = contextoSeguranca;
78
        }
79
 
80
        @Override
81
        public ProjetoPesquisa getId() {
82
                return getEntidade();
83
        }
84
 
85
        @Override
86
        public GenericService<ProjetoPesquisa> getService() {
87
                return projetoPesquisaService;
88
        }
89
 
90
        @Override
91
        public void limparEntidade() {
92
                setEntidade(new ProjetoPesquisa());
93
                setAvaliacaoSelecionada(null);
94
        }
95
 
96
        @Override
97
        public ProjetoPesquisa getEntidade() {
98
                return entidade;
99
        }
100
 
101
        public ProjetoPesquisaConsultaPorDemanda getLazy() {
102
                return lazy;
103
        }
104
 
105
        public void prepararConsultaDemanda() {
106
                lazy.setarParametrosConsulta(getParametrosConsulta());
107
        }
108
 
109
        public List<Resposta> getRespostas() {
110
                return respostas;
111
        }
112
 
113
        @Transient
114
        public List<TopicoQuestaoDTO> getTopicosOrdenados() {
115
                List<TopicoQuestaoDTO> topicos = new ArrayList<TopicoQuestaoDTO>();
116
                if (VerificadorUtil.naoEstaNulo(getRespostas())) {
117
                        adicionarRespostasDoTopico(topicos, null);
118
                        adicionarRespostasDoTopico(topicos, TipoTopico.INTRODUCAO.getValue());
119
                        adicionarRespostasDoTopico(topicos, TipoTopico.OBJETIVOS.getValue());
120
                        adicionarRespostasDoTopico(topicos, TipoTopico.METODOLOGIA.getValue());
121
                        adicionarRespostasDoTopico(topicos, TipoTopico.REFERENCIAS.getValue());
122
                        adicionarRespostasDoTopico(topicos, TipoTopico.PLANO_ATIVIDADES_CRONOGRAMA.getValue());
123
                }
124
                return topicos;
125
        }
126
 
127
        private void adicionarRespostasDoTopico(List<TopicoQuestaoDTO> topicos, String tipoTopico) {
128
                TopicoQuestaoDTO topico = new TopicoQuestaoDTO(tipoTopico);
129
                for (Resposta resposta : getRespostasOrdenadas()) {
130
                        if (VerificadorUtil.naoEstaNulo(resposta.getQuestao().getTipoTopico())) {
131
                                if (resposta.getQuestao().getTipoTopico().equals(tipoTopico)) {
132
                                        topico.getRespostas().add(resposta);
133
                                }
134
                        } else if (VerificadorUtil.estaNulo(tipoTopico)) {
135
                                topico.getRespostas().add(resposta);
136
                        }
137
                }
138
                topicos.add(topico);
139
        }
140
 
141
        @Transient
142
        public List<Resposta> getRespostasOrdenadas() {
143
                List<Resposta> respostasOrdenadas = null;
144
                if (VerificadorUtil.naoEstaNulo(getRespostas())) {
145
                        respostasOrdenadas = new ArrayList<Resposta>(getRespostas());
146
                        Collections.sort(respostasOrdenadas, new Comparator<Resposta>() {
147
                                public int compare(Resposta r1, Resposta r2) {
148
                                        return r1.getQuestao().getNumeroQuestao().compareTo(r2.getQuestao().getNumeroQuestao());
149
                                };
150
                        });
151
                }
152
                return respostasOrdenadas;
153
        }
154
 
155
        public void setRespostas(List<Resposta> respostas) {
156
                this.respostas = respostas;
157
        }
158
 
159
        public List<ProjetoPesquisa> getProjetosPesquisaDisponiveis() {
160
                return projetosPesquisaDisponiveis;
161
        }
162
 
163
        public void setProjetosPesquisaDisponiveis(List<ProjetoPesquisa> projetosPesquisaDisponiveis) {
164
                this.projetosPesquisaDisponiveis = projetosPesquisaDisponiveis;
165
        }
166
 
167
        public Avaliacao getAvaliacaoSelecionada() {
168
                return avaliacaoSelecionada;
169
        }
170
 
171
        public void setAvaliacaoSelecionada(Avaliacao avaliacaoSelecionada) {
172
                this.avaliacaoSelecionada = avaliacaoSelecionada;
173
        }
174
 
175
        public Double getPontuacaoTotal() {
176
                Double pontuacaoTotal = new Double(0.0);
177
                for (Resposta resposta : getRespostas()) {
178
                        pontuacaoTotal = pontuacaoTotal + resposta.getValorPontuacao();
179
                }
180
                return pontuacaoTotal;
181
        }
182
 
183
        @PostConstruct
184
        public void preCarregamento() {
185
                parametrosConsulta = new ParametrosConsulta<ProjetoPesquisa>();
186
                parametrosConsulta.setEntidade(new ProjetoPesquisa());
187
                prepararConsultaDemanda();
188
                Avaliador avaliador = avaliadorService.consultarAvaliadorPorPessoa(contextoSeguranca.obterUsuario().getPessoa());
189
                setProjetosPesquisaDisponiveis(projetoPesquisaService.consultarProjetosPesquisaDisponiveisDoAvaliador(avaliador));
190
        }
191
 
192
        @Override
193
        public void preRealizar() {
194
                setTipoOperacao(TipoOperacao.REALIZAR);
195
        }
196
 
197
        public List<ProjetoPesquisa> getProjetosPesquisaNaoAvaliados() {
198
                return projetoPesquisaService.consultarProjetosPesquisaNaoAvaliados(null, null);
199
        }
200
 
201
        public void preAvaliar(ProjetoPesquisa projetoPesquisa) {
202
                Avaliador avaliador = avaliadorService.consultarAvaliadorPorPessoa(contextoSeguranca.obterUsuario().getPessoa());
203
                Avaliacao avaliacao = avaliacaoService.consultarAvaliacaoDoAvaliador(projetoPesquisa, avaliador);
204
                if (VerificadorUtil.naoEstaNulo(avaliacao)) {
205
                        setRespostas(new ArrayList<Resposta>(avaliacao.getRespostas()));
206
                        setAvaliacaoSelecionada(avaliacao);
207
                } else {
208
                        avaliacao = new Avaliacao();
209
                        ProjetoPesquisaAvaliador projetoPesquisaAvaliador = new ProjetoPesquisaAvaliador();
210
                        projetoPesquisaAvaliador.setProjetoPesquisa(projetoPesquisa);
211
                        avaliacao.setProjetoPesquisaAvaliador(projetoPesquisaAvaliador);
212
                        preencherQuestoesParaRespostas(avaliacao);
213
                        setAvaliacaoSelecionada(avaliacao);
214
                }
215
                setEntidade(projetoPesquisaService.detalharProjetoPesquisa(projetoPesquisa));
216
                preRealizar();
217
        }
218
 
219
        public void preReavaliar(ProjetoPesquisa projetoPesquisa) {
220
                setEntidade(projetoPesquisa);
221
                Avaliador avaliador = avaliadorService.consultarAvaliadorPorPessoa(contextoSeguranca.obterUsuario().getPessoa());
222
                setAvaliacaoSelecionada(avaliacaoService.consultarAvaliacaoDoAvaliador(projetoPesquisa, avaliador));
223
                setRespostas(new ArrayList<Resposta>(getAvaliacaoSelecionada().getRespostas()));
224
                preRealizar();
225
        }
226
 
227
        @Override
228
        public void preAlterar(ProjetoPesquisa projetoPesquisa) {
229
                super.preAlterar(projetoPesquisa);
230
//              setRespostas(respostaService.consultarRespostasDoProjetoPesquisa(projetoPesquisa));
231
        }
232
 
233
        public void selecionarAvaliacaoParaConsulta(Avaliacao avaliacao) {
234
                setAvaliacaoSelecionada(avaliacaoService.consultarAvaliacaoDoAvaliador(avaliacao.getProjetoPesquisaAvaliador().getProjetoPesquisa(), avaliacao.getProjetoPesquisaAvaliador().getAvaliador()));
235
                setRespostas(new ArrayList<Resposta>(getAvaliacaoSelecionada().getRespostas()));
236
        }
237
 
238
        private void preencherQuestoesParaRespostas(Avaliacao avaliacao) {
239
                List<Resposta> respostas = new ArrayList<Resposta>();
240
                List<Questao> questoesAtivas = questaoService.consultarQuestoesAtivas();
241
                for (Questao questao : questoesAtivas) {
242
                        Resposta resposta = new Resposta();
243
                        resposta.setQuestao(questao);
244
                        resposta.setAvaliacao(avaliacao);
245
                        resposta.setValorPontuacao(new Double(0.0));
246
                        respostas.add(resposta);
247
                }
248
                setRespostas(respostas);
249
        }
250
 
251
        public TipoConceitoGlobal[] getTiposConceitoGlobal() {
252
                return TipoConceitoGlobal.values();
253
        }
254
 
255
        public void confirmarAvaliacao() {
256
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
257
                        public void execute() {
258
                                ProjetoPesquisaAvaliador projetoPesquisaAvaliador = new ProjetoPesquisaAvaliador();
259
                                projetoPesquisaAvaliador.setProjetoPesquisa(getEntidade());
260
                                projetoPesquisaAvaliador.setAvaliador(avaliadorService.consultarAvaliadorPorPessoa(contextoSeguranca.obterUsuario().getPessoa()));
261
                                getAvaliacaoSelecionada().setProjetoPesquisaAvaliador(projetoPesquisaAvaliador);
262
                                getAvaliacaoSelecionada().setRespostas(new HashSet<Resposta>(getRespostas()));
263
                                avaliacaoService.alterar(getAvaliacaoSelecionada());
264
                                preConsultar();
265
                                LancadorMensagem.lancarSucesso(getMensagens().get(IDENTIFICADOR_MENSAGEM_CADASTRADO_COM_SUCESSO));
266
                        }
267
                });
268
        }
269
 
270
        public String descricaoDoTipoConceitoGlobal(String tipoConceitoGlobal) {
271
                return TipoConceitoGlobal.parse(tipoConceitoGlobal).getDescricao();
272
        }
273
 
274
        public void validarAvaliacao() {
275
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
276
                        public void execute() {
277
                                /*
278
                                getEntidade().getProjetoPesquisaAvaliacao().setIndicadorValidacao(true);
279
                                */
280
                                projetoPesquisaService.alterar(getEntidade());
281
                                preConsultar();
282
                                LancadorMensagem.lancarSucesso("Avaliação validada com sucesso");
283
                        }
284
                });
285
        }
286
 
287
        public Boolean avaliadorFezAvaliacaoDoProjeto(ProjetoPesquisa projetoPesquisa) {
288
                Avaliador avaliador = avaliadorService.consultarAvaliadorPorPessoa(contextoSeguranca.obterUsuario().getPessoa());
289
                return VerificadorUtil.naoEstaNulo(avaliacaoService.consultarAvaliacaoDoAvaliador(projetoPesquisa, avaliador));
290
        }
291
 
292
        public StreamedContent emitirAvaliacao() {
293
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
294
                        @Override
295
                        public StreamedContent execute() {
296
                                JasperPrint relatorio = emissorRelatorioService.emitirAvaliacao(getAvaliacaoSelecionada());
297
                                return RelatorioUtils.gerarPdf(relatorio, relatorio.getName());
298
                        }
299
                });
300
        }
301
 
302
}