Subversion Repositories Integrator Subversion

Rev

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

package br.gov.al.saude.rhd.web.managebean.avaliacao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.framework.web.exception.VerificadorLancamentoException;
import br.gov.al.saude.framework.web.exception.VerificadorLancamentoException.CommandBean;
import br.gov.al.saude.framework.web.message.LancadorMensagem;
import br.gov.al.saude.framework.web.util.ConstantesWebHelper;
import br.gov.al.saude.rhd.core.application.avaliacao.AvaliacaoFacade;
import br.gov.al.saude.rhd.core.application.avaliacaodesempenho.AvaliacaoDesempenhoFacade;
import br.gov.al.saude.rhd.core.application.servidoravaliacao.ServidorAvaliacaoFacade;
import br.gov.al.saude.rhd.model.Avaliacao;
import br.gov.al.saude.rhd.model.QuestaoAvaliacaoDesempenho;
import br.gov.al.saude.rhd.model.RevisaoAvaliacao;
import br.gov.al.saude.rhd.model.RevisaoAvaliacaoDesempenho;
import br.gov.al.saude.rhd.model.RevisaoAvaliacaoDesempenhoId;
import br.gov.al.saude.rhd.model.ServidorAvaliacao;
import br.gov.al.saude.rhd.model.ServidorAvaliacaoId;
import br.gov.al.saude.rhd.model.view.ServidorDadoFuncionalView;
import br.gov.al.saude.rhd.tipo.TipoAvaliacao;
import br.gov.al.saude.rhd.web.managebean.sessao.SessaoBean;

@Component
@ManagedBean
@Scope("view")
public class AvaliacaoBean implements Serializable {
       
        private static final long serialVersionUID = 1L;
       
        private AvaliacaoFacade avaliacaoFacade;
        private AvaliacaoDesempenhoFacade avaliacaoDesempenhoFacade;
       
        private List<Avaliacao> avaliacoes;
        private List<ServidorDadoFuncionalView> listaDadoFuncional;
       
        private Avaliacao avaliacao;
        private RevisaoAvaliacao revisaoAvaliacao;
        private List<QuestaoAvaliacaoDesempenhoRevisao> listaQuestaoAvaliacaoDesempenhoRevisao;
        private DataModel<QuestaoAvaliacaoDesempenhoRevisao> questaoAvaliacaoDesempenhoRevisaoDataModel;
       
        @Autowired
        public AvaliacaoBean(AvaliacaoFacade avaliacaoFacade, ServidorAvaliacaoFacade servidorAvaliacaoFacade, AvaliacaoDesempenhoFacade avaliacaoDesempenhoFacade, SessaoBean sessaoBean) {
                this.avaliacaoFacade = avaliacaoFacade;
                this.avaliacaoDesempenhoFacade = avaliacaoDesempenhoFacade;
                this.avaliacoes = new ArrayList<Avaliacao>();
                listaDadoFuncional = new ArrayList<ServidorDadoFuncionalView>();
                listaDadoFuncional.addAll(sessaoBean.getServidor().getListaDadosFuncionaisView());
                for (ServidorDadoFuncionalView dadoFuncional : listaDadoFuncional) {
                        ServidorAvaliacaoId servidorAvaliacaoId = new ServidorAvaliacaoId();
                        servidorAvaliacaoId.setNumeroAno(sessaoBean.getCronogramaCorrente().getNumeroAno());
                        servidorAvaliacaoId.setSequencialDadoFuncionalServidor(dadoFuncional.getSequencial());
                       
                        ServidorAvaliacao avaliacaoServidor = new ServidorAvaliacao();
                        avaliacaoServidor.setId(servidorAvaliacaoId);
                        avaliacaoServidor = servidorAvaliacaoFacade.consultarPorId(avaliacaoServidor);
                        if (VerificadorUtil.naoEstaNulo(avaliacaoServidor)) {
                                avaliacao = avaliacaoFacade.visualizarNotaAvaliacao(avaliacaoServidor);
                                avaliacoes.add(avaliacao);
                        }
                }
                limparEntidade();
        }
       
        public List<Avaliacao> getAvaliacoes() {
                return avaliacoes;
        }
        public void setAvaliacoes(List<Avaliacao> avaliacoes) {
                this.avaliacoes = avaliacoes;
        }

        public Avaliacao getAvaliacao() {
                return avaliacao;
        }

        public void setAvaliacao(Avaliacao avaliacao) {
                this.avaliacao = avaliacao;
        }
       
        public RevisaoAvaliacao getRevisaoAvaliacao() {
                if(VerificadorUtil.estaNulo(revisaoAvaliacao)){
                        revisaoAvaliacao = new RevisaoAvaliacao();
                }
                return revisaoAvaliacao;
        }

        public void setRevisaoAvaliacao(RevisaoAvaliacao revisaoAvaliacao) {
                this.revisaoAvaliacao = revisaoAvaliacao;
        }
       
        public List<QuestaoAvaliacaoDesempenhoRevisao> getListaQuestaoAvaliacaoDesempenhoRevisao() {
                if (listaQuestaoAvaliacaoDesempenhoRevisao == null) {
                        listaQuestaoAvaliacaoDesempenhoRevisao = new ArrayList<QuestaoAvaliacaoDesempenhoRevisao>();
                }
                return listaQuestaoAvaliacaoDesempenhoRevisao;
        }
       
        public void setListaQuestaoAvaliacaoDesempenhoRevisao(List<QuestaoAvaliacaoDesempenhoRevisao> listaQuestaoAvaliacaoDesempenhoRevisao) {
                this.listaQuestaoAvaliacaoDesempenhoRevisao = listaQuestaoAvaliacaoDesempenhoRevisao;
        }
       
        public void setQuestaoAvaliacaoDesempenhoRevisaoDataModel(DataModel<QuestaoAvaliacaoDesempenhoRevisao> questaoAvaliacaoDesempenhoRevisaoDataModel) {
                this.questaoAvaliacaoDesempenhoRevisaoDataModel = questaoAvaliacaoDesempenhoRevisaoDataModel;
        }
       
        public DataModel<QuestaoAvaliacaoDesempenhoRevisao> getQuestaoAvaliacaoDesempenhoRevisaoDataModel() {
                return questaoAvaliacaoDesempenhoRevisaoDataModel;
        }

        public void solicitarRevisaoDeAssiduidade() {
                solicitarRevisao(TipoAvaliacao.ASSIDUIDADE.getValue(), avaliacao.getNotaAssiduidade());
        }

        public void solicitarRevisaoDeQualificacao() {
                solicitarRevisao(TipoAvaliacao.QUALIFICACAO.getValue(), avaliacao.getNotaQualificacao());
        }
       
        public void listarQuestoes(Avaliacao avaliacao) {
                selecionarAvaliacao(avaliacao);
                List<QuestaoAvaliacaoDesempenho> questoesAvaliacaoDesempenho = avaliacaoDesempenhoFacade.listarQuestaoAvaliacao(avaliacao.getServidorAvaliacao());
                for (QuestaoAvaliacaoDesempenho questaoAvaliacaoDesempenho : questoesAvaliacaoDesempenho) {
                        if(questaoAvaliacaoDesempenho.isQuestaoMultiplaEscolha() && questaoAvaliacaoDesempenho.getAvaliacaoDesempenho() != null) {
                                getListaQuestaoAvaliacaoDesempenhoRevisao().add(new QuestaoAvaliacaoDesempenhoRevisao(questaoAvaliacaoDesempenho));
                        }
                }
                setQuestaoAvaliacaoDesempenhoRevisaoDataModel(new ListDataModel<QuestaoAvaliacaoDesempenhoRevisao>(getListaQuestaoAvaliacaoDesempenhoRevisao()));
        }
       
        public void listarQuestoesRecurso(Avaliacao avaliacao) {
                selecionarAvaliacao(avaliacao);
                List<QuestaoAvaliacaoDesempenho> questoesAvaliacaoDesempenho = avaliacaoDesempenhoFacade.listarQuestoesRecurso(avaliacao.getServidorAvaliacao());
                for (QuestaoAvaliacaoDesempenho questaoAvaliacaoDesempenho : questoesAvaliacaoDesempenho) {
                        if(questaoAvaliacaoDesempenho.isQuestaoMultiplaEscolha() && questaoAvaliacaoDesempenho.getAvaliacaoDesempenho() != null) {
                                getListaQuestaoAvaliacaoDesempenhoRevisao().add(new QuestaoAvaliacaoDesempenhoRevisao(questaoAvaliacaoDesempenho));
                        }
                }
                setQuestaoAvaliacaoDesempenhoRevisaoDataModel(new ListDataModel<QuestaoAvaliacaoDesempenhoRevisao>(getListaQuestaoAvaliacaoDesempenhoRevisao()));
        }
       
        public Boolean isAvaliacaoDesempenhoNaoFoiAvaliada(Avaliacao avaliacao) {
                List<QuestaoAvaliacaoDesempenho> questoesAvaliacaoDesempenho = avaliacaoDesempenhoFacade.listarQuestaoAvaliacao(avaliacao.getServidorAvaliacao());
                for (QuestaoAvaliacaoDesempenho questaoAvaliacaoDesempenho : questoesAvaliacaoDesempenho) {
                        if(questaoAvaliacaoDesempenho.isQuestaoMultiplaEscolha() && questaoAvaliacaoDesempenho.getAvaliacaoDesempenho() != null) {
                                return false;
                        }
                }
                return true;
        }
       
        public void solicitarRevisaoDeDesempenho() {
                revisaoAvaliacao.setTipoAvaliacao(TipoAvaliacao.DESEMPENHO.getValue());
                revisaoAvaliacao.setServidorAvaliacao(avaliacao.getServidorAvaliacao());
                revisaoAvaliacao.setNota(avaliacao.getNotaDesempenho());
               
                Iterator<QuestaoAvaliacaoDesempenhoRevisao> iteratorQuestaoAvaliacaoDesempenhoRevisao = questaoAvaliacaoDesempenhoRevisaoDataModel.iterator();
               
                while(iteratorQuestaoAvaliacaoDesempenhoRevisao.hasNext()) {
                        QuestaoAvaliacaoDesempenhoRevisao questaoAvaliacaoDesempenhoRevisao = iteratorQuestaoAvaliacaoDesempenhoRevisao.next();
                       
                        if(isCampoSolicitacaoInformado(questaoAvaliacaoDesempenhoRevisao)) {
                                RevisaoAvaliacaoDesempenho revisaoAvaliacaoDesempenho = new RevisaoAvaliacaoDesempenho();
                                revisaoAvaliacaoDesempenho.setRevisaoAvaliacao(revisaoAvaliacao);
                                revisaoAvaliacaoDesempenho.setAvaliacaoDesempenho(questaoAvaliacaoDesempenhoRevisao.getQuestaoAvaliacaoDesempenho().getAvaliacaoDesempenho());                 
                                revisaoAvaliacaoDesempenho.setSolicitacao(questaoAvaliacaoDesempenhoRevisao.getSolicitacao());
                               
                                RevisaoAvaliacaoDesempenhoId revisaoAvaliacaoDesempenhoId = new RevisaoAvaliacaoDesempenhoId();
                                revisaoAvaliacaoDesempenhoId.setSequencialAvaliacaoDesempenho(revisaoAvaliacaoDesempenho.getAvaliacaoDesempenho().getSequencial());
                               
                                revisaoAvaliacaoDesempenho.setReviAvaliacaoDesempenhoId(revisaoAvaliacaoDesempenhoId);
                                revisaoAvaliacao.adicionarRevisaoAvaliacaoDesempenho(revisaoAvaliacaoDesempenho);
                        }
                }
               
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        @Override
                        public void execute() {
                                avaliacaoFacade.solicitarRevisaoAvaliacao(revisaoAvaliacao);
                                limparEntidade();
                                LancadorMensagem.lancarSucessoRedirecionandoTela(ConstantesWebHelper.Mensagem.REGISTRO_CADASTRADO_COM_SUCESSO, "/paginas/nota_avaliacao.xhtml");
                        }
                });
        }
       
        public void selecionarAvaliacao(Avaliacao avaliacao){
                setAvaliacao(avaliacao);
        }

        private void solicitarRevisao(String tipoAvaliacao, Double nota) {
                revisaoAvaliacao.setTipoAvaliacao(tipoAvaliacao);
                revisaoAvaliacao.setServidorAvaliacao(avaliacao.getServidorAvaliacao());
                revisaoAvaliacao.setNota(nota);
               
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        @Override
                        public void execute() {
                                avaliacaoFacade.solicitarRevisaoAvaliacao(revisaoAvaliacao);
                                limparEntidade();
                                LancadorMensagem.lancarSucessoRedirecionandoTela(ConstantesWebHelper.Mensagem.REGISTRO_CADASTRADO_COM_SUCESSO, "/paginas/nota_avaliacao.xhtml");
                        }
                });
        }
       
        private boolean isCampoSolicitacaoInformado(QuestaoAvaliacaoDesempenhoRevisao questaoAvaliacaoDesempenhoRevisao) {
                return VerificadorUtil.naoEstaNuloOuVazio(questaoAvaliacaoDesempenhoRevisao.getSolicitacao());
        }
       
        public void limparEntidade() {
                revisaoAvaliacao = null;
                avaliacao = null;
                listaQuestaoAvaliacaoDesempenhoRevisao = null;
        }
       
}