Subversion Repositories Integrator Subversion

Rev

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

package br.gov.al.saude.scs.web.managebean.turma;

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

import javax.faces.bean.ManagedBean;

import org.primefaces.event.RowEditEvent;
import org.primefaces.event.TabChangeEvent;
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.exception.NegocioException;
import br.gov.al.saude.framework.core.generic.GenericFacade;
import br.gov.al.saude.framework.core.model.pessoa.PessoaDTO;
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.generic.AbstractBeanComModalScg;
import br.gov.al.saude.framework.web.generic.GenericConsultaDemanda;
import br.gov.al.saude.framework.web.message.LancadorMensagem;
import br.gov.al.saude.framework.web.util.URLUtils;
import br.gov.al.saude.sca.model.usuario.view.UsuarioView;
import br.gov.al.saude.scg.model.view.MunicipioView;
import br.gov.al.saude.scg.model.view.OrgaoView;
import br.gov.al.saude.scg.model.view.PessoaFisicaView;
import br.gov.al.saude.scs.core.application.municipio.MunicipioFacade;
import br.gov.al.saude.scs.core.application.perfil.PerfilFacade;
import br.gov.al.saude.scs.core.application.turma.TurmaFacade;
import br.gov.al.saude.scs.model.Capacitacao;
import br.gov.al.saude.scs.model.Perfil;
import br.gov.al.saude.scs.model.Turma;
import br.gov.al.saude.scs.model.TurmaParticipante;
import br.gov.al.saude.scs.model.TurmaPeriodo;
import br.gov.al.saude.scs.model.TurmaProcesso;
import br.gov.al.saude.scs.model.dto.ConsultaTurmaDTO;
import br.gov.al.saude.scs.model.dto.DespesasTurmaDTO;
import br.gov.al.saude.scs.model.dto.TurmaDTO;
import br.gov.al.saude.scs.parametros.ParametrosConsultarDespesasTurma;
import br.gov.al.saude.scs.parametros.ParametrosConsultarTurma;

@Component
@ManagedBean
@Scope("view")
public class TurmaBean extends AbstractBeanComModalScg<Turma> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private PerfilFacade perfilFacade;
        private TurmaFacade turmaFacade;
        private MunicipioFacade municipioFacade;
       
        private TurmaConsultaDemanda consultaLazy;
        private ConsultaTurmaDTO consultaTurmaDTO = new ConsultaTurmaDTO();
        private Capacitacao capacitacaoSelecionada;
        private TurmaDtoConsultaDemanda consultaDtoLazy;
        private TurmaDTO entidadeDto;
        private ParametrosConsultarTurma parametros;
       
        private List<TurmaProcesso> processos;
        private Boolean acaoConfirmarAdicaoPecessoProcesso = false;
        private Boolean acaoCadastrar = false;
        private Integer activeIndex = 0;
       
        private OrgaoView orgao;
        private String numeroDoProcesso;
        private Integer anoDoProcesso;
        private ParametrosConsultarDespesasTurma parametrosConsultarDespesasTurma;

        private List<OrgaoView> orgaos;
        private List<Perfil> perfis;
        private List<MunicipioView> municipios;

        private DespesasTurmaDTO despesasTurma;
        private TurmaParticipante turmaParticipante = new TurmaParticipante();
        private TurmaPeriodo turmaPeriodo = new TurmaPeriodo();

        @Autowired
        public TurmaBean(TurmaFacade turmaFacade, PerfilFacade perfilFacade, MunicipioFacade municipioFacade, TurmaConsultaDemanda consultaLazy, TurmaDtoConsultaDemanda consultaDtoLazy) {
                this.turmaFacade = turmaFacade;
                this.perfilFacade = perfilFacade;
                this.municipioFacade = municipioFacade;
                this.consultaLazy = consultaLazy;
                this.consultaDtoLazy = consultaDtoLazy;
        }      
       
        @Override
        public Turma getEntidade() {
                if (VerificadorUtil.estaNulo(entidade)) {
                        entidade = new Turma();
                }
                return entidade;
        }
       
        public TurmaDTO getEntidadeDto() {
                return entidadeDto;
        }
       
        public void setEntidadeDto(TurmaDTO entidadeDto) {
                this.entidadeDto = entidadeDto;
        }
       
        @Override
        public GenericFacade<Turma> getFacade() {
                return turmaFacade;
        }

        @Override
        public Object getId() {
                return getEntidade().getId();
        }

        @Override
        public String getTelaCrud() {
                return "/paginas/turma.xhtml";
        }

        @Override
        public void limparEntidade() {
                entidade = new Turma();
                consultaTurmaDTO = new ConsultaTurmaDTO();
                capacitacaoSelecionada = new Capacitacao();
        }
       
        @Override
        public GenericConsultaDemanda<Turma> getLazy() {
                return null;
        }
       
        public TurmaConsultaDemanda getConsultaLazy() {
                return consultaLazy;
        }
       
        public void setConsultaLazy(TurmaConsultaDemanda consultaLazy) {
                this.consultaLazy = consultaLazy;
        }
       
        public TurmaDtoConsultaDemanda getConsultaDtoLazy() {
                return consultaDtoLazy;
        }
       
        public void setConsultaDtoLazy(TurmaDtoConsultaDemanda consultaDtoLazy) {
                this.consultaDtoLazy = consultaDtoLazy;
        }
       
        public ParametrosConsultarTurma getParametros() {
                if(VerificadorUtil.estaNulo(parametros)){
                        parametros = new ParametrosConsultarTurma();
                }
                return parametros;
        }
       
        public void setParametros(ParametrosConsultarTurma parametros) {
                this.parametros = parametros;
        }
       
        public void prepararConsultaDemanda() {
                consultaLazy.setarParametrosConsulta(consultaTurmaDTO);
        }
       
        public void prepararConsultaDtoDemanda() {
                getParametros().setSequencialCapacitacao(getSequencialCapacitacaoSelecionada());
                getParametros().setUsuarioLogado((UsuarioView) getUsuario().getPrincipal());
                consultaDtoLazy.setParametros(getParametros());
                consultaDtoLazy.setConsultaInicial(true);
        }
       
        public List<OrgaoView> getListaOrgaos() {
                return orgaos;
        }
       
        public ParametrosConsultarDespesasTurma getParametrosConsultarDespesasTurma() {
                return parametrosConsultarDespesasTurma;
        }
       
        public void setParametrosConsultarDespesasTurma(ParametrosConsultarDespesasTurma parametrosConsultarDespesasTurma) {
                this.parametrosConsultarDespesasTurma = parametrosConsultarDespesasTurma;
        }
       
        public OrgaoView getOrgao() {
                return orgao;
        }

        public void setOrgao(OrgaoView orgao) {
                this.orgao = orgao;
        }

        public String getNumeroDoProcesso() {
                return numeroDoProcesso;
        }

        public void setNumeroDoProcesso(String numeroDoProcesso) {
                this.numeroDoProcesso = numeroDoProcesso;
        }

        public Integer getAnoDoProcesso() {
                return anoDoProcesso;
        }

        public void setAnoDoProcesso(Integer anoDoProcesso) {
                this.anoDoProcesso = anoDoProcesso;
        }

        public DespesasTurmaDTO getDespesasTurma() {
                return despesasTurma;
        }

        public void setDespesasTurma(DespesasTurmaDTO despesasTurma) {
                this.despesasTurma = despesasTurma;
        }
       
        public Boolean getAcaoConfirmarAdicaoPecessoProcesso() {
                return acaoConfirmarAdicaoPecessoProcesso;
        }

        public void setAcaoConfirmarAdicaoPecessoProcesso(
                        Boolean acaoConfirmarAdicaoPecessoProcesso) {
                this.acaoConfirmarAdicaoPecessoProcesso = acaoConfirmarAdicaoPecessoProcesso;
        }

        public void removerRepresentante(PessoaFisicaView representante) {
                entidade.removerRepresentante(representante);
        }
       
        public List<TurmaProcesso> getProcessos() {
                return processos;
        }
       
        public Boolean getAcaoCadastrar() {
                return acaoCadastrar;
        }

        public void setAcaoCadastrar(Boolean acaoCadastrar) {
                this.acaoCadastrar = acaoCadastrar;
        }
       
        public TurmaParticipante getTurmaParticipante() {
                return turmaParticipante;
        }

        public void setTurmaParticipante(TurmaParticipante turmaParticipante) {
                this.turmaParticipante = turmaParticipante;
        }
       
        public List<Perfil> getPerfis() {
                if(VerificadorUtil.isListaNulaOuVazia(perfis)) {
                        perfis = perfilFacade.listar();
                }
                return perfis;
        }
       
        public Integer getActiveIndex() {
                return activeIndex;
        }

        public void setActiveIndex(Integer activeIndex) {
                this.activeIndex = activeIndex;
        }
       
        public TurmaPeriodo getTurmaPeriodo() {
                return turmaPeriodo;
        }

        public void setTurmaPeriodo(TurmaPeriodo turmaPeriodo) {
                this.turmaPeriodo = turmaPeriodo;
        }
       
        public ConsultaTurmaDTO getConsultaTurmaDTO() {
                return consultaTurmaDTO;
        }

        public void setConsultaTurmaDTO(ConsultaTurmaDTO consultaTurmaDTO) {
                this.consultaTurmaDTO = consultaTurmaDTO;
        }
       
        public Capacitacao getCapacitacaoSelecionada() {
                return capacitacaoSelecionada;
        }
       
        private Long getSequencialCapacitacaoSelecionada(){
                return VerificadorUtil.naoEstaNulo(getCapacitacaoSelecionada()) ? getCapacitacaoSelecionada().getSequencial() : null;
        }

        public void setCapacitacaoSelecionada(Capacitacao capacitacaoSelecionada) {
                this.capacitacaoSelecionada = capacitacaoSelecionada;
                this.entidade.setCapacitacao(capacitacaoSelecionada);
                this.consultaTurmaDTO.setCapacitacao(capacitacaoSelecionada);
        }

        public void prepararParaAdicionarDespesas() {
                orgao = new OrgaoView();
                numeroDoProcesso = null;
                anoDoProcesso = null;
                parametrosConsultarDespesasTurma = new ParametrosConsultarDespesasTurma();
                despesasTurma = new DespesasTurmaDTO();
                acaoConfirmarAdicaoPecessoProcesso = true;
                if(VerificadorUtil.isListaNulaOuVazia(orgaos)) {
                        orgaos = turmaFacade.listarOrgaos();
                }
        }

        public void retirarSelecaoDaCapacitacao() {
                setCapacitacaoSelecionada(null);
                consultaTurmaDTO.setCapacitacao(null);
        }
       
        public void consultarDespesasTurma() {
                try {
                        despesasTurma = turmaFacade.consultarDespesasTurma(parametrosConsultarDespesasTurma);
                        orgao = parametrosConsultarDespesasTurma.getOrgao();
                        numeroDoProcesso = parametrosConsultarDespesasTurma.getNumeroProcesso();
                        anoDoProcesso = parametrosConsultarDespesasTurma.getAnoProcesso();
                } catch (NegocioException e) {
                        despesasTurma = null;
                        orgao = null;
                        numeroDoProcesso = null;
                        anoDoProcesso = null;
                        LancadorMensagem.lancarAlerta(e.getMessage());
                }catch (Exception e) {
                        LancadorMensagem.lancarErro(e.getMessage());
                }
        }
       
        public void adicionarTurmaProcesso(DespesasTurmaDTO despesasTurma) {
                TurmaProcesso turmaProcesso = new TurmaProcesso();
                turmaProcesso.setOrgao(orgao);
                turmaProcesso.setNumeroProcesso(Long.parseLong(numeroDoProcesso));
                turmaProcesso.setAno(anoDoProcesso);
                turmaProcesso.setTurma(entidade);
                turmaProcesso.setDespesasTurma(despesasTurma);
                entidade.adicionarProcesso(turmaProcesso);
        }

        public void removerTurmaProcesso(TurmaProcesso turmaProcesso) {
                entidade.removerProcesso(turmaProcesso);
        }

        public void detalharProcesso(TurmaProcesso turmaProcesso) {
                acaoConfirmarAdicaoPecessoProcesso = false;
                despesasTurma = turmaFacade.consultarDespesasTurma(new ParametrosConsultarDespesasTurma(turmaProcesso.getOrgao(), turmaProcesso.getNumeroProcesso(), turmaProcesso.getAno()));
        }

        @Override
        public void setarPessoa(final PessoaDTO pessoaDTO) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        @Override
                        public void execute() {
                                PessoaFisicaView pessoaFisica = turmaFacade.consultarPessoa(pessoaDTO.getId());
                                if(activeIndex == 3) {
                                        turmaParticipante.setPessoa(pessoaFisica);
                                } else {
                                        entidade.adicionarRepresentante(pessoaFisica);
                                }
                        }
                });
               
        }
       
        @Override
        protected void popularObjetoSeIdPessoaDiferenteDeNulo(final String idPessoaCadastrada) {
                if(VerificadorUtil.naoEstaNuloOuVazio(idPessoaCadastrada)) {
                        new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                                @Override
                                public void execute() {
                                        if (VerificadorUtil.naoEstaNuloOuVazio(idPessoaCadastrada)) {
                                                if(!idPessoaCadastrada.equals("0")) {
                                                        PessoaFisicaView pessoaFisica = turmaFacade.consultarPessoa(Long.valueOf(idPessoaCadastrada));
                                                        if(activeIndex == 3) {
                                                                turmaParticipante.setPessoa(pessoaFisica);
                                                        } else {
                                                                entidade.adicionarRepresentante(pessoaFisica);
                                                        }
                                                }
                                        }
                                }
                        });
                }
        }
       
        @Override
        public void armazenarObjetoNaSessao() {
                URLUtils.armazenarObjetoComNomeNaSessao("entidade", getEntidade());
                URLUtils.armazenarObjetoComNomeNaSessao("acaoCadastrar", acaoCadastrar);
                URLUtils.armazenarObjetoComNomeNaSessao("activeIndex", activeIndex);
        }
       
        @Override
        public void recuperarObjetoNaSessao(Boolean collapsed) {
                if(VerificadorUtil.naoEstaNuloOuVazio(collapsed)) {
                        new VerificadorLancamentoException().tratarExcecaoLimpandoObjetoDaSessao(new CommandBean() {

                                @Override
                                public void execute() {
                                        setEntidade((Turma) URLUtils.recuperarObjetoComNomeNaSessao("entidade"));
                                        URLUtils.limparObjetoDaSessaoPeloNome("entidade");
                                       
                                        acaoCadastrar = (Boolean) URLUtils.recuperarObjetoComNomeNaSessao("acaoCadastrar");
                                        URLUtils.limparObjetoDaSessaoPeloNome("acaoCadastrar");
                                       
                                        activeIndex = (Integer) URLUtils.recuperarObjetoComNomeNaSessao("activeIndex");
                                        URLUtils.limparObjetoDaSessaoPeloNome("activeIndex");
                                }
                        });
                }
        }
       
        public void prepararParaAlterar(Turma turma){
                selecionarTurma(turma);
                prepararParaAdicionarParticipantes();
        }
       
        public void prepararParaAdicionarParticipantes() {
                turmaParticipante = new TurmaParticipante();
        }
       
        public void adicionarTurmaParticipante() {
                try {
                        validarCamposTurmaParticipante(turmaParticipante);
                        verificarSeParticipanteJaFoiAdicionado(turmaParticipante);
                        turmaParticipante.setTurma(entidade);
                        turmaParticipante.setIndicadorServidor(turmaFacade.consultarIndicadorDeServidor(turmaParticipante.getPessoa()));
                        turmaFacade.verificarFaltasDoParticipante((UsuarioView) getUsuario().getPrincipal(), turmaParticipante);
                        entidade.adicionarParticipante(turmaParticipante);
                        atualizarAlertaDeRestricoesDoParticipante();
                        turmaParticipante = new TurmaParticipante();
                } catch (NegocioException ne) {
                        LancadorMensagem.lancarAlerta(ne.getMessage());
                }
        }
       
        public void removerTurmaParticipante(TurmaParticipante turmaParticipante) {
                entidade.removerParticipante(turmaParticipante);
                atualizarAlertaDeRestricoesDoParticipante();
        }
       
        public void adicionarTurmaPeriodo() {
                try {
                        validarPeriodo(turmaPeriodo);
                        turmaPeriodo.setTurma(entidade);
                        entidade.adicionarTurmaPeriodo(turmaPeriodo);
                        turmaPeriodo = new TurmaPeriodo();
                } catch (NegocioException ne) {
                        LancadorMensagem.lancarAlerta(ne.getMessage());
                }
        }
       
        private void validarPeriodo(TurmaPeriodo turmaPeriodo) {
                StringBuilder mensagem = new StringBuilder();
                String separador = "";
               
                if(VerificadorUtil.estaNulo(turmaPeriodo.getDataInicial())) {
                        mensagem.append(separador);
                        mensagem.append("Obrigatório informar a data inicial.");
                        separador = "; ";
                }
               
                if(VerificadorUtil.estaNulo(turmaPeriodo.getDataFinal())) {
                        mensagem.append(separador);
                        mensagem.append("Obrigatório informar a data final.");
                }
               
                if(VerificadorUtil.naoEstaNulo(turmaPeriodo.getDataInicial()) && VerificadorUtil.naoEstaNulo(turmaPeriodo.getDataFinal())) {
                        if(turmaPeriodo.getDataInicial().after(turmaPeriodo.getDataFinal())) {
                                mensagem.append("Data inicial não pode ser maior que a final.");
                        }
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(mensagem.toString())) {
                        throw new NegocioException(mensagem.toString());
                }
        }

        public void removerPeriodo(TurmaPeriodo turmaPeriodo) {
                entidade.removerTurmaPeriodo(turmaPeriodo);
        }
       
        public void selecionarTurma(Turma turma) {
                entidade = turmaFacade.detalharTurma(turma.getSequencial());
                atualizarIndicadorServidor();
                atualizarAlertaDeRestricoesDoParticipante();
                listarMunicipios();
        }

        public void detalharTurma(Turma turma) {
                entidade = turmaFacade.detalharTurma(turma.getSequencial());
                atualizarIndicadorServidor();
                atualizarAlertaDeRestricoesDoParticipante();
        }

        private void verificarSeParticipanteJaFoiAdicionado(TurmaParticipante turmaParticipante) {
                if(entidade.getParticipantes().contains(turmaParticipante)) {
                        throw new NegocioException("Este participante já foi adicionado.");
                }
        }

        private void validarCamposTurmaParticipante(TurmaParticipante turmaParticipante) {
                StringBuilder mensagem = new StringBuilder();
                String separador = "";
               
                if(VerificadorUtil.estaNulo(turmaParticipante.getPessoa())) {
                        mensagem.append(separador);
                        mensagem.append("Obrigatório informar o Representante.");
                        separador = "; ";
                }
               
                if(VerificadorUtil.estaNulo(turmaParticipante.getPerfil())) {
                        mensagem.append(separador);
                        mensagem.append("Obrigatório informar o Perfil.");
                        separador = "; ";
                }

                if(VerificadorUtil.estaNulo(turmaParticipante.getIndicadorRemunerado())) {
                        mensagem.append(separador);
                        mensagem.append("Obrigatório informar Indicador Remunerado.");
                        separador = "; ";
                }
               
                if(VerificadorUtil.naoEstaNuloOuVazio(mensagem.toString())) {
                        throw new NegocioException(mensagem.toString());
                }
        }
       
        public void onEditRow(RowEditEvent event) {
       atualizarAlertaDeRestricoesDoParticipante();
    }
       
        public void listarMunicipios(){
                if(VerificadorUtil.naoEstaNulo(entidade.getUf())) {
                        municipios = municipioFacade.listar(entidade.getUf().getCodigo());
                } else {
                        municipios = new ArrayList<MunicipioView>();
                }
        }
       
        public List<MunicipioView> getMunicipios() {
                return municipios;
        }
       
        public void onChange(TabChangeEvent event) {
                if(VerificadorUtil.estaNulo(entidade.getAnoExercicio())) {
                        LancadorMensagem.lancarAlerta("Informe o ano de exercício na aba Turma para ter uma informação real do indicador de restrição do participante.");
                }
        }

        private void atualizarAlertaDeRestricoesDoParticipante() {
                for (TurmaParticipante turmaParticipante : entidade.getParticipantes()) {
                        try {
                                turmaFacade.verificarAlertaDeRestricaoDoParticipante(turmaParticipante, new ArrayList<TurmaParticipante>(entidade.getParticipantes()));
                                turmaParticipante.setIndicadorRestricao(false);
                        } catch (NegocioException e) {
                                turmaParticipante.setIndicadorRestricao(true);
                        }
                }
        }

        private void atualizarIndicadorServidor() {
                for (TurmaParticipante turmaParticipante : entidade.getParticipantes()) {
                        turmaParticipante.setIndicadorServidor(turmaFacade.consultarIndicadorDeServidor(turmaParticipante.getPessoa()));
                }
        }
               
}