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;
}
}