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