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 RelatorioContasCanceladas extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
private Map mapTotalAnos = null;
public RelatorioContasCanceladas(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_CONTAS_CANCELADAS);
}
@Deprecated
public RelatorioContasCanceladas() {
super(null, "");
}
//classe tempor�ria criada para o totalizador geral dos anos.
private class TotaisAno{
private String ano;
private int contadorContas = 0;
private BigDecimal sumValorCanceladas = 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 getSumValorCanceladas() {
return sumValorCanceladas;
}
public void setSumValorCanceladas(BigDecimal sumValorCanceladas) {
this.sumValorCanceladas = sumValorCanceladas;
}
}
private Collection inicializarBeanRelatorio(
Collection colecaoDados) {
Fachada fachada = Fachada.getInstancia();
mapTotalAnos = new HashMap();
Collection retorno = new ArrayList();
Iterator iter = colecaoDados.iterator();
RelatorioContasCanceladasBean relatorioContasCanceladasBean = 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();
}
relatorioContasCanceladasBean =
new RelatorioContasCanceladasBean(
rel.getCancelamento(),
rel.getIdResponsavel(),
rel.getEndereco(),
rel.getReferencia(),
rel.getIdMotivo(),
rel.getValorCancelado(),
rel.getIdRA(),
rel.getInscricaoImovel(),
rel.getIdLocalidade(),
localidade != null ? localidade.getDescricao() : null,
rel.getMatricula() );
/**
* Incluir op��o de contas prescritas no relat�rio de contas
* canceladas/retificadas.
* @author Wellington Rocha
* @date 18/07/2012*/
if(rel.getTipoConta().equals("3")){
relatorioContasCanceladasBean.setIcRelatorioDeContasPrescritas("1");
}else{
relatorioContasCanceladasBean.setIcRelatorioDeContasPrescritas("2");
}
relatorioContasCanceladasBean.setCodigoSetorComercial(rel.getCodigoSetorComercial());
relatorioContasCanceladasBean.setUnidadeNegocio(rel.getUnidadeNegocio());
relatorioContasCanceladasBean.setIdUnidadeNegocio(rel.getIdUnidadeNegocio());
relatorioContasCanceladasBean.setGerenciaRegional(rel.getGerenciaRegional());
relatorioContasCanceladasBean.setIdGerenciaRegional(rel.getIdGerenciaRegional());
relatorioContasCanceladasBean.setIdGrupo(rel.getGrupo());
retorno.add(relatorioContasCanceladasBean);
//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.setSumValorCanceladas(totaisAno.getSumValorCanceladas().add(new BigDecimal(rel.getValorCancelado())));
mapTotalAnos.put(ano, totaisAno);
}else{
TotaisAno totaisAno = new TotaisAno();
totaisAno.setAno(ano);
totaisAno.setContadorContas(1);
totaisAno.setSumValorCanceladas( new BigDecimal(rel.getValorCancelado()) );
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 colecaoContasCanceladas = fachada
.gerarRelatorioContasCanceladas(helper);
Collection colecaoBean = new ArrayList();
//************************************************
// CRC5059
// Por: Ivan Sergio
// 08/09/2010
// Verifica se a consulta retornou algum dado.
//************************************************
if (colecaoContasCanceladas != null && !colecaoContasCanceladas.isEmpty()) {
colecaoBean = this
.inicializarBeanRelatorio(colecaoContasCanceladas);
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(
"idUnidadeNegocio", 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(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) {
RelatorioContasCanceladasBean relatorioContasCanceladasBean = null;
colecaoTotais = new ArrayList();
Iterator iterator = mapTotalAnos.keySet().iterator();
while (iterator.hasNext()) {
relatorioContasCanceladasBean = new RelatorioContasCanceladasBean();
TotaisAno totaisAno = (TotaisAno) mapTotalAnos
.get((String) iterator.next());
relatorioContasCanceladasBean.setAno(totaisAno.getAno());
relatorioContasCanceladasBean.setQuantidadeContasAno(totaisAno
.getContadorContas());
relatorioContasCanceladasBean.setValorCanceladasAno(totaisAno
.getSumValorCanceladas());
colecaoTotais.add(relatorioContasCanceladasBean);
}
}
// ORDENA COLE��O POR ANO MES DE REFERENCIA DA CONTA
Collections.sort(colecaoTotais, new Comparator() {
public int compare(Object left, Object right) {
RelatorioContasCanceladasBean leftKey = (RelatorioContasCanceladasBean) left;
RelatorioContasCanceladasBean rightKey = (RelatorioContasCanceladasBean) 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_CANCELADAS_SINTETICO,
parametros, ds, tipoFormatoRelatorio);
} else if (relatorioTipo.equalsIgnoreCase("analitico")) {
if (ordenacaoTipo != null) {
if (ordenacaoTipo.equals("2")) {
BeanComparator ordenaData = new BeanComparator(
"cancelamento", new Comparator() {
public int compare(Object o1, Object o2) {
String i = (String) o1;
String i2 = (String) o2;
Date i3 = Util.converteStringParaDate(i);
Date i4 = Util.converteStringParaDate(i2);
i = Util.formatarDataSemBarra(i3);
i2 = Util.formatarDataSemBarra(i4);
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;
if (i == null) {
i = "";
}
String i2 = (String) o2;
if (i2 == null) {
i2 = "";
}
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_CANCELADAS,
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_CANCELADAS_SINTETICO,
idFuncionalidadeIniciada);
} else if (relatorioTipo.equalsIgnoreCase("analitico")) {
persistirRelatorioConcluido(retorno,
Relatorio.RELATORIO_CONTAS_CANCELADAS,
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 helper =
(RelatorioContasCanceladasRetificadasHelper)
getParametro("relatorioContasCanceladasRetificadasHelper");
Fachada fachada = Fachada.getInstancia();
int retorno =
fachada.pesquisarQuantidadeContasCanceladasOuRetificadas(helper,1);
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioContasCanceladas", this);
}
}