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