package gcom.relatorio.cobranca;
import gcom.atendimentopublico.ligacaoagua.FiltroLigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao;
import gcom.batch.Relatorio;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.CategoriaTipo;
import gcom.cadastro.imovel.FiltroCategoria;
import gcom.cadastro.imovel.FiltroSubCategoria;
import gcom.cadastro.imovel.ImovelPerfil;
import gcom.cadastro.imovel.Subcategoria;
import gcom.cadastro.imovel.bean.GerarCurvaAbcDebitosHelper;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.sistemaparametro.SistemaParametro;
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.ConstantesSistema;
import gcom.util.ControladorException;
import gcom.util.agendadortarefas.AgendadorTarefas;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* [UC0622] - Gerar Curva ABC de Debitos
*
* @author Ivan S�rgio
* @date 07/08/2007
*/
public class RelatorioGerarCurvaAbcDebitos extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
/**
* Construtor da classe RelatorioGerarCurvaAbcDebitos
*/
public RelatorioGerarCurvaAbcDebitos(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_GERAR_CURVA_ABC_DEBITOS);
}
@Deprecated
public RelatorioGerarCurvaAbcDebitos() {
super(null, "");
}
/**
*
* <Breve descri��o sobre o caso de uso>
*
* <Identificador e nome do caso de uso>
*
* <Breve descri��o sobre o subfluxo>
*
* <Identificador e nome do subfluxo>
*
* <Breve descri��o sobre o fluxo secund�rio>
*
* <Identificador e nome do fluxo secund�rio>
*
* @author Ivan S�rgio
* @date 07/08/2007
*
* @return
* @throws TarefaException
*/
public Object executar() throws TarefaException {
// ------------------------------------
Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
// ------------------------------------
// Parametros
String classificacao = (String) getParametro("classificacao");
String referenciaCobrancaInicial = (String) getParametro("referenciaCobrancaInicial");
String referenciaCobrancaFinal = (String) getParametro("referenciaCobrancaFinal");
String indicadorImovelMedicaoIndividualizada =
(String) getParametro("indicadorImovelMedicaoIndividualizada");
String indicadorImovelParalizacaoFaturamentoCobranca =
(String) getParametro("indicadorImovelParalizacaoFaturamentoCobranca");
// Localizacao
String[] gerenciaRegional = (String[]) getParametro("gerenciaRegional");
String idLocalidadeInicial = (String) getParametro("idLocalidadeInicial");
String idLocalidadeFinal = (String) getParametro("idLocalidadeFinal");
String idSetorComercialInicial = (String) getParametro("idSetorComercialInicial");
String idSetorComercialFinal = (String) getParametro("idSetorComercialFinal");
String strIdMunicipio = (String) getParametro("idMunicipio");
Collection<GerenciaRegional> colecaoGerenciasRegionais = (Collection<GerenciaRegional>)
getParametro("colecaoGerenciasRegionais");
String localidadeInicial = (String) getParametro("localidadeInicial");
String localidadeFinal = (String) getParametro("localidadeFinal");
String setorComercialInicial = (String) getParametro("setorComercialInicial");
String setorComercialFinal = (String) getParametro("setorComercialFinal");
String municipio = (String) getParametro("nomeMunicipio");
// Ligacoes e consumos Agua/Esgoto
String[] situacaoLigacaoAgua = (String[]) getParametro("situacaoLigacaoAgua");
String[] situacaoLigacaoEsgoto = (String[]) getParametro("situacaoLigacaoEsgoto");
String intervaloMesesCortadoSuprimidoInicial =
(String) getParametro("intervaloMesesCortadoSuprimidoInicial");
String intervaloMesesCortadoSuprimidoFinal =
(String) getParametro("intervaloMesesCortadoSuprimidoFinal");
String intervaloConsumoMinimoFixadoEsgotoInicial =
(String) getParametro("intervaloConsumoMinimoFixadoEsgotoInicial");
String intervaloConsumoMinimoFixadoEsgotoFinal =
(String) getParametro("intervaloConsumoMinimoFixadoEsgotoFinal");
String indicadorMedicao = (String) getParametro("indicadorMedicao");
String idTipoMedicao = (String) getParametro("idTipoMedicao");
Collection<LigacaoAguaSituacao> colecaoSituacaoLigAgua = (Collection<LigacaoAguaSituacao>)
getParametro("collectionsLigacaoAguaSituacao");
Collection<LigacaoEsgotoSituacao> colecaoSituacaoLigEsgoto = (Collection<LigacaoEsgotoSituacao>)
getParametro("collectionLigacaoEsgotoSituacao");
// Caracteristicas
String idPerfilImovel = (String) getParametro("idPerfilImovel");
String idTipoCategoria = (String) getParametro("idTipoCategoria");
String[] categoria = (String[]) getParametro("categoria");
String idSubCategoria = (String) getParametro("idSubCategoria");
Collection<ImovelPerfil> colecaoImovelPerfil = (Collection<ImovelPerfil>)
getParametro("collectionImovelPerfil");
Collection<CategoriaTipo> colecaoCategoriaTipo = (Collection<CategoriaTipo>)
getParametro("collectionCategoriaTipo");
Collection<Categoria> colecaoCategoria = (Collection<Categoria>)
getParametro("collectionImovelCategoria");
Collection<Subcategoria> colecaoSubcategoria = (Collection<Subcategoria>)
getParametro("collectionImovelSubcategoria");
// Debito
String valorMinimoDebito = (String) getParametro("valorMinimoDebito");
String intervaloQuantidadeDocumentosInicial = (String) getParametro("intervaloQuantidadeDocumentosInicial");
String intervaloQuantidadeDocumentosFinal = (String) getParametro("intervaloQuantidadeDocumentosFinal");
String indicadorPagamentosNaoClassificados = (String) getParametro("indicadorPagamentosNaoClassificados");
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
Fachada fachada = Fachada.getInstancia();
Collection colecaoDadosRelatorio = fachada.gerarCurvaAbcDebitos(
classificacao , referenciaCobrancaInicial,
referenciaCobrancaFinal , indicadorImovelMedicaoIndividualizada,
indicadorImovelParalizacaoFaturamentoCobranca, gerenciaRegional,
idLocalidadeInicial , idLocalidadeFinal,
idSetorComercialInicial , idSetorComercialFinal,
strIdMunicipio,
situacaoLigacaoAgua , situacaoLigacaoEsgoto,
intervaloMesesCortadoSuprimidoInicial , intervaloMesesCortadoSuprimidoFinal,
intervaloConsumoMinimoFixadoEsgotoInicial , intervaloConsumoMinimoFixadoEsgotoFinal,
indicadorMedicao , idTipoMedicao,
idPerfilImovel , idTipoCategoria,
categoria , idSubCategoria,
valorMinimoDebito , intervaloQuantidadeDocumentosInicial,
intervaloQuantidadeDocumentosFinal , indicadorPagamentosNaoClassificados);
// cole��o de beans do relat�rio
List relatorioBeans = new ArrayList();
byte[] retorno = null;
// bean do relatorio
RelatorioGerarCurvaAbcDebitosBean relatorioGerarCurvaAbcDebitosBean = null;
// dados para o relatorio
if (colecaoDadosRelatorio != null && !colecaoDadosRelatorio.isEmpty()) {
List<GerarCurvaAbcDebitosHelper> listaSimplificada = new ArrayList();
GerarCurvaAbcDebitosHelper jaCadastrado = null;
GerarCurvaAbcDebitosHelper gerarCurvaAbcDebitosHelper = null;
Integer posicao = 0;
Integer totalLigacoes = 0;
Integer qtdLigacoesPorClassificacao = 0;
BigDecimal totalValorLigacoes = new BigDecimal(0);
Iterator iColecaoDadosRelatorio = colecaoDadosRelatorio.iterator();
// Recupera as Faixas de Valores de Debitos
Collection colecaoDebitoFaixaValores = fachada.pesquisarDebitoFaixaValores(0, null);
if (colecaoDebitoFaixaValores != null & !colecaoDebitoFaixaValores.isEmpty()) {
Iterator iColecaoDebitoFaixaValores = null;
Object[] dadosDebitoFaixaValores = null;
CurvaAbcDebitosHelper dadosRelatorio = null;
// Usado para fazer o controle da classificacao(Quebra)
Integer idClassificacao = 0;
Integer idClassificacaoAnterior = 0;
Integer idFaixa = null;
BigDecimal faixaInicial = null;
BigDecimal faixaFinal = null;
Integer idGerenciaRegional = 0;
String nomeGerenciaRegional = null;
Integer idLocalidade = 0;
String nomeLocalidade = null;
Integer idSetorComercial = 0;
Integer codigoSetorComercial = 0;
String nomeSetorComercial = null;
Integer idMunicipio = 0;
String nomeMunicipio = null;
List listaBeans = new ArrayList();
// Usado para fazer o controle da ultima quebra
boolean fazQuebra = false;
while (iColecaoDadosRelatorio.hasNext()) {
dadosRelatorio = (CurvaAbcDebitosHelper) iColecaoDadosRelatorio.next();
// Recupera o id do objeto de acordo com a classificacao selecionada
// Gerencia; Localidade; Setor
if (classificacao.equalsIgnoreCase("REGIONAL")) {
// Id da Gerencia Regional
idClassificacao = dadosRelatorio.getIdGerencia();
}else if (classificacao.equalsIgnoreCase("LOCAL")) {
// Id da Localidade
idClassificacao = dadosRelatorio.getIdLocalidade();
}else if (classificacao.equalsIgnoreCase("SETORCOMERCIAL")) {
// Id do Setor Comercial
idClassificacao = dadosRelatorio.getIdSetor();
}else if(classificacao.equalsIgnoreCase("MUNICIPIO")){
//Id do munic�pio
idClassificacao = dadosRelatorio.getIdMunicipio();
}
// Faz a quebra de acordo com classificacao
if (!idClassificacao.equals(idClassificacaoAnterior) & !idClassificacaoAnterior.equals(0)) {
// Faz o acumulado
relatorioGerarCurvaAbcDebitosBean = new RelatorioGerarCurvaAbcDebitosBean();
listaBeans = quebrarPorClassificacao(
listaSimplificada , totalLigacoes,
totalValorLigacoes , qtdLigacoesPorClassificacao,
idGerenciaRegional , nomeGerenciaRegional,
idLocalidade , nomeLocalidade,
idSetorComercial , codigoSetorComercial,
nomeSetorComercial , referenciaCobrancaInicial,
referenciaCobrancaFinal , categoria,
idTipoCategoria , idSubCategoria,
classificacao , intervaloMesesCortadoSuprimidoInicial,
intervaloMesesCortadoSuprimidoFinal , situacaoLigacaoAgua,
idClassificacaoAnterior, idMunicipio, nomeMunicipio);
Iterator iListaBeans = listaBeans.iterator();
while (iListaBeans.hasNext()) {
relatorioGerarCurvaAbcDebitosBean =
(RelatorioGerarCurvaAbcDebitosBean) iListaBeans.next();
relatorioBeans.add(relatorioGerarCurvaAbcDebitosBean);
}
listaSimplificada.clear();
totalLigacoes = 0;
qtdLigacoesPorClassificacao = 0;
totalValorLigacoes = new BigDecimal(0);
fazQuebra = false;
}
if (listaSimplificada.isEmpty()) {
// Preenche os Helpers com todas as faixas para iniciar os acumulados
iColecaoDebitoFaixaValores = colecaoDebitoFaixaValores.iterator();
while (iColecaoDebitoFaixaValores.hasNext()) {
dadosDebitoFaixaValores = (Object[]) iColecaoDebitoFaixaValores.next();
idFaixa = (Integer) dadosDebitoFaixaValores[0];
faixaInicial = (BigDecimal) dadosDebitoFaixaValores[1];
faixaFinal = (BigDecimal) dadosDebitoFaixaValores[2];
gerarCurvaAbcDebitosHelper = new GerarCurvaAbcDebitosHelper(
idFaixa, faixaInicial, faixaFinal);
listaSimplificada.add(gerarCurvaAbcDebitosHelper);
}
}
// Preenche o Helper com os outros dados
gerarCurvaAbcDebitosHelper = new GerarCurvaAbcDebitosHelper(
dadosRelatorio.getFaixaInicial(), // Faixa Inicial
dadosRelatorio.getFaixaFinal(), // Faixa Final
dadosRelatorio.getIdFaixa(), // Id Faixa
dadosRelatorio.getQuantidadeLigacoes(), // Quantidade Ligacoes
dadosRelatorio.getTotal(), // Valor
dadosRelatorio.getIdGerencia(), // Id da Gerencia
dadosRelatorio.getNomeGerencia(), // Nome da Gerencia
dadosRelatorio.getIdLocalidade(), // Id da Localidade
dadosRelatorio.getNomeLocalidade(), // Nome da Localidade
dadosRelatorio.getIdSetor(), // Id do Setor Comercial
dadosRelatorio.getCodigoSetor(), // Codigo do Setor Comercial
dadosRelatorio.getNomeSetor(), // Nome do Setor Comercial
dadosRelatorio.getIdMunicipio(), // Id Munic�pio
dadosRelatorio.getNomeMunicipio()); // Nome Munic�pio
// Faz os acumulados
if (listaSimplificada.contains(gerarCurvaAbcDebitosHelper)) {
posicao = listaSimplificada.indexOf(gerarCurvaAbcDebitosHelper);
jaCadastrado = (GerarCurvaAbcDebitosHelper) listaSimplificada.get(posicao);
// Ligacoes
jaCadastrado.setQuantidadeLigacoes( (jaCadastrado.getQuantidadeLigacoes() +
gerarCurvaAbcDebitosHelper.getQuantidadeLigacoes()) );
// Valor
jaCadastrado.setValor(jaCadastrado.getValor()
.add(gerarCurvaAbcDebitosHelper.getValor()));
// Id da Gerencia
if (jaCadastrado.getIdGerenciaRegional() == null) {
jaCadastrado.setIdGerenciaRegional(
gerarCurvaAbcDebitosHelper.getIdGerenciaRegional());
idGerenciaRegional = jaCadastrado.getIdGerenciaRegional();
// Nome da Gerencia
jaCadastrado.setNomeGerenciaRegional(
gerarCurvaAbcDebitosHelper.getNomeGerenciaRegional());
nomeGerenciaRegional = jaCadastrado.getNomeGerenciaRegional();
}
// Id Localidade
if (jaCadastrado.getIdLocalidade() == null) {
jaCadastrado.setIdLocalidade(
gerarCurvaAbcDebitosHelper.getIdLocalidade());
idLocalidade = jaCadastrado.getIdLocalidade();
// Nome da Localidade
jaCadastrado.setNomeLocalidade(
gerarCurvaAbcDebitosHelper.getNomeLocalidade());
nomeLocalidade = jaCadastrado.getNomeLocalidade();
}
// Id Setor Comercial
if (jaCadastrado.getIdSetorComercial() == null) {
jaCadastrado.setIdSetorComercial(
gerarCurvaAbcDebitosHelper.getIdSetorComercial());
idSetorComercial = jaCadastrado.getIdSetorComercial();
// Codigo Setor Comercial
jaCadastrado.setCodigoSetorComercial(
gerarCurvaAbcDebitosHelper.getCodigoSetorComercial());
codigoSetorComercial = jaCadastrado.getCodigoSetorComercial();
// Nome Setor Comercial
jaCadastrado.setNomeSetorComercial(
gerarCurvaAbcDebitosHelper.getNomeSetorComercial());
nomeSetorComercial = jaCadastrado.getNomeSetorComercial();
}
//Id Munic�pio
if (jaCadastrado.getIdMunicipio() == null) {
jaCadastrado.setIdMunicipio(gerarCurvaAbcDebitosHelper.getIdMunicipio());
idMunicipio = jaCadastrado.getIdMunicipio();
// Nome do Munic�pio
jaCadastrado.setNomeMunicipio(
gerarCurvaAbcDebitosHelper.getNomeMunicipio());
nomeMunicipio = jaCadastrado.getNomeMunicipio();
}
// Valor Medio
BigDecimal qtdLigacoes = new BigDecimal(jaCadastrado.getQuantidadeLigacoes());
if (!jaCadastrado.getQuantidadeLigacoes().equals(0) &&
!jaCadastrado.getValor().equals(0)) {
jaCadastrado.setValorMedio(jaCadastrado.getValor().divide(qtdLigacoes, 2, RoundingMode.HALF_UP));
}else {
jaCadastrado.setValorMedio(qtdLigacoes);
}
// Quantidade de Ligacoes por Classificacao
qtdLigacoesPorClassificacao += gerarCurvaAbcDebitosHelper.getQuantidadeLigacoes();
// Total geral das Ligacoes
totalLigacoes += jaCadastrado.getQuantidadeLigacoes();
// Total geral dos Valores
totalValorLigacoes = totalValorLigacoes.add(gerarCurvaAbcDebitosHelper.getValor());
}
idClassificacaoAnterior = idClassificacao;
fazQuebra = true;
}
// Faz o acumulado da ultima quebra
if (fazQuebra) {
relatorioGerarCurvaAbcDebitosBean = new RelatorioGerarCurvaAbcDebitosBean();
listaBeans = quebrarPorClassificacao(
listaSimplificada , totalLigacoes,
totalValorLigacoes , qtdLigacoesPorClassificacao,
idGerenciaRegional , nomeGerenciaRegional,
idLocalidade , nomeLocalidade,
idSetorComercial , codigoSetorComercial,
nomeSetorComercial , referenciaCobrancaInicial,
referenciaCobrancaFinal , categoria,
idTipoCategoria , idSubCategoria,
classificacao , intervaloMesesCortadoSuprimidoInicial,
intervaloMesesCortadoSuprimidoFinal , situacaoLigacaoAgua,
idClassificacaoAnterior, idMunicipio, nomeMunicipio);
Iterator iListaBeans = listaBeans.iterator();
while (iListaBeans.hasNext()) {
relatorioGerarCurvaAbcDebitosBean =
(RelatorioGerarCurvaAbcDebitosBean) iListaBeans.next();
relatorioBeans.add(relatorioGerarCurvaAbcDebitosBean);
}
}
}
}
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
// Par�metros do relat�rio
Map parametros = new HashMap();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
parametros.put("tipoFormatoRelatorio", "R0622");
/*
Inicio: Adicionando os parametros para serem mostrados no cabecalho do relatorio.
*/
// Parametros
if(classificacao != null){
parametros.put("classificacao",classificacao);
}
else{
parametros.put("classificacao","");
}
if(referenciaCobrancaInicial != null){
parametros.put("referenciaCobrancaInicial",referenciaCobrancaInicial);
}
else{
parametros.put("referenciaCobrancaInicial","");
}
if(referenciaCobrancaFinal != null){
parametros.put("referenciaCobrancaFinal",referenciaCobrancaFinal);
}
else{
parametros.put("referenciaCobrancaFinal","");
}
if(indicadorImovelMedicaoIndividualizada != null){
if(indicadorImovelMedicaoIndividualizada.equals("1")){
parametros.put("indicadorImovelMedicaoIndividualizada","Sim");
}
else{
parametros.put("indicadorImovelMedicaoIndividualizada","N�o");
}
}
else{
parametros.put("indicadorImovelMedicaoIndividualizada","");
}
if(indicadorImovelParalizacaoFaturamentoCobranca != null){
if(indicadorImovelParalizacaoFaturamentoCobranca.equals("1")){
parametros.put("indicadorImovelParalizacaoFaturamentoCobranca","Sim");
}
else{
parametros.put("indicadorImovelParalizacaoFaturamentoCobranca","N�o");
}
}
else{
parametros.put("indicadorImovelParalizacaoFaturamentoCobranca","");
}
// Liga��es e consumos
if(colecaoSituacaoLigAgua != null && situacaoLigacaoAgua != null){
String valoresSituacaoLigAgua ="";
LigacaoAguaSituacao situacaoLigAgua = null;
for (Iterator iter = colecaoSituacaoLigAgua.iterator(); iter.hasNext();) {
situacaoLigAgua = (LigacaoAguaSituacao) iter.next();
for( String idSituacaoLigacaoAgua : situacaoLigacaoAgua){
if(situacaoLigAgua.getId() == new Integer(idSituacaoLigacaoAgua)){
valoresSituacaoLigAgua += situacaoLigAgua.getDescricao()+"\n";
}
}
}
parametros.put("situacoesLigacaoAgua",valoresSituacaoLigAgua);
}
else{
parametros.put("situacoesLigacaoAgua","");
}
if(colecaoSituacaoLigEsgoto != null && situacaoLigacaoEsgoto != null){
String valoresSituacaoLigEsgoto ="";
LigacaoEsgotoSituacao situacaoLigEsgoto = null;
int count = 1;
for (Iterator iter = colecaoSituacaoLigEsgoto.iterator(); iter.hasNext();) {
situacaoLigEsgoto = (LigacaoEsgotoSituacao) iter.next();
for( String idSituacaoLigacaoEsgoto : situacaoLigacaoEsgoto){
if(situacaoLigEsgoto.getId() == new Integer(idSituacaoLigacaoEsgoto)){
if(count % 2 == 0){
valoresSituacaoLigEsgoto += situacaoLigEsgoto.getDescricao()+"\n";
}
else{
valoresSituacaoLigEsgoto += situacaoLigEsgoto.getDescricao()+";";
}
++count;
}
}
}
parametros.put("situacoesLigacaoEsgoto",valoresSituacaoLigEsgoto);
}
else{
parametros.put("situacoesLigacaoEsgoto","");
}
if(intervaloConsumoMinimoFixadoEsgotoInicial != null){
parametros.put("intervaloConsumoMinimoFixadoEsgotoInicial",intervaloConsumoMinimoFixadoEsgotoInicial);
}
else{
parametros.put("intervaloConsumoMinimoFixadoEsgotoInicial","");
}
if(intervaloConsumoMinimoFixadoEsgotoFinal != null){
parametros.put("intervaloConsumoMinimoFixadoEsgotoFinal",intervaloConsumoMinimoFixadoEsgotoFinal);
}
else{
parametros.put("intervaloConsumoMinimoFixadoEsgotoFinal","");
}
if(intervaloMesesCortadoSuprimidoInicial != null){
parametros.put("intervaloMesesCortadoSuprimidoInicial",intervaloMesesCortadoSuprimidoInicial);
}
else{
parametros.put("intervaloMesesCortadoSuprimidoInicial","");
}
if(intervaloMesesCortadoSuprimidoFinal != null){
parametros.put("intervaloMesesCortadoSuprimidoFinal",intervaloMesesCortadoSuprimidoFinal);
}
else{
parametros.put("intervaloMesesCortadoSuprimidoFinal","");
}
if(indicadorMedicao != null){
if(indicadorMedicao.equals("semMedicao")){
parametros.put("indicadorMedicao","Sem medi��o");
}
else if(indicadorMedicao.equals("comMedicao")){
parametros.put("indicadorMedicao","Com medi��o");
}
else{
parametros.put("indicadorMedicao","Todos");
}
}
else{
parametros.put("indicadorMedicao","");
}
if(idTipoMedicao != null){
if(idTipoMedicao.equals("1")){
parametros.put("tipoMedicao","Liga��o de �gua");
}
else if(idTipoMedicao.equals("2")){
parametros.put("tipoMedicao","Po�o");
}
}
else{
parametros.put("tipoMedicao","");
}
// Caracteristica
if(colecaoImovelPerfil != null){
String valoresImovelPerfil ="";
ImovelPerfil imovelPerfil = null;
for (Iterator iter = colecaoImovelPerfil.iterator(); iter.hasNext();) {
imovelPerfil = (ImovelPerfil) iter.next();
if(imovelPerfil.getId() != null){
if(imovelPerfil.getId().toString().equals(idPerfilImovel)){
valoresImovelPerfil = imovelPerfil.getDescricao();
}
}
}
parametros.put("perfilImovel",valoresImovelPerfil);
}
else{
parametros.put("perfilImovel","");
}
if(colecaoCategoriaTipo != null){
String valoresCategoriaTipo ="";
CategoriaTipo categoriaTipo = null;
for (Iterator iter = colecaoCategoriaTipo.iterator(); iter.hasNext();) {
categoriaTipo = (CategoriaTipo) iter.next();
if(categoriaTipo.getId() != null){
if(categoriaTipo.getId().toString().equals(idTipoCategoria)){
valoresCategoriaTipo = categoriaTipo.getDescricao();
break;
}
}
}
parametros.put("tipoCategoria",valoresCategoriaTipo);
}
else{
parametros.put("tipoCategoria","");
}
if(colecaoCategoria != null && categoria != null){
String valoresCategoria ="";
Categoria categ = null;
int count = 1;
for (Iterator iter = colecaoCategoria.iterator(); iter.hasNext();) {
categ = (Categoria) iter.next();
for(String idCategoria : categoria){
if(categ.getId() != null){
if(categ.getId().toString().equals(idCategoria)){
if(count % 2 == 0){
valoresCategoria += categ.getDescricao()+"\n";
}
else{
valoresCategoria += categ.getDescricao()+";";
}
++count;
break;
}
}
}
}
parametros.put("categorias",valoresCategoria);
}
else{
parametros.put("categorias","");
}
if(colecaoSubcategoria != null){
String valoresSubCategoria ="";
Subcategoria subCateg = null;
for (Iterator iter = colecaoSubcategoria.iterator(); iter.hasNext();) {
subCateg = (Subcategoria) iter.next();
if(subCateg.getId() != null){
if(subCateg.getId().toString().equals(idSubCategoria)){
valoresSubCategoria = subCateg.getDescricao();
break;
}
}
}
parametros.put("subCategoria",valoresSubCategoria);
}
else{
parametros.put("subCategoria","");
}
// Debitos
if(valorMinimoDebito != null){
parametros.put("valorMinimoDebito",valorMinimoDebito);
}
else{
parametros.put("valorMinimoDebito","");
}
if(intervaloQuantidadeDocumentosInicial != null){
parametros.put("intervaloQuantidadeDocumentosInicial",intervaloQuantidadeDocumentosInicial);
}
else{
parametros.put("intervaloQuantidadeDocumentosInicial","");
}
if(intervaloQuantidadeDocumentosFinal != null){
parametros.put("intervaloQuantidadeDocumentosFinal",intervaloQuantidadeDocumentosFinal);
}
else{
parametros.put("intervaloQuantidadeDocumentosFinal","");
}
if(indicadorPagamentosNaoClassificados != null){
if(indicadorPagamentosNaoClassificados.equals("1")){
parametros.put("indicadorPagamentosNaoClassificados","Sim");
}
else {
parametros.put("indicadorPagamentosNaoClassificados","N�o");
}
}
else{
parametros.put("indicadorPagamentosNaoClassificados","");
}
// Localizacao
if( colecaoGerenciasRegionais != null && gerenciaRegional != null){
String valoresGerenciaReg ="";
int count = 1 ;
GerenciaRegional gerenciaReg = null;
for (Iterator gerenciaRegionais = colecaoGerenciasRegionais.iterator(); gerenciaRegionais.hasNext();) {
gerenciaReg = (GerenciaRegional) gerenciaRegionais.next();
for( String idGerenciaRegional : gerenciaRegional){
if(gerenciaReg.getId() == new Integer(idGerenciaRegional)){
// arruma para colocar duas gerenciasRegionais por linha.
if(count % 2 == 0){
valoresGerenciaReg += gerenciaReg.getNome()+"\n";
}
else{
valoresGerenciaReg += gerenciaReg.getNome()+";";
}
++count;
}
}
}
parametros.put("gerenciasRegionais",valoresGerenciaReg);
}
else{
parametros.put("gerenciasRegionais","");
}
if( localidadeInicial != null){
parametros.put("localidadeInicial",localidadeInicial);
}
else{
parametros.put("localidadeInicial","");
}
if( localidadeFinal != null){
if(localidadeFinal.equals("") && localidadeInicial != null){
parametros.put("localidadeFinal",localidadeInicial);
}
else{
parametros.put("localidadeFinal",localidadeFinal);
}
}
else{
parametros.put("localidadeFinal","");
}
if( setorComercialInicial != null){
parametros.put("setorComercialInicial",setorComercialInicial);
}
else{
parametros.put("setorComercialInicial","");
}
if( setorComercialFinal != null){
if(setorComercialFinal.equals("") && setorComercialInicial != null){
parametros.put("setorComercialFinal",setorComercialInicial);
}
else{
parametros.put("setorComercialFinal",setorComercialFinal);
}
}
else{
parametros.put("setorComercialFinal","");
}
if( municipio != null && !municipio.equals("")){
parametros.put("municipio",municipio);
}else{
parametros.put("municipio",municipio);
}
/*
Fim: Adicionando os parametros para serem mostrados no cabecalho do relatorio.
*/
RelatorioDataSource ds = new RelatorioDataSource((List) relatorioBeans);
// exporta o relat�rio em pdf e retorna o array de bytes
retorno = gerarRelatorio(
ConstantesRelatorios.RELATORIO_GERAR_CURVA_ABC_DEBITOS,
parametros, ds, tipoFormatoRelatorio);
// ------------------------------------
// Grava o relat�rio no sistema
try {
persistirRelatorioConcluido(retorno, Relatorio.GERAR_CURVA_ABC_DEBITOS,
idFuncionalidadeIniciada);
} catch (ControladorException e) {
e.printStackTrace();
throw new TarefaException("Erro ao gravar relat�rio no sistema", e);
}
// ------------------------------------
// retorna o relat�rio gerado
return retorno;
}
/**
* Usado para efetivar as quebras do relatorio
*
* [UC0621] Gerar Curva ABC de Debitos
*
* @author Ivan S�rgio
* @date 25/09/2007
*
*/
public List quebrarPorClassificacao(
List listaSimplificada,
Integer totalLigacoes,
BigDecimal totalValorLigacoes,
Integer qtdLigacoesPorClassificacao,
Integer idGerenciaRegional,
String nomeGerenciaRegional,
Integer idLocalidade,
String nomeLocalidade,
Integer idSetorComercial,
Integer codigoSetorComercial,
String nomeSetorComercial,
String referenciaCobrancaIncial,
String referenciaCobrancaFinal,
String[] categoria,
String idTipoCategoria,
String idSubCategoria,
String classificacao,
String intervaloMesesCortadoSuprimidoInicial,
String intervaloMesesCortadoSuprimidoFinal,
String[] situacaoLigacaoAgua,
Integer idClassificacao,
Integer idMunicipio,
String nomeMunicipio) {
RelatorioGerarCurvaAbcDebitosBean relatorioGerarCurvaAbcDebitosBean =
new RelatorioGerarCurvaAbcDebitosBean();
Fachada fachada = Fachada.getInstancia();
// Faz o acumulado
List listaAcumulada = new ArrayList();
List listaBeans = new ArrayList();
listaAcumulada = acumularCurvaAbcDebitos(
listaSimplificada , totalLigacoes,
totalValorLigacoes , qtdLigacoesPorClassificacao,
idGerenciaRegional , nomeGerenciaRegional,
idLocalidade , nomeLocalidade,
idSetorComercial , codigoSetorComercial,
nomeSetorComercial,
idMunicipio, nomeMunicipio);
// Recupera a Descricao da Categoria
String descricaoCategoria = "";
if (categoria != null) {
if (categoria.length == 1) {
if (!categoria[0].trim().equalsIgnoreCase(
new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO).toString())) {
FiltroCategoria filtroCategoria = new FiltroCategoria();
filtroCategoria.adicionarParametro(new ParametroSimples(FiltroCategoria.CODIGO,
categoria[0]));
Collection collectionImovelCategoria =
fachada.pesquisar(filtroCategoria, Categoria.class.getName());
if (collectionImovelCategoria != null && !collectionImovelCategoria.isEmpty()) {
Iterator icollectionImovelCategoria = collectionImovelCategoria.iterator();
Categoria categoria2 = (Categoria) icollectionImovelCategoria.next();
descricaoCategoria = categoria2.getDescricao();
}
}
}else if (idTipoCategoria.equals("1") && categoria.length == 0) {
descricaoCategoria = "PARTICULAR";
}else {
descricaoCategoria = "GERAL";
}
}
// Recupera a Descricao da SubCategoria
String descricaoSubCategoria = "";
if (idSubCategoria != null) {
if (idSubCategoria != null) {
if (!idSubCategoria.trim().equalsIgnoreCase(
new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO).toString())) {
FiltroSubCategoria filtroSubCategoria = new FiltroSubCategoria();
filtroSubCategoria.adicionarParametro(new ParametroSimples(FiltroCategoria.CODIGO,
idSubCategoria));
Collection collectionImovelSubcategoria =
fachada.pesquisar(filtroSubCategoria, Subcategoria.class.getName());
if (collectionImovelSubcategoria != null && !collectionImovelSubcategoria.isEmpty()) {
Iterator iCollectionImovelSubcategoria = collectionImovelSubcategoria.iterator();
Subcategoria subcategoria = (Subcategoria) iCollectionImovelSubcategoria.next();
descricaoSubCategoria = " - " + subcategoria.getDescricao();
}
}
}
}
String situacao = "";
String intervaloMeses = "";
if (intervaloMesesCortadoSuprimidoInicial != null &
intervaloMesesCortadoSuprimidoFinal != null) {
// Verifica a Situacao de Agua para Cortado/Suprimido
if (situacaoLigacaoAgua != null) {
if (situacaoLigacaoAgua.length >= 1) {
Integer situacaoAgua = null;
for (int i = 0; i < situacaoLigacaoAgua.length; i++) {
if (!situacaoLigacaoAgua[i].trim().equalsIgnoreCase(
new Integer(ConstantesSistema.NUMERO_NAO_INFORMADO).toString())) {
situacaoAgua = new Integer(situacaoLigacaoAgua[i]);
// Verifica se a situacao � Cortado/Suprimido e
// se o intervalo de meses foi informado
if ( (situacaoAgua.equals(LigacaoAguaSituacao.CORTADO)) ||
(situacaoAgua.equals(LigacaoAguaSituacao.SUPRIMIDO)) ) {
FiltroLigacaoAguaSituacao filtroLigacaoAguaSituacao =
new FiltroLigacaoAguaSituacao();
filtroLigacaoAguaSituacao.adicionarParametro(
new ParametroSimples(FiltroLigacaoAguaSituacao.ID, situacaoAgua));
Collection collectionLigacaoAguaSituacao =
fachada.pesquisar(filtroLigacaoAguaSituacao,
LigacaoAguaSituacao.class.getName());
if (collectionLigacaoAguaSituacao != null &&
!collectionLigacaoAguaSituacao.isEmpty()) {
Iterator iCollectionLigacaoAguaSituacao =
collectionLigacaoAguaSituacao.iterator();
LigacaoAguaSituacao ligacaoAguaSituacao =
(LigacaoAguaSituacao) iCollectionLigacaoAguaSituacao.next();
situacao += ligacaoAguaSituacao.getDescricao() + "/";
}
}
}
}
// Retira o ultimo "/" da situacao
if (situacao != "") {
situacao = situacao.substring(0, (situacao.length() - 1));
intervaloMeses = intervaloMesesCortadoSuprimidoInicial + " A " +
intervaloMesesCortadoSuprimidoFinal + " MESES";
}
}
}
}
// Preenche o Bean com as Faixas j� calculadas
GerarCurvaAbcDebitosHelper helper = null;
Iterator iListaAcumulada = listaAcumulada.iterator();
BigDecimal percentual = new BigDecimal(100.00).setScale(2);
while (iListaAcumulada.hasNext()) {
helper = (GerarCurvaAbcDebitosHelper) iListaAcumulada.next();
// Passa as informa��es para o Bean
relatorioGerarCurvaAbcDebitosBean = new RelatorioGerarCurvaAbcDebitosBean();
relatorioGerarCurvaAbcDebitosBean.setCategoria(descricaoCategoria);
relatorioGerarCurvaAbcDebitosBean.setSubCategoria(descricaoSubCategoria);
relatorioGerarCurvaAbcDebitosBean.setIntervaloMeses(intervaloMeses);
relatorioGerarCurvaAbcDebitosBean.setSituacaoAgua(situacao);
relatorioGerarCurvaAbcDebitosBean.setReferenciaCobrancaInicial(referenciaCobrancaIncial);
relatorioGerarCurvaAbcDebitosBean.setReferenciaCobrancaFinal(referenciaCobrancaFinal);
relatorioGerarCurvaAbcDebitosBean.setClassificacao(classificacao);
relatorioGerarCurvaAbcDebitosBean.setIdGerenciaRegional(""+idGerenciaRegional);
relatorioGerarCurvaAbcDebitosBean.setNomeGerenciaRegional(nomeGerenciaRegional);
relatorioGerarCurvaAbcDebitosBean.setIdLocalidade(""+idLocalidade);
relatorioGerarCurvaAbcDebitosBean.setNomeLocalidade(nomeLocalidade);
relatorioGerarCurvaAbcDebitosBean.setIdSetorComercial(""+idSetorComercial);
relatorioGerarCurvaAbcDebitosBean.setCodigoSetorComercial(""+codigoSetorComercial);
relatorioGerarCurvaAbcDebitosBean.setNomeSetorComercial(nomeSetorComercial);
relatorioGerarCurvaAbcDebitosBean.setIdMunicipio(""+idMunicipio);
relatorioGerarCurvaAbcDebitosBean.setNomeMunicipio(nomeMunicipio);
// Dados das Faixas
relatorioGerarCurvaAbcDebitosBean.setFaixaInicial(helper.getFaixaInicial());
relatorioGerarCurvaAbcDebitosBean.setFaixaFinal(helper.getFaixaFinal());
relatorioGerarCurvaAbcDebitosBean.setIdFaixa(helper.getIdFaixa());
relatorioGerarCurvaAbcDebitosBean.setQuantidadeLigacoes(helper.getQuantidadeLigacoes());
// Fecha os acumulados em 100%
if (iListaAcumulada.hasNext()) {
if (helper.getPercLigacoesAcumulado().compareTo(percentual) > 0) {
relatorioGerarCurvaAbcDebitosBean.setPercLigacoesAcumulado(percentual);
}else {
relatorioGerarCurvaAbcDebitosBean.setPercLigacoesAcumulado(helper.getPercLigacoesAcumulado());
}
if (helper.getPercValorAcumulado().compareTo(percentual) > 0) {
relatorioGerarCurvaAbcDebitosBean.setPercValorAcumulado(percentual);
}else {
relatorioGerarCurvaAbcDebitosBean.setPercValorAcumulado(helper.getPercValorAcumulado());
}
}else {
relatorioGerarCurvaAbcDebitosBean.setPercLigacoesAcumulado(percentual);
relatorioGerarCurvaAbcDebitosBean.setPercValorAcumulado(percentual);
}
relatorioGerarCurvaAbcDebitosBean.setPercLigacoes(helper.getPercLigacoes());
relatorioGerarCurvaAbcDebitosBean.setLigacoesAcumuladas(helper.getLigacoesAcumuladas());
relatorioGerarCurvaAbcDebitosBean.setValor(helper.getValor());
relatorioGerarCurvaAbcDebitosBean.setPercValor(helper.getPercValor());
relatorioGerarCurvaAbcDebitosBean.setValorAcumulado(helper.getValorAcumulado());
relatorioGerarCurvaAbcDebitosBean.setValorMedio(helper.getValorMedio());
relatorioGerarCurvaAbcDebitosBean.setIdClassificacao(idClassificacao.toString());
listaBeans.add(relatorioGerarCurvaAbcDebitosBean);
}
return listaBeans;
}
/**
* Faz os acumulados das Faixas Valores
*
* [UC0621] Gerar Curva ABC de Debitos
*
* @author Ivan S�rgio
* @date 24/09/2007
*
*/
public List acumularCurvaAbcDebitos(
List listaCurvaAbcDebito,
Integer totalLigacoes,
BigDecimal totalValorLigacoes,
Integer qtdLigacoesPorClassificacao,
Integer idGerenciaRegional,
String nomeGerenciaRegional,
Integer idLocalidade,
String nomeLocalidade,
Integer idSetorComercial,
Integer codigoSetorComercial,
String nomeSetorComercial,
Integer idMunicipio,
String nomeMunicipio) {
List<GerarCurvaAbcDebitosHelper> listAcumulada = new ArrayList();
if (listaCurvaAbcDebito != null & !listaCurvaAbcDebito.isEmpty()) {
GerarCurvaAbcDebitosHelper helper = null;
Iterator iListaCurvaAbcDebito = listaCurvaAbcDebito.iterator();
Integer quantidadeLigacoesAnterior = 0;
BigDecimal percLigacosAcumuladoAnterior = new BigDecimal(0.00);
BigDecimal valorAnterior = new BigDecimal(0.00);
BigDecimal percValorAnterior = new BigDecimal(0.00);
while (iListaCurvaAbcDebito.hasNext()) {
helper = (GerarCurvaAbcDebitosHelper) iListaCurvaAbcDebito.next();
if (!helper.getQuantidadeLigacoes().equals(0) &&
!totalLigacoes.equals(0)) {
// Perc (1) - Perc das Ligacoes
BigDecimal qtdLigacoes = new BigDecimal(helper.getQuantidadeLigacoes());
BigDecimal porcento = new BigDecimal(100).setScale(2);
//BigDecimal totalGeralLigacoes = new BigDecimal(totalLigacoes);
BigDecimal totalGeralLigacoes = new BigDecimal(qtdLigacoesPorClassificacao);
BigDecimal percLigacoes = qtdLigacoes.multiply(porcento);
percLigacoes = percLigacoes.divide(totalGeralLigacoes, 2, RoundingMode.HALF_UP);
//BigDecimal percLigacoes = new BigDecimal(( (helper.getQuantidadeLigacoes() * 100) /
// totalLigacoes ));
helper.setPercLigacoes(percLigacoes);
// Ligacoes Acumuladas
helper.setLigacoesAcumuladas(
(helper.getQuantidadeLigacoes() + quantidadeLigacoesAnterior) );
//quantidadeLigacoesAnterior = helper.getQuantidadeLigacoes();
quantidadeLigacoesAnterior = helper.getLigacoesAcumuladas();
// Perc Acum (1) - Perc Acumulado por faixa
helper.setPercLigacoesAcumulado(
helper.getPercLigacoes().add(percLigacosAcumuladoAnterior));
percLigacosAcumuladoAnterior = helper.getPercLigacoesAcumulado();
// Perc (2) - Perc dos Debitos
if (!helper.getValor().equals(0) &&
!totalValorLigacoes.equals(0)) {
BigDecimal percDebitos = (BigDecimal) ( helper.getValor().multiply(porcento) ).setScale(2);
percDebitos = percDebitos.divide(totalValorLigacoes, 2, RoundingMode.HALF_UP);
helper.setPercValor(percDebitos);
}
// Valores Acumulados
helper.setValorAcumulado(
helper.getValor().add(valorAnterior));
valorAnterior = helper.getValorAcumulado();
// Perc Acum (2) - Somatorio do Perc (2)
helper.setPercValorAcumulado(
helper.getPercValor().add(percValorAnterior));
percValorAnterior = helper.getPercValorAcumulado();
}else {
// Perc (1) - Perc das Ligacoes
BigDecimal percLigacoes = new BigDecimal(0.00).setScale(2);
helper.setPercLigacoes(percLigacoes);
// Ligacoes Acumuladas
helper.setLigacoesAcumuladas(quantidadeLigacoesAnterior);
// Perc Acum (1) - Perc Acumulado por faixa
helper.setPercLigacoesAcumulado(percLigacosAcumuladoAnterior);
// Perc (2) - Perc dos Debitos
BigDecimal percDebitos = new BigDecimal(0.00).setScale(2);
helper.setPercValor(percDebitos);
// Valores Acumulados
helper.setValorAcumulado(valorAnterior);
// Perc Acum (2) - Somatorio do Perc (2)
helper.setPercValorAcumulado(percValorAnterior);
// Id da Gerencia Regional
helper.setIdGerenciaRegional(idGerenciaRegional);
// Nome da Gerencia Regional
helper.setNomeGerenciaRegional(nomeGerenciaRegional);
// Id da Localidade
helper.setIdLocalidade(idLocalidade);
// Nome da Localidade
helper.setNomeLocalidade(nomeLocalidade);
// Id do Setor Comercial
helper.setIdSetorComercial(idSetorComercial);
// Codigo do Setor Comercial
helper.setCodigoSetorComercial(codigoSetorComercial);
// Nome do Setor Comercial
helper.setNomeSetorComercial(nomeSetorComercial);
helper.setIdMunicipio(idMunicipio);
helper.setNomeMunicipio(nomeMunicipio);
}
/*
System.out.print(helper.getFaixaInicial() + " | " +
helper.getFaixaFinal() + " | " +
helper.getQuantidadeLigacoes() + " | " +
helper.getPercLigacoes() + " | " +
helper.getLigacoesAcumuladas() + " | " +
helper.getPercLigacoesAcumulado() + " | " +
helper.getValor() + " | " +
helper.getPercValor() + " | " +
helper.getValorAcumulado() + " | " +
helper.getPercValorAcumulado() + " | " +
helper.getValorMedio());
*/
listAcumulada.add(helper);
}
}
return listAcumulada;
}
@Override
public int calcularTotalRegistrosRelatorio() {
return 0;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioGerarCurvaAbcDebitos", this);
}
}