package gcom.relatorio.cadastro.localidade;
import gcom.batch.Relatorio;
import gcom.cadastro.localidade.FiltroQuadra;
import gcom.cadastro.localidade.Quadra;
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.ControladorException;
import gcom.util.agendadortarefas.AgendadorTarefas;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* <p>
*
* Title: GCOM
* </p>
* <p>
*
* Description: Sistema de Gest�o Comercial
* </p>
* <p>
*
* Copyright: Copyright (c) 2004
* </p>
* <p>
*
* Company: COMPESA - Companhia Pernambucana de Saneamento
* </p>
*
* @author Rafael Corr�a
* @created 9 de Setembro de 2005
* @version 1.0
*/
public class RelatorioManterQuadra extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
/**
* Constructor for the RelatorioManterQuadra object
*/
public RelatorioManterQuadra(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_QUADRA_MANTER);
}
@Deprecated
public RelatorioManterQuadra() {
super(null, "");
}
/**
* < <Descri��o do m�todo>>
*
* @param quadraParametros
* Description of the Parameter
* @return Descri��o do retorno
* @exception RelatorioVazioException
* Descri��o da exce��o
*/
public Object executar() throws TarefaException {
// ------------------------------------
Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
// ------------------------------------
// Recebe os par�metros que ser�o utilizados no relat�rio
FiltroQuadra filtroQuadra = (FiltroQuadra) getParametro("filtroQuadra");
Quadra quadraParametros = (Quadra) getParametro("quadraParametros");
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
// valor de retorno
byte[] retorno = null;
// cole��o de beans do relat�rio
List relatorioBeans = new ArrayList();
Fachada fachada = Fachada.getInstancia();
RelatorioManterQuadraBean relatorioBean = null;
// Cria adiciona os carregamentos dos objetos necess�rios para
// a impress�o do relat�rio
filtroQuadra
.adicionarCaminhoParaCarregamentoEntidade("setorComercial.localidade");
filtroQuadra.adicionarCaminhoParaCarregamentoEntidade("quadraPerfil");
filtroQuadra
.adicionarCaminhoParaCarregamentoEntidade("bacia.sistemaEsgoto");
filtroQuadra
.adicionarCaminhoParaCarregamentoEntidade("distritoOperacional");
filtroQuadra
.adicionarCaminhoParaCarregamentoEntidade("ibgeSetorCensitario");
filtroQuadra.adicionarCaminhoParaCarregamentoEntidade("zeis");
filtroQuadra.adicionarCaminhoParaCarregamentoEntidade("areaTipo");
filtroQuadra.adicionarCaminhoParaCarregamentoEntidade("rota");
filtroQuadra.setConsultaSemLimites(true);
// Nova consulta para trazer objeto completo
Collection quadrasNovas = fachada.pesquisar(filtroQuadra, Quadra.class
.getName());
Collections.sort((List) quadrasNovas, new Comparator() {
public int compare(Object a, Object b) {
String idLocal1 = ""
+ ((Quadra) a).getSetorComercial().getLocalidade()
.getId();
String idLocal2 = ""
+ ((Quadra) b).getSetorComercial().getLocalidade()
.getId();
if (idLocal1.compareTo(idLocal2) == 0) {
String idSetor1 = ""
+ ((Quadra) a).getSetorComercial().getId();
String idSetor2 = ""
+ ((Quadra) b).getSetorComercial().getId();
if (idSetor1.compareTo(idSetor2) == 0) {
Integer numQuadra1 = ((Quadra) a).getNumeroQuadra();
Integer numQuadra2 = ((Quadra) b).getNumeroQuadra();
return numQuadra1.compareTo(numQuadra2);
} else {
return idSetor1.compareTo(idSetor2);
}
} else {
return idLocal1.compareTo(idLocal2);
}
}
});
if (quadrasNovas != null && !quadrasNovas.isEmpty()) {
// coloca a cole��o de par�metros da analise no iterator
Iterator quadraNovaIterator = quadrasNovas.iterator();
while (quadraNovaIterator.hasNext()) {
Quadra quadraNova = (Quadra) quadraNovaIterator.next();
//Consulta do indicador da quadra face do Sistema Parametro e verifica se contem Quadra Face
SistemaParametro sistParametro = fachada.pesquisarParametrosDoSistema();
String indicadorQuadraFace = "" + sistParametro.getIndicadorQuadraFace();
Integer idQuadra = quadraNova.getId();
// Faz as valida��es dos campos necess�riose e formata a String
// para a forma como ir� aparecer no relat�rio
String tipoArea = "";
if (quadraNova.getAreaTipo() != null) {
tipoArea = quadraNova.getAreaTipo().getDescricaoAbreviada();
}
String indicadorRedeAgua = "";
if (quadraNova.getIndicadorRedeAgua() != null
&& quadraNova.getIndicadorRedeAgua().equals(
new Short("2"))) {
indicadorRedeAgua = "SIM";
} else if (quadraNova.getIndicadorRedeAgua() != null
&& quadraNova.getIndicadorRedeAgua().equals(
new Short("1"))) {
indicadorRedeAgua = "N�O";
} else {
indicadorRedeAgua = "PARCIAL";
}
String indicadorRedeEsgoto = "";
if (quadraNova.getIndicadorRedeEsgoto() != null
&& quadraNova.getIndicadorRedeEsgoto().equals(
new Short("2"))) {
indicadorRedeEsgoto = "SIM";
} else if (quadraNova.getIndicadorRedeEsgoto() != null
&& quadraNova.getIndicadorRedeEsgoto().equals(
new Short("1"))) {
indicadorRedeEsgoto = "N�O";
} else {
indicadorRedeEsgoto = "PARCIAL";
}
// Inicializa o construtor constitu�do dos campos
// necess�rios para a impress�o do relatorio
relatorioBean = new RelatorioManterQuadraBean(
// N�mero da Quadra
"" + quadraNova.getNumeroQuadra(),
// Descri��o Localidade
quadraNova.getSetorComercial().getLocalidade()
.getDescricao(),
// C�digo Setor Comercial
"" + quadraNova.getSetorComercial().getCodigo(),
// Descri��o Setor Comercial
quadraNova.getSetorComercial().getDescricao(),
// Quadra Perfil
quadraNova.getQuadraPerfil().getDescricao(),
// Tipo de �rea
tipoArea,
// Indicador Rede �gua
indicadorRedeAgua,
// Indicador Rede Esgoto
indicadorRedeEsgoto,
// Campos que ficam em branco para serem setados
// ap�s o construtor, evitando, assim, que ocorra
// erros
// devido ao fato de alguns objetos estarem nulos.
// Esses campos s�o: bacia, distrito operacional,
// setor censit�rio e zeis
"", "", "", "", "",
// Rota
quadraNova.getRota().getCodigo().toString(),
// Indicador Uso
quadraNova.getIndicadorUso().toString(),
//Indicador de Face da Quadra
indicadorQuadraFace,
//Id da Face da Quadra
null,
//Bacia da Quadra Face
null,
//Sistems Esgoto da Quadra Face
null,
//Id Quadra
""+ idQuadra,
//Rede de Agua da Quadra Face
null,
//Distrito Operacional da Quadra Face
null,
//Descricao Sistema Esgoto Quadra Face
null
);
// Bacia
if (quadraNova.getBacia() != null) {
relatorioBean.setSistemaEsgoto(quadraNova.getBacia()
.getSistemaEsgoto().getDescricao());
relatorioBean
.setBacia(quadraNova.getBacia().getDescricao());
}
// Distrito Operacional
if (quadraNova.getDistritoOperacional() != null) {
relatorioBean.setDistritoOperacional(quadraNova
.getDistritoOperacional().getDescricaoAbreviada());
}
// Setor Censit�rio
if (quadraNova.getIbgeSetorCensitario() != null) {
relatorioBean.setSetorCensitario(quadraNova
.getIbgeSetorCensitario().getDescricao());
}
// Zeis
if (quadraNova.getZeis() != null) {
relatorioBean.setZeis(quadraNova.getZeis()
.getDescricaoAbreviada());
}
//Verifica o parametro da empresa se trabalha com Quadra Face.
if ( indicadorQuadraFace.equals("1") ) {
//Pesquisa que retorna a Quadra face associada a Quadra
Collection<Object[]> quadraFace = null;
quadraFace = fachada.pesquisarQuadraFaceAssociadaQuadra(idQuadra);
if ( quadraFace != null && !quadraFace.isEmpty() ) {
Iterator quadraFaceNovaIterator = quadraFace.iterator();
while ( quadraFaceNovaIterator.hasNext() ) {
Object[] objeto = (Object[]) quadraFaceNovaIterator.next();
Integer numeroQuadraFace = null;
String baciaQuadraFace = "";
String distritoOperacionalQuadraFace = "";
Short indicadorAgua = null;
Short indicadorEsgoto = null;
String descricaoSistemaEsgotoQuadraFace = "";
String redeEsgoto = "";
String redeAgua = "";
//ID da Quadra Face
if ( objeto[0] != null ) {
numeroQuadraFace = (Integer) objeto[0];
}
//Bacia da Quadra Face
if ( objeto[1] != null ) {
baciaQuadraFace = (String) objeto[1];
}
//Indicador Rede De Esgoto
if ( objeto[2] != null ) {
indicadorEsgoto = (Short) objeto[2];
}
if (indicadorEsgoto.equals(new Short("2")) ){
redeEsgoto = "SIM";
} else if (indicadorEsgoto.equals(new Short("1")) ){
redeEsgoto = "N�O";
} else {
redeEsgoto = "PARCIAL";
}
//Indicador de Agua
if ( objeto[3] != null ) {
indicadorAgua = (Short) objeto[3];
}
if (indicadorAgua.equals(new Short("2")) ){
redeAgua = "SIM";
} else if (indicadorAgua.equals(new Short("1")) ){
redeAgua = "N�O";
} else {
redeAgua = "PARCIAL";
}
//Distrito Operacional da Quadra Face
if ( objeto[4] != null ) {
distritoOperacionalQuadraFace = ( String ) objeto[4];
}
//Sistema Esgoto Quadra Face
if ( objeto[5] != null ) {
descricaoSistemaEsgotoQuadraFace = (String) objeto[5];
}
//Inicializa o construtor constitu�do dos campos
// necess�rios para a impress�o do relatorio
relatorioBean = new RelatorioManterQuadraBean(
// N�mero da Quadra
"" + quadraNova.getNumeroQuadra(),
// Descri��o Localidade
quadraNova.getSetorComercial().getLocalidade()
.getDescricao(),
// C�digo Setor Comercial
"" + quadraNova.getSetorComercial().getCodigo(),
// Descri��o Setor Comercial
quadraNova.getSetorComercial().getDescricao(),
// Quadra Perfil
quadraNova.getQuadraPerfil().getDescricao(),
// Tipo de �rea
tipoArea,
// Indicador Rede �gua
indicadorRedeAgua,
// Indicador Rede Esgoto
indicadorRedeEsgoto,
// Campos que ficam em branco para serem setados
// ap�s o construtor, evitando, assim, que ocorra
// erros
// devido ao fato de alguns objetos estarem nulos.
// Esses campos s�o: bacia, distrito operacional,
// setor censit�rio e zeis
"", "", "", "", "",
// Rota
quadraNova.getRota().getCodigo().toString(),
// Indicador Uso
quadraNova.getIndicadorUso().toString(),
//Indicador de Face da Quadra
indicadorQuadraFace,
//Id da Face da Quadra
"" + numeroQuadraFace,
//Bacia da Quadra Face
baciaQuadraFace,
//Sistems Esgoto da Quadra Face
redeEsgoto,
//Id Quadra
""+ idQuadra,
//Rede de Agua da Quadra Face
redeAgua,
//Distrito Operacional da Quadra Face
distritoOperacionalQuadraFace,
//Descricao Sistema Esgoto Quadra Face
descricaoSistemaEsgotoQuadraFace
);
// Bacia
if (quadraNova.getBacia() != null) {
relatorioBean.setSistemaEsgoto(quadraNova.getBacia()
.getSistemaEsgoto().getDescricao());
relatorioBean
.setBacia(quadraNova.getBacia().getDescricao());
}
// Distrito Operacional
if (quadraNova.getDistritoOperacional() != null) {
relatorioBean.setDistritoOperacional(quadraNova
.getDistritoOperacional().getDescricaoAbreviada());
}
// Setor Censit�rio
if (quadraNova.getIbgeSetorCensitario() != null) {
relatorioBean.setSetorCensitario(quadraNova
.getIbgeSetorCensitario().getDescricao());
}
// Zeis
if (quadraNova.getZeis() != null) {
relatorioBean.setZeis(quadraNova.getZeis()
.getDescricaoAbreviada());
}
// adiciona o bean a cole��o
relatorioBeans.add(relatorioBean);
}
} else {
relatorioBeans.add(relatorioBean);
}
} else {
relatorioBeans.add(relatorioBean);
}
}
}
// Par�metros do relat�rio
Map parametros = new HashMap();
// adiciona os par�metros do relat�rio
// adiciona o laudo da an�lise
SistemaParametro sistemaParametro = fachada
.pesquisarParametrosDoSistema();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
parametros.put("quadra", quadraParametros.getNumeroQuadra() == -1 ? ""
: "" + quadraParametros.getNumeroQuadra());
parametros.put("idLocalidade", quadraParametros.getSetorComercial()
.getLocalidade().getId() == null ? "" : ""
+ quadraParametros.getSetorComercial().getLocalidade().getId());
parametros.put("nomeLocalidade", quadraParametros.getSetorComercial()
.getLocalidade().getDescricao());
parametros.put("idSetorComercial", quadraParametros.getSetorComercial()
.getCodigo() == 0 ? "" : ""
+ quadraParametros.getSetorComercial().getCodigo());
parametros.put("nomeSetorComercial", quadraParametros
.getSetorComercial().getDescricao());
if (quadraParametros.getRota() != null) {
parametros.put("codigoRota", quadraParametros.getRota().getCodigo().toString());
} else {
parametros.put("codigoRota", "");
}
String indicadorUso = "";
if (quadraParametros.getIndicadorUso() != null
&& !quadraParametros.getIndicadorUso().equals("")) {
if (quadraParametros.getIndicadorUso().equals(new Short("1"))) {
indicadorUso = "Ativo";
} else if (quadraParametros.getIndicadorUso()
.equals(new Short("2"))) {
indicadorUso = "Inativo";
}
}
parametros.put("indicadorUso", indicadorUso);
// cria uma inst�ncia do dataSource do relat�rio
RelatorioDataSource ds = new RelatorioDataSource((List) relatorioBeans);
retorno = this.gerarRelatorio(
ConstantesRelatorios.RELATORIO_QUADRA_MANTER, parametros, ds,
tipoFormatoRelatorio);
// ------------------------------------
// Grava o relat�rio no sistema
try {
persistirRelatorioConcluido(retorno, Relatorio.MANTER_QUADRA,
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() {
int retorno = 0;
retorno = Fachada.getInstancia().totalRegistrosPesquisa(
(FiltroQuadra) getParametro("filtroQuadra"),
Quadra.class.getName());
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioManterQuadra", this);
}
}