Subversion Repositories Integrator Subversion

Rev

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

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

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Properties;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import net.sf.jasperreports.engine.JasperPrint;

import org.primefaces.model.StreamedContent;
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.callback.SetadorPessoaCallback;
import br.gov.al.saude.framework.core.exception.RelatorioException;
import br.gov.al.saude.framework.core.model.pessoa.PessoaDTO;
import br.gov.al.saude.framework.core.util.DataUtils;
import br.gov.al.saude.framework.core.util.RelatorioUtils;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.framework.security.context.ContextoSeguranca;
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.exception.VerificadorLancamentoException.CommandRelatorioStreamedContent;
import br.gov.al.saude.framework.web.util.IndraJSFUtils;
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.PessoaFisicaView;
import br.gov.al.saude.scs.core.application.relatorio.RelatorioFacade;
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.Turma;
import br.gov.al.saude.scs.model.TurmaParticipante;
import br.gov.al.saude.scs.model.dto.TurmaDTO;
import br.gov.al.saude.scs.parametros.ParametrosRelatorioCapacitacaoPorParticipante;
import br.gov.al.saude.scs.parametros.ParametrosRelatorioCapacitacaoPorPeriodo;
import br.gov.al.saude.scs.parametros.ParametrosRelatorioDespesas;
import br.gov.al.saude.scs.parametros.ParametrosRelatorioParticipantePorTurma;
import br.gov.al.saude.scs.parametros.ParametrosRelatorioParticipantesFaltantes;

@Component
@ManagedBean
@Scope("view")
public class RelatorioBean implements Serializable, SetadorPessoaCallback {
       
        private static final long serialVersionUID = 1L;
       
        @Resource(name = "scgModalProperties")
        private Properties properties;

        private TurmaFacade turmaFacade;
        private RelatorioFacade relatorioFacade;
        private String identificadorComponente;
       
        private PessoaFisicaView pessoaFisica;
        private Capacitacao capacitacao;
        private Turma turma;
        private TurmaParticipante turmaParticipante;
        private ParametrosRelatorioCapacitacaoPorParticipante parametrosRelatorioCapacitacaoPorParticipante;
        private ParametrosRelatorioCapacitacaoPorPeriodo parametrosRelatorioCapacitacaoPorPeriodo;
        private ParametrosRelatorioParticipantePorTurma parametrosRelatorioParticipantePorTurma;
        private ParametrosRelatorioDespesas parametrosRelatorioDespesas;
        private ParametrosRelatorioParticipantesFaltantes parameParticipantesFaltantes;
        private ContextoSeguranca contextoSeguranca;
        private ArrayList<Integer> listaAnos;
        private TurmaDTO turmaDTO;
       
        @Autowired
        public RelatorioBean(TurmaFacade turmaFacade, ContextoSeguranca contextoSeguranca, RelatorioFacade relatorioFacade) {
                this.turmaFacade = turmaFacade;
                this.contextoSeguranca = contextoSeguranca;
                this.relatorioFacade = relatorioFacade;
        }
       
        @PostConstruct
        public void init() {
                String idPessoaCadastrada = getContext().getExternalContext().getRequestParameterMap().get(IndraJSFUtils.ID_PESSOA_CADASTRADA);
                popularObjetoSeIdPessoaDiferenteDeNulo(idPessoaCadastrada);
        }
       
        ///////////// INICIO METODOS GETS & SETS //////////
       
        protected Properties getProperties() {
                return properties;
        }
       
        public FacesContext getContext() {
                return FacesContext.getCurrentInstance();
        }
       
        public PessoaFisicaView getPessoaFisica() {
                if(VerificadorUtil.estaNulo(pessoaFisica)){
                        pessoaFisica = new PessoaFisicaView();
                }
                return pessoaFisica;
        }

        public void setPessoaFisica(PessoaFisicaView pessoaFisica) {
                this.pessoaFisica = pessoaFisica;
        }
       
        public TurmaFacade getTurmaFacade() {
                return turmaFacade;
        }
       
        public void setTurmaFacade(TurmaFacade turmaFacade) {
                this.turmaFacade = turmaFacade;
        }
       
        public ParametrosRelatorioCapacitacaoPorParticipante getParametrosRelatorioCapacitacaoPorParticipante() {
                return parametrosRelatorioCapacitacaoPorParticipante;
        }
       
        public void setParametrosRelatorioCapacitacaoPorParticipante(ParametrosRelatorioCapacitacaoPorParticipante parametrosRelatorioCapacitacaoPorParticipante) {
                this.parametrosRelatorioCapacitacaoPorParticipante = parametrosRelatorioCapacitacaoPorParticipante;
        }
       
        public ParametrosRelatorioParticipantePorTurma getParametrosRelatorioParticipantePorTurma() {
                return parametrosRelatorioParticipantePorTurma;
        }
       
        public void setParametrosRelatorioParticipantePorTurma(ParametrosRelatorioParticipantePorTurma parametrosRelatorioParticipantePorTurma) {
                this.parametrosRelatorioParticipantePorTurma = parametrosRelatorioParticipantePorTurma;
        }
       
        public ParametrosRelatorioCapacitacaoPorPeriodo getParametrosRelatorioCapacitacaoPorPeriodo() {
                return parametrosRelatorioCapacitacaoPorPeriodo;
        }
       
        public void setParametrosRelatorioCapacitacaoPorPeriodo(ParametrosRelatorioCapacitacaoPorPeriodo parametrosRelatorioCapacitacaoPorPeriodo) {
                this.parametrosRelatorioCapacitacaoPorPeriodo = parametrosRelatorioCapacitacaoPorPeriodo;
        }
       
        public ParametrosRelatorioDespesas getParametrosRelatorioDespesas() {
                return parametrosRelatorioDespesas;
        }
       
        public void setParametrosRelatorioDespesas(ParametrosRelatorioDespesas parametrosRelatorioDespesas) {
                this.parametrosRelatorioDespesas = parametrosRelatorioDespesas;
        }
       
        public ParametrosRelatorioParticipantesFaltantes getParameParticipantesFaltantes() {
                return parameParticipantesFaltantes;
        }
       
        public void setParameParticipantesFaltantes(ParametrosRelatorioParticipantesFaltantes parameParticipantesFaltantes) {
                this.parameParticipantesFaltantes = parameParticipantesFaltantes;
        }
       
        public UsuarioView getUsuario() {
                return (UsuarioView) contextoSeguranca.obterUserIndra().getPrincipal();
        }
       
        public ArrayList<Integer> getListaAnos() {
                return listaAnos;
        }
       
        public void setListaAnos(ArrayList<Integer> listaAnos) {
                this.listaAnos = listaAnos;
        }
       
        public Capacitacao getCapacitacao() {
                return capacitacao;
        }
       
        public void setCapacitacao(Capacitacao capacitacao) {
                this.capacitacao = capacitacao;
        }
       
        public TurmaDTO getTurmaDTO() {
                if(VerificadorUtil.estaNulo(turmaDTO)){
                        turmaDTO = new TurmaDTO();
                }
                return turmaDTO;
        }
       
        public void setTurmaDTO(TurmaDTO turmaDTO) {
                this.turmaDTO = turmaDTO;
        }

        public Turma getTurma() {
                return turma;
        }
       
        public void setTurma(Turma turma) {
                this.turma = turma;
        }
       
        public TurmaParticipante getTurmaParticipante() {
                return turmaParticipante;
        }
       
        public void setTurmaParticipante(TurmaParticipante turmaParticipante) {
                this.turmaParticipante = turmaParticipante;
        }
       
        ///////////// FIM METODOS GETS & SETS //////////
       
        ///////////// INICIO METODOS MODAL /////////////       
       
        @Override
        public void irParaCadastroDePessoa() {
                String urlCadastroPessoa = getProperties().getProperty(SetadorPessoaCallback.URL_SCG_CADASTRO_PESSOA);
                String urlCompleta = URLUtils.montarUrlDeCallBackIhAdicionarNaUrl(urlCadastroPessoa);
                armazenarObjetoNaSessaoIhRedirecionarUrl(urlCompleta);
        }

        @Override
        public void irParaAlteracaoDePessoa(Long idPessoa) {
                String urlCadastroPessoa = getProperties().getProperty(SetadorPessoaCallback.URL_SCG_CADASTRO_PESSOA);
                String urlCompleta = URLUtils.montarUrlDeCallBackPassandoIdentificadorPessoaParaAlterar(urlCadastroPessoa, idPessoa);
                armazenarObjetoNaSessaoIhRedirecionarUrl(urlCompleta);
        }
       
        private void armazenarObjetoNaSessaoIhRedirecionarUrl(String urlCompleta) {
                try {
                        getContext().getExternalContext().redirect(urlCompleta);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        @Override
        public void setarPessoa(final PessoaDTO pessoaDTO) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        @Override
                        public void execute() {
                                pessoaFisica = turmaFacade.consultarPessoa(pessoaDTO.getId());
                        }
                });
        }
       
        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")) {
                                                        pessoaFisica = turmaFacade.consultarPessoa(Long.valueOf(idPessoaCadastrada));
                                                }
                                        }
                                }
                        });
                }
        }
       
        public String getIdentificadorComponente() {
                return identificadorComponente;
        }

        public void setIdentificadorComponente(String identificadorComponente) {
                this.identificadorComponente = identificadorComponente;
        }
       
        ///////////// FIM METODOS MODAL /////////////

        public Boolean isValorMenorQueSetentaEhCinco(Double valor){
                return valor < 75.0;
        }
       
        private void carregarAnos() {
                listaAnos = new ArrayList<Integer>();
                int anoAtual = DataUtils.obterCalendario(DataUtils.getDataAtual()).get(Calendar.YEAR) - 10;
                int anoFinal = anoAtual + 20;
                for (int i = anoAtual; i < anoFinal; i++) {
                        listaAnos.add(i);
                }
        }
       
        public void limparTurmaDTO(){
                setTurmaDTO(null);
                setTurma(null);
        }
       
        public void limparTurmaParticipante(){
                setTurmaParticipante(null);
        }
       
        public void prepararRelatorioCapacitacaoPorParticipante(){
                parametrosRelatorioCapacitacaoPorParticipante = new ParametrosRelatorioCapacitacaoPorParticipante();
                carregarAnos();
        }
       
        public void prepararRelatorioParticipantePorTurma(){
                parametrosRelatorioParticipantePorTurma = new ParametrosRelatorioParticipantePorTurma();
        }
       
        public void prepararRelatorioCapacitacaoPorPeriodo(){
                parametrosRelatorioCapacitacaoPorPeriodo = new ParametrosRelatorioCapacitacaoPorPeriodo();
        }

        public void prepararRelatorioDespesas(){
                parametrosRelatorioDespesas = new ParametrosRelatorioDespesas();
                carregarAnos();
        }
       
        public void prepararRelatorioParticipantesFaltantes(){
                parameParticipantesFaltantes = new ParametrosRelatorioParticipantesFaltantes();
                carregarAnos();
        }
       
        public void consultarParticipantesTurma(){
                turma = turmaFacade.consultarTurmaComParticipantes(getTurmaDTO().getSequencialTurma());
        }
       
        public StreamedContent emitirRelatorioCapacitacaoPorParticipante(){
                getParametrosRelatorioCapacitacaoPorParticipante().setSequencialParticipante(getPessoaFisica().getSequencialPessoa());
                getParametrosRelatorioCapacitacaoPorParticipante().setUsuarioLogado(getUsuario());
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirRelatorioCapacitacaoPorParticipante(getParametrosRelatorioCapacitacaoPorParticipante());
                                return RelatorioUtils.gerarPdf(relatorio, "rel_capacitacao_por_part");
                        }
                });
        }
       
        public StreamedContent emitirRelatorioParticipantePorTurma(){
                getParametrosRelatorioParticipantePorTurma().setSequencialTurma(getTurmaDTO().getSequencialTurma());
                getParametrosRelatorioParticipantePorTurma().setUsuarioLogado(getUsuario());
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirRelatorioParticipantePorTurma(getParametrosRelatorioParticipantePorTurma());
                                return RelatorioUtils.gerarPdf(relatorio, "rel_part_por_turma");
                        }
                });
        }
       
        public StreamedContent emitirRelatorioCapacitacaoPorPeriodo(){
                getParametrosRelatorioCapacitacaoPorPeriodo().setUsuarioLogado(getUsuario());
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirRelatorioCapacitacaoPorPeriodo(getParametrosRelatorioCapacitacaoPorPeriodo());
                                return RelatorioUtils.gerarPdf(relatorio, "rel_cap_por_turma");
                        }
                });
        }
       
        public StreamedContent emitirRelatorioDespesas(){
                getParametrosRelatorioDespesas().setUsuarioLogado(getUsuario());
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirRelatorioDespesas(getParametrosRelatorioDespesas());
                                return RelatorioUtils.gerarPdf(relatorio, "rel_despesas");
                        }
                });
        }
       
        public StreamedContent emitirRelatorioParticipantesFaltantes(){
                getParameParticipantesFaltantes().setUsuarioLogado(getUsuario());
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirRelatorioParticipantesFaltantes(getParameParticipantesFaltantes());
                                return RelatorioUtils.gerarPdf(relatorio, "rel_part_faltantes");
                        }
                });
        }
       
        public StreamedContent emitirCertificado(){
                return new VerificadorLancamentoException().verificarLancamentoException(new CommandRelatorioStreamedContent() {
                        @Override
                        public StreamedContent execute() throws RelatorioException, Exception {
                                JasperPrint relatorio = relatorioFacade.emitirCertificado(getTurmaParticipante());
                                return RelatorioUtils.gerarPdf(relatorio, "certificado");
                        }
                });
        }
       
}