package gcom.relatorio.faturamento.conta;
import gcom.batch.Relatorio;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.RelatorioDataSource;
import gcom.relatorio.RelatorioVazioException;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaException;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ConstantesSistema;
import gcom.util.ControladorException;
import gcom.util.Util;
import gcom.util.agendadortarefas.AgendadorTarefas;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
/**
* [UC]
* @author Flavio Cordeiro
* @date 14/02/2007
*/
public class RelatorioContasRetificadas extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
private Map mapTotalAnos = null;
public RelatorioContasRetificadas(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_CONTAS_RETIFICADAS);
}
@Deprecated
public RelatorioContasRetificadas() {
super(null, "");
}
//classe tempor�ria criada para o totalizador geral dos anos.
private class TotaisAno {
private String ano;
private int contadorContas = 0;
private BigDecimal sumValorOriginal = new BigDecimal("0");
private BigDecimal sumValorNovo = new BigDecimal("0");
public TotaisAno() {
}
public String getAno() {
return ano;
}
public void setAno(String ano) {
this.ano = ano;
}
public int getContadorContas() {
return contadorContas;
}
public void setContadorContas(int contadorContas) {
this.contadorContas = contadorContas;
}
public BigDecimal getSumValorOriginal() {
return sumValorOriginal;
}
public void setSumValorOriginal(BigDecimal sumValorOriginal) {
this.sumValorOriginal = sumValorOriginal;
}
public BigDecimal getSumValorNovo() {
return sumValorNovo;
}
public void setSumValorNovo(BigDecimal sumValorNovo) {
this.sumValorNovo = sumValorNovo;
}
}
private Collection inicializarBeanRelatorio(Collection colecaoDados) {
Fachada fachada = Fachada.getInstancia();
Collection retorno = new ArrayList();
mapTotalAnos = new HashMap();
Iterator iter = colecaoDados.iterator();
RelatorioContasRetificadasBean relatorioContasRetificadasBean = null;
while (iter.hasNext()) {
RelatorioContasCanceladasRetificadasHelper rel = (RelatorioContasCanceladasRetificadasHelper) iter
.next();
Localidade localidade = null;
if (rel.getIdLocalidade() != null) {
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, rel.getIdLocalidade()));
Collection colecaoLocalidade = fachada.pesquisar(
filtroLocalidade, Localidade.class.getName());
localidade = (Localidade) colecaoLocalidade.iterator().next();
}
relatorioContasRetificadasBean = new RelatorioContasRetificadasBean(
rel.getCancelamento(), rel.getIdResponsavel(), rel
.getEndereco(), rel.getReferencia(), rel
.getIdMotivo(), rel.getValorOriginal(), rel
.getValorNovo(), rel.getIdRA(), rel
.getInscricaoImovel(), rel.getIdLocalidade(),
localidade != null ? localidade.getDescricao() : null, rel
.getMatricula());
relatorioContasRetificadasBean.setUnidadeNegocio(rel
.getUnidadeNegocio());
relatorioContasRetificadasBean.setIdUnidadeNegocio(rel
.getIdUnidadeNegocio());
relatorioContasRetificadasBean.setGerenciaRegional(rel
.getGerenciaRegional());
relatorioContasRetificadasBean.setIdGerenciaRegional(rel
.getIdGerenciaRegional());
retorno.add(relatorioContasRetificadasBean);
//Preenche os valores dos totais do anos
String ano = rel.getReferencia().substring(3);
if (mapTotalAnos.containsKey(ano)) {
TotaisAno totaisAno = (TotaisAno) mapTotalAnos.get(ano);
totaisAno.setContadorContas(totaisAno.getContadorContas() + 1);
totaisAno.setSumValorNovo(totaisAno.getSumValorNovo().add(
new BigDecimal(rel.getValorNovo())));
totaisAno.setSumValorOriginal(totaisAno.getSumValorOriginal()
.add(new BigDecimal(rel.getValorOriginal())));
mapTotalAnos.put(ano, totaisAno);
} else {
TotaisAno totaisAno = new TotaisAno();
totaisAno.setAno(ano);
totaisAno.setContadorContas(1);
totaisAno.setSumValorNovo(new BigDecimal(rel.getValorNovo()));
totaisAno.setSumValorOriginal(new BigDecimal(rel
.getValorOriginal()));
mapTotalAnos.put(ano, totaisAno);
}
}
return retorno;
}
/**
* M�todo que executa a tarefa
*
* @return Object
*
*/
public Object executar() throws TarefaException {
// ------------------------------------
Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
// ------------------------------------
Fachada fachada = Fachada.getInstancia();
String mesAno = (String) getParametro("mesAno");
String relatorioTipo = (String) getParametro("relatorioTipo");
String ordenacaoTipo = (String) getParametro("ordenacaoTipo");
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
// valor de retorno
byte[] retorno = null;
// Par�metros do relat�rio
Map parametros = new HashMap();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
parametros.put("imagemConta", sistemaParametro.getImagemConta());
parametros.put("mesAno", mesAno);
RelatorioContasCanceladasRetificadasHelper helper =
(RelatorioContasCanceladasRetificadasHelper) getParametro("relatorioContasCanceladasRetificadasHelper");
parametros.put("grupo", helper.getGrupo());
Collection colecaoContasRetificadas = fachada.gerarRelatorioContasRetificadas(helper);
Collection colecaoBean = new ArrayList();
//************************************************
// CRC5059
// Por: Ivan Sergio
// 08/09/2010
// Verifica se a consulta retornou algum dado.
//************************************************
if (colecaoContasRetificadas != null && !colecaoContasRetificadas.isEmpty()) {
colecaoBean = this.inicializarBeanRelatorio(colecaoContasRetificadas);
ArrayList sortFields = new ArrayList();
BeanComparator ordenaGerenciaRegional = new BeanComparator(
"idGerenciaRegional", new Comparator() {
public int compare(Object o1, Object o2) {
Integer i = new Integer((String) o1);
Integer i2 = new Integer((String) o2);
return i.compareTo(i2);
}
});
sortFields.add(ordenaGerenciaRegional);
BeanComparator ordenaUnidadeNegocio = new BeanComparator(
"unidadeNegocio", new Comparator() {
public int compare(Object o1, Object o2) {
String i = (String) o1;
String i2 = (String) o2;
return i.compareTo(i2);
}
});
sortFields.add(ordenaUnidadeNegocio);
BeanComparator ordenaLocalidade = new BeanComparator(
"idLocalidade", new Comparator() {
public int compare(Object o1, Object o2) {
Integer i = Integer.parseInt((String) o1);
Integer i2 = Integer.parseInt((String) o2);
return i.compareTo(i2);
}
});
sortFields.add(ordenaLocalidade);
// trecho que implementa os Totalizadores dos anos
List colecaoTotais = null;
if (mapTotalAnos != null && mapTotalAnos.size() != 0) {
RelatorioContasRetificadasBean relatorioContasRetificadasBean = null;
colecaoTotais = new ArrayList();
Iterator iterator = mapTotalAnos.keySet().iterator();
while (iterator.hasNext()) {
relatorioContasRetificadasBean = new RelatorioContasRetificadasBean();
TotaisAno totaisAno = (TotaisAno) mapTotalAnos.get((String) iterator.next());
relatorioContasRetificadasBean.setAno(totaisAno.getAno());
relatorioContasRetificadasBean.setQuantidadeContasAno(totaisAno.getContadorContas());
relatorioContasRetificadasBean.setValorOriginalAno(totaisAno.getSumValorOriginal());
relatorioContasRetificadasBean.setValorNovoAno(totaisAno.getSumValorNovo());
colecaoTotais.add(relatorioContasRetificadasBean);
}
}
// ORDENA COLE��O POR ANO MES DE REFERENCIA DA CONTA
Collections.sort(colecaoTotais, new Comparator() {
public int compare(Object left, Object right) {
RelatorioContasRetificadasBean leftKey = (RelatorioContasRetificadasBean) left;
RelatorioContasRetificadasBean rightKey = (RelatorioContasRetificadasBean) right;
return leftKey.getAno().compareTo(rightKey.getAno());
}
});
RelatorioDataSource dataSourceAno = new RelatorioDataSource(colecaoTotais);
parametros.put("DataSourceAno", dataSourceAno);
if (relatorioTipo.equalsIgnoreCase("sintetico")) {
BeanComparator ordenaReferencia = new BeanComparator(
"referencia", new Comparator() {
public int compare(Object o1, Object o2) {
Integer i = Integer
.parseInt(Util
.formatarMesAnoParaAnoMesSemBarra((String) o1));
Integer i2 = Integer
.parseInt(Util
.formatarMesAnoParaAnoMesSemBarra((String) o2));
return i.compareTo(i2);
}
});
sortFields.add(ordenaReferencia);
ComparatorChain multiSort = new ComparatorChain(sortFields);
Collections.sort((ArrayList) colecaoBean, multiSort);
RelatorioDataSource ds = new RelatorioDataSource((java.util.List) colecaoBean);
retorno = this.gerarRelatorio(ConstantesRelatorios.RELATORIO_CONTAS_RETIFICADAS_SINTETICO,
parametros, ds, tipoFormatoRelatorio);
} else if (relatorioTipo.equalsIgnoreCase("analitico")) {
if (ordenacaoTipo != null) {
if (ordenacaoTipo.equals("2")) {
BeanComparator ordenaData = new BeanComparator(
"dataRetificacao", new Comparator() {
public int compare(Object o1, Object o2) {
String i = (String) o1;
Date d = Util.converteStringParaDate(i);
i = Util.formatarDataSemBarra(d);
String i2 = (String) o2;
Date j = Util
.converteStringParaDate(i2);
i2 = Util.formatarDataSemBarra(j);
return i.compareTo(i2);
}
});
sortFields.add(ordenaData);
} else if (ordenacaoTipo.equals("1")) {
BeanComparator ordenaInscricao = new BeanComparator(
"inscricao", new Comparator() {
public int compare(Object o1, Object o2) {
String i = (String) o1;
String i2 = (String) o2;
if ( i == null || i2 == null ) {
return 0;
} else {
return i.compareTo(i2);
}
}
});
sortFields.add(ordenaInscricao);
}
}
BeanComparator ordenaReferencia = new BeanComparator(
"referencia", new Comparator() {
public int compare(Object o1, Object o2) {
Integer i = Integer
.parseInt(Util
.formatarMesAnoParaAnoMesSemBarra((String) o1));
Integer i2 = Integer
.parseInt(Util
.formatarMesAnoParaAnoMesSemBarra((String) o2));
return i.compareTo(i2);
}
});
sortFields.add(ordenaReferencia);
ComparatorChain multiSort = new ComparatorChain(sortFields);
Collections.sort((ArrayList) colecaoBean, multiSort);
RelatorioDataSource ds = new RelatorioDataSource(
(java.util.List) colecaoBean);
retorno = this.gerarRelatorio(
ConstantesRelatorios.RELATORIO_CONTAS_RETIFICADAS,
parametros, ds, tipoFormatoRelatorio);
}
} else {
//************************************************
// Verifica se o relatorio est� sendo executado
// como batch ou online;
//************************************************
if (idFuncionalidadeIniciada.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new RelatorioVazioException("atencao.relatorio.vazio");
}else {
//************************************************
// Gera o Relat�rio em Branco
//************************************************
RelatorioDataSource ds = new RelatorioDataSource((java.util.List) colecaoBean);
retorno = this.gerarRelatorio(
ConstantesRelatorios.RELATORIO_CONTAS_RETIFICADAS,
parametros, ds, tipoFormatoRelatorio);
}
}
// ------------------------------------
// Grava o relat�rio no sistema
try {
if (relatorioTipo.equalsIgnoreCase("sintetico")) {
persistirRelatorioConcluido(retorno,
Relatorio.RELATORIO_CONTAS_RETIFICADAS_SINTETICO,
idFuncionalidadeIniciada);
} else if (relatorioTipo.equalsIgnoreCase("analitico")) {
persistirRelatorioConcluido(retorno,
Relatorio.RELATORIO_CONTAS_RETIFICADAS,
idFuncionalidadeIniciada);
}
} catch (ControladorException e) {
e.printStackTrace();
throw new TarefaException("Erro ao gravar relat�rio no sistema", e);
}
// ------------------------------------
// retorna o relat�rio gerado
return retorno;
}
@Override
public int calcularTotalRegistrosRelatorio() {
RelatorioContasCanceladasRetificadasHelper relatorioContasCanceladasRetificadasHelper = (RelatorioContasCanceladasRetificadasHelper) getParametro("relatorioContasCanceladasRetificadasHelper");
Fachada fachada = Fachada.getInstancia();
Integer retorno = fachada
.pesquisarQuantidadeContasCanceladasOuRetificadas(
relatorioContasCanceladasRetificadasHelper, 2);
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioContasRetificadas", this);
}
}