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");
  }
  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 = null;

    HttpSession sessao = httpServletRequest.getSession(false);

    FiltrarContratoArrecadadorActionForm filtrarContratoArrecadadorActionForm =
        (FiltrarContratoArrecadadorActionForm) actionForm;

    FiltroArrecadadorContrato filtroContratoArrecadador =
        (FiltroArrecadadorContrato) sessao.getAttribute("filtroArrecadadorContrato");

    ArrecadadorContrato contratoArrecadadorParametros = new ArrecadadorContrato();

    // pega os parâmetros informados na tela de consulta de débitos automáticos

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdArrecadador())) {
      FiltroArrecadador filtroArrecadador = new FiltroArrecadador();
      filtroArrecadador.adicionarParametro(
          new ParametroSimples(
              FiltroArrecadador.ID,
              Integer.parseInt(filtrarContratoArrecadadorActionForm.getIdArrecadador().trim())));

      Arrecadador arrecadador =
          (Arrecadador)
              Fachada.getInstancia()
                  .pesquisar(filtroArrecadador, Arrecadador.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setArrecadador(arrecadador);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdCliente())) {
      FiltroCliente filtroCliente = new FiltroCliente();
      filtroCliente.adicionarParametro(
          new ParametroSimples(
              FiltroCliente.ID,
              Integer.parseInt(filtrarContratoArrecadadorActionForm.getIdCliente().trim())));

      Cliente cliente =
          (Cliente)
              Fachada.getInstancia()
                  .pesquisar(filtroCliente, Cliente.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setCliente(cliente);
    }

    if (Util.verificarNaoVazio(
        filtrarContratoArrecadadorActionForm.getIdContaBancariaArrecadador())) {
      FiltroContaBancaria filtroContaBancaria = new FiltroContaBancaria();
      filtroContaBancaria.adicionarParametro(
          new ParametroSimples(
              FiltroContaBancaria.ID,
              Integer.parseInt(
                  filtrarContratoArrecadadorActionForm.getIdContaBancariaArrecadador().trim())));
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia");
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia.banco");

      ContaBancaria contaBancariaDeposito =
          (ContaBancaria)
              Fachada.getInstancia()
                  .pesquisar(filtroContaBancaria, ContaBancaria.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setContaBancariaDepositoArrecadacao(contaBancariaDeposito);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdContaBancariaTarifa())) {
      FiltroContaBancaria filtroContaBancaria = new FiltroContaBancaria();
      filtroContaBancaria.adicionarParametro(
          new ParametroSimples(
              FiltroContaBancaria.ID,
              Integer.parseInt(
                  filtrarContratoArrecadadorActionForm.getIdContaBancariaTarifa().trim())));
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia");
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia.banco");

      ContaBancaria contaBancariaTarifa =
          (ContaBancaria)
              Fachada.getInstancia()
                  .pesquisar(filtroContaBancaria, ContaBancaria.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setContaBancariaDepositoTarifa(contaBancariaTarifa);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIndicadorCobranca())) {
      contratoArrecadadorParametros.setIndicadorCobrancaIss(
          Short.parseShort(filtrarContratoArrecadadorActionForm.getIndicadorCobranca().trim()));
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getDtInicioContrato())) {
      contratoArrecadadorParametros.setDataContratoInicio(
          Util.converteStringParaDate(filtrarContratoArrecadadorActionForm.getDtInicioContrato()));
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getDtFimContrato())) {
      contratoArrecadadorParametros.setDataContratoFim(
          Util.converteStringParaDate(filtrarContratoArrecadadorActionForm.getDtFimContrato()));
    }

    contratoArrecadadorParametros.setDescricaoEmail(
        filtrarContratoArrecadadorActionForm.getEmailCliente());
    contratoArrecadadorParametros.setNumeroContrato(
        filtrarContratoArrecadadorActionForm.getNumeroContrato());
    contratoArrecadadorParametros.setCodigoConvenio(
        filtrarContratoArrecadadorActionForm.getIdConvenio());

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

    RelatorioManterContratoArrecadador relatorioManterContratoArrecadador =
        new RelatorioManterContratoArrecadador(
            (Usuario) (httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
    relatorioManterContratoArrecadador.addParametro(
        "filtroArrecadadorContrato", filtroContratoArrecadador);
    relatorioManterContratoArrecadador.addParametro(
        "contratoArrecadadorParametros", contratoArrecadadorParametros);
    relatorioManterContratoArrecadador.addParametro(
        "tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));

    try {
      retorno =
          processarExibicaoRelatorio(
              relatorioManterContratoArrecadador,
              tipoRelatorio,
              httpServletRequest,
              httpServletResponse,
              actionMapping);

    } catch (SistemaException ex) {
      reportarErros(httpServletRequest, "erro.sistema");
      retorno = actionMapping.findForward("telaErroPopup");

    } catch (RelatorioVazioException ex1) {
      reportarErros(httpServletRequest, "erro.relatorio.vazio");
      retorno = actionMapping.findForward("telaAtencaoPopup");
    }

    return retorno;
  }
  /**
   * Este método cria a coleção de dias de vencimento alternativo disponível para esse imóvel.<br>
   * Caso o usuário tenha permissão especial de informar um vencimento alternativo, então a coleção
   * será sempre os dias de 1 a 30.<br>
   * Caso exista dados no campo dias de vencimento alternatico na tabela sistema parametro, então os
   * dias possíveis serãos esses. Caso nenhuma das duas opções anteriores seja atendida, então os
   * possíveis dias para o vencimento serão do dia depois do dia de vencimento do grupo até o dia
   * 30.
   *
   * @since 22/10/2009
   * @author Marlon Patrick
   */
  private Collection<Integer> criarColecaoNovoDiaPagamento(
      ClienteImovel clienteImovel, HttpSession sessao) {

    boolean isUsuarioComPermissaoInformarVencimentoAlternativoNovaData =
        Fachada.getInstancia()
            .verificarPermissaoInformarVencimentoAlternativoNovaData(
                (Usuario) sessao.getAttribute(Usuario.USUARIO_LOGADO));

    List<Integer> colecaoNovoDiaVencimento = new ArrayList<Integer>();

    if (isUsuarioComPermissaoInformarVencimentoAlternativoNovaData) {

      for (int i = 1; i <= 30; i++) {
        colecaoNovoDiaVencimento.add(i);
      }
      return colecaoNovoDiaVencimento;
    }

    SistemaParametro parametrosSistema =
        this.getFachada().pesquisarParametrosDoSistemaAtualizados();

    if (Util.verificarNaoVazio(parametrosSistema.getDiasVencimentoAlternativo())) {
      String[] diasVencimento = parametrosSistema.getDiasVencimentoAlternativo().split(";");

      for (String diaAtual : diasVencimento) {
        if (Util.verificarNaoVazio(diaAtual)) {
          colecaoNovoDiaVencimento.add(new Integer(diaAtual.trim()));
        }
      }

      Collections.sort(colecaoNovoDiaVencimento);

      return colecaoNovoDiaVencimento;
    }

    String empresaCAERN = "" + parametrosSistema.getCodigoEmpresaFebraban();
    if (empresaCAERN.equals("6")) {

      colecaoNovoDiaVencimento.add(1);
      colecaoNovoDiaVencimento.add(5);
      colecaoNovoDiaVencimento.add(10);
      colecaoNovoDiaVencimento.add(25);
      colecaoNovoDiaVencimento.add(27);
      colecaoNovoDiaVencimento.add(30);

    } else {

      int i =
          clienteImovel.getImovel().getQuadra().getRota().getFaturamentoGrupo().getDiaVencimento()
              + 1;

      int ultimoDiaVencimentoAlternativo = 30;

      if (parametrosSistema.getUltimoDiaVencimentoAlternativo() != null) {
        ultimoDiaVencimentoAlternativo =
            parametrosSistema.getUltimoDiaVencimentoAlternativo().intValue();
      }

      for (; i <= ultimoDiaVencimentoAlternativo; i++) {
        colecaoNovoDiaVencimento.add(i);
      }
    }
    return colecaoNovoDiaVencimento;
  }
  /**
   * [UC0392] Filtrar Valor de Cobrança do Serviço
   *
   * <p>Este caso de uso cria um filtro que será usado na pesquisa do Valor de Cobrança de Serviço
   *
   * @author Rômulo Aurélio
   * @date 30/10/2006
   * @param actionMapping
   * @param actionForm
   * @param httpServletRequest
   * @param httpServletResponse
   * @return
   */
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

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

    FiltrarValorCobrancaServicoActionForm form = (FiltrarValorCobrancaServicoActionForm) actionForm;

    FiltroServicoCobrancaValor filtroServicoCobrancaValor = new FiltroServicoCobrancaValor();

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    boolean peloMenosUmParametroInformado = false;

    String tipoServico = form.getTipoServico();
    String perfilImovel = form.getPerfilImovel();
    String indicadorMedido = form.getIndicadorMedido();
    String capacidadeHidrometro = form.getCapacidadeHidrometro();
    String valorServicoInicial = form.getValorServicoInicial();
    String valorServicoFinal = form.getValorServicoFinal();
    String quantidadeEconomiaInicial = form.getQuantidadeEconomiasInicial();
    String quantidadeEconomiaFinal = form.getQuantidadeEconomiasFinal();
    String categoria = form.getIdCategoria();
    String subCategoria = form.getIdSubCategoria();
    String indicadorGeracaoDebito = form.getIndicadorGeracaoDebito();
    String indicativoTipoSevicoEconomias = form.getIndicativoTipoSevicoEconomias();

    // Verifica se o campo tipoServico foi informado
    if (categoria != null
        && !categoria.trim().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      peloMenosUmParametroInformado = true;

      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(FiltroServicoCobrancaValor.CATEGORIA, categoria));
    }

    if (subCategoria != null
        && !subCategoria.trim().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      peloMenosUmParametroInformado = true;

      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(FiltroServicoCobrancaValor.SUBCATEGORIA, subCategoria));
    }

    if (tipoServico != null && !tipoServico.trim().equalsIgnoreCase("")) {

      peloMenosUmParametroInformado = true;

      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(FiltroServicoCobrancaValor.SERVICOTIPO, tipoServico));
    }

    if (quantidadeEconomiaInicial != null
        && !quantidadeEconomiaInicial.equals("")
        && quantidadeEconomiaFinal != null
        && !quantidadeEconomiaFinal.equals("")) {

      filtroServicoCobrancaValor.adicionarParametro(
          new Intervalo(
              FiltroServicoCobrancaValor.QUANTIDADE_ECONOMIA_INICIAL,
              quantidadeEconomiaInicial,
              quantidadeEconomiaFinal));
    }

    filtroServicoCobrancaValor.adicionarCaminhoParaCarregamentoEntidade("servicoTipo");

    if (indicativoTipoSevicoEconomias != null && !indicativoTipoSevicoEconomias.equals("3")) {

      peloMenosUmParametroInformado = true;

      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(
              FiltroServicoCobrancaValor.INDICATIVOSERVICOECONOMIA, indicativoTipoSevicoEconomias));
    }

    // Verifica se o campo perfilImovel foi informado
    if (perfilImovel != null && !perfilImovel.trim().equals("-1")) {

      peloMenosUmParametroInformado = true;

      filtroServicoCobrancaValor.adicionarParametro(
          new ComparacaoTexto(FiltroServicoCobrancaValor.IMOVELPERFIL, perfilImovel));
    }

    // Verifica se o campo Data vigencia inicial foi informado
    if (Util.verificarNaoVazio(form.getDataVigenciaInicial())) {

      peloMenosUmParametroInformado = true;

      Date periodoInicialVigencia = Util.converteStringParaDate(form.getDataVigenciaInicial());

      Date periodoFinalVigencia = Util.converteStringParaDate(form.getDataVigenciaFinal());

      Calendar diInicio = Calendar.getInstance();
      diInicio.setTime(periodoInicialVigencia);
      diInicio.set(Calendar.HOUR, 0);
      diInicio.set(Calendar.MINUTE, 0);
      diInicio.set(Calendar.SECOND, 0);

      Calendar diFim = Calendar.getInstance();
      diFim.setTime(periodoFinalVigencia);
      diFim.set(Calendar.HOUR, 23);
      diFim.set(Calendar.MINUTE, 59);
      diFim.set(Calendar.SECOND, 59);

      filtroServicoCobrancaValor.adicionarParametro(
          new MaiorQue(FiltroServicoCobrancaValor.DATA_INICIO_RELACAO, diInicio.getTime()));

      filtroServicoCobrancaValor.adicionarParametro(
          new MenorQue(FiltroServicoCobrancaValor.DATA_FIM_RELACAO, diFim.getTime()));
    }

    // Verifica se o campo indicadorMedido foi informado
    if (indicadorMedido != null && !indicadorMedido.trim().equals("3")) {

      peloMenosUmParametroInformado = true;
      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(FiltroServicoCobrancaValor.INDICADORMEDIDO, indicadorMedido));
    }

    // Verifica se o campo capacidadeHidrometro foi informado
    if (capacidadeHidrometro != null
        && !capacidadeHidrometro.trim().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
      peloMenosUmParametroInformado = true;
      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(
              FiltroServicoCobrancaValor.HIDROMETROCAPACIDADE, capacidadeHidrometro));

      filtroServicoCobrancaValor.adicionarCaminhoParaCarregamentoEntidade("hidrometroCapacidade");
    }
    if (indicadorGeracaoDebito != null && indicadorGeracaoDebito.trim().equalsIgnoreCase("1")) {
      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(
              FiltroServicoCobrancaValor.INDICADOR_GERACAO_DEBITO, ConstantesSistema.SIM));

      if (valorServicoInicial != null
          && !valorServicoInicial.trim().equalsIgnoreCase("")
          && valorServicoFinal != null
          && !valorServicoFinal.trim().equalsIgnoreCase("")) {

        BigDecimal valorInicial =
            new BigDecimal(valorServicoInicial.replace(".", "").replace(",", "."));

        BigDecimal valorFinal =
            new BigDecimal(valorServicoFinal.replace(".", "").replace(",", "."));

        Integer resultado = valorInicial.compareTo(valorFinal);

        if (resultado == 1) {
          throw new ActionServletException(
              "atencao.valor_cobranca_servico_final_menor_valor_inicial");
        }

        filtroServicoCobrancaValor.adicionarParametro(
            new Intervalo(
                FiltroDebitoTipoVigencia.VALOR,
                Util.formatarMoedaRealparaBigDecimal(valorServicoInicial),
                Util.formatarMoedaRealparaBigDecimal(valorServicoFinal)));
      }

      peloMenosUmParametroInformado = true;

    } else if (indicadorGeracaoDebito != null
        && indicadorGeracaoDebito.trim().equalsIgnoreCase("2")) {
      filtroServicoCobrancaValor.adicionarParametro(
          new ParametroSimples(
              FiltroServicoCobrancaValor.INDICADOR_GERACAO_DEBITO, ConstantesSistema.NAO));

      peloMenosUmParametroInformado = true;
    }

    filtroServicoCobrancaValor.adicionarCaminhoParaCarregamentoEntidade("imovelPerfil");
    filtroServicoCobrancaValor.setCampoOrderBy(FiltroServicoCobrancaValor.SERVICOTIPO);

    // Erro caso o usuário mandou Pesquisar sem nenhum parâmetro
    if (!peloMenosUmParametroInformado) {
      throw new ActionServletException("atencao.filtro.nenhum_parametro_informado");
    }

    Collection<ServicoCobrancaValor> colecaoServicoCobrancaValor =
        fachada.pesquisar(filtroServicoCobrancaValor, ServicoCobrancaValor.class.getName());

    // Verifica se o checkbox Atualizar está marcado e em caso afirmativo
    // manda pelo um request uma variável para o
    // ExibirManterValorCobrancaServicoAction para nele verificar se irá
    // para o
    // atualizar ou para o manter
    if (form.getAtualizar() != null && form.getAtualizar().equalsIgnoreCase("1")) {
      httpServletRequest.setAttribute("atualizar", form.getAtualizar());
    }

    if (colecaoServicoCobrancaValor == null || colecaoServicoCobrancaValor.isEmpty()) {
      throw new ActionServletException(
          "atencao.pesquisa.nenhumresultado", null, "Servico Cobranca Valor");
    } else {
      httpServletRequest.setAttribute("colecaoServicoCobrancaValor", colecaoServicoCobrancaValor);
      ServicoCobrancaValor servicoCobrancaValor = new ServicoCobrancaValor();
      servicoCobrancaValor =
          (ServicoCobrancaValor) Util.retonarObjetoDeColecao(colecaoServicoCobrancaValor);
      String idRegistroAtualizar = servicoCobrancaValor.getId().toString();
      sessao.setAttribute("idRegistroAtualizar", idRegistroAtualizar);
    }

    sessao.setAttribute("filtroServicoCobrancaValor", filtroServicoCobrancaValor);

    httpServletRequest.setAttribute("filtroServicoCobrancaValor", filtroServicoCobrancaValor);

    return retorno;
  }