/**
   * O método cria os parametros necessários a geração do relatorio.
   *
   * @since 06/10/2009
   * @author Marlon Patrick
   */
  private Map<String, Object> criarParametros() {
    FiltrarRelatorioAnormalidadeLeituraPeriodoHelper filtro =
        (FiltrarRelatorioAnormalidadeLeituraPeriodoHelper) getParametro("filtroRelatorio");

    FiltroLeituraAnormalidade filtroConsumoAnormalidade = new FiltroLeituraAnormalidade();
    filtroConsumoAnormalidade.adicionarParametro(
        new ParametroSimples(FiltroLeituraAnormalidade.ID, filtro.getAnormalidadeLeitura()));
    filtroConsumoAnormalidade.adicionarParametro(
        new ParametroSimples(
            FiltroLeituraAnormalidade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

    Collection<LeituraAnormalidade> colecaoAnormalidadeleitura =
        Fachada.getInstancia()
            .pesquisar(filtroConsumoAnormalidade, LeituraAnormalidade.class.getName());

    LeituraAnormalidade anormalidade = colecaoAnormalidadeleitura.iterator().next();

    Map<String, Object> parametros = new HashMap<String, Object>();

    parametros.put(
        "imagem", Fachada.getInstancia().pesquisarParametrosDoSistema().getImagemRelatorio());
    parametros.put(
        "filtroPeriodoLeitura",
        Util.formatarAnoMesParaMesAno(filtro.getAnoMesReferenciaInicial())
            + " - "
            + Util.formatarAnoMesParaMesAno(filtro.getAnoMesReferenciaFinal()));
    parametros.put(
        "filtroAnormalidade", anormalidade.getId() + " - " + anormalidade.getDescricao());

    return parametros;
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    HttpSession sessao = httpServletRequest.getSession(false);

    InformarVencimentoAlternativoActionForm informarVencimentoAlternativoActionForm =
        (InformarVencimentoAlternativoActionForm) actionForm;

    if (Util.verificarNaoVazio(informarVencimentoAlternativoActionForm.getIdImovel())) {

      Collection<ClienteImovel> colecaoClienteImovel =
          obterColecaoClienteImovel(informarVencimentoAlternativoActionForm);

      if (Util.isVazioOrNulo(colecaoClienteImovel)) {
        httpServletRequest.setAttribute("corInscricao", "exception");
        httpServletRequest.setAttribute("nomeCampo", "idImovel");

        limparFormESessao(informarVencimentoAlternativoActionForm, sessao);

        informarVencimentoAlternativoActionForm.setInscricaoImovel("Matrícula Inexistente");
      } else {

        setarDadosFormESessao(
            informarVencimentoAlternativoActionForm, colecaoClienteImovel, sessao);
      }
    }

    return actionMapping.findForward("informarVencimentoAlternativo");
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno =
        actionMapping.findForward("exibirAtualizarVencimentoFaturaClienteResponsavel");
    HttpSession sessao = httpServletRequest.getSession(false);

    AtualizarVencimentoFaturaClienteResponsavelActionForm form =
        (AtualizarVencimentoFaturaClienteResponsavelActionForm) actionForm;
    Fachada fachada = Fachada.getInstancia();

    Date dataVencimento = Util.converteStringParaDate(form.getDataVencimento());
    String anoMesReferencia = Util.formatarMesAnoParaAnoMesSemBarra(form.getAnoMesReferencia());
    Integer qtdeContas = 0;

    if (dataVencimento == null) {
      throw new ActionServletException(
          "atencao.informe_campo_obrigatorio", null, "Data vencimento");
    }

    if (anoMesReferencia == null) {
      throw new ActionServletException(
          "atencao.informe_campo_obrigatorio", null, "Mês/Ano de Referência");
    }

    qtdeContas = fachada.countFaturasClienteResponsaveis(anoMesReferencia);

    // Controlamos o cancelamento de contas pagas
    Object[] arrayValidaQtdeFaturas =
        validarQtdeFaturas(qtdeContas, httpServletRequest, actionMapping);

    if ((Boolean) arrayValidaQtdeFaturas[2]) {
      return (ActionForward) arrayValidaQtdeFaturas[0];
    }

    Boolean confirmadoCancelamentoContasPagas = (Boolean) arrayValidaQtdeFaturas[1];

    if (confirmadoCancelamentoContasPagas != null && !confirmadoCancelamentoContasPagas) {
      return retorno;
    }

    fachada.atualizarVecimentoFaturaClienteResponsavel(dataVencimento, anoMesReferencia);

    montarPaginaSucesso(
        httpServletRequest,
        "Atualização do vencimento de faturas realizada com sucesso",
        "Voltar",
        "/exibirAtualizarVencimentoFaturaClienteResponsavel.do");

    retorno = (ActionForward) arrayValidaQtdeFaturas[0];
    return retorno;
  }
  private String validarFormulario(InserirResolucaoDiretoriaContratoParcelamentoActionForm form) {
    String retorno = "";

    if (form.getNumero() == null || "".equals(form.getNumero())) {
      retorno = "Número ";
    }
    if (form.getAssunto() == null || "".equals(form.getAssunto())) {
      retorno = "Assunto ";
    }
    if (form.getDataVigenciaInicial() == null || "".equals(form.getDataVigenciaInicial())) {
      retorno = "Data Vigência Inicial ";
    }
    if (form.getDataVigenciaFinal() == null || "".equals(form.getDataVigenciaFinal())) {
      retorno = "Data Vigência Final ";
    }
    if (form.getIndicadorDebitoAcrescimo() == null
        || "".equals(form.getIndicadorDebitoAcrescimo())) {
      retorno = "Débito com Acréscimo ";
    }
    if (form.getIndicadorParcelamentoJuros() == null
        || "".equals(form.getIndicadorParcelamentoJuros())) {
      retorno = "Parcelamento com Juros ";
    }
    if (form.getIndicadorInformarParcela() == null
        || "".equals(form.getIndicadorInformarParcela())) {
      retorno = "Indicador Informar o Valor da Parcela ";
    }
    if (form.getQtdFaturasParceladas() == null || "".equals(form.getQtdFaturasParceladas())) {
      retorno = "Número Máximo de Parcelas ";
    }
    if (form.getFormaPgto() == null || "".equals(form.getFormaPgto())) {
      retorno = "Forma de Pagamento ";
    }

    if (!retorno.equals("")) {
      retorno = "Informe: " + retorno;
    }

    Date dataInicial = Util.converteStringParaDate(form.getDataVigenciaInicial());
    Date dataFinal = Util.converteStringParaDate(form.getDataVigenciaFinal());
    if (dataInicial == null || dataFinal == null) {
      retorno = "Data inválida";
    } else {
      if (dataFinal.before(dataInicial)) {
        retorno = "Data Início da Vigência deve ser anterior ou igual à Data Fim da Vigência";
      }
    }

    return retorno;
  }
  /**
   * Consulta o registro atendimento pelo id informado
   *
   * @author Leonardo Regis
   * @created 11/08/2006
   */
  private RegistroAtendimento pesquisarRegistroAtendimento(Integer id) {

    RegistroAtendimento retorno = null;

    Fachada fachada = Fachada.getInstancia();

    Collection colecaoRegistroAtendimento = null;

    FiltroRegistroAtendimento filtroRegistroAtendimento = new FiltroRegistroAtendimento();

    filtroRegistroAtendimento.adicionarParametro(
        new ParametroSimples(FiltroRegistroAtendimento.ID, id));

    filtroRegistroAtendimento.adicionarCaminhoParaCarregamentoEntidade(
        "solicitacaoTipoEspecificacao");
    filtroRegistroAtendimento.adicionarCaminhoParaCarregamentoEntidade(
        "solicitacaoTipoEspecificacao.solicitacaoTipo");

    colecaoRegistroAtendimento =
        fachada.pesquisar(filtroRegistroAtendimento, RegistroAtendimento.class.getName());

    if (colecaoRegistroAtendimento != null && !colecaoRegistroAtendimento.isEmpty()) {
      retorno = (RegistroAtendimento) Util.retonarObjetoDeColecao(colecaoRegistroAtendimento);
    } else {
      throw new ActionServletException("atencao.naocadastrado", null, "Registro Atendimento");
    }

    return retorno;
  }
  public Object executar() throws TarefaException {

    List<RelatorioAnormalidadeLeituraPeriodoBean> relatorioBeans = executarConsultaRelatoriosBean();

    if (Util.isVazioOrNulo(relatorioBeans)) {
      throw new ActionServletException(ConstantesInterfaceGSAN.ATENCAO_PESQUISA_NENHUM_RESULTADO);
    }

    RelatorioDataSource ds = new RelatorioDataSource(relatorioBeans);

    int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");

    byte[] retorno =
        gerarRelatorio(
            ConstantesRelatorios.RELATORIO_ANORMALIDADE_LEITURA_PERIODO,
            criarParametros(),
            ds,
            tipoFormatoRelatorio);

    try {
      persistirRelatorioConcluido(
          retorno,
          Relatorio.RELATORIO_ANORMALIDADE_LEITURA_PERIODO,
          this.getIdFuncionalidadeIniciada());
    } catch (ControladorException e) {
      e.printStackTrace();
      throw new TarefaException(ConstantesInterfaceGSAN.ERRO_GSAN_ERRO_GRAVAR_RELATORIO_SISTEMA, e);
    }

    return retorno;
  }
  private void pesquisarEnter(
      FiltrarQualidadeAguaActionForm form, HttpServletRequest httpServletRequest, Fachada fachada) {

    // pesquisa enter de FONTE DE CAPTACAO
    if (form.getFonteCaptacao() != null && !form.getFonteCaptacao().equals("")) {

      FiltroFonteCaptacao filtroFonteCaptacao = new FiltroFonteCaptacao();

      try {
        filtroFonteCaptacao.adicionarParametro(
            new ParametroSimples(FiltroFonteCaptacao.ID, new Integer(form.getFonteCaptacao())));
      } catch (NumberFormatException ex) {
        throw new ActionServletException(
            "atencao.campo_texto.numero_obrigatorio", null, "Fonte de Captação");
      }

      filtroFonteCaptacao.setCampoOrderBy(FiltroFonteCaptacao.DESCRICAO);
      Collection colecaoFonteCaptacao =
          fachada.pesquisar(filtroFonteCaptacao, FonteCaptacao.class.getName());

      if (colecaoFonteCaptacao != null && !colecaoFonteCaptacao.isEmpty()) {
        FonteCaptacao fonteCaptacao =
            (FonteCaptacao) Util.retonarObjetoDeColecao(colecaoFonteCaptacao);
        form.setDescricaoFonteCaptacao(fonteCaptacao.getDescricao());

        httpServletRequest.setAttribute("fonteCaptacaoEncontrada", true);
      } else {
        form.setFonteCaptacao("");
        form.setDescricaoFonteCaptacao("FONTE DE CAPTACÃO INEXISTENTE");
      }
    }
  }
  // [SB0003] - Atualizar Ordem de Serviço
  //
  // Método responsável por setar os dados da ordem de serviço
  // de acordo com as exigências do caso de uso
  public OrdemServico setDadosOrdemServico(
      OrdemServico ordemServico,
      EfetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm
          efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm) {

    String idServicoMotivoNaoCobranca =
        efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm.getMotivoNaoCobranca();
    String valorPercentual =
        efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm.getPercentualCobranca();

    if (ordemServico != null
        && efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm.getIdTipoDebito()
            != null) {

      ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;

      ordemServico.setIndicadorComercialAtualizado(new Short("1"));

      if (idServicoMotivoNaoCobranca != null
          && !idServicoMotivoNaoCobranca.equals(ConstantesSistema.NUMERO_NAO_INFORMADO + "")) {
        servicoNaoCobrancaMotivo = new ServicoNaoCobrancaMotivo();
        servicoNaoCobrancaMotivo.setId(new Integer(idServicoMotivoNaoCobranca));
      }

      ordemServico.setServicoNaoCobrancaMotivo(servicoNaoCobrancaMotivo);

      if (valorPercentual != null) {
        ordemServico.setPercentualCobranca(
            new BigDecimal(
                efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm
                    .getPercentualCobranca()));
      }

      ordemServico.setDataEncerramento(
          Util.converteStringParaDate(
              efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm
                  .getDataRestabelecimento()));
      ordemServico.setUltimaAlteracao(new Date());
    }

    BigDecimal valorAtual = new BigDecimal(0);
    if (efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm.getValorDebito()
        != null) {
      String valorDebito =
          efetuarRestabelecimentoLigacaoAguaComInstalacaoHidrometroActionForm
              .getValorDebito()
              .toString()
              .replace(".", "");

      valorDebito = valorDebito.replace(",", ".");

      valorAtual = new BigDecimal(valorDebito);

      ordemServico.setValorAtual(valorAtual);
    }

    return ordemServico;
  }
  /**
   * @param objetoPesquisa
   * @param objetoPai
   * @param tipoObjeto
   * @return
   * @throws RemoteException
   * @throws ErroRepositorioException
   */
  private Object pesquisarObjeto(String objetoPesquisa, int tipoObjeto) {

    Object retorno = null;
    Collection colecaoPesquisa = null;

    switch (tipoObjeto) {
        // Setor Comercial
      case 2:
        FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();

        filtroSetorComercial.adicionarParametro(
            new ParametroSimples(FiltroSetorComercial.ID, objetoPesquisa));

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

        if (colecaoPesquisa != null && !colecaoPesquisa.isEmpty()) {
          retorno = Util.retonarObjetoDeColecao(colecaoPesquisa);
        }

        break;

      case 3:
        FiltroMunicipio filtroMunicipio = new FiltroMunicipio();

        filtroMunicipio.adicionarParametro(
            new ParametroSimples(FiltroMunicipio.ID, objetoPesquisa));

        filtroMunicipio.adicionarParametro(
            new ParametroSimples(
                FiltroMunicipio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

        colecaoPesquisa = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

        if (colecaoPesquisa != null && !colecaoPesquisa.isEmpty()) {
          retorno = Util.retonarObjetoDeColecao(colecaoPesquisa);
        }

        break;

      default:
        break;
    }

    return retorno;
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

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

    Fachada fachada = Fachada.getInstancia();

    HttpSession sessao = httpServletRequest.getSession(false);

    SelecionarBairroActionForm selecionarBairroActionForm = (SelecionarBairroActionForm) actionForm;

    String tipoRetorno = (String) httpServletRequest.getParameter("tipoPesquisaEndereco");
    String tipoOperacao = (String) httpServletRequest.getParameter("operacao");

    if (tipoRetorno != null && !tipoRetorno.trim().equalsIgnoreCase("")) {
      sessao.setAttribute("tipoPesquisaRetorno", tipoRetorno);
      sessao.setAttribute("operacao", tipoOperacao);
    }

    // Limpar formulário, caso necessário
    if (httpServletRequest.getParameter("limparForm") != null) {

      selecionarBairroActionForm.setIdMunicipio("");
      selecionarBairroActionForm.setNomeMunicipio("");
      selecionarBairroActionForm.setNomeBairro("");

      // Retira da sessão a coleção de bairros que foi selecionada anteriormente
      sessao.removeAttribute("colecaoBairrosSelecionados");
    }

    /*
     * Caso o parâmetro "Município" seja previamente definido pelo caso de uso que chama está funcionalidade,
     * o mesmo deverá ser mantido para realização da filtragem dos bairros
     */
    String idMunicipio = httpServletRequest.getParameter("idMunicipio");

    if (idMunicipio != null && !idMunicipio.equals("")) {

      FiltroMunicipio filtroMunicipio = new FiltroMunicipio();

      filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, idMunicipio));

      Collection colecaoMunicipio = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

      Municipio municipio = (Municipio) Util.retonarObjetoDeColecao(colecaoMunicipio);

      selecionarBairroActionForm.setIdMunicipio(municipio.getId().toString());
      selecionarBairroActionForm.setNomeMunicipio(municipio.getNome());
    }

    return retorno;
  }
  // Data de Validade da Guia de Pagamento
  // último dia do proximo mês do mês/ano da data de vencimento da guia de pagamento
  public String getDataValidade() {

    int anoVencimento = Util.getAno(getDataVencimento());
    int mesVencimento = Util.getMes(getDataVencimento());

    Calendar calendarUltimoDiaMesAnoDataVencimento = new GregorianCalendar();

    calendarUltimoDiaMesAnoDataVencimento.set(Calendar.YEAR, anoVencimento);
    calendarUltimoDiaMesAnoDataVencimento.set(Calendar.MONTH, mesVencimento - 1);
    calendarUltimoDiaMesAnoDataVencimento.set(
        Calendar.DAY_OF_MONTH,
        calendarUltimoDiaMesAnoDataVencimento.getActualMaximum(Calendar.DAY_OF_MONTH));

    Date dateDataVencimentoMais3Dias = Util.adicionarNumeroDiasDeUmaData(getDataVencimento(), 3);
    Date dateDataCorrenteMais3Dias = Util.adicionarNumeroDiasDeUmaData(new Date(), 3);
    Date dateMaiorData = null;

    //		 retorna
    //		 -1 se a data1 for menor que a data2,
    //		 0 se as datas forem iguais,
    //		 1 se a data1 for maior que a data2.

    if (Util.compararData(dateDataVencimentoMais3Dias, dateDataCorrenteMais3Dias) >= 0) {

      if (Util.compararData(
              dateDataVencimentoMais3Dias, calendarUltimoDiaMesAnoDataVencimento.getTime())
          >= 0) {
        dateMaiorData = dateDataVencimentoMais3Dias;
      } else {
        dateMaiorData = calendarUltimoDiaMesAnoDataVencimento.getTime();
      }

    } else {

      if (Util.compararData(
              dateDataCorrenteMais3Dias, calendarUltimoDiaMesAnoDataVencimento.getTime())
          >= 0) {
        dateMaiorData = dateDataCorrenteMais3Dias;
      } else {
        dateMaiorData = calendarUltimoDiaMesAnoDataVencimento.getTime();
      }
    }

    //		String anoMesValidade = Util.getAnoMesComoString(getDataVencimento());
    //		Calendar calendario = new GregorianCalendar();
    //
    //		calendario.set(Calendar.YEAR, new Integer(anoMesValidade.substring(0, 4)).intValue());
    //		calendario.set(Calendar.MONTH, new Integer(anoMesValidade.substring(4, 6)).intValue());
    //		calendario.set(Calendar.DAY_OF_MONTH, calendario.getActualMaximum(Calendar.DAY_OF_MONTH));

    return Util.formatarData(dateMaiorData);
  }
 /** Inicio dos metodos Privados* */
 private void carregarFormContratoCadastrar(
     ContratoParcelamentoRD contratoCadastrar,
     InserirResolucaoDiretoriaContratoParcelamentoActionForm form) {
   if (form != null && !"".equals(form.getNumero())) {
     contratoCadastrar.setNumero(form.getNumero());
   }
   if (form != null && !"".equals(form.getAssunto())) {
     contratoCadastrar.setAssunto(form.getAssunto());
   }
   if (form != null && !"".equals(form.getDataVigenciaInicial())) {
     contratoCadastrar.setDataVigenciaInicio(
         Util.converteStringParaDate(form.getDataVigenciaInicial()));
   }
   if (form != null && !"".equals(form.getDataVigenciaFinal())) {
     contratoCadastrar.setDataVigenciaFinal(
         Util.converteStringParaDate(form.getDataVigenciaFinal()));
   }
   if (form != null && !"".equals(form.getIndicadorDebitoAcrescimo())) {
     contratoCadastrar.setIndicadorDebitoAcrescimo(form.getIndicadorDebitoAcrescimo());
   }
   if (form != null && !"".equals(form.getIndicadorInformarParcela())) {
     contratoCadastrar.setIndicadorInformarParcela(form.getIndicadorInformarParcela());
   }
   if (form != null && !"".equals(form.getIndicadorParcelamentoJuros())) {
     contratoCadastrar.setIndicadorParcelamentoJuros(form.getIndicadorParcelamentoJuros());
   }
   if (form != null && !"".equals(form.getQtdFaturasParceladas())) {
     contratoCadastrar.setQtdFaturasParceladas(Integer.parseInt(form.getQtdFaturasParceladas()));
   }
   if (form != null && !"".equals(form.getFormaPgto())) {
     Collection<CobrancaForma> formasPagto =
         fachada.pesquisar(new FiltroCobrancaForma(), CobrancaForma.class.getName());
     for (CobrancaForma formaPgto : formasPagto) {
       if (formaPgto.getId() == Integer.parseInt(form.getFormaPgto())) {
         contratoCadastrar.setCobrancaForma(formaPgto);
       }
     }
   }
 }
  @Override
  public int calcularTotalRegistrosRelatorio() {
    Collection<Object[]> colecaoDados =
        Fachada.getInstancia()
            .pesquisarTotalRegistrosRelatorioAnormalidadeLeituraPeriodo(
                (FiltrarRelatorioAnormalidadeLeituraPeriodoHelper) getParametro("filtroRelatorio"));

    if (Util.isVazioOrNulo(colecaoDados)) {
      throw new ActionServletException(ConstantesInterfaceGSAN.ATENCAO_PESQUISA_NENHUM_RESULTADO);
    }

    return colecaoDados.size();
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // Seta o mapeamento de retorno
    ActionForward retorno = actionMapping.findForward("exibirGerarAvisoDeDebito");

    DiskFileUpload upload = new DiskFileUpload();
    List items = null;
    try {
      items = upload.parseRequest(httpServletRequest);
      this.getSessao(httpServletRequest).setAttribute("arquivo", items);
    } catch (FileUploadException e) {
      items = (List) this.getSessao(httpServletRequest).getAttribute("arquivo");
      if (items == null) {
        throw new ActionServletException("erro.sistema", e);
      }
    }

    FileItem item = (FileItem) Util.retonarObjetoDeColecao(items);
    String nomeArquivo = item.getName().replace(".txt", "");
    nomeArquivo = nomeArquivo.replace("EMITIR", "");

    Collection colecaoEmitirReavisoDeDebitoHelper =
        this.gerarColecaoEmitirReavisoDeDebitoHelper(items);

    String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");

    RelatorioAvisoDeDebito relatorio =
        new RelatorioAvisoDeDebito(this.getUsuarioLogado(httpServletRequest));

    relatorio.addParametro(
        "colecaoEmitirReavisoDeDebitoHelper", colecaoEmitirReavisoDeDebitoHelper);
    relatorio.addParametro("nomeArquivo", nomeArquivo);

    if (tipoRelatorio == null) {
      tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
    }

    relatorio.addParametro("tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));
    retorno =
        processarExibicaoRelatorio(
            relatorio, tipoRelatorio, httpServletRequest, httpServletResponse, actionMapping);

    return retorno;
  }
  /**
   * Preencher dados do corte da ligação
   *
   * @author Leonardo Regis
   * @date 23/09/2006
   * @param sessao
   * @param form
   * @param os
   */
  private void pesquisarDadosCorteLigacao(
      HttpSession sessao, EfetuarCorteLigacaoAguaActionForm form, OrdemServico ordemServico) {
    // Data Encerramento
    if (ordemServico.getDataEncerramento() != null
        && !ordemServico.getDataEncerramento().equals("")) {
      form.setDataCorte(Util.formatarData(ordemServico.getDataEncerramento()));
    }

    // Comentado por Raphael Rossiter em 28/02/2007
    // Motivo do Corte
    /*if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getMotivoCorte() != null){
    	form.setMotivoCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getMotivoCorte().getId());
    }
    // Tipo do Corte
    if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getCorteTipo() != null) {
    	form.setTipoCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getCorteTipo().getId());
    }
    // Leitura do Corte
    HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
    	ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getHidrometroInstalacaoHistorico();
    if(hidrometroInstalacaoHistorico != null &&
       hidrometroInstalacaoHistorico.getNumeroLeituraCorte() != null){
    	form.setNumLeituraCorte(""+hidrometroInstalacaoHistorico.getNumeroLeituraCorte());
    }
    // Número do Selo do Corte
    if(ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getNumeroSeloCorte() != null){
    	form.setNumSeloCorte(""+ordemServico.getRegistroAtendimento().getImovel().getLigacaoAgua().getNumeroSeloCorte());
    }*/

    if (ordemServico.getImovel().getLigacaoAgua().getMotivoCorte() != null) {
      form.setMotivoCorte("" + ordemServico.getImovel().getLigacaoAgua().getMotivoCorte().getId());
    }
    // Tipo do Corte
    if (ordemServico.getImovel().getLigacaoAgua().getCorteTipo() != null) {
      form.setTipoCorte("" + ordemServico.getImovel().getLigacaoAgua().getCorteTipo().getId());
    }
    // Leitura do Corte
    HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
        ordemServico.getImovel().getLigacaoAgua().getHidrometroInstalacaoHistorico();
    if (hidrometroInstalacaoHistorico != null
        && hidrometroInstalacaoHistorico.getNumeroLeituraCorte() != null) {
      form.setNumLeituraCorte("" + hidrometroInstalacaoHistorico.getNumeroLeituraCorte());
    }
    // Número do Selo do Corte
    if (ordemServico.getImovel().getLigacaoAgua().getNumeroSeloCorte() != null) {
      form.setNumSeloCorte("" + ordemServico.getImovel().getLigacaoAgua().getNumeroSeloCorte());
    }
  }
  private void pesquisarEquipamentoEspecial(
      PesquisarTipoPerfilServicoActionForm pesquisarTipoPerfilServicoActionForm,
      HttpServletRequest httpServletRequest) {

    // Filtro para obter o Equipamento Especial do id informado
    FiltroTabelaAuxiliarAbreviada filtroTabelaAuxiliarAbreviada =
        new FiltroTabelaAuxiliarAbreviada();

    filtroTabelaAuxiliarAbreviada.adicionarParametro(
        new ParametroSimples(
            FiltroTabelaAuxiliarAbreviada.ID,
            new Integer(pesquisarTipoPerfilServicoActionForm.getEquipamentoEspecial()),
            ParametroSimples.CONECTOR_AND));
    filtroTabelaAuxiliarAbreviada.adicionarParametro(
        new ParametroSimples(
            FiltroTabelaAuxiliarAbreviada.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));

    // Pesquisa de acordo com os parâmetros informados no filtro
    Collection colecaoEquipamentosEspeciais =
        Fachada.getInstancia()
            .pesquisar(filtroTabelaAuxiliarAbreviada, EquipamentosEspeciais.class.getName());

    // Verifica se a pesquisa retornou algum objeto para a coleção
    if (colecaoEquipamentosEspeciais != null && !colecaoEquipamentosEspeciais.isEmpty()) {

      // Obtém o objeto da coleção pesquisada
      EquipamentosEspeciais equipamentosEspeciais =
          (EquipamentosEspeciais) Util.retonarObjetoDeColecao(colecaoEquipamentosEspeciais);

      pesquisarTipoPerfilServicoActionForm.setEquipamentoEspecial(
          equipamentosEspeciais.getId().toString());
      pesquisarTipoPerfilServicoActionForm.setDescricaoEquipamentoEspecial(
          equipamentosEspeciais.getDescricao());
      httpServletRequest.setAttribute("corEquipamentoEspecial", "valor");
    } else {
      // Exibe mensagem de código inexiste e limpa o campo de código
      httpServletRequest.setAttribute("corEquipamentoEspecial", "exception");
      pesquisarTipoPerfilServicoActionForm.setEquipamentoEspecial("");
      pesquisarTipoPerfilServicoActionForm.setDescricaoEquipamentoEspecial(
          "Equipamento Especial inexistente");
    }
  }
  /*
   * 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");
    }
  }
  private void pesquisarMunicipio(
      HttpServletRequest request, GerarRelatorioEvolucaoContasAReceberContabilActionForm form) {

    Fachada fachada = Fachada.getInstancia();

    FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
    filtroMunicipio.adicionarParametro(
        new ParametroSimples(FiltroMunicipio.ID, form.getCodigoMunicipio()));

    Collection pesquisa = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

    if (pesquisa != null && !pesquisa.isEmpty()) {
      Municipio municipio = (Municipio) Util.retonarObjetoDeColecao(pesquisa);

      form.setCodigoMunicipio("" + municipio.getId());
      form.setDescricaoMunicipio(municipio.getNome());
    } else {
      form.setCodigoMunicipio("");
      form.setDescricaoMunicipio("Município Inexistente");
    }
  }
  /**
   * Gerando o objeto que referencia o arquivo que será anexado ao RA
   *
   * @author Raphael Rossiter
   * @date 30/07/2009
   * @param FileItem
   * @param String
   */
  private RegistroAtendimentoAnexo gerarRegistroAtendimentoAnexo(
      FileItem arquivoAnexo, String observacaoAnexo) {

    RegistroAtendimentoAnexo anexo = new RegistroAtendimentoAnexo();

    // ARQUIVO EM BYTES
    anexo.setImagemDocumento(arquivoAnexo.get());

    // EXTENSÃO
    anexo.setNomeExtensaoDocumento(Util.obterExtensaoDoArquivo(arquivoAnexo));

    // OBSERVAÇÃO
    if (observacaoAnexo != null && !observacaoAnexo.equals("")) {

      anexo.setDescricaoDocumento(observacaoAnexo.trim());
    }

    // ÚLTIMA ALTERAÇÃO
    anexo.setUltimaAlteracao(new Date());

    return anexo;
  }
  /**
   * Pesquisa Cliente
   *
   * @author Rafael Pinto
   * @date 15/08/2006
   */
  private void pesquisarCliente(AtualizarGerenciaRegionalActionForm form) {

    FiltroCliente filtroCliente = new FiltroCliente();

    filtroCliente.adicionarParametro(
        new ParametroSimples(FiltroCliente.ID, new Integer(form.getIdCliente())));

    // Pesquisa de acordo com os parâmetros informados no filtro
    Collection colecaoCliente = this.getFachada().pesquisar(filtroCliente, Cliente.class.getName());

    // Verifica se a pesquisa retornou algum objeto para a coleção
    if (colecaoCliente != null && !colecaoCliente.isEmpty()) {

      // Obtém o objeto da coleção pesquisada
      Cliente cliente = (Cliente) Util.retonarObjetoDeColecao(colecaoCliente);

      form.setIdCliente(cliente.getId().toString());
      form.setNomeCliente(cliente.getNome());

    } else {
      form.setIdCliente("");
      form.setNomeCliente("Cliente inexistente");
    }
  }
  /**
   * < <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) {

    // Obtém o action form
    HidrometroActionForm hidrometroActionForm = (HidrometroActionForm) actionForm;

    Collection colecaoHidrometroCapacidade = null;

    // Seta a ação de retorno
    ActionForward retorno = actionMapping.findForward("inserirHidrometro");

    // Obtém a sessão
    HttpSession sessao = httpServletRequest.getSession(false);

    // Caso o form esteja na sessão é removido
    // sessao.removeAttribute("HidrometroActionForm");

    // Obtém a facahda
    Fachada fachada = Fachada.getInstancia();

    // Obtém o objetoCosulta vindo na sessão
    String objetoConsulta = (String) httpServletRequest.getParameter("objetoConsulta");

    // Chamou a funcionalidade pela 1ª vez.
    // O usuário pode chamar o filtro de hidrômetro que carrega objetos na
    // sessão
    // e depois chamar o inserir hidrômetro. Necessário remover os objetos
    // da sessão deixados pelo filtro.
    String limpaSessao = (String) httpServletRequest.getParameter("limpaSessao");

    if (limpaSessao != null
        && !limpaSessao.trim().equalsIgnoreCase("")
        && (Integer.parseInt(limpaSessao)) == 1) {

      // remove objetos da sessão vindos do filtro
      sessao.removeAttribute("colecaoHidrometroClasseMetrologica");
      sessao.removeAttribute("colecaoHidrometroMarca");
      sessao.removeAttribute("colecaoHidrometroDiametro");
      sessao.removeAttribute("colecaoHidrometroCapacidade");
      sessao.removeAttribute("colecaoHidrometroTipo");
      sessao.removeAttribute("colecaoHidrometroRelojoaria");
    }

    // Verifica se o objeto é diferente de nulo
    if (objetoConsulta != null
        && !objetoConsulta.trim().equalsIgnoreCase("")
        && (Integer.parseInt(objetoConsulta)) == 1) {

      // Filtro para obter o local de armazenagem ativo de id informado
      FiltroHidrometroLocalArmazenagem filtroHidrometroLocalArmazenagem =
          new FiltroHidrometroLocalArmazenagem();

      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroLocalArmazenagem.ID,
              new Integer(hidrometroActionForm.getIdLocalArmazenagem()),
              ParametroSimples.CONECTOR_AND));
      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroLocalArmazenagem.INDICADOR_USO,
              ConstantesSistema.INDICADOR_USO_ATIVO));

      // Pesquisa de acordo com os parâmetros informados no filtro
      Collection colecaoHidrometroLocalArmazenagem =
          fachada.pesquisar(
              filtroHidrometroLocalArmazenagem, HidrometroLocalArmazenagem.class.getName());

      // Verifica se a pesquisa retornou algum objeto para a coleção
      if (colecaoHidrometroLocalArmazenagem != null
          && !colecaoHidrometroLocalArmazenagem.isEmpty()) {

        // Obtém o objeto da coleção pesquisada
        HidrometroLocalArmazenagem hidrometroLocalArmazenagem =
            (HidrometroLocalArmazenagem)
                Util.retonarObjetoDeColecao(colecaoHidrometroLocalArmazenagem);

        // Exibe o código e a descrição pesquisa na página
        httpServletRequest.setAttribute("corLocalArmazenagem", "valor");
        hidrometroActionForm.setIdLocalArmazenagem(hidrometroLocalArmazenagem.getId().toString());
        hidrometroActionForm.setLocalArmazenagemDescricao(
            hidrometroLocalArmazenagem.getDescricao());

      } else {

        // Exibe mensagem de código inexiste e limpa o campo de código
        httpServletRequest.setAttribute("corLocalArmazenagem", "exception");
        hidrometroActionForm.setIdLocalArmazenagem("");
        hidrometroActionForm.setLocalArmazenagemDescricao("Local de Armazenagem Inexistente");
      }

    } else if (sessao.getAttribute("colecaoHidrometroClasseMetrologica") == null
        && sessao.getAttribute("colecaoHidrometroMarca") == null
        && sessao.getAttribute("colecaoHidrometroDiametro") == null
        && sessao.getAttribute("colecaoHidrometroCapacidade") == null
        && sessao.getAttribute("colecaoHidrometroTipo") == null
        && sessao.getAttribute("colecaoHidrometroRelojoaria") == null) {

      // Remove objeto da sessão
      sessao.removeAttribute("HidrometroActionForm");

      // Filtro de hidrômetro classe metrológica para obter todas as
      // classes metrológicas ativas
      FiltroHidrometroClasseMetrologica filtroHidrometroClasseMetrologica =
          new FiltroHidrometroClasseMetrologica();

      filtroHidrometroClasseMetrologica.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroClasseMetrologica.INDICADOR_USO,
              ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroClasseMetrologica.setCampoOrderBy(
          FiltroHidrometroClasseMetrologica.DESCRICAO);

      // Pesquisa a coleção de classe metrológica
      Collection colecaoHidrometroClasseMetrologica =
          fachada.pesquisar(
              filtroHidrometroClasseMetrologica, HidrometroClasseMetrologica.class.getName());

      // Filtro de hidrômetro marca para obter todas as marcas de
      // hidrômetros ativas
      FiltroHidrometroMarca filtroHidrometroMarca = new FiltroHidrometroMarca();

      filtroHidrometroMarca.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroMarca.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroMarca.setCampoOrderBy(FiltroHidrometroMarca.DESCRICAO);

      // Pesquisa a coleção de hidrômetro marca
      Collection colecaoHidrometroMarca =
          fachada.pesquisar(filtroHidrometroMarca, HidrometroMarca.class.getName());

      // Filtro de hidrômetro diâmetro para obter todos os diâmetros de
      // hidrômetros ativos
      FiltroHidrometroDiametro filtroHidrometroDiametro = new FiltroHidrometroDiametro();

      filtroHidrometroDiametro.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroDiametro.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroDiametro.setCampoOrderBy(FiltroHidrometroDiametro.NUMERO_ORDEM);

      // Pesquisa a coleção de hidrômetro capacidade
      Collection colecaoHidrometroDiametro =
          fachada.pesquisar(filtroHidrometroDiametro, HidrometroDiametro.class.getName());

      // Filtro de hidrômetro capacidade para obter todos as capacidade de
      // hidrômetros ativas
      FiltroHidrometroCapacidade filtroHidrometroCapacidade = new FiltroHidrometroCapacidade();

      filtroHidrometroCapacidade.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroCapacidade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroCapacidade.setCampoOrderBy(FiltroHidrometroCapacidade.NUMERO_ORDEM);

      // Pesquisa a coleção de hidrômetro capacidade
      colecaoHidrometroCapacidade =
          fachada.pesquisar(filtroHidrometroCapacidade, HidrometroCapacidade.class.getName());

      // Filtro de hidrômetro tipo para obter todos os tipos de
      // hidrômetros ativos
      FiltroHidrometroTipo filtroHidrometroTipo = new FiltroHidrometroTipo();

      filtroHidrometroTipo.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroTipo.setCampoOrderBy(FiltroHidrometroTipo.DESCRICAO);

      // Pesquisa a coleção de hidrômetro tipo
      Collection colecaoHidrometroTipo =
          fachada.pesquisar(filtroHidrometroTipo, HidrometroTipo.class.getName());

      // Filtro de hidrômetro relojoaria para obter todos os tipos de
      // hidrômetros relojoaria ativos
      FiltroHidrometroRelojoaria filtroHidrometroRelojoaria = new FiltroHidrometroRelojoaria();

      filtroHidrometroRelojoaria.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroRelojoaria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroRelojoaria.setCampoOrderBy(FiltroHidrometroRelojoaria.DESCRICAO);

      // Pesquisa a coleção de hidrômetro tipo
      Collection colecaoHidrometroRelojoaria =
          fachada.pesquisar(filtroHidrometroRelojoaria, HidrometroRelojoaria.class.getName());

      hidrometroActionForm.setIndicadorMacromedidor("" + ConstantesSistema.NUMERO_NAO_INFORMADO);

      // Envia as coleções na sessão
      sessao.setAttribute("colecaoHidrometroClasseMetrologica", colecaoHidrometroClasseMetrologica);
      sessao.setAttribute("colecaoHidrometroMarca", colecaoHidrometroMarca);
      sessao.setAttribute("colecaoHidrometroDiametro", colecaoHidrometroDiametro);
      sessao.setAttribute("colecaoHidrometroCapacidade", colecaoHidrometroCapacidade);
      sessao.setAttribute("colecaoHidrometroTipo", colecaoHidrometroTipo);
      sessao.setAttribute("colecaoHidrometroRelojoaria", colecaoHidrometroRelojoaria);
    }

    // Filtro de hidrômetro capacidade para obter capacidade de hidrômetro
    // de acordo com o id
    FiltroHidrometroCapacidade filtroHidrometroCapacidadeNumeroDigitos =
        new FiltroHidrometroCapacidade();

    // Verifica se a coleção de hidrometro capacidade é diferente de null
    if (colecaoHidrometroCapacidade != null && !colecaoHidrometroCapacidade.isEmpty()) {

      // Obtém o primeiro objeto da collection
      Iterator colecaoHidrometroCapacidadeIterator = colecaoHidrometroCapacidade.iterator();
      HidrometroCapacidade hidrometroCapacidade =
          (HidrometroCapacidade) colecaoHidrometroCapacidadeIterator.next();

      // Filtra pelo primeiro objeto da collection
      filtroHidrometroCapacidadeNumeroDigitos.adicionarParametro(
          new ParametroSimples(FiltroHidrometroCapacidade.ID, hidrometroCapacidade.getId()));
    } else {
      // Filtra pelo id selecionado no combobox
      filtroHidrometroCapacidadeNumeroDigitos.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroCapacidade.ID,
              new Integer(hidrometroActionForm.getIdHidrometroCapacidade())));
    }

    // Pesquisa o número de dígitos de acordo com o filtro
    Collection colecaoHidrometroCapacidadeNumeroDigitos =
        fachada.pesquisar(
            filtroHidrometroCapacidadeNumeroDigitos, HidrometroCapacidade.class.getName());

    if (colecaoHidrometroCapacidadeNumeroDigitos != null
        && !colecaoHidrometroCapacidadeNumeroDigitos.isEmpty()) {
      // Retorna o objeto pesquisado
      HidrometroCapacidade hidrometroCapacidadeNumeroDigitos =
          (HidrometroCapacidade)
              Util.retonarObjetoDeColecao(colecaoHidrometroCapacidadeNumeroDigitos);
      Integer leituraMinimo = 0;
      Integer leituraMaximo = 0;
      // Obtém as leituras
      if (!hidrometroCapacidadeNumeroDigitos.getLeituraMinimo().equals("")) {
        leituraMinimo =
            new Integer(hidrometroCapacidadeNumeroDigitos.getLeituraMinimo().toString());
      }
      if (!hidrometroCapacidadeNumeroDigitos.getLeituraMaximo().equals("")) {
        leituraMaximo =
            new Integer(hidrometroCapacidadeNumeroDigitos.getLeituraMaximo().toString());
      }
      // Obtém a quantidade da diferença
      int quantidade = (leituraMaximo.intValue() - leituraMinimo.intValue()) + 1;
      Collection colecaoIntervalo = new ArrayList();

      // Adiciona a quantidade da diferença na coleção
      for (int i = 0; i < quantidade; i++) {

        colecaoIntervalo.add(new Integer(leituraMinimo.intValue() + i));
      }
      sessao.setAttribute("colecaoIntervalo", colecaoIntervalo);
    }

    return retorno;
  }
  private void validacaoFinal(
      String numeroResolucaoDiretoria,
      String imovelSituacaoTipo,
      String imovelPerfil,
      String subcategoria,
      String percentualDescontoAcrescimoMulta,
      String percentualDescontoAcrescimoJurosMora,
      String percentualDescontoAcrescimoAtualizacaoMonetaria,
      HttpServletRequest httpServletRequest,
      Collection collectionParcelamentoQuantidadeReparcelamentoHelper,
      Collection collectionParcelamentoDescontoAntiguidade,
      Collection collectionParcelamentoDescontoInatividade,
      String percentualTarifaMinimaPrestacao,
      Collection collectionParcelamentoDescontoInatividadeAVista,
      String percentualDescontoAcrescimoPagamentoAVista) {

    if (!Util.verificarNaoVazio(numeroResolucaoDiretoria)) {
      httpServletRequest.setAttribute("nomeCampo", "numeroResolucaoDiretoria");
      // Informe Numero da RD.
      throw new ActionServletException("atencao.numero_rd_nao_informado");
    }

    if ((imovelSituacaoTipo == null)
        || (imovelSituacaoTipo.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO))) {
      httpServletRequest.setAttribute("nomeCampo", "imovelSituacaoTipo");
      // Informe Tipo da Situação do Imóvel
      throw new ActionServletException("atencao.tipo_situacao_imovel_nao_informado");
    }
    /*
    if ((imovelPerfil == null)
    		|| (imovelPerfil.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO))) {
    	httpServletRequest.setAttribute("nomeCampo","imovelPerfil");
    	//Informe Perfil do Imóvel
    	throw new ActionServletException("atencao.perfil_imovel_nao_informado");
    }

    if ((subcategoria == null)
    		|| (subcategoria.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO))) {
    	httpServletRequest.setAttribute("nomeCampo","subcategoria");
    	//Informe Subcategoria
    	throw new ActionServletException("atencao.subcategoria_nao_informado");
    }

      	if (percentualDescontoAcrescimo == null ||
      			percentualDescontoAcrescimo.equalsIgnoreCase("")){
      		httpServletRequest.setAttribute("nomeCampo","percentualDescontoAcrescimo");
      		//Informe Percentual de Desconto sobre os Acréscimos  por Impontualidade
      		throw new ActionServletException("atencao.percentual_desconto_nao_informado");
      	}
      	*/

    /*
     *
     */
    if (percentualDescontoAcrescimoMulta == null
        || percentualDescontoAcrescimoMulta.equalsIgnoreCase("")) {
      httpServletRequest.setAttribute("nomeCampo", "percentualDescontoAcrescimoMulta");
      // Informe Percentual de Desconto sobre Multa
      throw new ActionServletException(
          "atencao.required", null, " Percentual de Desconto sobre Multa");
    }

    if (percentualDescontoAcrescimoJurosMora == null
        || percentualDescontoAcrescimoJurosMora.equalsIgnoreCase("")) {
      httpServletRequest.setAttribute("nomeCampo", "percentualDescontoAcrescimoJurosMora");
      // Informe Percentual de Desconto sobre Juros Mora
      throw new ActionServletException(
          "atencao.required", null, " Percentual de Desconto sobre Juros Mora");
    }

    if (percentualDescontoAcrescimoAtualizacaoMonetaria == null
        || percentualDescontoAcrescimoAtualizacaoMonetaria.equalsIgnoreCase("")) {
      httpServletRequest.setAttribute(
          "nomeCampo", "percentualDescontoAcrescimoAtualizacaoMonetaria");
      // Informe Percentual de Desconto sobre Atualização Monetária
      throw new ActionServletException(
          "atencao.required", null, " Percentual de Desconto sobre Atualização Monetária");
    }

    if (percentualDescontoAcrescimoPagamentoAVista == null
        || percentualDescontoAcrescimoPagamentoAVista.equalsIgnoreCase("")) {
      httpServletRequest.setAttribute("nomeCampo", "percentualDescontoAcrescimoPagamentoAVista");
      // Informe Percentual de Desconto sobre os Acréscimos por Impontualidade para pagamento à
      // vista
      throw new ActionServletException(
          "atencao.required",
          null,
          " Percentual de Desconto sobre os Acréscimos por Impontualidade para pagamento à vista");
    }
    // fim alteração

    if (percentualTarifaMinimaPrestacao == null
        || percentualTarifaMinimaPrestacao.equalsIgnoreCase("")) {
      httpServletRequest.setAttribute("nomeCampo", "percentualTarifaMinimaPrestacao");
      // Informe  Percentual da Tarifa Mínima para Cálculo do Valor Mínimo da Prestação
      throw new ActionServletException(
          "atencao.required",
          null,
          " Percentual da Tarifa Mínima para Cálculo do Valor Mínimo da Prestação");
    }

    // [FS0008]Verificar existência do perfil de parcelamento
    FiltroParcelamentoPerfil filtroParcelamentoPerfil = new FiltroParcelamentoPerfil();
    filtroParcelamentoPerfil.adicionarCaminhoParaCarregamentoEntidade("resolucaoDiretoria");
    filtroParcelamentoPerfil.adicionarParametro(
        new ParametroSimples(
            FiltroParcelamentoPerfil.RESOLUCAO_DIRETORIA_ID, numeroResolucaoDiretoria));
    filtroParcelamentoPerfil.adicionarCaminhoParaCarregamentoEntidade("imovelSituacaoTipo");
    filtroParcelamentoPerfil.adicionarParametro(
        new ParametroSimples(FiltroParcelamentoPerfil.IMOVEL_SITUACAO_TIPO_ID, imovelSituacaoTipo));
    filtroParcelamentoPerfil.adicionarCaminhoParaCarregamentoEntidade("imovelPerfil");

    if (imovelPerfil == null) {
      filtroParcelamentoPerfil.adicionarParametro(
          new ParametroNulo(FiltroParcelamentoPerfil.IMOVEL_PERFIL_ID));
    } else {
      filtroParcelamentoPerfil.adicionarParametro(
          new ParametroSimples(FiltroParcelamentoPerfil.IMOVEL_PERFIL_ID, imovelPerfil));
    }

    filtroParcelamentoPerfil.adicionarCaminhoParaCarregamentoEntidade("subcategoria");
    if (subcategoria == null) {
      filtroParcelamentoPerfil.adicionarParametro(
          new ParametroNulo(FiltroParcelamentoPerfil.SUBCATEGORIA_ID));
    } else {
      filtroParcelamentoPerfil.adicionarParametro(
          new ParametroSimples(FiltroParcelamentoPerfil.SUBCATEGORIA_ID, subcategoria));
    }

    Collection colecaoParcelamentoPerfil =
        fachada.pesquisar(filtroParcelamentoPerfil, ParcelamentoPerfil.class.getName());

    if (colecaoParcelamentoPerfil != null && !colecaoParcelamentoPerfil.isEmpty()) {
      throw new ActionServletException("atencao.perfil_parcelamento_ja_existe");
    }

    if (collectionParcelamentoQuantidadeReparcelamentoHelper == null
        || collectionParcelamentoQuantidadeReparcelamentoHelper.isEmpty()) {
      // Informe os dados de Reparcelamento Consecutivo
      throw new ActionServletException("atencao.required", null, "Reparcelamento Consecutivo");
    } else {
      Iterator iterator = collectionParcelamentoQuantidadeReparcelamentoHelper.iterator();

      while (iterator.hasNext()) {

        ParcelamentoQuantidadeReparcelamentoHelper parcelamentoQuantidadeReparcelamentoHelper =
            (ParcelamentoQuantidadeReparcelamentoHelper) iterator.next();
        /*
        if (parcelamentoQuantidadeReparcelamentoHelper.getValorMinimoPrestacao() == null){
         //Informe Valor Mínimo da Prestação
         throw new ActionServletException(
        			"atencao.required", null, "Valor Mínimo da Prestação");
        }*/

        Collection collectionParcelamentoQuantidadePrestacaoHelper =
            parcelamentoQuantidadeReparcelamentoHelper
                .getCollectionParcelamentoQuantidadePrestacaoHelper();

        if (collectionParcelamentoQuantidadePrestacaoHelper == null
            || collectionParcelamentoQuantidadePrestacaoHelper.isEmpty()) {
          // Informações do Parcelamento por Quantidade de Reparcelamentos deve ser informado
          throw new ActionServletException(
              "atencao.campo.informado",
              null,
              "Informações do Parcelamento por Quantidade de Reparcelamentos");
        }
      }
    }

    // filtro para descobrir o percentual máximo de desconto permitido para financiamento
    /*FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro();
    Collection colecaoSistemaParametros;

    	colecaoSistemaParametros = fachada.pesquisar(
    			filtroSistemaParametro, SistemaParametro.class.getName());
    SistemaParametro sistemaParametro = (SistemaParametro)colecaoSistemaParametros
    		.iterator().next();
    BigDecimal percentualMaximoAbatimentoPermitido = sistemaParametro.getPercentualMaximoAbatimento();*/

    if (collectionParcelamentoDescontoAntiguidade != null
        && !collectionParcelamentoDescontoAntiguidade.isEmpty()) {

      Iterator iteratorParcelamentoDescontoAntiguidade =
          collectionParcelamentoDescontoAntiguidade.iterator();

      while (iteratorParcelamentoDescontoAntiguidade.hasNext()) {

        ParcelamentoDescontoAntiguidade parcelamentoDescontoAntiguidade =
            (ParcelamentoDescontoAntiguidade) iteratorParcelamentoDescontoAntiguidade.next();

        if (parcelamentoDescontoAntiguidade.getPercentualDescontoSemRestabelecimento() == null) {
          // Percentual de Desconto Sem Restabelecimento
          throw new ActionServletException(
              "atencao.required", null, "  Percentual de Desconto Sem Restabelecimento");
        } else {
          // [FS0006]Verificar percentual de desconto
          // BigDecimal percentualDescontoSemRestabelecimento =
          // parcelamentoDescontoAntiguidade.getPercentualDescontoSemRestabelecimento();
          /*if (percentualDescontoSemRestabelecimento.compareTo(percentualMaximoAbatimentoPermitido) > 0 ){
          	//Percentual de Desconto Sem Restabelecimento é superior ao
          	//Percentual Máximo de Desconto de << percentualMaximoAbatimento >> permitido para Financiamneto
          	throw new ActionServletException(
          	"atencao.percentual_desconto_sem_rest_superior_percentual_max", null, "" + percentualMaximoAbatimentoPermitido);
          }	*/
        }

        if (parcelamentoDescontoAntiguidade.getPercentualDescontoComRestabelecimento() == null) {
          // Informe  Percentual de Desconto Com Restabelecimento
          throw new ActionServletException(
              "atencao.required", null, "  Percentual de Desconto Com Restabelecimento");
        } else {
          // [FS0006]Verificar percentual de desconto
          // BigDecimal percentualDescontoComRestabelecimento =
          // parcelamentoDescontoAntiguidade.getPercentualDescontoComRestabelecimento();
          /*if (percentualDescontoComRestabelecimento.compareTo(percentualMaximoAbatimentoPermitido) > 0  ){
          	//Percentual de Desconto Cem Restabelecimento é superior ao
          	//Percentual Máximo de Desconto de << percentualMaximoAbatimento >> permitido para Financiamneto
          	throw new ActionServletException(
          	"atencao.percentual_desconto_sem_rest_superior_percentual_max", null, "" + percentualMaximoAbatimentoPermitido);
          }*/
        }

        if (parcelamentoDescontoAntiguidade.getPercentualDescontoAtivo() == null) {
          throw new ActionServletException(
              // Informe  Percentual de Desconto Ativo
              "atencao.required", null, "  Percentual de Desconto Ativo");
        } else {
          // [FS0006]Verificar percentual de desconto
          // BigDecimal percentualDescontoAtivo =
          // parcelamentoDescontoAntiguidade.getPercentualDescontoAtivo();
          /*if (percentualDescontoAtivo.compareTo(percentualMaximoAbatimentoPermitido) > 0  ){
          	//Percentual de Desconto Ativo é superior ao
          	//Percentual Máximo de Desconto de << percentualMaximoAbatimento >> permitido para Financiamneto
          	throw new ActionServletException(
          	"atencao.percentual_desconto_sem_rest_superior_percentual_max", null, "" + percentualMaximoAbatimentoPermitido);
          }	*/
        }
      }
    }

    if (collectionParcelamentoDescontoInatividade != null
        && !collectionParcelamentoDescontoInatividade.isEmpty()) {

      Iterator iteratorParcelamentoDescontoInatividade =
          collectionParcelamentoDescontoInatividade.iterator();

      while (iteratorParcelamentoDescontoInatividade.hasNext()) {

        ParcelamentoDescontoInatividade parcelamentoDescontoInatividade =
            (ParcelamentoDescontoInatividade) iteratorParcelamentoDescontoInatividade.next();

        if (parcelamentoDescontoInatividade.getPercentualDescontoSemRestabelecimento() == null) {
          throw new ActionServletException(
              //  Percentual de Desconto Sem Restabelecimento
              "atencao.required", null, "  Percentual de Desconto Sem Restabelecimento");
        } // else{
        // [FS0006]Verificar percentual de desconto
        // BigDecimal percentualDescontoSemRestabelecimento =
        // parcelamentoDescontoInatividade.getPercentualDescontoSemRestabelecimento();
        /*if (percentualDescontoSemRestabelecimento.compareTo(percentualMaximoAbatimentoPermitido) > 0  ){
        	//Percentual de Desconto Sem Restabelecimento é superior ao
        	//Percentual Máximo de Desconto de << percentualMaximoAbatimento >> permitido para Financiamneto
        	throw new ActionServletException(
        	"atencao.percentual_desconto_sem_rest_superior_percentual_max", null, "" + percentualMaximoAbatimentoPermitido);
        }	*/
        // }

        if (parcelamentoDescontoInatividade.getPercentualDescontoComRestabelecimento() == null) {
          throw new ActionServletException(
              // Informe  Percentual de Desconto Com Restabelecimento
              "atencao.required", null, "  Percentual de Desconto Com Restabelecimento");
        } // else{
        // [FS0006]Verificar percentual de desconto
        // BigDecimal percentualDescontoComRestabelecimento =
        // parcelamentoDescontoInatividade.getPercentualDescontoComRestabelecimento();
        /*if (percentualDescontoComRestabelecimento.compareTo(percentualMaximoAbatimentoPermitido) > 0  ){
        	//Percentual de Desconto Cem Restabelecimento é superior ao
        	//Percentual Máximo de Desconto de << percentualMaximoAbatimento >> permitido para Financiamneto
        	throw new ActionServletException(
        	"atencao.percentual_desconto_sem_rest_superior_percentual_max", null, "" + percentualMaximoAbatimentoPermitido);
        }*/
        // }

      }
    }

    if (collectionParcelamentoDescontoInatividadeAVista != null
        && !collectionParcelamentoDescontoInatividadeAVista.isEmpty()) {

      Iterator iteratorParcelamentoDescontoInatividade =
          collectionParcelamentoDescontoInatividadeAVista.iterator();

      while (iteratorParcelamentoDescontoInatividade.hasNext()) {

        ParcDesctoInativVista parcelamentoDescontoInatividade =
            (ParcDesctoInativVista) iteratorParcelamentoDescontoInatividade.next();

        if (parcelamentoDescontoInatividade.getPercentualDescontoSemRestabelecimento() == null) {
          throw new ActionServletException(
              //  Percentual de Desconto Sem Restabelecimento
              "atencao.required", null, "  Percentual de Desconto Sem Restabelecimento");
        }

        if (parcelamentoDescontoInatividade.getPercentualDescontoComRestabelecimento() == null) {
          throw new ActionServletException(
              // Informe  Percentual de Desconto Com Restabelecimento
              "atencao.required", null, "  Percentual de Desconto Com Restabelecimento");
        }
      }
    }
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = actionMapping.findForward("telaSucesso");
    HttpSession sessao = httpServletRequest.getSession(false);
    ParcelamentoPerfilActionForm parcelamentoPerfilActionForm =
        (ParcelamentoPerfilActionForm) actionForm;

    String idResolucaoDiretoria = parcelamentoPerfilActionForm.getResolucaoDiretoria();
    String idImovelSituacaoTipo = parcelamentoPerfilActionForm.getImovelSituacaoTipo();

    String idImovelPerfil = null;
    if (parcelamentoPerfilActionForm.getImovelPerfil() != null
        && !parcelamentoPerfilActionForm
            .getImovelPerfil()
            .equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      idImovelPerfil = parcelamentoPerfilActionForm.getImovelPerfil();
    }

    String idSubcategoria = null;
    if (parcelamentoPerfilActionForm.getSubcategoria() != null
        && !parcelamentoPerfilActionForm
            .getSubcategoria()
            .equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      idSubcategoria = parcelamentoPerfilActionForm.getSubcategoria();
    }

    String idCategoria = null;
    if (parcelamentoPerfilActionForm.getCategoria() != null
        && !parcelamentoPerfilActionForm
            .getCategoria()
            .equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      idCategoria = parcelamentoPerfilActionForm.getCategoria();
    }

    /*
     *
     */
    String percentualDescontoAcrescimoMulta = null;
    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoMulta() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoMulta()
            .equalsIgnoreCase("")) {
      percentualDescontoAcrescimoMulta =
          parcelamentoPerfilActionForm
              .getPercentualDescontoAcrescimoMulta()
              .toString()
              .replace(",", ".");
    }

    String percentualDescontoAcrescimoJurosMora = null;
    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoJurosMora() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoJurosMora()
            .equalsIgnoreCase("")) {
      percentualDescontoAcrescimoJurosMora =
          parcelamentoPerfilActionForm
              .getPercentualDescontoAcrescimoJurosMora()
              .toString()
              .replace(",", ".");
    }

    String percentualDescontoAcrescimoAtualizacaoMonetaria = null;
    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoAtualizacaoMonetaria() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoAtualizacaoMonetaria()
            .equalsIgnoreCase("")) {
      percentualDescontoAcrescimoAtualizacaoMonetaria =
          parcelamentoPerfilActionForm
              .getPercentualDescontoAcrescimoAtualizacaoMonetaria()
              .toString()
              .replace(",", ".");
    }
    // fim alteração

    String percentualDescontoAcrescimoPagamentoAVista = null;
    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoPagamentoAVista() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoPagamentoAVista()
            .equalsIgnoreCase("")) {
      percentualDescontoAcrescimoPagamentoAVista =
          parcelamentoPerfilActionForm
              .getPercentualDescontoAcrescimoPagamentoAVista()
              .toString()
              .replace(",", ".");
    }

    String percentualTarifaMinimaPrestacao = null;
    if (parcelamentoPerfilActionForm.getPercentualTarifaMinimaPrestacao() != null
        && !parcelamentoPerfilActionForm
            .getPercentualTarifaMinimaPrestacao()
            .equalsIgnoreCase("")) {
      percentualTarifaMinimaPrestacao =
          parcelamentoPerfilActionForm
              .getPercentualTarifaMinimaPrestacao()
              .toString()
              .replace(",", ".");
    }

    atualizaColecoesNaSessao(sessao, httpServletRequest);

    // collectionParcelamentoQuantidadeReparcelamentoHelper
    Collection collectionParcelamentoQuantidadeReparcelamentoHelper = null;
    if (sessao.getAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper") != null) {
      collectionParcelamentoQuantidadeReparcelamentoHelper =
          (Collection) sessao.getAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper");
    }

    // collectionParcelamentoDescontoInatividade
    Collection collectionParcelamentoDescontoInatividade = null;
    if (sessao.getAttribute("collectionParcelamentoDescontoInatividade") != null) {
      collectionParcelamentoDescontoInatividade =
          (Collection) sessao.getAttribute("collectionParcelamentoDescontoInatividade");
    }

    // collectionParcelamentoDescontoAntiguidade
    Collection collectionParcelamentoDescontoAntiguidade = null;
    if (sessao.getAttribute("collectionParcelamentoDescontoAntiguidade") != null) {
      collectionParcelamentoDescontoAntiguidade =
          (Collection) sessao.getAttribute("collectionParcelamentoDescontoAntiguidade");
    }

    // collectionParcelamentoDescontoInatividade
    Collection collectionParcelamentoDescontoInatividadeAVista = null;
    if (sessao.getAttribute("collectionParcelamentoDescontoInatividadeAVista") != null) {
      collectionParcelamentoDescontoInatividadeAVista =
          (Collection) sessao.getAttribute("collectionParcelamentoDescontoInatividadeAVista");
    }

    validacaoFinal(
        idResolucaoDiretoria,
        idImovelSituacaoTipo,
        idImovelPerfil,
        idSubcategoria,
        percentualDescontoAcrescimoMulta,
        percentualDescontoAcrescimoJurosMora,
        percentualDescontoAcrescimoAtualizacaoMonetaria,
        httpServletRequest,
        collectionParcelamentoQuantidadeReparcelamentoHelper,
        collectionParcelamentoDescontoAntiguidade,
        collectionParcelamentoDescontoInatividade,
        percentualTarifaMinimaPrestacao,
        collectionParcelamentoDescontoInatividadeAVista,
        percentualDescontoAcrescimoPagamentoAVista);

    ParcelamentoPerfil parcelamentoPerfilNova = new ParcelamentoPerfil();

    ResolucaoDiretoria resolucaoDiretoria = null;
    if (idResolucaoDiretoria != null && !idResolucaoDiretoria.equals("")) {
      resolucaoDiretoria = new ResolucaoDiretoria();
      resolucaoDiretoria.setId(new Integer(idResolucaoDiretoria));
      parcelamentoPerfilNova.setResolucaoDiretoria(resolucaoDiretoria);
    }

    ImovelSituacaoTipo imovelSituacaoTipo = null;
    if (idImovelSituacaoTipo != null
        && !idImovelSituacaoTipo.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      imovelSituacaoTipo = new ImovelSituacaoTipo();
      imovelSituacaoTipo.setId(new Integer(idImovelSituacaoTipo));
      parcelamentoPerfilNova.setImovelSituacaoTipo(imovelSituacaoTipo);
    }

    ImovelPerfil imovelPerfil = null;
    if (idImovelPerfil != null
        && !idImovelPerfil.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      imovelPerfil = new ImovelPerfil();
      imovelPerfil.setId(new Integer(idImovelPerfil));
    }
    parcelamentoPerfilNova.setImovelPerfil(imovelPerfil);

    Subcategoria subcategoria = null;
    if (idSubcategoria != null
        && !idSubcategoria.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      subcategoria = new Subcategoria();
      subcategoria.setId(new Integer(idSubcategoria));
    }
    parcelamentoPerfilNova.setSubcategoria(subcategoria);

    /*
     *
     */
    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoMulta() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoMulta()
            .equalsIgnoreCase("")) {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoMulta(
          new BigDecimal(percentualDescontoAcrescimoMulta));
    } else {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoMulta(new BigDecimal(0));
    }

    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoJurosMora() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoJurosMora()
            .equalsIgnoreCase("")) {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoJurosMora(
          new BigDecimal(percentualDescontoAcrescimoJurosMora));
    } else {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoJurosMora(new BigDecimal(0));
    }

    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoAtualizacaoMonetaria() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoAtualizacaoMonetaria()
            .equalsIgnoreCase("")) {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoAtualizacaoMonetaria(
          new BigDecimal(percentualDescontoAcrescimoAtualizacaoMonetaria));
    } else {
      parcelamentoPerfilNova.setPercentualDescontoAcrescimoAtualizacaoMonetaria(new BigDecimal(0));
    }
    // fim alteração

    if (parcelamentoPerfilActionForm.getPercentualDescontoAcrescimoPagamentoAVista() != null
        && !parcelamentoPerfilActionForm
            .getPercentualDescontoAcrescimoPagamentoAVista()
            .equalsIgnoreCase("")) {
      parcelamentoPerfilNova.setPercentualDescontoPagamentoAVista(
          new BigDecimal(percentualDescontoAcrescimoPagamentoAVista));
    } else {
      parcelamentoPerfilNova.setPercentualDescontoPagamentoAVista(new BigDecimal(0));
    }

    if (parcelamentoPerfilActionForm.getPercentualTarifaMinimaPrestacao() != null
        && !parcelamentoPerfilActionForm
            .getPercentualTarifaMinimaPrestacao()
            .equalsIgnoreCase("")) {
      parcelamentoPerfilNova.setPercentualTarifaMinimaPrestacao(
          new BigDecimal(percentualTarifaMinimaPrestacao));
    } else {
      parcelamentoPerfilNova.setPercentualTarifaMinimaPrestacao(new BigDecimal(0));
    }

    if (parcelamentoPerfilActionForm.getIndicadorParcelarChequeDevolvido() != null
        && !parcelamentoPerfilActionForm.getIndicadorParcelarChequeDevolvido().equals("")) {
      parcelamentoPerfilNova.setIndicadorChequeDevolvido(
          new Short(parcelamentoPerfilActionForm.getIndicadorParcelarChequeDevolvido()));
    } else {
      throw new ActionServletException(
          "atencao.campo_selecionado.obrigatorio", null, "Não parcelar com cheque devolvido");
    }

    if (parcelamentoPerfilActionForm.getConsumoMinimo() != null
        && !parcelamentoPerfilActionForm.getConsumoMinimo().equals("")) {
      parcelamentoPerfilNova.setNumeroConsumoMinimo(
          new Integer(parcelamentoPerfilActionForm.getConsumoMinimo()));
    }

    if (parcelamentoPerfilActionForm.getPercentualVariacaoConsumoMedio() != null
        && !parcelamentoPerfilActionForm.getPercentualVariacaoConsumoMedio().equals("")) {
      parcelamentoPerfilNova.setPercentualVariacaoConsumoMedio(
          Util.formatarMoedaRealparaBigDecimal(
              parcelamentoPerfilActionForm.getPercentualVariacaoConsumoMedio()));
    }

    if (parcelamentoPerfilActionForm.getIndicadorParcelarSancoesMaisDeUmaConta() != null
        && !parcelamentoPerfilActionForm.getIndicadorParcelarSancoesMaisDeUmaConta().equals("")) {
      parcelamentoPerfilNova.setIndicadorSancoesUnicaConta(
          new Short(parcelamentoPerfilActionForm.getIndicadorParcelarSancoesMaisDeUmaConta()));
    } else {
      throw new ActionServletException(
          "atencao.campo_selecionado.obrigatorio",
          null,
          "Não parcelar com sanções em mais de uma conta");
    }

    /////////////////////////////////////////////
    Categoria categoria = null;
    if (idCategoria != null && !idCategoria.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      categoria = new Categoria();
      categoria.setId(new Integer(idCategoria));
    }
    parcelamentoPerfilNova.setCategoria(categoria);

    if (parcelamentoPerfilActionForm.getNumeroConsumoEconomia() != null
        && !parcelamentoPerfilActionForm.getNumeroConsumoEconomia().trim().equals("")) {
      parcelamentoPerfilNova.setNumeroConsumoEconomia(
          new Integer(parcelamentoPerfilActionForm.getNumeroConsumoEconomia()));
    }

    if (parcelamentoPerfilActionForm.getNumeroAreaConstruida() != null
        && !parcelamentoPerfilActionForm.getNumeroAreaConstruida().trim().equals("")) {
      parcelamentoPerfilNova.setNumeroAreaConstruida(
          Util.formatarMoedaRealparaBigDecimal(
              parcelamentoPerfilActionForm.getNumeroAreaConstruida()));
    }

    if (parcelamentoPerfilActionForm.getIndicadorRetroativoTarifaSocial() != null
        && !parcelamentoPerfilActionForm.getIndicadorRetroativoTarifaSocial().equals("")) {
      parcelamentoPerfilNova.setIndicadorRetroativoTarifaSocial(
          new Short(parcelamentoPerfilActionForm.getIndicadorRetroativoTarifaSocial()));
    } else {
      throw new ActionServletException(
          "atencao.campo_selecionado.obrigatorio",
          null,
          "Indicador de retroativo de tarifa social");
    }

    if (parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteInferior() != null
        && !parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteInferior().trim().equals("")) {
      parcelamentoPerfilNova.setAnoMesReferenciaLimiteInferior(
          new Integer(
              Util.formatarMesAnoParaAnoMesSemBarra(
                  parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteInferior())));
    }

    if (parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteSuperior() != null
        && !parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteSuperior().trim().equals("")) {
      parcelamentoPerfilNova.setAnoMesReferenciaLimiteSuperior(
          new Integer(
              Util.formatarMesAnoParaAnoMesSemBarra(
                  parcelamentoPerfilActionForm.getAnoMesReferenciaLimiteSuperior())));
    }

    if (parcelamentoPerfilActionForm.getPercentualDescontoTarifaSocial() != null
        && !parcelamentoPerfilActionForm.getPercentualDescontoTarifaSocial().trim().equals("")) {
      BigDecimal percentual =
          Util.formatarMoedaRealparaBigDecimal(
              parcelamentoPerfilActionForm.getPercentualDescontoTarifaSocial());
      verificarPercentualMaximo(percentual);
      parcelamentoPerfilNova.setPercentualDescontoTarifaSocial(percentual);
    }

    if (parcelamentoPerfilActionForm.getParcelaQuantidadeMinimaFatura() != null
        && !parcelamentoPerfilActionForm.getParcelaQuantidadeMinimaFatura().trim().equals("")) {
      parcelamentoPerfilNova.setParcelaQuantidadeMinimaFatura(
          new Integer(parcelamentoPerfilActionForm.getParcelaQuantidadeMinimaFatura()));
    }

    if (parcelamentoPerfilActionForm.getIndicadorAlertaParcelaMinima() != null
        && !parcelamentoPerfilActionForm.getIndicadorAlertaParcelaMinima().equals("")) {
      parcelamentoPerfilNova.setIndicadorAlertaParcelaMinima(
          new Short(parcelamentoPerfilActionForm.getIndicadorAlertaParcelaMinima()));
    } else {
      throw new ActionServletException(
          "atencao.campo_selecionado.obrigatorio", null, "Indicador de alerta de parcela mínima");
    }

    if (parcelamentoPerfilActionForm.getPercentualDescontoSancao() != null
        && !parcelamentoPerfilActionForm.getPercentualDescontoSancao().trim().equals("")) {
      BigDecimal percentual =
          Util.formatarMoedaRealparaBigDecimal(
              parcelamentoPerfilActionForm.getPercentualDescontoSancao());
      verificarPercentualMaximo(percentual);
      parcelamentoPerfilNova.setPercentualDescontoSancao(percentual);
    }

    if (parcelamentoPerfilActionForm.getQuantidadeEconomias() != null
        && !parcelamentoPerfilActionForm.getQuantidadeEconomias().trim().equals("")) {
      parcelamentoPerfilNova.setQuantidadeEconomias(
          new Integer(parcelamentoPerfilActionForm.getQuantidadeEconomias()));
    }

    if (parcelamentoPerfilActionForm.getCapacidadeHidrometro() != null
        && !parcelamentoPerfilActionForm.getCapacidadeHidrometro().trim().equals("")) {
      parcelamentoPerfilNova.setCapacidadeHidrometro(
          new Short(parcelamentoPerfilActionForm.getCapacidadeHidrometro()));
    }

    if (parcelamentoPerfilActionForm.getIndicadorEntradaMinima() != null
        && !parcelamentoPerfilActionForm.getIndicadorEntradaMinima().equals("")) {
      parcelamentoPerfilNova.setIndicadorEntradaMinima(
          new Short(parcelamentoPerfilActionForm.getIndicadorEntradaMinima()));
    } else {
      throw new ActionServletException(
          "atencao.campo_selecionado.obrigatorio", null, "Indicador de entrada mínima");
    }

    if (parcelamentoPerfilActionForm.getQuantidadeMaximaReparcelamento() != null
        && !parcelamentoPerfilActionForm.getQuantidadeMaximaReparcelamento().trim().equals("")) {
      parcelamentoPerfilNova.setQuantidadeMaximaReparcelamento(
          new Integer(parcelamentoPerfilActionForm.getQuantidadeMaximaReparcelamento()));
    }

    if (parcelamentoPerfilActionForm.getDataLimiteDescontoPagamentoAVista() != null
        && !parcelamentoPerfilActionForm.getDataLimiteDescontoPagamentoAVista().trim().equals("")) {
      parcelamentoPerfilNova.setDataLimiteDescontoPagamentoAVista(
          Util.converteStringParaDate(
              parcelamentoPerfilActionForm.getDataLimiteDescontoPagamentoAVista()));
    }

    parcelamentoPerfilNova.setUltimaAlteracao(new Date());

    Integer idPerfilParcelamento =
        fachada.inserirPerfilParcelamento(
            parcelamentoPerfilNova,
            collectionParcelamentoQuantidadeReparcelamentoHelper,
            collectionParcelamentoDescontoInatividade,
            collectionParcelamentoDescontoAntiguidade,
            this.getUsuarioLogado(httpServletRequest),
            collectionParcelamentoDescontoInatividadeAVista);

    sessao.removeAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper");
    sessao.removeAttribute("collectionParcelamentoDescontoInatividade");
    sessao.removeAttribute("collectionParcelamentoDescontoAntiguidade");
    sessao.removeAttribute("collectionParcelamentoDescontoInatividadeAVista");

    FiltroResolucaoDiretoria filtroResolucaoDiretoria = new FiltroResolucaoDiretoria();
    filtroResolucaoDiretoria.adicionarParametro(
        new ParametroSimples(FiltroResolucaoDiretoria.CODIGO, idResolucaoDiretoria));
    Collection<ResolucaoDiretoria> collectionResolucaoDiretoria =
        fachada.pesquisar(filtroResolucaoDiretoria, ResolucaoDiretoria.class.getName());
    String numeroResolucaoDiretoria =
        ((ResolucaoDiretoria) Util.retonarObjetoDeColecao(collectionResolucaoDiretoria))
            .getNumeroResolucaoDiretoria();

    montarPaginaSucesso(
        httpServletRequest,
        "Perfil de Parcelamento da RD de número "
            + numeroResolucaoDiretoria
            + " inserido com sucesso.",
        "Inserir outro Perfil de Parcelamento",
        "exibirInserirPerfilParcelamentoAction.do?desfazer=S",
        "exibirAtualizarPerfilParcelamentoAction.do?idRegistroInseridoAtualizar="
            + idPerfilParcelamento,
        "Atualizar Perfil de Parcelamento Inserido");

    // devolve o mapeamento de retorno
    return retorno;
  }
  private void atualizaColecoesNaSessao(HttpSession sessao, HttpServletRequest httpServletRequest) {

    // collectionParcelamentoDescontoAntiguidade
    if (sessao.getAttribute("collectionParcelamentoDescontoAntiguidade") != null
        && !sessao.getAttribute("collectionParcelamentoDescontoAntiguidade").equals("")) {

      Collection collectionParcelamentoDescontoAntiguidade =
          (Collection) sessao.getAttribute("collectionParcelamentoDescontoAntiguidade");
      // cria as variáveis para recuperar os parâmetros do request e jogar
      // no objeto  ParcelamentoDescontoAntiguidade
      String vlSemRestAntiguidade = null;
      String vlComRestAntiguidade = null;
      String vlDescontoAtivo = null;

      Iterator iteratorParcelamentoDescontoAntiguidade =
          collectionParcelamentoDescontoAntiguidade.iterator();

      while (iteratorParcelamentoDescontoAntiguidade.hasNext()) {

        ParcelamentoDescontoAntiguidade parcelamentoDescontoAntiguidade =
            (ParcelamentoDescontoAntiguidade) iteratorParcelamentoDescontoAntiguidade.next();
        long valorTempo = parcelamentoDescontoAntiguidade.getUltimaAlteracao().getTime();
        vlSemRestAntiguidade =
            (String) httpServletRequest.getParameter("vlSemRestAntiguidade" + valorTempo);
        vlComRestAntiguidade = httpServletRequest.getParameter("vlComRestAntiguidade" + valorTempo);
        vlDescontoAtivo = httpServletRequest.getParameter("vlDescontoAtivo" + valorTempo);

        // inseri essas variáveis no objeto ParcelamentoDescontoAntiguidade
        BigDecimal percentualDescontoSemRestabelecimentoAntiguidade = null;
        if (vlSemRestAntiguidade != null && !vlSemRestAntiguidade.equals("")) {

          percentualDescontoSemRestabelecimentoAntiguidade =
              Util.formatarMoedaRealparaBigDecimal(vlSemRestAntiguidade);
        }

        BigDecimal percentualDescontoComRestabelecimentoAntiguidade = null;
        if (vlComRestAntiguidade != null && !vlComRestAntiguidade.equals("")) {

          percentualDescontoComRestabelecimentoAntiguidade =
              Util.formatarMoedaRealparaBigDecimal(vlComRestAntiguidade);
        }

        BigDecimal percentualDescontoAtivoAntiguidade = null;
        if (vlDescontoAtivo != null && !vlDescontoAtivo.equals("")) {

          percentualDescontoAtivoAntiguidade =
              Util.formatarMoedaRealparaBigDecimal(vlDescontoAtivo);
        }

        parcelamentoDescontoAntiguidade.setPercentualDescontoSemRestabelecimento(
            percentualDescontoSemRestabelecimentoAntiguidade);
        parcelamentoDescontoAntiguidade.setPercentualDescontoComRestabelecimento(
            percentualDescontoComRestabelecimentoAntiguidade);
        parcelamentoDescontoAntiguidade.setPercentualDescontoAtivo(
            percentualDescontoAtivoAntiguidade);
      }
    }

    // collectionParcelamentoDescontoInatividade
    if (sessao.getAttribute("collectionParcelamentoDescontoInatividade") != null
        && !sessao.getAttribute("collectionParcelamentoDescontoInatividade").equals("")) {

      Collection collectionParcelamentoDescontoInatividade =
          (Collection) sessao.getAttribute("collectionParcelamentoDescontoInatividade");
      // cria as variáveis para recuperar os parâmetros do request e jogar
      // no objeto  ParcelamentoDescontoInatividade
      String vlSemRestInatividade = null;
      String vlComRestInatividade = null;

      Iterator iteratorParcelamentoDescontoInatividade =
          collectionParcelamentoDescontoInatividade.iterator();

      while (iteratorParcelamentoDescontoInatividade.hasNext()) {

        ParcelamentoDescontoInatividade parcelamentoDescontoInatividade =
            (ParcelamentoDescontoInatividade) iteratorParcelamentoDescontoInatividade.next();
        long valorTempo = parcelamentoDescontoInatividade.getUltimaAlteracao().getTime();
        vlSemRestInatividade =
            (String) httpServletRequest.getParameter("vlSemRestInatividade" + valorTempo);
        vlComRestInatividade = httpServletRequest.getParameter("vlComRestInatividade" + valorTempo);

        // insere essas variáveis no objeto ParcelamentoDescontoInatividade
        BigDecimal percentualDescontoSemRestabelecimentoInatividade = null;
        if (vlSemRestInatividade != null && !vlSemRestInatividade.equals("")) {

          percentualDescontoSemRestabelecimentoInatividade =
              Util.formatarMoedaRealparaBigDecimal(vlSemRestInatividade);
        }

        BigDecimal percentualDescontoComRestabelecimentoInatividade = null;
        if (vlComRestInatividade != null && !vlComRestInatividade.equals("")) {

          percentualDescontoComRestabelecimentoInatividade =
              Util.formatarMoedaRealparaBigDecimal(vlComRestInatividade);
        }

        parcelamentoDescontoInatividade.setPercentualDescontoSemRestabelecimento(
            percentualDescontoSemRestabelecimentoInatividade);
        parcelamentoDescontoInatividade.setPercentualDescontoComRestabelecimento(
            percentualDescontoComRestabelecimentoInatividade);
      }
    }

    // collectionParcelamentoQuantidadeReparcelamentoHelper
    /*
    if (sessao.getAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper") != null
    && !sessao.getAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper").equals(
    	"")) {

    	Collection collectionParcelamentoQuantidadeReparcelamentoHelper = (Collection) sessao
    		.getAttribute("collectionParcelamentoQuantidadeReparcelamentoHelper");
    	// cria as variáveis para recuperar os parâmetros do request e jogar
    	// no objeto  ParcelamentoQuantidadeReparcelamentoHelper
    	String vlMinPrest = null;

    	Iterator iteratorParcelamentoQuantidadeReparcelamentoHelper =
    		collectionParcelamentoQuantidadeReparcelamentoHelper.iterator();

    	while (iteratorParcelamentoQuantidadeReparcelamentoHelper.hasNext()) {
    		ParcelamentoQuantidadeReparcelamentoHelper parcelamentoQuantidadeReparcelamentoHelper =
    			(ParcelamentoQuantidadeReparcelamentoHelper) iteratorParcelamentoQuantidadeReparcelamentoHelper
    			.next();
    		long valorTempo = parcelamentoQuantidadeReparcelamentoHelper.getUltimaAlteracao()
    			.getTime();
    		vlMinPrest = (String) httpServletRequest.getParameter("vlMinPrest"
    			+ valorTempo);

    		// insere essas variáveis no objeto ParcelamentoQuantidadeReparcelamentoHelper
    		BigDecimal valorMinimoPrestacao  = null;
    		if (vlMinPrest != null
    			&& !vlMinPrest.equals("")) {
    		valorMinimoPrestacao = Util.formatarMoedaRealparaBigDecimal(vlMinPrest);
    		}

    		parcelamentoQuantidadeReparcelamentoHelper.setValorMinimoPrestacao(valorMinimoPrestacao);

    	}
    }	*/
  }
  private void validarDadosDebito(
      AtualizarComandoNegativacaoPorCriterioActionForm form, Fachada fachada) {
    Date dataAtual = new Date();
    Integer referenciaDataAtual = Util.getAnoMesComoInteger(dataAtual);

    // Período de Referência do Débito
    if (form.getReferenciaInicial() != null
        && !form.getReferenciaInicial().equals("")
        && form.getReferenciaFinal() != null
        && !form.getReferenciaFinal().equals("")) {
      Integer referenciaInicial =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial());
      Integer referenciaFinal = Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal());
      if (!Util.validarMesAno(form.getReferenciaInicial())
          || !Util.validarMesAno(form.getReferenciaFinal())) {
        throw new ActionServletException(
            "atencao.adicionar_debito_ano_mes_referencia_invalido", null, "do débito");
      } else if (referenciaInicial > referenciaFinal) {
        throw new ActionServletException("atencao.referencia.final.menor.referencia.inicial");
      } else if (referenciaDataAtual < referenciaInicial) {
        throw new ActionServletException("atencao.referencia.posterior");
      } else if (referenciaDataAtual < referenciaFinal) {
        throw new ActionServletException("atencao.referencia.posterior");
      }
    }

    FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro();
    Collection<SistemaParametro> collectionSistemaParametro =
        fachada.pesquisar(filtroSistemaParametro, SistemaParametro.class.getName());
    SistemaParametro sistemaParametro =
        (SistemaParametro) collectionSistemaParametro.iterator().next();

    // Período de referência do débito
    Integer referenciaMinima =
        Util.subtrairAnoAnoMesReferencia(sistemaParametro.getAnoMesArrecadacao(), 5);

    if (form.getReferenciaInicial() != null && !form.getReferenciaInicial().equals("")) {
      Integer referenciaDebInicialInformado =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial());
      if (referenciaDebInicialInformado < referenciaMinima) {
        throw new ActionServletException("atencao.periodo_referencia_debito_minimo");
      }
    }

    if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
      Integer referenciaDebFinalInformado =
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal());
      if (referenciaDebFinalInformado < referenciaMinima) {
        throw new ActionServletException("atencao.periodo_referencia_debito_minimo");
      }
    }

    // Período de vencimento do débito
    Integer numeroDiasVencimentoCobranca =
        new Integer(sistemaParametro.getNumeroDiasVencimentoCobranca());
    Date dataMinima =
        Util.subtrairNumeroAnosDeUmaData(
            Util.subtrairNumeroDiasDeUmaData(new Date(), numeroDiasVencimentoCobranca), -5);

    if (form.getDataVencimentoInicial() != null && !form.getDataVencimentoInicial().equals("")) {
      if (Util.validarDiaMesAno(form.getDataVencimentoInicial())) {
        throw new ActionServletException("atencao.datavencimentodebinicial.invalida");
      }
      Date vencimentoDebInicialInformado =
          Util.converteStringParaDate(form.getDataVencimentoInicial());
      if (Util.compararData(vencimentoDebInicialInformado, dataAtual) == 1) {
        throw new ActionServletException(
            "atencao.data_inicial.posterior.hoje", null, Util.formatarData(new Date()));
      }
      if (Util.compararData(vencimentoDebInicialInformado, dataMinima) == -1) {
        throw new ActionServletException("atencao.periodo_vencimento_debito_minimo");
      }
    }

    if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
      Date vencimentoDebFinalInformado = Util.converteStringParaDate(form.getDataVencimentoFinal());
      if (Util.validarDiaMesAno(form.getDataVencimentoFinal())) {
        throw new ActionServletException("atencao.datavencimentodebfinal.invalida");
      } else if (Util.compararData(vencimentoDebFinalInformado, dataAtual) == 1) {
        throw new ActionServletException(
            "atencao.data_final.posterior.hoje", null, Util.formatarData(new Date()));
      } else if (Util.compararData(vencimentoDebFinalInformado, dataMinima) == -1) {
        throw new ActionServletException("atencao.periodo_vencimento_debito_minimo");
      }
    }

    if (form.getDataVencimentoInicial() != null
        && !form.getDataVencimentoInicial().equals("")
        && form.getDataVencimentoFinal() != null
        && !form.getDataVencimentoFinal().equals("")) {
      Date vencimentoDebInicial = Util.converteStringParaDate(form.getDataVencimentoInicial());
      Date vencimentoDebFinal = Util.converteStringParaDate(form.getDataVencimentoFinal());

      if (Util.compararData(vencimentoDebInicial, vencimentoDebFinal) == 1) {
        throw new ActionServletException( // Data Final do Período é
            // anterior à Data Inicial
            // do Período
            "atencao.data_final_periodo.anterior.data_inicial_periodo");
      }
    }

    // Valor do Débito
    if (form.getValorDebitoInicial() != null
        && !form.getValorDebitoInicial().equals("")
        && form.getValorDebitoFinal() != null
        && !form.getValorDebitoFinal().equals("")) {
      BigDecimal valorDebInicial =
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoInicial());
      BigDecimal valorDebFinal = Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoFinal());
      if (valorDebInicial.compareTo(valorDebFinal) == 1) {
        throw new ActionServletException("atencao.debito_inicial_maior_debito_final");
      }
    }

    // Número de Contas
    if (form.getNumeroContasInicial() != null
        && !form.getNumeroContasInicial().equals("")
        && form.getNumeroContasFinal() != null
        && !form.getNumeroContasFinal().equals("")) {
      Integer contaInicial = new Integer(form.getNumeroContasInicial());
      Integer contaFinal = new Integer(form.getNumeroContasFinal());
      if (contaInicial.compareTo(contaFinal) == 1) {
        throw new ActionServletException("atencao.numero_conta_inicial_maior_final");
      }
    }

    // Parcela em Atraso
    if ((form.getParcelaAtraso() != null && form.getParcelaAtraso().equals("1"))
        && (form.getDiasAtrasoParcelamento() == null
            || form.getDiasAtrasoParcelamento().equals(""))) {
      throw new ActionServletException("atencao.informar_dias_atraso_parcelamento");
    }

    // Recebeu Carta de Parcelamento em Atraso
    if ((form.getCartaParcelamentoAtraso() != null && form.getCartaParcelamentoAtraso().equals("1"))
        && (form.getDiasAtrasoRecebimentoCarta() == null
            || form.getDiasAtrasoRecebimentoCarta().equals(""))) {
      throw new ActionServletException("atencao.informar_dias_atraso_parcelamento");
    }
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

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

    AtualizarComandoNegativacaoPorCriterioActionForm form =
        (AtualizarComandoNegativacaoPorCriterioActionForm) actionForm;

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    InserirComandoNegativacaoPorCriterioHelper helper =
        new InserirComandoNegativacaoPorCriterioHelper();

    /*
     * Validação Aba 2
     */
    validarDadosDebito(form, fachada);

    /*
     * Validação Aba 3
     */
    validarDadosImovel(form, fachada);

    /*
     * Validação Aba 4
     */
    validarDadosLocalizacao(form, fachada);

    // [SB0004] - Incluir Comando Negativação por Critério
    // Dados Negativação Comando
    NegativacaoComando negativacaoComando = new NegativacaoComando();
    negativacaoComando.setId(Integer.parseInt(form.getIdNegativacaoComando()));
    negativacaoComando.setUltimaAlteracao(form.getUltimaAlteracaoNegComando());
    negativacaoComando.setIndicadorSimulacao(new Short(form.getSimular()));
    negativacaoComando.setIndicadorComandoCriterio(new Short("1"));
    negativacaoComando.setDataPrevista(Util.converteStringParaDate(form.getDataPrevista()));
    negativacaoComando.setDataHoraComando(new Date());
    Usuario usuario = new Usuario();
    usuario.setId(new Integer(form.getUsuario()));
    negativacaoComando.setUsuario(usuario);
    Negativador negativador = new Negativador();
    negativador.setId(new Integer(form.getNegativadorId()));
    negativacaoComando.setNegativador(negativador);
    if (form.getIdComandoSimulado() != null && !form.getIdComandoSimulado().equals("")) {
      NegativacaoComando negComandoSimulacao = new NegativacaoComando();
      negComandoSimulacao.setId(new Integer(form.getIdComandoSimulado()));
      negativacaoComando.setComandoSimulacao(negComandoSimulacao);
    }

    if (form.getIndicadorBaixaRenda() != null && !form.getIndicadorBaixaRenda().equals("")) {
      negativacaoComando.setIndicadorBaixaRenda(
          new Integer(form.getIndicadorBaixaRenda()).shortValue());
    } else {
      negativacaoComando.setIndicadorBaixaRenda(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }

    if (form.getIndicadorContaNomeCliente() != null
        && !form.getIndicadorContaNomeCliente().equals("")) {
      negativacaoComando.setIndicadorContaNomeCliente(
          new Short(form.getIndicadorContaNomeCliente()));
    } else {
      negativacaoComando.setIndicadorContaNomeCliente(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }

    helper.setNegativacaoComando(negativacaoComando);

    // Dados Negativacao Critério
    NegativacaoCriterio negativacaoCriterio = new NegativacaoCriterio();
    negativacaoCriterio.setId(Integer.parseInt(form.getIdNegativacaoCriterio()));
    negativacaoCriterio.setNegativacaoComando(negativacaoComando);
    negativacaoCriterio.setDescricaoTitulo(form.getTitulo());
    negativacaoCriterio.setDescricaoSolicitacao(form.getSolicitacao());
    if (form.getIdLocalidadeInicial() != null && !form.getIdLocalidadeInicial().equals("")) {
      Localidade localidade = new Localidade();
      localidade.setId(new Integer(form.getIdLocalidadeInicial()));
      negativacaoCriterio.setLocalidadeInicial(localidade);
    }
    if (form.getIdLocalidadeFinal() != null && !form.getIdLocalidadeFinal().equals("")) {
      Localidade localidade = new Localidade();
      localidade.setId(new Integer(form.getIdLocalidadeFinal()));
      negativacaoCriterio.setLocalidadeFinal(localidade);
    }
    if (form.getCodigoSetorComercialInicial() != null
        && !form.getCodigoSetorComercialInicial().equals("")) {
      negativacaoCriterio.setCodigoSetorComercialInicial(
          new Integer(form.getCodigoSetorComercialInicial()));
    }
    if (form.getCodigoSetorComercialFinal() != null
        && !form.getCodigoSetorComercialFinal().equals("")) {
      negativacaoCriterio.setCodigoSetorComercialFinal(
          new Integer(form.getCodigoSetorComercialFinal()));
    }
    if (form.getReferenciaInicial() != null && !form.getReferenciaInicial().equals("")) {
      negativacaoCriterio.setAnoMesReferenciaContaInicial(
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaInicial()));
    } else {
      Date dataReferenciaInicial = null;
      if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
        dataReferenciaInicial =
            Util.subtrairNumeroAnosDeUmaData(
                Util.converteStringParaDate("01/" + form.getReferenciaFinal()), -5);
      } else {
        dataReferenciaInicial = Util.subtrairNumeroAnosDeUmaData(new Date(), -5);
      }
      negativacaoCriterio.setAnoMesReferenciaContaInicial(
          Util.formataAnoMes(dataReferenciaInicial));
    }
    if (form.getReferenciaFinal() != null && !form.getReferenciaFinal().equals("")) {
      negativacaoCriterio.setAnoMesReferenciaContaFinal(
          Util.formatarMesAnoComBarraParaAnoMes(form.getReferenciaFinal()));
    } else {
      negativacaoCriterio.setAnoMesReferenciaContaFinal(Util.formataAnoMes(new Date()));
    }
    if (form.getDataVencimentoInicial() != null && !form.getDataVencimentoInicial().equals("")) {
      negativacaoCriterio.setDataVencimentoDebitoInicial(
          Util.converteStringParaDate(form.getDataVencimentoInicial()));
    } else {
      Date dataVencimentoDebitoInicial = null;
      if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
        dataVencimentoDebitoInicial =
            Util.subtrairNumeroAnosDeUmaData(
                Util.converteStringParaDate(form.getDataVencimentoFinal()), -5);
      } else {
        dataVencimentoDebitoInicial = Util.subtrairNumeroAnosDeUmaData(new Date(), -5);
      }
      negativacaoCriterio.setDataVencimentoDebitoInicial(dataVencimentoDebitoInicial);
    }
    if (form.getDataVencimentoFinal() != null && !form.getDataVencimentoFinal().equals("")) {
      negativacaoCriterio.setDataVencimentoDebitoFinal(
          Util.converteStringParaDate(form.getDataVencimentoFinal()));
    } else {
      negativacaoCriterio.setDataVencimentoDebitoFinal(new Date());
    }
    if (form.getQtdMaximaInclusao() != null && !form.getQtdMaximaInclusao().equals("")) {
      negativacaoCriterio.setQuantidadeMaximaInclusoes(new Integer(form.getQtdMaximaInclusao()));
    }
    if (form.getImovSitEspecialCobranca() != null
        && !form.getImovSitEspecialCobranca().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoImovelParalisacao(
          new Short(form.getImovSitEspecialCobranca()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoImovelParalisacao(
          ConstantesSistema.INDICADOR_USO_ATIVO);
    }
    if (form.getImovSitCobranca() != null && !form.getImovSitCobranca().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoImovelSituacaoCobranca(
          new Short(form.getImovSitCobranca()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoImovelSituacaoCobranca(
          ConstantesSistema.INDICADOR_USO_ATIVO);
    }
    if (form.getContasRevisao() != null && !form.getContasRevisao().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoContaRevisao(new Short(form.getContasRevisao()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoContaRevisao(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getGuiasPagamento() != null && !form.getGuiasPagamento().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoGuiaPagamento(new Short(form.getGuiasPagamento()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoGuiaPagamento(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getParcelaAtraso() != null && !form.getParcelaAtraso().equals("")) {
      negativacaoCriterio.setIndicadorParcelamentoAtraso(new Short(form.getParcelaAtraso()));
    } else {
      negativacaoCriterio.setIndicadorParcelamentoAtraso(ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getDiasAtrasoParcelamento() != null && !form.getDiasAtrasoParcelamento().equals("")) {
      negativacaoCriterio.setNumeroDiasParcelamentoAtraso(
          new Integer(form.getDiasAtrasoParcelamento()));
    }
    if (form.getCartaParcelamentoAtraso() != null
        && !form.getCartaParcelamentoAtraso().equals("")) {
      negativacaoCriterio.setIndicadorNegativacaoRecebimentoCartaParcelamento(
          new Short(form.getCartaParcelamentoAtraso()));
    } else {
      negativacaoCriterio.setIndicadorNegativacaoRecebimentoCartaParcelamento(
          ConstantesSistema.INDICADOR_USO_DESATIVO);
    }
    if (form.getDiasAtrasoRecebimentoCarta() != null
        && !form.getDiasAtrasoRecebimentoCarta().equals("")) {
      negativacaoCriterio.setNumeroDiasAtrasoRecebimentoCartaParcelamento(
          new Short(form.getDiasAtrasoRecebimentoCarta()));
    }
    if (form.getIdCliente() != null && !form.getIdCliente().equals("")) {
      Cliente cliente = new Cliente();
      cliente.setId(new Integer(form.getIdCliente()));
      negativacaoCriterio.setCliente(cliente);
      if (form.getTipoRelacao() != null
          && !form.getTipoRelacao().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
        ClienteRelacaoTipo relacaoTipo = new ClienteRelacaoTipo();
        relacaoTipo.setId(new Integer(form.getTipoRelacao()));
        negativacaoCriterio.setClienteRelacaoTipo(relacaoTipo);
      }
    }
    negativacaoCriterio.setIndicadorUso(ConstantesSistema.INDICADOR_USO_ATIVO);
    if (form.getValorDebitoInicial() != null && !form.getValorDebitoInicial().equals("")) {
      negativacaoCriterio.setValorMinimoDebito(
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoInicial()));
    } else {
      negativacaoCriterio.setValorMinimoDebito(Util.formatarMoedaRealparaBigDecimal("0"));
    }
    if (form.getValorDebitoFinal() != null && !form.getValorDebitoFinal().equals("")) {
      negativacaoCriterio.setValorMaximoDebito(
          Util.formatarMoedaRealparaBigDecimal(form.getValorDebitoFinal()));
    } else {
      negativacaoCriterio.setValorMaximoDebito(
          Util.formatarMoedaRealparaBigDecimal("99999999999,99"));
    }
    if (form.getNumeroContasInicial() != null && !form.getNumeroContasInicial().equals("")) {
      negativacaoCriterio.setQuantidadeMinimaContas(new Integer(form.getNumeroContasInicial()));
    } else {
      negativacaoCriterio.setQuantidadeMinimaContas(0);
    }
    if (form.getNumeroContasFinal() != null && !form.getNumeroContasFinal().equals("")) {
      negativacaoCriterio.setQuantidadeMaximaContas(new Integer(form.getNumeroContasFinal()));
    } else {
      negativacaoCriterio.setQuantidadeMaximaContas(999999999);
    }
    helper.setNegativacaoCriterio(negativacaoCriterio);

    // Situação Especial Cobranca
    if (negativacaoCriterio.getIndicadorNegativacaoImovelParalisacao()
            == ConstantesSistema.INDICADOR_USO_ATIVO.shortValue()
        && form.getCobrancaSituacaoTipo() != null
        && form.getCobrancaSituacaoTipo().length > 0) {

      helper.setIdsCobrancaSituacaoTipo(form.getCobrancaSituacaoTipo());
    }

    // Situação Cobranca
    if (negativacaoCriterio.getIndicadorNegativacaoImovelSituacaoCobranca()
            == ConstantesSistema.INDICADOR_USO_ATIVO.shortValue()
        && form.getCobrancaSituacao() != null
        && form.getCobrancaSituacao().length > 0) {

      helper.setIdsCobrancaSituacao(form.getCobrancaSituacao());
    }

    // Negativacao Criterio CPF Tipo
    helper.setColecaoNegativacaoCriterioCpfTipo(
        (Collection) sessao.getAttribute("colecaoNegativacaoCriterioCpfTipo"));

    // Situação da Ligação de Água
    if (form.getLigacaoAguaSituacao() != null && form.getLigacaoAguaSituacao().length > 0) {
      helper.setIdsLigacaoAguaSituacao(form.getLigacaoAguaSituacao());
    }
    // Situação da Ligação de Esgoto
    if (form.getLigacaoEsgotoSituacao() != null && form.getLigacaoEsgotoSituacao().length > 0) {
      helper.setIdsLigacaoEsgotoSituacao(form.getLigacaoEsgotoSituacao());
    }
    // SubCategoria
    if (form.getSubCategoria() != null && form.getSubCategoria().length > 0) {
      helper.setIdsSubcategoria(form.getSubCategoria());
    }
    // Perfil de Imóvel
    if (form.getPerfilImovel() != null && form.getPerfilImovel().length > 0) {
      helper.setIdsPerfilImovel(form.getPerfilImovel());
    }
    // Tipo de Cliente
    if (form.getTipoCliente() != null && form.getTipoCliente().length > 0) {
      helper.setIdsTipoCliente(form.getTipoCliente());
    }

    // GrupoCobranca
    if (form.getCobrancaGrupo() != null && form.getCobrancaGrupo().length > 0) {
      helper.setIdsCobrancaGrupo(form.getCobrancaGrupo());
    }
    // Gerência Regional
    if (form.getGerenciaRegional() != null && form.getGerenciaRegional().length > 0) {
      helper.setIdsGerenciaRegional(form.getGerenciaRegional());
    }
    // Unidade Negócio
    if (form.getUnidadeNegocio() != null && form.getUnidadeNegocio().length > 0) {
      helper.setIdsUnidadeNegocio(form.getUnidadeNegocio());
    }
    // Elo
    if (form.getEloPolo() != null && form.getEloPolo().length > 0) {
      helper.setIdsEloPolo(form.getEloPolo());
    }

    /*
     * if (form.getIndicadorBaixaRenda() != null &&
     * !form.getIndicadorBaixaRenda().equals("")) {
     * helper.setIndicadorBaixaRenda(form.getIndicadorBaixaRenda()); } else
     * {
     * helper.setIndicadorBaixaRenda(ConstantesSistema.INDICADOR_USO_DESATIVO
     * .toString()); }
     */

    // [SB0002]- Atualizar Comando de Negativação por Critério
    fachada.atualizarComandoNegativacao(helper);

    // Monta a página de sucesso
    montarPaginaSucesso(
        httpServletRequest,
        "Comando Negativação atualizado com sucesso.",
        "Manter outro Comando Negativação",
        "exibirFiltrarComandoNegativacaoPorCriterioAction.do?menu=sim");

    return retorno;
  }
  /**
   * [UC0360] Efetuar Supressao de Água
   *
   * <p>Este caso de uso permite efetuar supressão da ligação de água, sendo chamada pela
   * funcionalidade que encerra a execução da ordem de serviço ou chamada diretamente do menu.
   *
   * @param actionMapping Description of the Parameter
   * @param actionForm Description of the Parameter
   * @param httpServletRequest Description of the Parameter
   * @param httpServletResponse Description of the Parameter
   * @return Description of the Return Value
   */
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // Set no mapeamento de retorno
    ActionForward retorno = actionMapping.findForward("telaSucesso");

    // Obtém a instância da fachada
    Fachada fachada = Fachada.getInstancia();

    HttpSession sessao = httpServletRequest.getSession(false);

    EfetuarSupressaoLigacaoAguaActionForm efetuarSupressaoLigacaoAguaActionForm =
        (EfetuarSupressaoLigacaoAguaActionForm) actionForm;

    IntegracaoComercialHelper integracaoComercialHelper = new IntegracaoComercialHelper();

    OrdemServico ordemServico = (OrdemServico) sessao.getAttribute("ordemServico");

    // Usuario logado no sistema
    Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
    integracaoComercialHelper.setUsuarioLogado(usuario);

    // Ordem de serviço

    String idOrdemServico = efetuarSupressaoLigacaoAguaActionForm.getIdOrdemServico();
    String motivoSupressao = efetuarSupressaoLigacaoAguaActionForm.getMotivoSupressao();
    String numeroLeituraSupressao =
        efetuarSupressaoLigacaoAguaActionForm.getNumeroLeituraSupressao();
    String tipoSupressao = efetuarSupressaoLigacaoAguaActionForm.getTipoSupressao();
    String numeroSeloSupressao = efetuarSupressaoLigacaoAguaActionForm.getNumeroSeloSupressao();
    String indicadorTipoSupressao =
        efetuarSupressaoLigacaoAguaActionForm.getIndicadorTipoSupressao();
    String dataEncerramento = efetuarSupressaoLigacaoAguaActionForm.getDataSupressao();
    String idServicoMotivoNaoCobranca =
        efetuarSupressaoLigacaoAguaActionForm.getMotivoNaoCobranca();
    String valorPercentual = efetuarSupressaoLigacaoAguaActionForm.getPercentualCobranca();

    // Comentado por Raphael Rossiter em 28/02/2007
    // Imovel imovel = ordemServico.getRegistroAtendimento().getImovel();
    Imovel imovel = ordemServico.getImovel();

    FiltroImovel filtroImovel = new FiltroImovel();

    filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, imovel.getId()));

    filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");

    Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName());

    imovel = (Imovel) colecaoImovel.iterator().next();

    // [SB0001] - Atualizar Ligacao Agua

    // validar Data Corte
    Date dataSupressao = null;
    if (dataEncerramento != null && !dataEncerramento.equals("")) {
      dataSupressao = Util.converteStringParaDate(dataEncerramento);
    } else {
      throw new ActionServletException("atencao.required", null, " Data do Corte");
    }

    SupressaoTipo supressaoTipo = new SupressaoTipo();
    supressaoTipo.setId(new Integer(tipoSupressao));

    LigacaoAguaSituacao ligacaoAguaSituacao = new LigacaoAguaSituacao();

    if (indicadorTipoSupressao.equals("1")) {
      ligacaoAguaSituacao.setId(LigacaoAguaSituacao.SUPRIMIDO);

      supressaoTipo.setIndicadorTotal(ConstantesSistema.INDICADOR_USO_ATIVO);
    } else {
      ligacaoAguaSituacao.setId(LigacaoAguaSituacao.SUPR_PARC_PEDIDO);
      supressaoTipo.setIndicadorParcial(ConstantesSistema.INDICADOR_USO_ATIVO);
    }

    SupressaoMotivo supressaoMotivo = new SupressaoMotivo();
    supressaoMotivo.setId(new Integer(motivoSupressao));

    FiltroLigacaoAgua filtroLigacaoAgua = new FiltroLigacaoAgua();
    filtroLigacaoAgua.adicionarCaminhoParaCarregamentoEntidade(
        FiltroLigacaoAgua.HIDROMETRO_INSTALACAO_HISTORICO);
    filtroLigacaoAgua.adicionarParametro(
        new ParametroSimples(FiltroLigacaoAgua.ID, imovel.getLigacaoAgua().getId()));

    Collection colecaoLigacaoAgua =
        fachada.pesquisar(filtroLigacaoAgua, LigacaoAgua.class.getName());

    filtroLigacaoAgua.adicionarCaminhoParaCarregamentoEntidade("hidrometroInstalacaoHistorico");

    LigacaoAgua ligacaoAgua = (LigacaoAgua) colecaoLigacaoAgua.iterator().next();

    if (ligacaoAgua.getHidrometroInstalacaoHistorico() != null) {
      FiltroHidrometroInstalacaoHistorico filtroHidrometroInstalacaoHistorico =
          new FiltroHidrometroInstalacaoHistorico();

      filtroHidrometroInstalacaoHistorico.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroInstalacaoHistorico.ID,
              ligacaoAgua.getHidrometroInstalacaoHistorico().getId()));

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("imovel");

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade(
          "hidrometroProtecao");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("hidrometro");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("rateioTipo");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade(
          "hidrometroLocalInstalacao");

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("rateioTipo");

      Collection colecaoHidrometroInstalacaHistorico =
          fachada.pesquisar(
              filtroHidrometroInstalacaoHistorico, HidrometroInstalacaoHistorico.class.getName());

      HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
          (HidrometroInstalacaoHistorico) colecaoHidrometroInstalacaHistorico.iterator().next();

      if (hidrometroInstalacaoHistorico != null && numeroLeituraSupressao != null) {

        if (numeroLeituraSupressao != null && !numeroLeituraSupressao.equals("")) {
          hidrometroInstalacaoHistorico.setNumeroLeituraSupressao(
              new Integer(numeroLeituraSupressao));
        }

        hidrometroInstalacaoHistorico.setUltimaAlteracao(new Date());

        ligacaoAgua.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
      }

      integracaoComercialHelper.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
    }
    ligacaoAgua.setDataSupressao(dataSupressao);
    if (numeroSeloSupressao != null && !numeroSeloSupressao.equals("")) {
      ligacaoAgua.setNumeroSeloSupressao(new Integer(numeroSeloSupressao));
    }

    // ligacaoAgua.setDataSupressao(ordemServico.getDataEncerramento());
    ligacaoAgua.setSupressaoTipo(supressaoTipo);
    ligacaoAgua.setSupressaoMotivo(supressaoMotivo);
    ligacaoAgua.setUltimaAlteracao(new Date());

    imovel.setLigacaoAguaSituacao(ligacaoAguaSituacao);
    imovel.setLigacaoAgua(ligacaoAgua);
    imovel.setUltimaAlteracao(new Date());

    BigDecimal valorAtual = new BigDecimal(0);

    if (ordemServico != null && efetuarSupressaoLigacaoAguaActionForm.getIdTipoDebito() != null) {

      ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;

      ordemServico.setIndicadorComercialAtualizado(ConstantesSistema.SIM);

      if (efetuarSupressaoLigacaoAguaActionForm.getValorDebito() != null) {
        String valorDebito =
            efetuarSupressaoLigacaoAguaActionForm.getValorDebito().toString().replace(".", "");

        valorDebito = valorDebito.replace(",", ".");

        valorAtual = new BigDecimal(valorDebito);

        ordemServico.setValorAtual(valorAtual);
      }

      if (idServicoMotivoNaoCobranca != null && !idServicoMotivoNaoCobranca.equals("-1")) {
        servicoNaoCobrancaMotivo = new ServicoNaoCobrancaMotivo();
        servicoNaoCobrancaMotivo.setId(new Integer(idServicoMotivoNaoCobranca));
      }
      ordemServico.setServicoNaoCobrancaMotivo(servicoNaoCobrancaMotivo);

      if (valorPercentual != null) {
        ordemServico.setPercentualCobranca(
            new BigDecimal(efetuarSupressaoLigacaoAguaActionForm.getPercentualCobranca()));
      }

      ordemServico.setUltimaAlteracao(new Date());
    }

    String qtdParcelas = efetuarSupressaoLigacaoAguaActionForm.getQuantidadeParcelas();

    integracaoComercialHelper.setLigacaoAgua(ligacaoAgua);

    integracaoComercialHelper.setImovel(imovel);
    integracaoComercialHelper.setOrdemServico(ordemServico);
    integracaoComercialHelper.setQtdParcelas(qtdParcelas);

    if (efetuarSupressaoLigacaoAguaActionForm.getVeioEncerrarOS().equalsIgnoreCase("FALSE")) {
      integracaoComercialHelper.setVeioEncerrarOS(Boolean.FALSE);

      fachada.efetuarSupressaoLigacaoAgua(integracaoComercialHelper);
    } else {
      integracaoComercialHelper.setVeioEncerrarOS(Boolean.TRUE);
      sessao.setAttribute("integracaoComercialHelper", integracaoComercialHelper);

      if (sessao.getAttribute("semMenu") == null) {
        retorno = actionMapping.findForward("encerrarOrdemServicoAction");
      } else {
        retorno = actionMapping.findForward("encerrarOrdemServicoPopupAction");
      }
      sessao.removeAttribute("caminhoRetornoIntegracaoComercial");
    }
    if (retorno.getName().equalsIgnoreCase("telaSucesso")) {
      montarPaginaSucesso(
          httpServletRequest,
          "Supressão da Ligação de Água para o imóvel " + imovel.getId() + " efetuada com sucesso.",
          "Efetuar outra Supressão da Ligação de Água",
          "exibirEfetuarSupressaoLigacaoAguaAction.do?menu=sim",
          "exibirEfetuarSupressaoLigacaoAguaAction.do?idOrdemServico=" + idOrdemServico + "",
          "Atualizar Supressão de Ligação de Água");
    }

    return retorno;
  }
  private void atualizaColecoesNaSessao(HttpSession sessao, HttpServletRequest httpServletRequest) {

    // collectionParcelamentoQuantidadePrestacaoHelper
    if (sessao.getAttribute("collectionParcelamentoQuantidadePrestacaoHelper") != null
        && !sessao.getAttribute("collectionParcelamentoQuantidadePrestacaoHelper").equals("")) {

      Collection collectionParcelamentoQuantidadePrestacaoHelper =
          (Collection) sessao.getAttribute("collectionParcelamentoQuantidadePrestacaoHelper");
      // cria as variáveis para recuperar os parâmetros do request e jogar
      // no objeto  ParcelamentoQuantidadePrestacao
      String txJuros = null;
      String percMinEntrada = null;
      String percTarMinImovel = null;
      String percVlReparcelado = null;

      Iterator iteratorParcelamentoQuantidadePrestacaoHelper =
          collectionParcelamentoQuantidadePrestacaoHelper.iterator();

      while (iteratorParcelamentoQuantidadePrestacaoHelper.hasNext()) {
        ParcelamentoQuantidadePrestacaoHelper parcelamentoQuantidadePrestacaoHelper =
            (ParcelamentoQuantidadePrestacaoHelper)
                iteratorParcelamentoQuantidadePrestacaoHelper.next();

        ParcelamentoQuantidadePrestacao parcelamentoQuantidadePrestacao =
            parcelamentoQuantidadePrestacaoHelper.getParcelamentoQuantidadePrestacao();

        long valorTempo = parcelamentoQuantidadePrestacao.getUltimaAlteracao().getTime();

        txJuros = (String) httpServletRequest.getParameter("txJuros" + valorTempo);
        percMinEntrada = (String) httpServletRequest.getParameter("percMinEntrada" + valorTempo);
        percTarMinImovel =
            (String) httpServletRequest.getParameter("percTarMinImovel" + valorTempo);
        percVlReparcelado =
            (String) httpServletRequest.getParameter("percVlReparcelado" + valorTempo);

        // insere essas variáveis no objeto ParcelamentoQuantidadePrestacao
        BigDecimal taxaJuros = null;
        if (txJuros != null && !txJuros.equals("")) {
          taxaJuros = Util.formatarMoedaRealparaBigDecimal(txJuros);
        }

        BigDecimal percentualMinimoEntrada = null;
        if (percMinEntrada != null && !percMinEntrada.equals("")) {
          percentualMinimoEntrada = Util.formatarMoedaRealparaBigDecimal(percMinEntrada);
        }

        BigDecimal percentualTarifaMinimaImovel = null;
        if (percTarMinImovel != null && !percTarMinImovel.equals("")) {
          percentualTarifaMinimaImovel = Util.formatarMoedaRealparaBigDecimal(percTarMinImovel);
        }

        BigDecimal percentualValorReparcelado = null;
        if (percVlReparcelado != null && !percVlReparcelado.equals("")) {
          percentualValorReparcelado = Util.formatarMoedaRealparaBigDecimal(percVlReparcelado);
        }

        parcelamentoQuantidadePrestacao.setTaxaJuros(taxaJuros);
        parcelamentoQuantidadePrestacao.setPercentualMinimoEntrada(percentualMinimoEntrada);
        parcelamentoQuantidadePrestacao.setPercentualTarifaMinimaImovel(
            percentualTarifaMinimaImovel);
        parcelamentoQuantidadePrestacao.setPercentualValorReparcelado(percentualValorReparcelado);

        parcelamentoQuantidadePrestacaoHelper.setParcelamentoQuantidadePrestacao(
            parcelamentoQuantidadePrestacao);
      }
    }

    if (sessao.getAttribute("collectionParcelamentoFaixaValor") != null
        && !sessao.getAttribute("collectionParcelamentoFaixaValor").equals("")) {

      Collection collectionParcelamentoFaixaValor =
          (Collection) sessao.getAttribute("collectionParcelamentoFaixaValor");
      // cria as variáveis para recuperar os parâmetros do request e jogar
      // no objeto  ParcelamentoFaixaValor
      String perc = null;

      Iterator iteratorParcelamentoFaixaValor = collectionParcelamentoFaixaValor.iterator();

      while (iteratorParcelamentoFaixaValor.hasNext()) {
        ParcelamentoFaixaValor parcelamentoFaixaValor =
            (ParcelamentoFaixaValor) iteratorParcelamentoFaixaValor.next();
        long valorTempo = parcelamentoFaixaValor.getUltimaAlteracao().getTime();

        perc = (String) httpServletRequest.getParameter("perc" + valorTempo);

        // insere essas variáveis no objeto ParcelamentoFaixaValor
        BigDecimal percentual = null;
        if (perc != null && !perc.equals("")) {
          percentual = Util.formatarMoedaRealparaBigDecimal(perc);
        }

        parcelamentoFaixaValor.setPercentualFaixa(percentual);
      }
    }
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // Seta o mapeamento de retorno
    ActionForward retorno =
        actionMapping.findForward("exibirGerarRelatorioLogradourosPorMunicipio");

    Fachada fachada = Fachada.getInstancia();

    // Mudar isso quando tiver esquema de segurança
    HttpSession sessao = httpServletRequest.getSession(false);

    GerarRelatorioLogradouroPorMunicipioActionForm gerarLogradouroActionForm =
        (GerarRelatorioLogradouroPorMunicipioActionForm) actionForm;

    /*
     * Removendo o bairro selecionado da sessão
     */
    if (httpServletRequest.getParameter("remover") != null
        && httpServletRequest.getParameter("remover").equals("s")) {

      String idBairro = httpServletRequest.getParameter("idBairro");

      if (idBairro != null
          && !idBairro.equals("")
          && sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

        Collection colecaoBairrosSelecionadosUsuario =
            (Collection) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

        Iterator colecaoBairrosSelecionadosUsuarioIterator;

        Bairro bairroInserir;

        colecaoBairrosSelecionadosUsuarioIterator = colecaoBairrosSelecionadosUsuario.iterator();

        while (colecaoBairrosSelecionadosUsuarioIterator.hasNext()) {

          bairroInserir = (Bairro) colecaoBairrosSelecionadosUsuarioIterator.next();

          if (bairroInserir.getId().equals(new Integer(idBairro))) {

            colecaoBairrosSelecionadosUsuario.remove(bairroInserir);
            break;
          }
        }

        if (colecaoBairrosSelecionadosUsuario.isEmpty()) {
          gerarLogradouroActionForm.setColecaoBairro("");
        }
      }

      gerarLogradouroActionForm.setIdBairro("");
      gerarLogradouroActionForm.setNomeBairro("");

      return retorno;
    }

    gerarLogradouroActionForm.setColecaoBairro("");

    if (sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

      Collection colecaoBairros = (List) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

      if (!colecaoBairros.isEmpty()) {
        gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
      } else {
        gerarLogradouroActionForm.setColecaoBairro("");
      }
    }

    // -------Parte que trata do código quando o usuário tecla enter
    // caso seja o id do municipio
    String idDigitadoEnterMunicipio = (String) gerarLogradouroActionForm.getIdMunicipio();
    String codigoDigitadoEnterBairro = (String) gerarLogradouroActionForm.getIdBairro();

    /*
     * Removendo toda a coleção de bairro da sessão
     */
    String removerColecaoBairro = httpServletRequest.getParameter("removerColecaoBairro");

    if (removerColecaoBairro != null && !removerColecaoBairro.equals("")) {

      sessao.removeAttribute("colecaoBairrosSelecionadosUsuario");
      gerarLogradouroActionForm.setColecaoBairro("");
    }

    // Verifica se o código foi digitado
    if (idDigitadoEnterMunicipio != null
        && !idDigitadoEnterMunicipio.trim().equals("")
        && !Util.validarValorNaoNumerico(idDigitadoEnterMunicipio)) {
      FiltroMunicipio filtroMunicipio = new FiltroMunicipio();

      filtroMunicipio.adicionarParametro(
          new ParametroSimples(FiltroMunicipio.ID, idDigitadoEnterMunicipio));
      filtroMunicipio.adicionarParametro(
          new ParametroSimples(
              FiltroMunicipio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

      Collection municipioEncontrado =
          fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

      if (municipioEncontrado != null && !municipioEncontrado.isEmpty()) {
        // O municipio foi encontrado
        gerarLogradouroActionForm.setIdMunicipio(
            ((Municipio) ((List) municipioEncontrado).get(0)).getId().toString());
        gerarLogradouroActionForm.setNomeMunicipio(
            ((Municipio) ((List) municipioEncontrado).get(0)).getNome());
      } else {
        httpServletRequest.setAttribute("nomeCampo", "codigoBairro");

        httpServletRequest.setAttribute("idMunicipioNaoEncontrado", "true");

        gerarLogradouroActionForm.setIdMunicipio("");
        httpServletRequest.setAttribute("nomeCampo", "idMunicipio");
        httpServletRequest.setAttribute("idMunicipioNaoEncontrado", "exception");
        gerarLogradouroActionForm.setNomeMunicipio("Município inexistente");
      }
    }

    // Verifica se o código foi digitado
    if (codigoDigitadoEnterBairro != null
        && !codigoDigitadoEnterBairro.trim().equals("")
        && !Util.validarValorNaoNumerico(codigoDigitadoEnterBairro)) {
      FiltroBairro filtroBairro = new FiltroBairro();

      filtroBairro.adicionarCaminhoParaCarregamentoEntidade("municipio");

      filtroBairro.adicionarParametro(
          new ParametroSimples(FiltroBairro.CODIGO, codigoDigitadoEnterBairro));
      filtroBairro.adicionarParametro(
          new ParametroSimples(FiltroBairro.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      // verifica se o bairro pesquisado é de um municipio existente
      if (idDigitadoEnterMunicipio != null
          && !idDigitadoEnterMunicipio.trim().equals("")
          && Integer.parseInt(idDigitadoEnterMunicipio) > 0) {

        filtroBairro.adicionarParametro(
            new ParametroSimples(FiltroBairro.MUNICIPIO_ID, idDigitadoEnterMunicipio));
      }

      Collection bairroEncontrado = fachada.pesquisar(filtroBairro, Bairro.class.getName());

      if (bairroEncontrado != null && !bairroEncontrado.isEmpty()) {

        // O bairro foi encontrado
        Bairro objetoBairroEncontrado = (Bairro) Util.retonarObjetoDeColecao(bairroEncontrado);

        gerarLogradouroActionForm.setIdBairro(String.valueOf(objetoBairroEncontrado.getCodigo()));
        gerarLogradouroActionForm.setNomeBairro(objetoBairroEncontrado.getNome());

        httpServletRequest.setAttribute("nomeCampo", "botaoAdicionarBairro");

        httpServletRequest.setAttribute("idBairroNaoEncontrado", "true");

        /*
         * Adicionado o novo BAIRRO na coleção
         */
        String adicionarBairroColecao = httpServletRequest.getParameter("adicionarBairroColecao");

        if (adicionarBairroColecao != null && !adicionarBairroColecao.equals("")) {

          gerarLogradouroActionForm.setIdBairro("");
          gerarLogradouroActionForm.setNomeBairro("");

          List colecaoBairrosSelecionadosUsuario = new ArrayList();
          if (sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

            colecaoBairrosSelecionadosUsuario =
                (List) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

            if (!colecaoBairrosSelecionadosUsuario.contains(
                (Bairro) ((List) bairroEncontrado).get(0))) {
              colecaoBairrosSelecionadosUsuario.add((Bairro) ((List) bairroEncontrado).get(0));
              gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
            } else {
              throw new ActionServletException("atencao.objeto_ja_selecionado", null, "Bairro");
            }
          } else {
            colecaoBairrosSelecionadosUsuario.add((Bairro) ((List) bairroEncontrado).get(0));
            sessao.setAttribute(
                "colecaoBairrosSelecionadosUsuario", colecaoBairrosSelecionadosUsuario);
            gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
          }
        }

      } else {
        gerarLogradouroActionForm.setIdBairro("");
        gerarLogradouroActionForm.setNomeBairro("");
        httpServletRequest.setAttribute("nomeCampo", "codigoBairro");
        httpServletRequest.setAttribute("idBairroNaoEncontrado", "exception");
        gerarLogradouroActionForm.setNomeBairro("Bairro inexistente");
      }
    }

    // fim da parte da pesquisa do enter

    return retorno;
  }
  /**
   * < <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
   */
  @SuppressWarnings("unchecked")
  public Object executar() throws TarefaException {

    // valor de retorno
    byte[] retorno = null;

    // ------------------------------------
    //		Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
    // ------------------------------------

    Collection<Integer> idsClientes = (Collection<Integer>) getParametro("idsClientes");
    Cliente clienteInformado = (Cliente) getParametro("clienteInformado");
    Usuario usuarioLogado = (Usuario) getParametro("usuarioLogado");

    int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");

    // coleção de beans do relatório
    List relatorioBeans = new ArrayList();

    Fachada fachada = Fachada.getInstancia();

    Collection<RelatorioCertidaoNegativaClienteBean> colecao =
        fachada.pesquisarRelatorioCertidaoNegativaCliente(idsClientes, clienteInformado);

    // se a coleção de parâmetros da analise não for vazia
    if (colecao != null && !colecao.isEmpty()) {
      // adiciona o bean a coleção
      relatorioBeans.addAll(colecao);
    }
    // __________________________________________________________________

    // 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();

    Date dataAtual = new Date();

    parametros.put("imagem", sistemaParametro.getImagemRelatorio());

    String nomeRelatorio = ConstantesRelatorios.RELATORIO_CERTIDAO_NEGATIVA_CLIENTE;

    if (sistemaParametro
        .getCodigoEmpresaFebraban()
        .equals(SistemaParametro.CODIGO_EMPRESA_FEBRABAN_CAEMA)) {

      parametros.put(
          "textoCertidaoNegativa",
          "Pelo presente instrumento certificamos, para fins de direito, que revendo os nossos controles, não encontramos débitos referente(s) ao(s) imóvel(eis) acima especificado(s) até a presente data: "
              + Util.formatarData(dataAtual)
              + ".");

      parametros.put(
          "validade",
          "IMPORTANTE: Qualquer rasura tornará nulo o efeito desta certidão, que tem validade de 60 dias.");
      parametros.put("atendente", usuarioLogado.getNomeUsuario());
      parametros.put("nomeEmpresa", "COMPANHIA DE SANEAMENTO AMBIENTAL DO MARANHÃO");
      parametros.put("cnpjEmpresa", Util.formatarCnpj(sistemaParametro.getCnpjEmpresa()));
      parametros.put(
          "inscricaoEstadual",
          Util.formatarInscricaoEstadualCaema(sistemaParametro.getInscricaoEstadual()));
      parametros.put("nomeRelatorio", "CERTIDÃO NEGATIVA DE DÉBITOS POR CLIENTE");
      nomeRelatorio = ConstantesRelatorios.RELATORIO_CERTIDAO_NEGATIVA_CLIENTE_CAEMA;

    } else {

      parametros.put(
          "textoCertidaoNegativa",
          "Pelo presente instrumento certificamos, para fins de direito, que revendo os nossos controles, não encontramos débitos referente(s) ao(s) imóvel(eis) acima especificado(s) até a presente data: "
              + Util.formatarData(dataAtual)
              + ".");

      parametros.put(
          "validade",
          "IMPORTANTE: Qualquer rasura tornará nulo o efeito desta certidão, que tem validade de 60 dias.");
      parametros.put("atendente", usuarioLogado.getNomeUsuario());
      parametros.put("nomeEmpresa", sistemaParametro.getNomeEmpresa());
      parametros.put("cnpjEmpresa", Util.formatarCnpj(sistemaParametro.getCnpjEmpresa()));
      parametros.put("inscricaoEstadual", sistemaParametro.getInscricaoEstadual());
      parametros.put("nomeRelatorio", "CERTIDÃO NEGATIVA DE DÉBITOS POR CLIENTE");
    }

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

    retorno = gerarRelatorio(nomeRelatorio, parametros, ds, tipoFormatoRelatorio);

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

    // retorna o relatório gerado
    return retorno;
  }