Subversion Repositories Integrator Subversion

Rev

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

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

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

import javax.faces.bean.ManagedBean;

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.security.core.GrantedAuthority;
import org.springframework.stereotype.Component;

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.authentication.authorities.IndraGrantedAuthority;
import br.gov.al.saude.framework.security.authentication.entity.UserIndra;
import br.gov.al.saude.framework.security.context.ContextoSeguranca;
import br.gov.al.saude.framework.web.generic.VerificadorPermissao;
import br.gov.al.saude.framework.web.message.LancadorMensagem;
import br.gov.al.saude.srv.core.application.cargo.CargoFacade;
import br.gov.al.saude.srv.core.application.emissorrelatorio.EmissorRelatorioFacade;
import br.gov.al.saude.srv.core.application.especialidade.EspecialidadeFacade;
import br.gov.al.saude.srv.core.application.formaingresso.FormaIngressoFacade;
import br.gov.al.saude.srv.core.application.funcao.FuncaoFacade;
import br.gov.al.saude.srv.core.application.grauinstrucao.GrauInstrucaoFacade;
import br.gov.al.saude.srv.core.application.orgao.OrgaoFacade;
import br.gov.al.saude.srv.core.application.situacaoservidor.SituacaoServidorFacade;
import br.gov.al.saude.srv.core.application.unidade.UnidadeFacade;
import br.gov.al.saude.srv.model.Cargo;
import br.gov.al.saude.srv.model.Especialidade;
import br.gov.al.saude.srv.model.FormaIngresso;
import br.gov.al.saude.srv.model.Funcao;
import br.gov.al.saude.srv.model.GrauInstrucao;
import br.gov.al.saude.srv.model.Orgao;
import br.gov.al.saude.srv.model.SituacaoServidor;
import br.gov.al.saude.srv.model.Unidade;
import br.gov.al.saude.srv.model.dto.ParametrosRelatorioAcompanhamentoServidorDTO;
import br.gov.al.saude.srv.model.enums.TipoRelatorioAcompanhamento;
import br.gov.al.saude.srv.model.enums.TipoRelatorioQuantitativo;

@Component
@ManagedBean
@Scope("view")
public class RelatorioBean  implements Serializable, VerificadorPermissao {

        private static final long serialVersionUID = 1L;
       
        private ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidor = new ParametrosRelatorioAcompanhamentoServidorDTO();
       
        private List<GrauInstrucao> listaGrausInstrucao;
        private List<SituacaoServidor> listaSituacoesServidor;
        private List<Cargo> listaCargosServidor;
        private List<Funcao> listaFuncoesServidor;
        private List<Especialidade> listaEspecialidadesServidor;
        private List<Orgao> listaOrgaos;
        private List<Unidade> listaUnidades;
        private List<FormaIngresso> listaFormaIngresso;
       
        private EmissorRelatorioFacade emissorRelatorioFacade;
        private GrauInstrucaoFacade grauInstrucaoFacade;
        private SituacaoServidorFacade situacaoServidorFacade;
        private CargoFacade cargoFacade;
        private FuncaoFacade funcaoFacade;
        private EspecialidadeFacade especialidadeFacade;
        private OrgaoFacade orgaoFacade;
        private UnidadeFacade unidadeFacade;
        private FormaIngressoFacade formaIngressoFacade;
       
        @Autowired
        private ContextoSeguranca contextoSeguranca;
       
        @Autowired
        public RelatorioBean(EmissorRelatorioFacade emissorRelatorioFacade, GrauInstrucaoFacade grauInstrucaoFacade,
                        SituacaoServidorFacade situacaoServidorFacade,
                        CargoFacade cargoFacade, FuncaoFacade funcaoFacade, EspecialidadeFacade especialidadeFacade,
                        OrgaoFacade orgaoFacade, UnidadeFacade unidadeFacade, FormaIngressoFacade formaIngressoFacade) {
                this.emissorRelatorioFacade = emissorRelatorioFacade;
                this.grauInstrucaoFacade = grauInstrucaoFacade;
                this.situacaoServidorFacade = situacaoServidorFacade;
                this.cargoFacade = cargoFacade;
                this.funcaoFacade = funcaoFacade;
                this.especialidadeFacade = especialidadeFacade;
                this.orgaoFacade = orgaoFacade;
                this.unidadeFacade = unidadeFacade;
                this.formaIngressoFacade = formaIngressoFacade;
                parametrosRelatorioAcompanhamentoServidor.setTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO);
        }
       
        public StreamedContent emitirRelatorioAcompanhamento() {
                try {
                        JasperPrint relatorio = emissorRelatorioFacade.emitirRelatorioAcompanhamentoServidor(parametrosRelatorioAcompanhamentoServidor);
                        return RelatorioUtils.gerarPdf(relatorio, relatorio.getName());
                } catch (Exception e) {
                        LancadorMensagem.lancarAlerta(e.getMessage());
                        return null;
                }
        }
       
        public ParametrosRelatorioAcompanhamentoServidorDTO.ColunaAgrupamentoEnumeration[] getColunasAgrupamentoRelatorioAcompanhamentoServidor() {
                return ParametrosRelatorioAcompanhamentoServidorDTO.ColunaAgrupamentoEnumeration.values();
        }
       
        public StreamedContent emitirRelatorioQuantitativoCargo() {
                return  emitirRelatorioQuantitativo(TipoRelatorioQuantitativo.ACOMPANHAMENTO_CARGO);
        }
       
        public StreamedContent emitirRelatorioQuantitativoFuncao() {
                return  emitirRelatorioQuantitativo(TipoRelatorioQuantitativo.ACOMPANHAMENTO_FUNCAO);
        }
       
        private StreamedContent emitirRelatorioQuantitativo(final TipoRelatorioQuantitativo tipo) {
                try {
                        JasperPrint relatorio = emissorRelatorioFacade.emitirRelatorioQuantitativoDeCargoOuFuncao(tipo);
                        return RelatorioUtils.gerarPdf(relatorio, relatorio.getName());
                } catch (Exception e) {
                        LancadorMensagem.lancarAlerta(e.getMessage());
                        return null;
                }
        }
       
        public TipoRelatorioAcompanhamento[] getTiposRelatoriosAcompanhamentos() {
                return TipoRelatorioAcompanhamento.values();
        }

        public ParametrosRelatorioAcompanhamentoServidorDTO getParametrosRelatorioAcompanhamentoServidor() {
                return parametrosRelatorioAcompanhamentoServidor;
        }

        public void setParametrosRelatorioAcompanhamentoServidor(
                        ParametrosRelatorioAcompanhamentoServidorDTO parametrosRelatorioAcompanhamentoServidor) {
                this.parametrosRelatorioAcompanhamentoServidor = parametrosRelatorioAcompanhamentoServidor;
        }

        public List<GrauInstrucao> getListaGrausInstrucao() {
                if(VerificadorUtil.estaNulo(listaGrausInstrucao)) {
                        listaGrausInstrucao = grauInstrucaoFacade.consultarTodos(new GrauInstrucao());
                }
                return listaGrausInstrucao;
        }

        public void setListaGrausInstrucao(List<GrauInstrucao> listaGrausInstrucao) {
                this.listaGrausInstrucao = listaGrausInstrucao;
        }

        public List<SituacaoServidor> getListaSituacoesServidor() {
                if(VerificadorUtil.estaNulo(listaSituacoesServidor)) {
                        listaSituacoesServidor = situacaoServidorFacade.consultarTodos(new SituacaoServidor());
                }
                return listaSituacoesServidor;
        }

        public void setListaSituacoesServidor(List<SituacaoServidor> listaSituacoesServidor) {
                this.listaSituacoesServidor = listaSituacoesServidor;
        }

        public List<Cargo> getListaCargosServidor() {
                if(VerificadorUtil.estaNulo(listaCargosServidor)) {
                        listaCargosServidor = cargoFacade.consultarTodos(new Cargo());
                }
                return listaCargosServidor;
        }

        public void setListaCargosServidor(List<Cargo> listaCargosServidor) {
                this.listaCargosServidor = listaCargosServidor;
        }

        public List<Funcao> getListaFuncoesServidor() {
                if(VerificadorUtil.estaNulo(listaFuncoesServidor)) {
                        listaFuncoesServidor = funcaoFacade.consultarTodos(new Funcao());
                }
                return listaFuncoesServidor;
        }

        public void setListaFuncoesServidor(List<Funcao> listaFuncoesServidor) {
                this.listaFuncoesServidor = listaFuncoesServidor;
        }

        public List<Especialidade> getListaEspecialidadesServidor() {
                if(VerificadorUtil.estaNulo(listaEspecialidadesServidor)) {
                        listaEspecialidadesServidor = especialidadeFacade.consultarTodos(new Especialidade());
                }
                return listaEspecialidadesServidor;
        }

        public void setListaEspecialidadesServidor(List<Especialidade> listaEspecialidadesServidor) {
                this.listaEspecialidadesServidor = listaEspecialidadesServidor;
        }

        public List<Orgao> getListaOrgaos() {
                if(VerificadorUtil.estaNulo(listaOrgaos)) {
                        listaOrgaos = orgaoFacade.consultarTodos(new Orgao());
                }
                return listaOrgaos;
        }

        public void setListaOrgaos(List<Orgao> listaOrgaos) {
                this.listaOrgaos = listaOrgaos;
        }

        public List<Unidade> getListaUnidades() {
                if(VerificadorUtil.estaNulo(listaUnidades)) {
                        listaUnidades = unidadeFacade.consultarTodos(new Unidade());
                }
                return listaUnidades;
        }

        public void setListaUnidades(List<Unidade> listaUnidades) {
                this.listaUnidades = listaUnidades;
        }

        public UserIndra getUsuario() {
                return contextoSeguranca.obterUserIndra();
        }
       
        @Override
        public Boolean verificarPermissao(String permissao) {
                GrantedAuthority authority = new IndraGrantedAuthority(permissao);
                Collection<? extends GrantedAuthority> authorities = getUsuario().getAuthorities();
                return authorities.contains(authority);
        }
       
        public List<FormaIngresso> getListaFormaIngresso() {
                if(VerificadorUtil.estaNulo(listaFormaIngresso)){
                        listaFormaIngresso = formaIngressoFacade.consultarTodos(new FormaIngresso());
                }
                return listaFormaIngresso;
        }

        public void setListaFormaIngresso(List<FormaIngresso> listaFormaIngresso) {
                this.listaFormaIngresso = listaFormaIngresso;
        }
       
        public void limparParametrosDeConsultaDosRelatoriosDeAcompanhamentoDoServidor() {
                parametrosRelatorioAcompanhamentoServidor = new ParametrosRelatorioAcompanhamentoServidorDTO();
                parametrosRelatorioAcompanhamentoServidor.setTipoRelatorioAcompanhamento(TipoRelatorioAcompanhamento.ACOMPANHAMENTO);
        }
}