package gcom.relatorio.cobranca;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper;
import gcom.fachada.Fachada;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.RelatorioDataSource;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaException;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.Util;
import gcom.util.agendadortarefas.AgendadorTarefas;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
/**
* [UC1054] Gerar Ordem de Corte
*
* Este Caso Uso permite realizar a emiss�o de Documentos de Ordem de Corte
* de forma individual para um determinado im�vel.
*
* @author Hugo Amorim
* @data 08/02/2010
*
*/
public class RelatorioOrdemCorteOnline extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
public RelatorioOrdemCorteOnline(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_ORDEM_CORTE_ONLINE);
}
@Deprecated
public RelatorioOrdemCorteOnline() {
super(null, "");
}
public Object executar() throws TarefaException {
System.out.println("********************************************");
System.out.println("ENTROU NO EXECUTAR RELATORIO ORDEM DE CORTE ");
System.out.println("********************************************");
Fachada fachada = Fachada.getInstancia();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
String descricaoEmpresa =
sistemaParametro.getNomeEmpresa() +" - "
+sistemaParametro.getNomeAbreviadoEmpresa();
String inscricaoEmpresa =
"CNPJ:"+Util.formatarCnpj(sistemaParametro.getCnpjEmpresa())+
" INSC. EST. NR. " + sistemaParametro.getInscricaoEstadual();
// valor de retorno
byte[] retorno = null;
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
Collection<RelatorioOrdemCorteContasDetailBean>
colecaoRelatorioOrdemCorteContasDetailBean = this.pesquisarDebitosImovel((Integer) getParametro("matricula"),fachada);
BigDecimal valorTotalDebitos = BigDecimal.ZERO;
for (RelatorioOrdemCorteContasDetailBean bean : colecaoRelatorioOrdemCorteContasDetailBean) {
BigDecimal valor = Util.formatarMoedaRealparaBigDecimal(bean.getValorFatura());
valorTotalDebitos = Util.somaBigDecimal(
valorTotalDebitos, valor);
}
List relatorioBeans = new ArrayList();
RelatorioOrdemCorteOnlineBean relatorioOrdemCorteOnlineBean =
new RelatorioOrdemCorteOnlineBean(
(String)getParametro("qtdeEconResidencial"),
(String)getParametro("qtdeEconComercial"),
(String)getParametro("qtdeEconIndustrial"),
(String)getParametro("qtdeEconPublica"),
(String)getParametro("qtdeEconTotal"),
new JRBeanCollectionDataSource(
colecaoRelatorioOrdemCorteContasDetailBean));
relatorioBeans.add(relatorioOrdemCorteOnlineBean);
// Par�metros do relat�rio
Map parametros = new HashMap();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
parametros.put("descricaoEmpresa", descricaoEmpresa);
parametros.put("inscricaoEmpresa", inscricaoEmpresa);
parametros.put("idsOrdemServico", getParametro("idsOrdemServico"));
parametros.put("endereco", getParametro("endereco"));
parametros.put("matricula",Util.retornaMatriculaImovelFormatada((Integer) getParametro("matricula")));
parametros.put("situacaoAgua", getParametro("situacaoAgua"));
parametros.put("sistuacaoEsgoto", getParametro("sistuacaoEsgoto"));
parametros.put("inscricao", getParametro("inscricao"));
parametros.put("grupo", getParametro("grupo"));
parametros.put("dataGeracaoOs", getParametro("dataGeracaoOs"));
parametros.put("nomeCliente", getParametro("nomeCliente"));
parametros.put("numeroHidrometro", getParametro("numeroHidrometro"));
parametros.put("valorTotalDebitos", Util.formatarMoedaReal(valorTotalDebitos));
parametros.put("anoMesfaturamentoGrupo", getParametro("anoMesfaturamentoGrupo"));
parametros.put("perfilImovel", getParametro("perfilImovel"));
parametros.put("unidadeNegocio", getParametro("unidadeNegocio"));
// cria uma inst�ncia do dataSource do relat�rio
RelatorioDataSource ds = new RelatorioDataSource(relatorioBeans);
retorno = gerarRelatorio(ConstantesRelatorios.RELATORIO_ORDEM_CORTE_ONLINE,
parametros, ds, tipoFormatoRelatorio);
// retorna o relat�rio gerado
return retorno;
}
private Collection<RelatorioOrdemCorteContasDetailBean> pesquisarDebitosImovel(
Integer idImovelDebitos,Fachada fachada) {
Collection<RelatorioOrdemCorteContasDetailBean> colecaoRelatorioOrdemCorteContasDetailBean =
new ArrayList<RelatorioOrdemCorteContasDetailBean>();
String referenciaInicial = "01/0001";
String referenciaFinal = "12/9999";
String dataVencimentoInicial = "01/01/0001";
String dataVencimentoFinal = "31/12/9999";
// Para auxiliar na formata��o de uma data
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
String mesInicial = referenciaInicial.substring(0, 2);
String anoInicial = referenciaInicial.substring(3, referenciaInicial.length());
String anoMesInicial = anoInicial + mesInicial;
String mesFinal = referenciaFinal.substring(0, 2);
String anoFinal = referenciaFinal.substring(3, referenciaFinal.length());
String anoMesFinal = anoFinal + mesFinal;
Date dataVencimentoDebitoI;
Date dataVencimentoDebitoF;
try {
dataVencimentoDebitoI = formatoData.parse(dataVencimentoInicial);
} catch (ParseException ex) {
dataVencimentoDebitoI = null;
}
try {
dataVencimentoDebitoF = formatoData.parse(dataVencimentoFinal);
} catch (ParseException ex) {
dataVencimentoDebitoF = null;
}
// seta valores constantes para chamar o metodo que consulta debitos do imovel
Integer tipoImovel = new Integer(1);
Integer indicadorPagamento = new Integer(1);
Integer indicadorConta = new Integer(1);
Integer indicadorDebito = new Integer(1);
Integer indicadorCredito = new Integer(1);
Integer indicadorNotas = new Integer(1);
Integer indicadorGuias = new Integer(1);
Integer indicadorAtualizar = new Integer(1);
// Obtendo os d�bitos do imovel
ObterDebitoImovelOuClienteHelper colecaoDebitoImovel = fachada
.obterDebitoImovelOuCliente(tipoImovel.intValue(),
idImovelDebitos.toString().trim(), null, null,
anoMesInicial, anoMesFinal,
dataVencimentoDebitoI,
dataVencimentoDebitoF, indicadorPagamento
.intValue(), indicadorConta
.intValue(), indicadorDebito
.intValue(), indicadorCredito
.intValue(), indicadorNotas
.intValue(), indicadorGuias
.intValue(), indicadorAtualizar
.intValue(), null);
Collection<ContaValoresHelper> colecaoContas = null;
if(colecaoDebitoImovel.getColecaoContasValores()!=null
&& !colecaoDebitoImovel.getColecaoContasValores().isEmpty()){
colecaoContas = colecaoDebitoImovel.getColecaoContasValores();
if(colecaoContas.size()>11){
int qtdContasParaSomar = colecaoContas.size() - 9;
int controle = 1;
String referencia = "SD. ANT.";
String vencimento = "";
BigDecimal valor = BigDecimal.ZERO;
boolean jaSomou = false;
for (ContaValoresHelper contaValoresHelper : colecaoContas) {
if(controle<qtdContasParaSomar){
valor = Util.somaBigDecimal(valor, contaValoresHelper.getConta().getValorTotal());
vencimento = Util.formatarData(contaValoresHelper.getConta().getDataVencimentoConta());
++controle;
}else if(!jaSomou){
RelatorioOrdemCorteContasDetailBean bean =
new RelatorioOrdemCorteContasDetailBean(
referencia,
vencimento,
Util.formatarMoedaReal(valor));
colecaoRelatorioOrdemCorteContasDetailBean.add(bean);
jaSomou = true;
RelatorioOrdemCorteContasDetailBean beanFluxo =
new RelatorioOrdemCorteContasDetailBean(
contaValoresHelper.getConta().getReferenciaFormatada(),
Util.formatarData(contaValoresHelper.getConta().getDataVencimentoConta()),
Util.formatarMoedaReal(contaValoresHelper.getConta().getValorTotal()));
colecaoRelatorioOrdemCorteContasDetailBean.add(beanFluxo);
}else{
RelatorioOrdemCorteContasDetailBean bean =
new RelatorioOrdemCorteContasDetailBean(
contaValoresHelper.getConta().getReferenciaFormatada(),
Util.formatarData(contaValoresHelper.getConta().getDataVencimentoConta()),
Util.formatarMoedaReal(contaValoresHelper.getConta().getValorTotal()));
colecaoRelatorioOrdemCorteContasDetailBean.add(bean);
}
}
/*
qtdContasParaSomar = colecaoContas.size() - 9;
controle = 0;
for (ContaValoresHelper contaValoresHelper : colecaoContas) {
if(colecaoRelatorioOrdemCorteContasDetailBean.size()<11){
RelatorioOrdemCorteContasDetailBean bean =
new RelatorioOrdemCorteContasDetailBean(
contaValoresHelper.getConta().getReferenciaFormatada(),
Util.formatarData(contaValoresHelper.getConta().getDataVencimentoConta()),
Util.formatarMoedaReal(contaValoresHelper.getConta().getValorTotal()));
colecaoRelatorioOrdemCorteContasDetailBean.add(bean);
}
}
*/
}else{
for (ContaValoresHelper contaValoresHelper : colecaoContas) {
RelatorioOrdemCorteContasDetailBean bean =
new RelatorioOrdemCorteContasDetailBean(
contaValoresHelper.getConta().getReferenciaFormatada(),
Util.formatarData(contaValoresHelper.getConta().getDataVencimentoConta()),
Util.formatarMoedaReal(contaValoresHelper.getConta().getValorTotal()));
colecaoRelatorioOrdemCorteContasDetailBean.add(bean);
}
}
}
return colecaoRelatorioOrdemCorteContasDetailBean;
}
@Override
public int calcularTotalRegistrosRelatorio() {
int retorno = 1;
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioOrdemCorteOnline", this);
}
}