/*
   * Métodos que farão a pesquisa da localidade ou do município
   * informado pelo usuário (Pressionando a telca ENTER).
   */
  private void pesquisarLocalidade(
      HttpServletRequest request, GerarRelatorioEvolucaoContasAReceberContabilActionForm form) {

    Fachada fachada = Fachada.getInstancia();

    FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
    filtroLocalidade.adicionarParametro(
        new ParametroSimples(FiltroLocalidade.ID, form.getCodigoLocalidade()));

    Collection pesquisa = fachada.pesquisar(filtroLocalidade, Localidade.class.getName());

    if (pesquisa != null && !pesquisa.isEmpty()) {
      Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(pesquisa);

      form.setCodigoLocalidade("" + localidade.getId());
      form.setDescricaoLocalidade(localidade.getDescricao());
    } else {
      form.setCodigoLocalidade("");
      form.setDescricaoLocalidade("Localidade Inexistente");
    }
  }
  /**
   * < <Descrição do método>>
   *
   * @param bairros Description of the Parameter
   * @param bairroParametros 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();
    // ------------------------------------

    Integer idGerenciaRegional = (Integer) getParametro("idGerenciaRegional");
    Integer idUnidadeNegocio = (Integer) getParametro("idUnidadeNegocio");
    Integer idLocalidadeInicial = (Integer) getParametro("idLocalidadeInicial");
    Integer idLocalidadeFinal = (Integer) getParametro("idLocalidadeFinal");
    Integer idSetorComercialInicial = (Integer) getParametro("idSetorComercialInicial");
    Integer idSetorComercialFinal = (Integer) getParametro("idSetorComercialFinal");
    Integer idImovel = (Integer) getParametro("idImovelPerfil");
    Integer selecionar = (Integer) getParametro("selecionar");
    Integer referencia = (Integer) getParametro("referencia");
    Integer idImovelPerfil = (Integer) getParametro("idImovelPerfil");
    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();

    RelatorioAnaliseImovelCorporativoGrandeBean relatorioBean = null;

    Collection colecaoRelatorioAnaliseImovelCorporativoGrandeHelper =
        fachada.pesquisarDadosRelatorioAnaliseImovelCorporativoGrande(
            idGerenciaRegional,
            idUnidadeNegocio,
            idLocalidadeInicial,
            idLocalidadeFinal,
            idSetorComercialInicial,
            idSetorComercialFinal,
            referencia,
            idImovel,
            selecionar);

    // se a coleção de parâmetros da analise não for vazia
    if (colecaoRelatorioAnaliseImovelCorporativoGrandeHelper != null
        && !colecaoRelatorioAnaliseImovelCorporativoGrandeHelper.isEmpty()) {

      // coloca a coleção de parâmetros da analise no iterator
      Iterator colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator =
          colecaoRelatorioAnaliseImovelCorporativoGrandeHelper.iterator();

      // laço para criar a coleção de parâmetros da analise
      while (colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator.hasNext()) {

        GerarRelatorioAnaliseImovelCorporativoGrandeHelper helper =
            (GerarRelatorioAnaliseImovelCorporativoGrandeHelper)
                colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator.next();

        // Faz as validações dos campos necessáriose e formata a String
        // para a forma como irá aparecer no relatório

        // Gerência Regional
        String gerenciaRegional = "";

        if (helper.getIdGerenciaRegional() != null) {
          gerenciaRegional =
              helper.getIdGerenciaRegional() + " - " + helper.getNomeGerenciaRegional();
        }

        // Unidade de Negócio
        String unidadeNegocio = "";

        if (helper.getIdUnidadeNegocio() != null) {
          unidadeNegocio = helper.getIdUnidadeNegocio() + " - " + helper.getNomeUnidadeNegocio();
        }

        // Localidade
        String localidade = "";

        if (helper.getIdLocalidade() != null) {
          localidade = helper.getIdLocalidade() + " - " + helper.getNomeLocalidade();
        }

        // Setor Comercial
        String setorComercial = "";
        String idSetorComercial = "";

        if (helper.getIdSetorComercial() != null) {
          setorComercial = helper.getCodigoSetorComercial().toString();
          idSetorComercial = helper.getIdSetorComercial().toString();
        }

        // Imóvel, Endereço e Categoria
        String matriculaImovel = "";
        String endereco = "";
        String inscricao = "";

        if (helper.getIdImovel() != null) {
          matriculaImovel = helper.getIdImovel().toString();
          Imovel imovel = new Imovel();
          imovel.setId(helper.getIdImovel());
          endereco = fachada.pesquisarEndereco(helper.getIdImovel());
          inscricao = fachada.pesquisarInscricaoImovel(helper.getIdImovel());
        }

        // Capacidade do Hidrômetro
        String capacidadeHidrometro = "";

        if (helper.getCapacidadeHidrometro() != null) {
          capacidadeHidrometro = helper.getCapacidadeHidrometro();
        }

        String consumoMedio = "";

        if (helper.getConsumoMedio() != null) {
          consumoMedio = helper.getConsumoMedio().toString();
        }

        String consumoFaturado = "";

        if (helper.getConsumoFaturado() != null) {
          consumoFaturado = helper.getConsumoFaturado().toString();
        }

        String tipoLigacao = "";

        if (helper.getIdTipoLigacao() != null) {
          if (helper.getIdTipoLigacao().equals(1)) {
            tipoLigacao = "ÁGUA";
          } else {
            tipoLigacao = "ESGOTO";
          }
        }

        relatorioBean =
            new RelatorioAnaliseImovelCorporativoGrandeBean(

                // Unidade de Negócio
                unidadeNegocio,

                // Gerência Regional
                gerenciaRegional,

                // Localidade
                localidade,

                // Id do Setor Comercial
                idSetorComercial,

                // Setor Comercial
                setorComercial,

                // Inscrição
                inscricao,

                // Imóvel
                matriculaImovel,

                // Endereço
                endereco,

                // Capacidade do Hidrômetro
                capacidadeHidrometro,

                // Consumo Médio
                consumoMedio,

                // Consumo Faturado
                consumoFaturado,

                // Tipo de ligação
                tipoLigacao);

        // adiciona o bean a coleção
        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("mesAno", Util.formatarAnoMesParaMesAno(referencia));

    if (idUnidadeNegocio != null) {
      FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
      filtroUnidadeNegocio.adicionarParametro(
          new ParametroSimples(FiltroUnidadeNegocio.ID, idUnidadeNegocio));
      Collection colecaoUnidadeNegocio =
          fachada.pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
      UnidadeNegocio unidadeNegocio =
          (UnidadeNegocio) Util.retonarObjetoDeColecao(colecaoUnidadeNegocio);
      parametros.put(
          "unidadeNegocio", unidadeNegocio.getNomeAbreviado() + "-" + unidadeNegocio.getNome());
    } else {
      parametros.put("unidadeNegocio", "");
    }

    if (idLocalidadeInicial != null) {
      FiltroLocalidade filtroLocalidadeInicial = new FiltroLocalidade();
      filtroLocalidadeInicial.adicionarParametro(
          new ParametroSimples(FiltroLocalidade.ID, idLocalidadeInicial));
      Collection colecaoLocalidadeInicial =
          fachada.pesquisar(filtroLocalidadeInicial, Localidade.class.getName());
      Localidade localidadeInicial =
          (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidadeInicial);
      parametros.put(
          "localidadeInicial", localidadeInicial.getId() + "-" + localidadeInicial.getDescricao());

    } else {
      parametros.put("localidadeInicial", "");
    }

    if (idLocalidadeInicial != null) {
      FiltroLocalidade filtroLocalidadeFinal = new FiltroLocalidade();
      filtroLocalidadeFinal.adicionarParametro(
          new ParametroSimples(FiltroLocalidade.ID, idLocalidadeInicial));
      Collection colecaoLocalidadeFinal =
          fachada.pesquisar(filtroLocalidadeFinal, Localidade.class.getName());
      Localidade localidadeFinal = (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidadeFinal);
      parametros.put(
          "localidadeFinal", localidadeFinal.getId() + "-" + localidadeFinal.getDescricao());

    } else {
      parametros.put("localidadeFinal", "");
    }

    if (idGerenciaRegional != null) {
      FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
      filtroGerenciaRegional.adicionarParametro(
          new ParametroSimples(FiltroGerenciaRegional.ID, idGerenciaRegional));
      Collection colecaoGerenciaRegional =
          fachada.pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
      GerenciaRegional gerenciaRegional =
          (GerenciaRegional) Util.retonarObjetoDeColecao(colecaoGerenciaRegional);
      parametros.put(
          "gerenciaRegional",
          gerenciaRegional.getNomeAbreviado() + "-" + gerenciaRegional.getNome());
    } else {
      parametros.put("gerenciaRegional", "");
    }

    if (idSetorComercialInicial != null) {
      FiltroSetorComercial filtroSetorComercialInicial = new FiltroSetorComercial();
      filtroSetorComercialInicial.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.ID, idSetorComercialInicial));
      Collection colecaoSetorComercialInicial =
          fachada.pesquisar(filtroSetorComercialInicial, SetorComercial.class.getName());
      SetorComercial setorComercialInicial =
          (SetorComercial) Util.retonarObjetoDeColecao(colecaoSetorComercialInicial);
      parametros.put(
          "setorComercialInicial",
          setorComercialInicial.getId() + "-" + setorComercialInicial.getDescricao());
    } else {
      parametros.put("setorComercialInicial", "");
    }

    if (idSetorComercialInicial != null) {
      FiltroSetorComercial filtroSetorComercialFinal = new FiltroSetorComercial();
      filtroSetorComercialFinal.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.ID, idSetorComercialInicial));
      Collection colecaoSetorComercialFinal =
          fachada.pesquisar(filtroSetorComercialFinal, SetorComercial.class.getName());
      SetorComercial setorComercialFinal =
          (SetorComercial) Util.retonarObjetoDeColecao(colecaoSetorComercialFinal);
      parametros.put(
          "setorComercialFinal",
          setorComercialFinal.getId() + "-" + setorComercialFinal.getDescricao());
    } else {
      parametros.put("setorComercialFinal", "");
    }

    if (idImovelPerfil != null) {
      FiltroImovelPerfil filtroImovelPerfil = new FiltroImovelPerfil();
      filtroImovelPerfil.adicionarParametro(
          new ParametroSimples(FiltroImovelPerfil.ID, idImovelPerfil));
      Collection colecaoImovelPerfil =
          fachada.pesquisar(filtroImovelPerfil, ImovelPerfil.class.getName());
      ImovelPerfil imovelPerfil = (ImovelPerfil) Util.retonarObjetoDeColecao(colecaoImovelPerfil);
      parametros.put(
          "imovelPerfil", "ANÁLISE DO IMÓVEIS " + imovelPerfil.getDescricao().toUpperCase() + "S");
    } else {
      parametros.put("imovelPerfil", "");
    }

    parametros.put("tipoFormatoRelatorio", "R0887");

    // cria uma instância do dataSource do relatório
    RelatorioDataSource ds = new RelatorioDataSource(relatorioBeans);

    retorno =
        gerarRelatorio(
            ConstantesRelatorios.RELATORIO_ANALISE_IMOVEL_CORPORATIVO_GRANDE,
            parametros,
            ds,
            tipoFormatoRelatorio);

    // ------------------------------------
    // Grava o relatório no sistema
    try {
      persistirRelatorioConcluido(
          retorno, Relatorio.ANALISE_IMOVEL_CORPORATIVO_GRANDE, idFuncionalidadeIniciada);
    } catch (ControladorException e) {
      e.printStackTrace();
      throw new TarefaException("Erro ao gravar relatório no sistema", e);
    }
    // ------------------------------------

    // retorna o relatório gerado
    return retorno;
  }
  /**
   * < <Descrição do método>>
   *
   * @param actionMapping Descrição do parâmetro
   * @param actionForm Descrição do parâmetro
   * @param httpServletRequest Descrição do parâmetro
   * @param httpServletResponse Descrição do parâmetro
   * @return Descrição do retorno
   */
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = actionMapping.findForward("exibirPagina");

    // obtendo uma instancia da sessao
    HttpSession sessao = httpServletRequest.getSession(false);

    if (httpServletRequest.getParameter("habilitaBotao") != null) {
      if (httpServletRequest.getParameter("habilitaBotao").equalsIgnoreCase("S")) {
        sessao.removeAttribute("bloqueiaSetor");
        sessao.removeAttribute("bloqueiaQuadra");
        sessao.removeAttribute("bloqueiaLocalidade");
      } else if (httpServletRequest.getParameter("habilitaBotao").equalsIgnoreCase("N")) {
        sessao.setAttribute("bloqueiaSetor", "s");
        sessao.setAttribute("bloqueiaQuadra", "s");
        sessao.setAttribute("bloqueiaLocalidade", "s");
        sessao.setAttribute("colecaoLocalidades", new ArrayList());
        sessao.setAttribute("colecaoSetor", new ArrayList());
        sessao.setAttribute("colecaoQuadras", new ArrayList());
      }
    }

    if (httpServletRequest.getParameter("idRemocaoLocalidade") != null) {
      String idLocalidade = httpServletRequest.getParameter("idRemocaoLocalidade");
      Collection colecaoLocalidades = (Collection) sessao.getAttribute("colecaoLocalidades");
      Iterator iterator = colecaoLocalidades.iterator();
      while (iterator.hasNext()) {
        Localidade localidade = (Localidade) iterator.next();
        String id = localidade.getId().toString();
        if (idLocalidade.equalsIgnoreCase(id)) {
          iterator.remove();
          break;
        }
      }
      sessao.setAttribute("colecaoLocalidades", colecaoLocalidades);
      if (colecaoLocalidades.size() > 1) {
        sessao.setAttribute("bloqueiaSetor", "s");
        sessao.setAttribute("bloqueiaQuadra", "s");
      } else if (colecaoLocalidades.size() == 1) {
        sessao.removeAttribute("bloqueiaSetor");
        sessao.removeAttribute("bloqueiaQuadra");
      }
    } else if (httpServletRequest.getParameter("idRemocaoSetor") != null) {
      String idSetor = httpServletRequest.getParameter("idRemocaoSetor");
      Collection colecaoSetor = (Collection) sessao.getAttribute("colecaoSetor");
      Iterator iterator = colecaoSetor.iterator();
      while (iterator.hasNext()) {
        SetorComercial setorComercial = (SetorComercial) iterator.next();
        String codigo = setorComercial.getCodigo() + "";
        if (idSetor.equalsIgnoreCase(codigo)) {
          iterator.remove();
          break;
        }
      }
      sessao.setAttribute("colecaoSetor", colecaoSetor);
      if (colecaoSetor.size() > 1) {
        sessao.setAttribute("bloqueiaQuadra", "s");
        sessao.setAttribute("bloqueiaLocalidade", "s");
      } else if (colecaoSetor.size() == 1) {
        sessao.removeAttribute("bloqueiaQuadra");
        sessao.setAttribute("bloqueiaLocalidade", "s");
      } else if (colecaoSetor.isEmpty()) {
        sessao.removeAttribute("bloqueiaLocalidade");
      }
    } else if (httpServletRequest.getParameter("idRemocaoQuadra") != null) {
      String idQuadra = httpServletRequest.getParameter("idRemocaoQuadra");
      Collection colecaoQuadras = (Collection) sessao.getAttribute("colecaoQuadras");
      Iterator iterator = colecaoQuadras.iterator();
      while (iterator.hasNext()) {
        Quadra quadra = (Quadra) iterator.next();
        String id = quadra.getNumeroQuadra() + "";
        if (idQuadra.equalsIgnoreCase(id)) {
          iterator.remove();
          break;
        }
      }
      if (colecaoQuadras.isEmpty()) {
        sessao.removeAttribute("bloqueiaSetor");
      } else {
        sessao.setAttribute("bloqueiaSetor", "s");
      }
      sessao.setAttribute("colecaoQuadras", colecaoQuadras);
    }

    return retorno;
  }
  @SuppressWarnings({"unchecked", "resource"})
  public void finalizarMovimentacao(
      DataInputStream data, HttpServletResponse response, OutputStream out, int tipoFinalizacao)
      throws IOException {

    Fachada fachada = Fachada.getInstancia();
    long imei = data.readLong();
    Integer idRota = 0;

    InputStreamReader reader = new InputStreamReader(data);
    InputStreamReader readerOriginal = new InputStreamReader(data);
    BufferedReader buffer = new BufferedReader(reader);
    BufferedReader bufferOriginal = new BufferedReader(readerOriginal);

    Integer codRota = null;
    Integer setorComercial = null;
    Integer idLocalidade = null;
    Integer numeroSequenciaArquivo = null;

    try {
      String registro0 = buffer.readLine();

      int indcFinalizacao = Integer.parseInt(registro0.substring(1, 2));
      idLocalidade = Integer.parseInt(registro0.substring(2, 5));
      setorComercial = Integer.parseInt(registro0.substring(5, 8));
      codRota = Integer.parseInt(registro0.substring(8, 15));

      if (registro0.length() == 17) {
        numeroSequenciaArquivo = Integer.parseInt(registro0.substring(15, 17));
        idRota =
            fachada.obterIdRotaPorSetorComercialELocalidade(codRota, setorComercial, idLocalidade);
      } else {
        idRota = Integer.parseInt(registro0.substring(15, 19));
        numeroSequenciaArquivo = Integer.parseInt(registro0.substring(19, 21));
      }

      if (idRota == null) {
        String primeiroRegistro = buffer.readLine();
        Integer matricula = Integer.parseInt(primeiroRegistro.substring(1, 10));

        FiltroImovel filtroImovel = new FiltroImovel();
        filtroImovel.adicionarCaminhoParaCarregamentoEntidade("rotaAlternativa.setorComercial");
        filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, matricula));

        Collection<Imovel> colImovel =
            Fachada.getInstancia().pesquisar(filtroImovel, Imovel.class.getName());
        Imovel imo = (Imovel) Util.retonarObjetoDeColecao(colImovel);

        idLocalidade = imo.getLocalidade().getId();
        setorComercial = imo.getRotaAlternativa().getSetorComercial().getCodigo();
        codRota = imo.getRotaAlternativa().getCodigo().intValue();

        idRota =
            fachada.obterIdRotaPorSetorComercialELocalidade(codRota, setorComercial, idLocalidade);

        String linha;
        StringBuffer arquivo = new StringBuffer();
        arquivo.append(primeiroRegistro + "\n");

        while ((linha = buffer.readLine()) != null) {
          arquivo.append(linha + "\n");
        }

        InputStream is = new ByteArrayInputStream(arquivo.toString().getBytes());
        InputStreamReader readerRetorno = new InputStreamReader(is);
        buffer = new BufferedReader(readerRetorno);
      }

      Integer anoMesFaturamento = fachada.retornaAnoMesFaturamentoGrupoDaRota(idRota);

      Localidade localidade = new Localidade(idLocalidade);

      ArquivoTextoRetornoIS arquivoRetorno = new ArquivoTextoRetornoIS();
      arquivoRetorno.setAnoMesReferencia(anoMesFaturamento);
      arquivoRetorno.setCodigoRota(codRota);
      arquivoRetorno.setCodigoSetorComercial(setorComercial);
      arquivoRetorno.setLocalidade(localidade);
      arquivoRetorno.setNomeArquivo(fachada.obterNomeArquivoRetorno(arquivoRetorno).toString());
      arquivoRetorno.setTempoRetornoArquivo(new Date());
      arquivoRetorno.setTipoFinalizacao(new Short(tipoFinalizacao + ""));
      arquivoRetorno.setUltimaAlteracao(new Date());

      logger.info(
          "Finalizando arquivo Mobile [Imei="
              + imei
              + ", Localidade: "
              + localidade.getId()
              + ", Setor: "
              + setorComercial
              + ", Rota: "
              + codRota
              + "]");

      if (indcFinalizacao == FINALIZAR_LEITURA_ARQUIVO_IMOVEIS_FALTANDO) {
        buffer = fachada.removerImoveisJaProcessadosBufferImpressaoSimultanea(idRota, buffer);
      }

      RetornoAtualizarFaturamentoMovimentoCelularHelper retorno = null;

      if (buffer != null) {
        retorno =
            fachada.atualizarFaturamentoMovimentoCelular(
                buffer, false, true, idRota, arquivoRetorno, bufferOriginal);
      }

      if (retorno != null
          && (retorno.getRelatorioConsistenciaProcessamento() != null
              || retorno.getMensagemComunicacaoServidorCelular() != null)) {

        logger.info(
            "Erro ao finalizar rota [Imei="
                + imei
                + ", Localidade: "
                + localidade.getId()
                + ", Setor: "
                + setorComercial
                + ", Rota: "
                + codRota
                + "]");

        response.setContentLength(1);
        out.write(RESPOSTA_ERRO);
        out.flush();
      } else {

        Integer[] idsSituacaoTransmissao = new Integer[1];
        idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO;

        if (indcFinalizacao == FINALIZAR_LEITURA
            || indcFinalizacao == FINALIZAR_LEITURA_ARQUIVO_IMOVEIS_FALTANDO) {

          Integer diferenca =
              fachada
                  .pesquisarDiferencaQuantidadeMovimentoContaPrefaturadaArquivoTextoRoteiroEmpresa(
                      idRota, anoMesFaturamento);

          if (!fachada.isRotaDividida(idRota, anoMesFaturamento)) {
            if (diferenca != 0) {
              String msg = "Validação encontrada. Retornando para o celular";
              msg += "[Diferença de imoveis: " + diferenca;
              msg +=
                  ", Imei="
                      + imei
                      + ", Localidade: "
                      + localidade.getId()
                      + ", Setor: "
                      + setorComercial
                      + ", Rota: "
                      + codRota
                      + "]";

              logger.info(msg);

              String mensagem =
                  "mensagem=A quantidade de imóveis enviados não corresponde ao esperado";
              response.setContentLength(1 + mensagem.getBytes().length);
              out.write(RESPOSTA_ERRO);
              out.write(mensagem.getBytes());
              out.flush();
            } else {
              fachada.atualizarArquivoTextoEnviadoPorRota(
                  idRota,
                  SituacaoTransmissaoLeitura.EM_CAMPO,
                  SituacaoTransmissaoLeitura.TRANSMITIDO);
            }
          } else {
            fachada.atualizarArquivoTextoDividido(
                idRota,
                anoMesFaturamento,
                numeroSequenciaArquivo,
                SituacaoTransmissaoLeitura.EM_CAMPO,
                SituacaoTransmissaoLeitura.TRANSMITIDO);

            if (diferenca != 0) {
              String msg = "Validação encontrada. Retornando para o celular";
              msg += "[Diferença de imoveis: " + diferenca;
              msg +=
                  ", Imei="
                      + imei
                      + ", Localidade: "
                      + localidade
                      + ", Setor: "
                      + setorComercial
                      + ", Rota: "
                      + codRota
                      + "]";

              logger.info(msg);

              String mensagem =
                  "mensagem=A quantidade de imóveis enviados não corresponde ao esperado";
              response.setContentLength(1 + mensagem.getBytes().length);
              out.write(RESPOSTA_ERRO);
              out.write(mensagem.getBytes());
              out.flush();
            } else {
              fachada.atualizarArquivoTextoEnviado(
                  imei,
                  SituacaoTransmissaoLeitura.EM_CAMPO,
                  SituacaoTransmissaoLeitura.TRANSMITIDO);

              if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente(
                  idRota, anoMesFaturamento, idsSituacaoTransmissao)) {
                fachada.atualizarArquivoTextoEnviadoPorRota(
                    idRota,
                    SituacaoTransmissaoLeitura.EM_CAMPO,
                    SituacaoTransmissaoLeitura.TRANSMITIDO);
              } else {
                idsSituacaoTransmissao = new Integer[2];
                idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO;
                idsSituacaoTransmissao[1] = SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO;

                if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente(
                    idRota, anoMesFaturamento, idsSituacaoTransmissao)) {
                  fachada.atualizarArquivoTextoEnviadoPorRota(
                      idRota,
                      SituacaoTransmissaoLeitura.EM_CAMPO,
                      SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO);
                }
              }
            }
          }

          response.setContentLength(1);
          out.write(RESPOSTA_OK);
          out.flush();

          logger.info(
              "Fim: finalizar rota [Localidade: "
                  + localidade.getId()
                  + ", Setor: "
                  + setorComercial
                  + ", Rota: "
                  + codRota
                  + "]");

        } else if (indcFinalizacao == FINALIZAR_LEITURA_INCOMPLETA) {

          if (!fachada.isRotaDividida(idRota, anoMesFaturamento)) {
            fachada.atualizarArquivoTextoEnviadoPorRota(
                idRota,
                SituacaoTransmissaoLeitura.EM_CAMPO,
                SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO);

          } else {
            fachada.atualizarArquivoTextoEnviado(
                imei,
                SituacaoTransmissaoLeitura.EM_CAMPO,
                SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO);

            if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente(
                idRota, anoMesFaturamento, idsSituacaoTransmissao)) {
              fachada.atualizarArquivoTextoEnviadoPorRota(
                  idRota,
                  SituacaoTransmissaoLeitura.EM_CAMPO,
                  SituacaoTransmissaoLeitura.TRANSMITIDO);

            } else {
              idsSituacaoTransmissao = new Integer[2];
              idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO;
              idsSituacaoTransmissao[1] = SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO;

              if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente(
                  idRota, anoMesFaturamento, idsSituacaoTransmissao)) {

                fachada.atualizarArquivoTextoEnviadoPorRota(
                    idRota,
                    SituacaoTransmissaoLeitura.EM_CAMPO,
                    SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO);
              }
            }
          }
          response.setContentLength(1);
          out.write(RESPOSTA_OK);
          out.flush();

          logger.info(
              "Fim: finalizar rota [Localidade: "
                  + localidade.getId()
                  + ", Setor: "
                  + setorComercial
                  + ", Rota: "
                  + codRota);
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      logger.error(
          "Erro ao atualizar faturamento movimento celular [Localidade: "
              + idLocalidade
              + ", Setor: "
              + setorComercial
              + ", Rota: "
              + codRota);
      response.setContentLength(1);
      out.write(RESPOSTA_ERRO);
      out.flush();
    }
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = actionMapping.findForward("filtrarQualidadeAgua");

    Fachada fachada = Fachada.getInstancia();

    HttpSession sessao = httpServletRequest.getSession(false);

    FiltrarQualidadeAguaActionForm form = (FiltrarQualidadeAguaActionForm) actionForm;

    //	Código para checar ou não o ATUALIZAR

    String primeiraVez = httpServletRequest.getParameter("menu");
    if (primeiraVez != null && !primeiraVez.equals("")) {
      sessao.setAttribute("indicadorAtualizar", "1");
      form.setTipoPesquisa(ConstantesSistema.TIPO_PESQUISA_INICIAL.toString());
    }

    String idLocalidade = form.getIdLocalidade();
    String codigoSetor = form.getCodigoSetor();

    // Verificar se o número da Localidade não está cadastrado
    if (idLocalidade != null && !idLocalidade.trim().equals("")) {

      // Filtro para descobrir id da Localidade
      FiltroLocalidade filtroLocalidade = new FiltroLocalidade();

      filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID, idLocalidade));

      Collection colecaoLocalidade =
          fachada.pesquisar(filtroLocalidade, Localidade.class.getName());

      if (colecaoLocalidade == null || colecaoLocalidade.isEmpty()) {
        form.setIdLocalidade("");
        form.setNomeLocalidade("LOCALIDADE INEXISTENTE");
        httpServletRequest.setAttribute("idLocalidadeNaoEncontrado", "exception");
        httpServletRequest.setAttribute("nomeCampo", "idLocalidade");
      } else {
        Localidade localidade = (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidade);
        form.setIdLocalidade(localidade.getId().toString());
        form.setNomeLocalidade(localidade.getDescricao());
        httpServletRequest.setAttribute("nomeCampo", "codigoSetor");
      }
    }

    // Verifica se o Setor Comercial não está cadastrado
    if (codigoSetor != null && !codigoSetor.trim().equals("")) {

      // Filtro para descobrir o Setor Comercial relacionado à localidade.
      FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();

      filtroSetorComercial.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, codigoSetor));
      filtroSetorComercial.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, idLocalidade));

      Collection colecaoSetor =
          fachada.pesquisar(filtroSetorComercial, SetorComercial.class.getName());

      if (colecaoSetor == null || colecaoSetor.isEmpty()) {
        form.setCodigoSetor("");
        form.setNomeSetor("SETOR COMERCIAL INEXISTENTE");
        httpServletRequest.setAttribute("codigoSetorNaoEncontrado", "exception");
        httpServletRequest.setAttribute("nomeCampo", "codigoSetor");
      } else {
        SetorComercial setorComercial = (SetorComercial) Util.retonarObjetoDeColecao(colecaoSetor);
        form.setCodigoSetor(setorComercial.getCodigo() + "");
        form.setNomeSetor(setorComercial.getDescricao());
        httpServletRequest.setAttribute("nomeCampo", "fonteCaptacao");
      }
    }

    // Sistema Abastecimento

    FiltroSistemaAbastecimento filtroSistemaAbastecimento = new FiltroSistemaAbastecimento();

    // Verifica se os dados foram informados da tabela existem e joga numa
    // colecao

    Collection<SistemaAbastecimento> colecaoSistemaAbastecimento =
        fachada.pesquisar(filtroSistemaAbastecimento, SistemaAbastecimento.class.getName());

    if (colecaoSistemaAbastecimento == null || colecaoSistemaAbastecimento.isEmpty()) {
      throw new ActionServletException(
          "atencao.entidade_sem_dados_para_selecao", null, "Tabela Sistema Abastecimento");
    }

    // Manda valores do Sistema de Abastecimento para Sessão
    httpServletRequest.setAttribute("colecaoSistemaAbastecimento", colecaoSistemaAbastecimento);

    // pesquisa os dados do enter
    pesquisarEnter(form, httpServletRequest, fachada);

    return retorno;
  }