package gcom.relatorio.atendimentopublico;
import gcom.atendimentopublico.ligacaoagua.LigacaoAgua;
import gcom.atendimentopublico.ordemservico.ComandoOrdemSeletiva;
import gcom.atendimentopublico.ordemservico.FiltroServicoTipo;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.ServicoTipo;
import gcom.batch.Relatorio;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteFone;
import gcom.cadastro.empresa.Empresa;
import gcom.cadastro.empresa.FiltroEmpresa;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.projeto.FiltroProjeto;
import gcom.cadastro.projeto.Projeto;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.atendimentopublico.ordemservico.ImovelEmissaoOrdensSeletivasActionForm;
import gcom.micromedicao.hidrometro.FiltroHidrometro;
import gcom.micromedicao.hidrometro.Hidrometro;
import gcom.micromedicao.hidrometro.HidrometroInstalacaoHistorico;
import gcom.micromedicao.hidrometro.HidrometroProtecao;
import gcom.micromedicao.leitura.LeituraAnormalidade;
import gcom.micromedicao.medicao.FiltroMedicaoHistorico;
import gcom.micromedicao.medicao.MedicaoHistorico;
import gcom.micromedicao.medicao.MedicaoTipo;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.RelatorioDataSource;
import gcom.relatorio.atendimentopublico.bean.ImovelEmissaoOrdensSeletivasHelper;
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.ZipUtil;
import gcom.util.agendadortarefas.AgendadorTarefas;
import gcom.util.filtro.ParametroSimples;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
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 java.util.zip.ZipOutputStream;
/**
*
* [UC0711] - Emitir Ordem de Servico Seletiva
*
* @author Ivan S�rgio, Raphael Rossiter
* @date 06/11/2007, 16/04/2009
*/
public class RelatorioEmitirOrdemServicoSeletiva extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
/**
* Construtor da classe RelatorioEmitirOrdemServicoSeletiva
*/
public RelatorioEmitirOrdemServicoSeletiva(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_EMITIR_ORDEM_SERVICO_SELETIVA);
}
@Deprecated
public RelatorioEmitirOrdemServicoSeletiva() {
super(null, "");
}
public Object executar() throws TarefaException {
/*
* =====ATEN��O====
*
* ALTERA��ES FEITAS NO RELATORIO LEMBRAR DE VERIFICAR
* A NECESSIDADE DE ALTERAR NO OUTRO TIPO DE RELATORIO.
*
*/
// ------------------------------------
Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
// ------------------------------------
ImovelEmissaoOrdensSeletivasHelper helper = gerarObjetoHelper();
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
Usuario usuarioLogado = (Usuario)getParametro("usuarioLogado");
Fachada fachada = Fachada.getInstancia();
//Recupera o AnoMesFaturamento de Sistema Parametro
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
// Subtrai 1 mes do ano/mes faturamento para pegar sempre o mes fechado
String anoMesFaturamento = Util.subtraiAteSeisMesesAnoMesReferencia(
sistemaParametro.getAnoMesFaturamento(), 1).toString();
//[UC0711] Filtro para Emissao de Ordens Seletivas
List colecaoDadosRelatorio = (List) fachada.filtrarImovelEmissaoOrdensSeletivas(helper);
// cole��o de beans do relat�rio
List relatorioBeans = new ArrayList();
byte[] retorno = null;
// bean do relatorio
RelatorioEmitirOrdemServicoSeletivaBean relatorioEmitirOrdemServicoSeletivaBean = null;
// dados para o relatorio
if (colecaoDadosRelatorio != null && !colecaoDadosRelatorio.isEmpty()) {
//adicionado por Vivianne Sousa - 27/06/2011 - analista:Claudio Lira
//[SB0001]-Gerar Comando.
Integer idComandoOrdemSeletiva = fachada.gerarComando(helper,colecaoDadosRelatorio.size(),usuarioLogado);
Integer idTipoServico = null;
Integer idEmpresa = null;
Integer idOrdemServico = null;
Integer idImovel = null;
Imovel imovel = null;
Cliente cliente = null;
ClienteFone clienteFone = null;
boolean achou = false;
Collection colecaoEconomiasCategoria = null;
Categoria entCategoria = null;
Hidrometro hidrometro = null;
HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico = null;
ServicoTipo servTipo = new ServicoTipo();
int constante = 0;
StringBuilder documentoTxt = new StringBuilder();
if (helper.getTipoOrdem().equals(ImovelEmissaoOrdensSeletivasActionForm.TIPO_ORDEM_INSTALACAO)) {
constante = ServicoTipo.TIPO_EFETUAR_INSTALACAO_HIDROMETRO;
}else if (helper.getTipoOrdem().equals(ImovelEmissaoOrdensSeletivasActionForm.TIPO_ORDEM_SUBSTITUICAO)){
constante = ServicoTipo.TIPO_EFETUAR_SUBSTITUICAO_HIDROMETRO;
}else if (helper.getTipoOrdem().equals(ImovelEmissaoOrdensSeletivasActionForm.TIPO_INSPECAO_ANORMALIDADE)){
constante = ServicoTipo.TIPO_INSPECAO_ANORMALIDADE;
}else {
constante = ServicoTipo.TIPO_EFETUAR_REMOCAO_HIDROMETRO;
}
servTipo = pesquisaServicoTipo(constante, fachada, servTipo);
idTipoServico = servTipo.getId();
idEmpresa = Util.converterStringParaInteger(helper.getFirma());
/*************************************************************
* Faz o controle da ordem de impressao das p�ginas
*************************************************************/
Integer quantidadePaginas = colecaoDadosRelatorio.size();
int indiceColuna1 = 0;
int indiceColuna2 = ((Double) Math.ceil(Double.parseDouble(""+quantidadePaginas) / 2)).intValue(); // +1
int indice = 0;
/*************************************************************/
for (int i = 0; i < colecaoDadosRelatorio.size(); i++) {
/********************************************************
* Recupera o Objeto de acordo com o modulo
********************************************************/
if (i % 2 == 0) {
// Usa o Indice da Coluna 1
indice = indiceColuna1;
}else {
// Usa o Indice da Coluna 2
indice = indiceColuna2;
}
/********************************************************/
idImovel = (Integer) colecaoDadosRelatorio.get(indice);
String idProjeto = (String) getParametro("idProjeto");
// [UC0430] - Gerar Ordem de Servico
idOrdemServico = geraOrdemServico(idTipoServico, idEmpresa, idImovel, idProjeto,idComandoOrdemSeletiva);
//idOrdemServico = 9999;
/**
* Gera o Arquivo TXT das Ordens Seletivas
*/
// Numero de Ordem
documentoTxt.append(Util.completaStringComEspacoAEsquerda(
Util.adicionarZerosEsquedaNumero(9, idOrdemServico.toString()), 9));
// Data de Emissao
String dataAtual = Util.formatarData(new Date());
documentoTxt.append(Util.completaString(dataAtual, 10));
// Data de Validade
String dataValidade = "";
Date data = Util.adicionarNumeroDiasDeUmaData(new Date(), 90);
// Adiciona 0 ao dia se necessario
if (Util.getDiaMes(data) < 10) {
dataValidade = "0" + Util.getDiaMes(data) + "/";
}else {
dataValidade = Util.getDiaMes(data) + "/";
}
// Adiciona 0 ao mes se necessario
if (Util.getMes(data) < 10) {
dataValidade += "0" + Util.getMes(data) + "/" + Util.getAno(data);
}else {
dataValidade += Util.getMes(data) + "/" + Util.getAno(data);
}
documentoTxt.append(Util.completaString(dataValidade, 10));
// Matricula do Imovel
documentoTxt.append(Util.completaStringComEspacoAEsquerda(
Util.adicionarZerosEsquedaNumero(9, idImovel.toString()), 9));
// Inscricao
//imovel = new Imovel();
imovel = fachada.pesquisarImovel(idImovel);
documentoTxt.append(Util.completaString(imovel.getInscricaoFormatada(), 20));
/**
* Dados do Cliente
*/
cliente = new Cliente();
cliente = fachada.consultarClienteUsuarioImovel(imovel);
// Numero Telefone
String telefone = "";
if (!cliente.getClienteFones().isEmpty()) {
Iterator iClienteFone = cliente.getClienteFones().iterator();
clienteFone = new ClienteFone();
while (iClienteFone.hasNext() & !achou) {
clienteFone = (ClienteFone) iClienteFone.next();
if (clienteFone.getIndicadorTelefonePadrao().equals(ClienteFone.INDICADOR_FONE_PADRAO)) {
telefone = clienteFone.getTelefone();
achou = true;
}
}
}
documentoTxt.append(Util.completaString(telefone, 9));
// Nome do Cliente
documentoTxt.append(Util.completaString(cliente.getNome(), 40));
// CPF/CNPJ do Cliente
String cpfCnpj = "";
if (cliente.getCpf() != null) {
cpfCnpj = Util.completaStringComEspacoAEsquerda(cliente.getCpfFormatado(), 19);
}else if (cliente.getCnpj() != null) {
cpfCnpj = Util.completaStringComEspacoAEsquerda(cliente.getCnpjFormatado(), 19);
}else {
cpfCnpj = Util.completaStringComEspacoAEsquerda("", 19);
}
documentoTxt.append(cpfCnpj);
// Quantidade de Economias por Categoria
colecaoEconomiasCategoria = fachada.obterQuantidadeEconomiasCategoria(imovel);
if (colecaoEconomiasCategoria != null && !colecaoEconomiasCategoria.isEmpty()) {
Iterator icolecaoEconomiasCategoria = colecaoEconomiasCategoria.iterator();
entCategoria = new Categoria();
int x = 0;
while ( (icolecaoEconomiasCategoria.hasNext()) || (x < 4)) {
if (icolecaoEconomiasCategoria.hasNext()) {
entCategoria = (Categoria) icolecaoEconomiasCategoria.next();
documentoTxt.append(Util.completaStringComEspacoAEsquerda(
Util.adicionarZerosEsquedaNumero(4, entCategoria.
getQuantidadeEconomiasCategoria().toString()), 4));
//quantidadeEconomias += entCategoria.getQuantidadeEconomiasCategoria();
}else {
documentoTxt.append("0000");
}
x++;
}
//documentoTxt.append(Util.completaStringComEspacoAEsquerda(""+quantidadeEconomias, 4));
//quantidadeEconomias = 0;
}else {
documentoTxt.append("0000000000000000");
}
// Perfil do Imovel
documentoTxt.append(Util.completaString(imovel.getImovelPerfil().getDescricao(), 15));
// Endereco Abreviado do Imovel
String enderecoAbreviado = "";
enderecoAbreviado = fachada.pesquisarEndereco(idImovel);
documentoTxt.append(Util.completaString(enderecoAbreviado, 55));
// Situacao de Esgoto
documentoTxt.append(Util.completaString(imovel.getLigacaoEsgotoSituacao().getDescricao(), 10));
// Consumo Minimo
String consumoMinimo = "";
if (imovel.getLigacaoEsgoto() != null) {
if (imovel.getLigacaoEsgoto().getConsumoMinimo() != null) {
consumoMinimo = ""+imovel.getLigacaoEsgoto().getConsumoMinimo();
}
}
documentoTxt.append(Util.completaString(
Util.adicionarZerosEsquedaNumero(5, consumoMinimo), 5));
// Situacao de Agua
documentoTxt.append(Util.completaString(imovel.getLigacaoAguaSituacao().getDescricao(), 15));
/**
* Caso o Tipo de Ordem seja SUBSTITUICAO OU REMOCAO
*/
if ( servTipo.getConstanteFuncionalidadeTipoServico().intValue() ==
ServicoTipo.TIPO_EFETUAR_SUBSTITUICAO_HIDROMETRO ||
servTipo.getConstanteFuncionalidadeTipoServico().intValue() ==
ServicoTipo.TIPO_EFETUAR_REMOCAO_HIDROMETRO ) {
LigacaoAgua ligacaoAgua = imovel.getLigacaoAgua();
if (ligacaoAgua.getHidrometroInstalacaoHistorico() != null) {
//hidrometro = new Hidrometro();
hidrometro = ligacaoAgua.getHidrometroInstalacaoHistorico().getHidrometro();
Integer idHidrometro = hidrometro.getId();
// Cria o Filtro para Hidrometro
FiltroHidrometro filtroHidrometro = new FiltroHidrometro();
filtroHidrometro.adicionarParametro(new ParametroSimples(
FiltroHidrometro.ID, idHidrometro));
filtroHidrometro.adicionarCaminhoParaCarregamentoEntidade("hidrometroMarca");
filtroHidrometro.adicionarCaminhoParaCarregamentoEntidade("hidrometroCapacidade");
filtroHidrometro.adicionarCaminhoParaCarregamentoEntidade("hidrometroDiametro");
Collection<Hidrometro> colecaoHidrometro =
fachada.pesquisar(filtroHidrometro, Hidrometro.class.getName());
Iterator iColecaoHidrometro = colecaoHidrometro.iterator();
Hidrometro dadosHidrometro = (Hidrometro) iColecaoHidrometro.next();
// Marca Hidrometro
documentoTxt.append(Util.completaString(dadosHidrometro.getHidrometroMarca().
getDescricao(), 15));
// Capacidade Hidrometro
documentoTxt.append(Util.completaString(dadosHidrometro.getHidrometroCapacidade().
getDescricaoAbreviada(), 6));
// Numero do Hidrometro
documentoTxt.append(Util.completaString(hidrometro.getNumero(), 10));
// Diametro do Hidrometro
documentoTxt.append(Util.completaString(dadosHidrometro.getHidrometroDiametro().
getDescricaoAbreviada(), 5));
// Local de Instalacao do Hidrometro
hidrometroInstalacaoHistorico = ligacaoAgua.getHidrometroInstalacaoHistorico();
documentoTxt.append(Util.completaString(hidrometroInstalacaoHistorico.
getHidrometroLocalInstalacao().getDescricaoAbreviada(), 5));
// Leitura Hidrometro
FiltroMedicaoHistorico filtroMedicaoHistorico = new FiltroMedicaoHistorico();
filtroMedicaoHistorico.adicionarParametro(new ParametroSimples(
FiltroMedicaoHistorico.LIGACAO_AGUA_ID, ligacaoAgua.getId()));
if (helper.getTipoMedicao().equals(MedicaoTipo.LIGACAO_AGUA.toString())) {
filtroMedicaoHistorico.adicionarParametro(new ParametroSimples(
FiltroMedicaoHistorico.MEDICAO_TIPO_ID, MedicaoTipo.LIGACAO_AGUA));
}else if (helper.getTipoMedicao().equals(MedicaoTipo.POCO.toString())) {
filtroMedicaoHistorico.adicionarParametro(new ParametroSimples(
FiltroMedicaoHistorico.MEDICAO_TIPO_ID, MedicaoTipo.POCO));
}
filtroMedicaoHistorico.adicionarParametro(new ParametroSimples(
FiltroMedicaoHistorico.ANO_MES_REFERENCIA_FATURAMENTO, anoMesFaturamento));
filtroMedicaoHistorico.adicionarCaminhoParaCarregamentoEntidade("leituraAnormalidadeFaturamento");
Collection<MedicaoHistorico> colecaoMedicaoHistorico =
fachada.pesquisar(filtroMedicaoHistorico, MedicaoHistorico.class.getName());
MedicaoHistorico dadosMedicaoHistorico = null;
if (colecaoMedicaoHistorico != null && !colecaoMedicaoHistorico.isEmpty()) {
Iterator iColecaoMedicaoHistorico = colecaoMedicaoHistorico.iterator();
dadosMedicaoHistorico = (MedicaoHistorico) iColecaoMedicaoHistorico.next();
documentoTxt.append(Util.completaStringComEspacoAEsquerda(
Util.adicionarZerosEsquedaNumero(7, ""+dadosMedicaoHistorico.
getLeituraAtualFaturamento()), 7));
}else {
documentoTxt.append(Util.completaStringComEspacoAEsquerda(
Util.adicionarZerosEsquedaNumero(7, ""), 7));
}
// Data de Instalacao do Hidrometro
String dataInstalacao = "";
if (hidrometroInstalacaoHistorico.getDataInstalacao() != null) {
dataInstalacao = hidrometroInstalacaoHistorico.getDataInstalacao().toString();
dataInstalacao = dataInstalacao.substring(8, 10) + "/" +
dataInstalacao.substring(5, 7) + "/" +
dataInstalacao.substring(0, 4);
}
documentoTxt.append(Util.completaString(dataInstalacao, 10));
// Protecao Hidrometro
String protecao = "";
HidrometroProtecao hidrometroProtecao =
hidrometroInstalacaoHistorico.getHidrometroProtecao();
if (hidrometroProtecao.getId() != null) {
protecao = hidrometroProtecao.getDescricaoAbreviada();
}
documentoTxt.append(Util.completaString(protecao, 6));
// Cavalete Hidrometro
if (hidrometroInstalacaoHistorico.getIndicadorExistenciaCavalete().
equals(HidrometroInstalacaoHistorico.INDICADOR_CAVALETE_SIM.shortValue())) {
documentoTxt.append("SIM");
}else if (hidrometroInstalacaoHistorico.getIndicadorExistenciaCavalete().
equals(HidrometroInstalacaoHistorico.INDICADOR_CAVALETE_NAO.shortValue())) {
documentoTxt.append("NAO");
}
// Anormalidade
String descricaoAnormalidade = "";
if (dadosMedicaoHistorico != null) {
if (dadosMedicaoHistorico.getLeituraAnormalidadeFaturamento() != null) {
LeituraAnormalidade leitura = dadosMedicaoHistorico.getLeituraAnormalidadeFaturamento();
descricaoAnormalidade = leitura.getDescricao();
}
}
documentoTxt.append(Util.completaString(descricaoAnormalidade, 25));
}
}
// Nome da Firma
FiltroEmpresa filtroEmpresa = new FiltroEmpresa();
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.ID, helper.getFirma()));
filtroEmpresa.adicionarParametro(new ParametroSimples(
FiltroEmpresa.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection<Empresa> colecaoEmpresa = fachada.pesquisar(filtroEmpresa, Empresa.class.getName());
Iterator iColecaoEmpresa = colecaoEmpresa.iterator();
Empresa empresa = (Empresa) iColecaoEmpresa.next();
documentoTxt.append(Util.completaString(empresa.getDescricaoAbreviada(), 10));
//CRC4641 - adicionado por Vivianne Sousa - 22/06/2010
//analista: Ana Cristina
if(sistemaParametro.getCodigoEmpresaFebraban().
equals(SistemaParametro.CODIGO_EMPRESA_FEBRABAN_CAERN)){
//adiciona codigo da rota e sequ�ncia da rota
documentoTxt.append(Util.completaStringComEspacoAEsquerda(imovel.getQuadra().getRota().getCodigo().toString(), 5));
documentoTxt.append(Util.completaStringComEspacoAEsquerda(imovel.getNumeroSequencialRota().toString(), 5));
}
// Adiciona o Numero da Pagina
//documentoTxt.append("|" + (indice + 1) + "/" + quantidadePaginas);
documentoTxt.append(System.getProperty("line.separator"));
// Preenche o BEAN do Relatorio
relatorioEmitirOrdemServicoSeletivaBean = new RelatorioEmitirOrdemServicoSeletivaBean();
relatorioEmitirOrdemServicoSeletivaBean.setDescricaoTipoServico(helper.getTipoOrdem());
relatorioEmitirOrdemServicoSeletivaBean.setCodigoElo(helper.getElo());
relatorioEmitirOrdemServicoSeletivaBean.setNomeElo(helper.getNomeElo());
relatorioEmitirOrdemServicoSeletivaBean.setIdLocalidade(helper.getLocalidadeInicial());
relatorioEmitirOrdemServicoSeletivaBean.setNomeLocalidade(helper.getNomeLocalidadeInicial());
relatorioEmitirOrdemServicoSeletivaBean.setCodigoSetorComercial(helper.getCodigoSetorComercialInicial());
relatorioEmitirOrdemServicoSeletivaBean.setNomeSetorComercial(helper.getCodigoSetorComercialInicial());
relatorioEmitirOrdemServicoSeletivaBean.setQuadra(helper.getQuadraInicial());
relatorioEmitirOrdemServicoSeletivaBean.setIdFirma(helper.getFirma());
relatorioEmitirOrdemServicoSeletivaBean.setNomeFirma(helper.getNomeFirma());
relatorioEmitirOrdemServicoSeletivaBean.setInscricao(imovel.getInscricaoFormatada());
relatorioEmitirOrdemServicoSeletivaBean.setMatriculaImovel(""+imovel.getId());
relatorioEmitirOrdemServicoSeletivaBean.setEndereco(enderecoAbreviado);
relatorioEmitirOrdemServicoSeletivaBean.setNumeroOrdem(""+idOrdemServico);
if(idProjeto!=null && !idProjeto.equals("")){
FiltroProjeto filtroProjeto = new FiltroProjeto();
filtroProjeto.adicionarParametro(new ParametroSimples(FiltroProjeto.ID,idProjeto));
Collection projetos = fachada.pesquisar(filtroProjeto,Projeto.class.getName());
Projeto projeto = (Projeto) Util.retonarObjetoDeColecao(projetos);
if(projeto!=null){
relatorioEmitirOrdemServicoSeletivaBean.setNomeProjeto(projeto.getId()+" - "+ projeto.getNome());
}
}
relatorioBeans.add(relatorioEmitirOrdemServicoSeletivaBean);
/**
* Incrementa o Indice de acordo com o Modulo
*/
if (i % 2 == 0) {
// Incrementa o indice da Coluna 1
indiceColuna1++;
}else {
// Incrementa o indice da Coluna 2
indiceColuna2++;
}
}
// Ordena a Lista de acordo com a inscricao do Imovel
relatorioBeans = this.ordenaOrdemServicoInscricao(relatorioBeans);
// Gera o Arquivo TXT
if (documentoTxt != null && documentoTxt.length() > 0) {
try {
gerarArquivoTxt(
documentoTxt, helper.getTipoOrdem(), helper.getElo(),
helper.getLocalidadeInicial(), helper.getLocalidadeFinal(),
helper.getCodigoSetorComercialInicial(), helper.getCodigoSetorComercialFinal());
}catch (Exception e) {
e.printStackTrace();
throw new TarefaException("Erro ao gerar arquivo.");
}
}
// Par�metros do relat�rio
Map parametros = new HashMap();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
RelatorioDataSource ds = new RelatorioDataSource((List) relatorioBeans);
// exporta o relat�rio em pdf e retorna o array de bytes
retorno = gerarRelatorio(
ConstantesRelatorios.RELATORIO_EMITIR_ORDEM_SERVICO_SELETIVA,
parametros, ds, tipoFormatoRelatorio);
// ------------------------------------
// Grava o relat�rio no sistema
try {
persistirRelatorioConcluido(retorno, Relatorio.RELATORIO_EMITIR_ORDEM_SERVICO_SELETIVA,
idFuncionalidadeIniciada);
} catch (ControladorException e) {
e.printStackTrace();
throw new TarefaException("Erro ao gravar relat�rio no sistema", e);
}
// ------------------------------------
// retorna o relat�rio gerado
}else {
throw new ActionServletException("atencao.ordem_servico_ja_emitida");
}
//Par�metros do relat�rio
Map parametros = new HashMap();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
RelatorioDataSource ds = new RelatorioDataSource((List) relatorioBeans);
// exporta o relat�rio em pdf e retorna o array de bytes
retorno = gerarRelatorio(
ConstantesRelatorios.RELATORIO_EMITIR_ORDEM_SERVICO_SELETIVA,
parametros, ds, tipoFormatoRelatorio);
// ------------------------------------
// Grava o relat�rio no sistema
try {
persistirRelatorioConcluido(retorno, Relatorio.RELATORIO_EMITIR_ORDEM_SERVICO_SELETIVA,
idFuncionalidadeIniciada);
} catch (ControladorException e) {
e.printStackTrace();
throw new TarefaException("Erro ao gravar relat�rio no sistema", e);
}
return retorno;
}
private ImovelEmissaoOrdensSeletivasHelper gerarObjetoHelper() {
ImovelEmissaoOrdensSeletivasHelper helper = new ImovelEmissaoOrdensSeletivasHelper();
// PAR�METROS
helper.setTipoOrdem((String) getParametro("tipoOrdem"));
helper.setFirma((String) getParametro("firma"));
helper.setNomeFirma((String) getParametro("nomeFirma"));
helper.setQuantidadeMaxima((String) getParametro("quantidadeMaxima"));
helper.setIdImovel((String) getParametro("idImovel"));
helper.setElo((String) getParametro("elo"));
helper.setNomeElo((String) getParametro("nomeElo"));
helper.setGerenciaRegional((String) getParametro("gerenciaRegional"));
helper.setNomeGerenciaRegional((String) getParametro("nomeGerenciaRegional"));
helper.setUnidadeNegocio((String) getParametro("unidadeNegocio"));
helper.setNomeUnidadeNegocio((String) getParametro("nomeUnidadeNegocio"));
helper.setLocalidadeInicial((String) getParametro("localidadeInicial"));
helper.setNomeLocalidadeInicial((String) getParametro("nomeLocalidadeInicial"));
helper.setLocalidadeFinal((String) getParametro("localidadeFinal"));
helper.setNomeLocalidadeFinal((String) getParametro("nomeLocalidadeFinal"));
helper.setSetorComercialInicial((String) getParametro("setorComercialInicial"));
helper.setCodigoSetorComercialInicial((String) getParametro("codigoSetorComercialInicial"));
helper.setSetorComercialFinal((String) getParametro("setorComercialFinal"));
helper.setCodigoSetorComercialFinal((String) getParametro("codigoSetorComercialFinal"));
helper.setQuadraInicial((String) getParametro("quadraInicial"));
helper.setQuadraFinal((String) getParametro("quadraFinal"));
helper.setRotaInicial((String) getParametro("rotaInicial"));
helper.setRotaFinal((String) getParametro("rotaFinal"));
helper.setRotaSequenciaInicial((String) getParametro("rotaSequenciaInicial"));
helper.setRotaSequenciaFinal((String) getParametro("rotaSequenciaFinal"));
helper.setLogradouro((String) getParametro("logradouro"));
helper.setDescricaoLogradouro((String) getParametro("descricaoLogradouro"));
helper.setTipoEmissao((String) getParametro("sugestao"));
helper.setDescricaoComando((String)getParametro("descricaoComando"));
// CARACTER�STICAS
helper.setPerfilImovel((String) getParametro("perfilImovel"));
helper.setCategoria((String) getParametro("categoria"));
helper.setSubCategoria((String) getParametro("subCategoria"));
helper.setQuantidadeEconomiasInicial((String) getParametro("intervaloQuantidadeEconomiasInicial"));
helper.setQuantidadeEconomiasFinal((String) getParametro("intervaloQuantidadeEconomiasFinal"));
helper.setQuantidadeDocumentosInicial((String) getParametro("intervaloQuantidadeDocumentosInicial"));
helper.setQuantidadeDocumentosFinal((String) getParametro("intervaloQuantidadeDocumentosFinal"));
helper.setNumeroMoradoresInicial((String) getParametro("intervaloNumeroMoradoresInicial"));
helper.setNumeroMoradoresFinal((String) getParametro("intervaloNumeroMoradoresFinal"));
helper.setAreaConstruidaInicial((String) getParametro("intervaloAreaConstruidaInicial"));
helper.setAreaConstruidaFinal((String) getParametro("intervaloAreaConstruidaFinal"));
helper.setImovelCondominio((String) getParametro("imovelCondominio"));
helper.setMediaImovel((String) getParametro("mediaImovel"));
helper.setConsumoPorEconomia((String) getParametro("consumoPorEconomia"));
helper.setConsumoPorEconomiaFinal((String) getParametro("consumoPorEconomiaFinal"));
helper.setTipoMedicao((String) getParametro("tipoMedicao"));
helper.setSituacaoLigacaoAgua((String[])getParametro("situacaoLigacaoAgua"));
// HIDR�METRO
helper.setCapacidadeHidrometro((String[]) getParametro("capacidade"));
helper.setMarcaHidrometro((String) getParametro("marca"));
helper.setAnormalidadeHidrometro((String[]) getParametro("anormalidadeHidrometro"));
helper.setNumeroOcorrenciasAnormalidade((String) getParametro("numeroOcorrenciasConsecutivas"));
//helper.setMesAnoInstalacaoInicialHidrometro((String) getParametro("mesAnoInstalacao"));
helper.setMesAnoInstalacaoInicialHidrometro((String) getParametro("mesAnoInstalacaoInicial"));
helper.setMesAnoInstalacaoFinalHidrometro((String) getParametro("mesAnoInstalacaoFinal"));
if(getParametro("localInstalacao") != null){
helper.setLocalInstalacaoHidrometro((String) getParametro("localInstalacao"));
}
return helper;
}
private Integer geraOrdemServico(Integer idTipoServico, Integer idEmpresa, Integer idImovel, String idProjeto, Integer idComandoOrdemSeletiva) {
OrdemServico ordemServico = null;
ServicoTipo servicoTipo = null;
Empresa empresa = null;
Integer retorno = null;
Fachada fachada = Fachada.getInstancia();
// [UC0430] - Gerar Ordem de Servico
servicoTipo = new ServicoTipo();
servicoTipo.setId(idTipoServico);
ordemServico = new OrdemServico();
ordemServico.setServicoTipo(servicoTipo);
Imovel imovel = new Imovel();
imovel.setId(idImovel);
ordemServico.setImovel(imovel);
if(idProjeto!=null && !idProjeto.equals("")){
Projeto projeto = new Projeto();
Integer id = new Integer(idProjeto);
projeto.setId(id);
ordemServico.setProjeto(projeto);
}
if(idComandoOrdemSeletiva != null){
ComandoOrdemSeletiva comandoOrdemSeletiva = new ComandoOrdemSeletiva();
comandoOrdemSeletiva.setId(idComandoOrdemSeletiva);
ordemServico.setComandoOrdemSeletiva(comandoOrdemSeletiva);
}
// Alterado por Victor Cisneiros - 05/11/2008
// Verificar se a empresa � a principal
FiltroEmpresa filtroEmpresa = new FiltroEmpresa();
filtroEmpresa.adicionarParametro(new ParametroSimples(FiltroEmpresa.ID, idEmpresa));
Collection colecaoEmpresa = fachada.pesquisar(filtroEmpresa, Empresa.class.getName());
if (colecaoEmpresa == null || colecaoEmpresa.isEmpty()) {
throw new TarefaException("atencao.empresa_nao_encontra", idEmpresa.toString());
}
empresa = (Empresa) Util.retonarObjetoDeColecao(colecaoEmpresa);
UnidadeOrganizacional unidadeOrganizacional = new UnidadeOrganizacional();
// Caso a empresa seja principal (indicadorEmpresaPrincipal = 1)
// obter a unidade a partir da unidade que representa a localidade do imovel
if (empresa.getIndicadorEmpresaPrincipal() != null &&
empresa.getIndicadorEmpresaPrincipal().equals(Empresa.INDICADOR_EMPRESA_PRINCIPAL)) {
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, idImovel));
Collection pesquisaImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName());
if (pesquisaImovel == null || pesquisaImovel.isEmpty()) {
throw new TarefaException("Imovel com id " + idImovel + "nao encontrado");
}
Imovel im = (Imovel) Util.retonarObjetoDeColecao(pesquisaImovel);
Integer idLocalidade = im.getLocalidade().getId();
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.EMPRESA, idEmpresa));
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID_LOCALIDADE, idLocalidade));
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoUnidadeOrganizacional = fachada.pesquisar(
filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName());
if (colecaoUnidadeOrganizacional != null && !colecaoUnidadeOrganizacional.isEmpty()) {
//[FS0011]-Verificar exist�ncia de mais de uma unidade correspondente � empresa
if(colecaoUnidadeOrganizacional.size() > 1){
throw new TarefaException("atencao.unidade_organizacional_dupla_correspondente_empresa");
}
unidadeOrganizacional = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadeOrganizacional);
}else {
throw new TarefaException("atencao.unidade_organizacional_nao_encontrada_empresa", empresa.getId().toString());
}
} else {
// Recupera a Unidade Organizacional da Empresa
unidadeOrganizacional.setEmpresa(empresa);
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.EMPRESA, empresa));
filtroUnidadeOrganizacional.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
Collection<UnidadeOrganizacional> colecaoUnidadeOrganizacional =
fachada.pesquisar(filtroUnidadeOrganizacional, UnidadeOrganizacional.class.getName());
if (colecaoUnidadeOrganizacional != null && !colecaoUnidadeOrganizacional.isEmpty()) {
//[FS0011]-Verificar exist�ncia de mais de uma unidade correspondente � empresa
if(colecaoUnidadeOrganizacional.size() > 1){
throw new TarefaException("atencao.unidade_organizacional_dupla_correspondente_empresa");
}
Iterator iColecaoUnidadeOrganizacional = colecaoUnidadeOrganizacional.iterator();
unidadeOrganizacional = (UnidadeOrganizacional) iColecaoUnidadeOrganizacional.next();
}else {
throw new TarefaException("atencao.unidade_organizacional_nao_encontrada_empresa", empresa.getId().toString());
}
}
retorno = fachada.gerarOrdemServicoSeletiva(
ordemServico, unidadeOrganizacional, imovel, Usuario.USUARIO_BATCH);
return retorno;
}
private void gerarArquivoTxt(
StringBuilder txtArquivo,
String tipoOrdem,
String idElo,
String idLocalidadeIncial,
String idLocalidadeFinal,
String codigoSetorComercialInicial,
String codigoSetorComercialFinal) throws IOException, FileNotFoundException, Exception {
if (txtArquivo != null && txtArquivo.length() != 0) {
String nomeZip = "ORDEM_DE_" + tipoOrdem + "_DE_HIDROMETRO_";
if (idElo != null && !idElo.equals("")) {
nomeZip += idElo + "_" + Util.formatarDataComHora(new Date()).replace("/", "_").replace(":", "_");
}else if (idLocalidadeIncial != null && !idLocalidadeIncial.equals("") &&
idLocalidadeFinal != null && !idLocalidadeFinal.equals("") &&
codigoSetorComercialInicial != null && !codigoSetorComercialInicial.equals("") &&
codigoSetorComercialFinal != null && !codigoSetorComercialFinal.equals("")) {
nomeZip += idLocalidadeIncial + "_" + idLocalidadeFinal + "_" +
codigoSetorComercialInicial + "_" + codigoSetorComercialFinal + "_" +
Util.formatarDataComHora(new Date()).replace("/", "_").replace(":", "_");
}else if (idLocalidadeIncial != null && !idLocalidadeIncial.equals("") &&
idLocalidadeFinal != null && !idLocalidadeFinal.equals("")) {
nomeZip += idLocalidadeIncial + "_" + idLocalidadeFinal + "_" +
Util.formatarDataComHora(new Date()).replace("/", "_").replace(":", "_");
}else {
nomeZip += Util.formatarDataComHora(new Date()).replace("/", "_").replace(":", "_");
}
nomeZip = nomeZip.replace(" ", "_");
txtArquivo.append("\u0004");
try {
// criar o arquivo zip
File compactado = new File(nomeZip + ".zip"); // nomeZip
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compactado));
File leitura = new File(nomeZip + ".txt");
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(leitura.getAbsolutePath())));
out.write(txtArquivo.toString());
out.close();
ZipUtil.adicionarArquivo(zos, leitura);
// close the stream
zos.close();
leitura.delete();
} catch (IOException e) {
throw new IOException();
} catch (Exception e) {
throw new Exception(e);
}
}
}
/**
* Ordena a Ordem de Servico por Inscricao
*
* @param listaOrdemServico
* @return
*/
public List ordenaOrdemServicoInscricao(List listaOrdemServico) {
Collections.sort((List) listaOrdemServico, new Comparator() {
public int compare(Object a, Object b) {
String inscricao1 = ((RelatorioEmitirOrdemServicoSeletivaBean) a).getInscricao().replace(".", "");
String inscricao2 = ((RelatorioEmitirOrdemServicoSeletivaBean) b).getInscricao().replace(".", "");
if (inscricao1 == null || inscricao1.equals("")) {
return -1;
} else {
return inscricao1.compareTo(inscricao2);
}
}
});
return listaOrdemServico;
}
@Override
public int calcularTotalRegistrosRelatorio() {
int retorno = 0;
retorno = Fachada
.getInstancia()
.filtrarImovelEmissaoOrdensSeletivasCount(gerarObjetoHelper());
if(retorno==0){
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioEmitirOrdemServicoSeletiva", this);
}
/**
* Retorna o servico tipo passando o numero da constante
*
* @author Arthur Carvalho
* @date 16/04/2010
*
* @param numeroConstanteServicoTipo
* @param fachada
* @return
*/
public ServicoTipo pesquisaServicoTipo(int numeroConstanteServicoTipo, Fachada fachada ,
ServicoTipo servicoTipo){
FiltroServicoTipo filtroServicoTipo = new FiltroServicoTipo();
filtroServicoTipo.adicionarParametro( new ParametroSimples(
FiltroServicoTipo.CONSTANTE_FUNCIONALIDADE_TIPO_SERVICO, numeroConstanteServicoTipo) );
Collection colecaoServicoTipo = fachada.pesquisar(filtroServicoTipo, ServicoTipo.class.getName() );
servicoTipo = (ServicoTipo) Util.retonarObjetoDeColecao(colecaoServicoTipo);
return servicoTipo;
}
}