private boolean validarNumeroMaxParc(
      List<QuantidadePrestacoes> parcelas,
      InserirResolucaoDiretoriaContratoParcelamentoActionForm form) {
    boolean retorno = true;
    if (form.getQtdFaturasParceladas() != null && !"".equals(form.getQtdFaturasParceladas())) {
      for (QuantidadePrestacoes parcela : parcelas) {
        if (parcela.getQtdFaturasParceladas().intValue()
            > Integer.parseInt(form.getQtdFaturasParceladas())) {
          retorno = false;
        }
      }
    }

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

    String method = httpServletRequest.getParameter("method");
    ActionForward retorno = actionMapping.findForward("exibirInserir");
    HttpSession sessao = httpServletRequest.getSession(false);
    Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");

    InserirResolucaoDiretoriaContratoParcelamentoActionForm form =
        (InserirResolucaoDiretoriaContratoParcelamentoActionForm) actionForm;

    // ContratoParcelamentoRD que vai ser cadastrado no sistema
    ContratoParcelamentoRD contratoCadastrar =
        (ContratoParcelamentoRD) sessao.getAttribute("contratoCadastrar");
    if (contratoCadastrar == null) {
      contratoCadastrar = new ContratoParcelamentoRD();
    }

    if (method != null && method.equals("concluirInserirRD")) {

      List<QuantidadePrestacoes> parcelas =
          (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");

      if (form.getIndicadorParcelamentoJuros() != null
          && !form.getIndicadorParcelamentoJuros().toString().trim().equals("")
          && form.getIndicadorParcelamentoJuros().compareTo(ConstantesSistema.SIM) == 0) {
        form.setIndicadorInformarParcela(ConstantesSistema.NAO);
      }

      String validacao = validarFormulario(form);

      // Verifica a existência de algum ContratoParcelamentoRD com o número informado pelo usuário
      if (form != null && form.getNumero() != null && !"".equals(form.getNumero())) {
        ContratoParcelamentoRD contrato =
            fachada.pesquisarContratoParcelamentoRDPorNumero(form.getNumero());
        if (contrato != null) {
          validacao = "Já existe RD com este número. Informe outro número";
        }
      }

      if (validacao.equals("") && validarNumeroMaxParc(parcelas, form) == false) {
        validacao = "Parcela informada excede o número máximo de parcelas da RD";
      }

      if (!validacao.equals("")) {
        carregarFormContratoCadastrar(contratoCadastrar, form);
        Collections.sort(parcelas, new ComparatorParcela());
        sessao.setAttribute("parcelas", parcelas);
        sessao.setAttribute("contratoCadastrar", contratoCadastrar);
        sessao.setAttribute("atencao", validacao);
        sessao.setAttribute("voltar", "document.forms[0].submit();");
        retorno = actionMapping.findForward("exibirError");
      } else {

        carregarFormContratoCadastrar(contratoCadastrar, form);
        Collections.sort(parcelas, new ComparatorParcela());

        Integer contratoId =
            (Integer)
                fachada.inserirContratoParcelamentoResolucaoDiretoria(
                    contratoCadastrar, parcelas, usuarioLogado);

        if (contratoId != null && contratoId != 0) {
          retorno = actionMapping.findForward("telaSucesso");

          montarPaginaSucesso(
              httpServletRequest,
              "Resolução de diretoria para contratos de parcelamento por cliente - "
                  + contratoCadastrar.getNumero()
                  + " - inserida com sucesso",
              "Inserir outra Resolução de diretoria para contratos de parcelamento por cliente",
              "exibirInserirResolucaoDiretoriaContratoParcelamentoAction.do?menu=sim",
              "exibirAtualizarResolucaoDiretoriaContratoParcelamentoAction.do?numeroContratoParcelamentoRD="
                  + contratoCadastrar.getNumero(),
              "Atualizar Resolução de diretoria para contratos de parcelamento por cliente inserida");

        } else {
          throw new ActionServletException("erro.sistema");
        }
      }

    } else if (method != null && method.equals("inserirParcela")) {

      retorno = actionMapping.findForward("exibirInserir");

      List<QuantidadePrestacoes> parcelas =
          (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");

      if (parcelas == null) {
        parcelas = new ArrayList<QuantidadePrestacoes>();
      }

      String parcela = httpServletRequest.getParameter("parcela");
      String taxaJuros = httpServletRequest.getParameter("taxaJuros");

      boolean parcelaExistente = false;
      boolean campoInvalido = false;
      if (parcela != null
          && !parcela.equals("")
          && taxaJuros != null
          && !taxaJuros.equals("")
          && Util.formatarMoedaRealparaBigDecimal(taxaJuros).compareTo(BigDecimal.ZERO) != 0) {
        for (QuantidadePrestacoes prestacoes : parcelas) {
          if (prestacoes.getQtdFaturasParceladas() == Integer.parseInt(parcela)) {
            parcelaExistente = true;
          }
        }
      } else {
        campoInvalido = true;
      }

      if (parcelaExistente == false && campoInvalido == false) {
        QuantidadePrestacoes prestacao = new QuantidadePrestacoes();
        prestacao.setQtdFaturasParceladas(Integer.parseInt(parcela));
        prestacao.setUltimaAlteracao(new Date());
        taxaJuros = taxaJuros.replace(',', '.');
        if (taxaJuros.trim().equals("")) {
          taxaJuros = "0";
        }
        BigDecimal taxa = new BigDecimal(taxaJuros);

        prestacao.setTaxaJuros(taxa);
        parcelas.add(prestacao);

        carregarFormContratoCadastrar(contratoCadastrar, form);
        Collections.sort(parcelas, new ComparatorParcela());
        sessao.setAttribute("parcelas", parcelas);
        sessao.setAttribute("contratoCadastrar", contratoCadastrar);
      } else {
        carregarFormContratoCadastrar(contratoCadastrar, form);

        sessao.setAttribute("parcelas", parcelas);
        sessao.setAttribute("contratoCadastrar", contratoCadastrar);
        if (parcelaExistente) {
          throw new ActionServletException("atencao.parcela_informada_ja_existente");
        } else {
          throw new ActionServletException(
              "atencao.erro_invalido", "Campo Parcelas ou Taxa de Juros");
        }
      }

    } else if (method != null && method.equals("removerParcela")) {

      retorno = actionMapping.findForward("exibirInserir");

      List<QuantidadePrestacoes> parcelas =
          (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");

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

      if (parcela != null && !parcela.equals("")) {
        for (int i = 0; i < parcelas.size(); i++) {
          if (parcelas.get(i).getQtdFaturasParceladas() == Integer.parseInt(parcela)) {
            parcelas.remove(i);
            i = parcelas.size();
          }
        }
      } else {
        throw new ActionServletException("erro.sistema");
      }

      carregarFormContratoCadastrar(contratoCadastrar, form);
      Collections.sort(parcelas, new ComparatorParcela());
      sessao.setAttribute("parcelas", parcelas);
      sessao.setAttribute("contratoCadastrar", contratoCadastrar);

    } else if (method != null && method.equals("limparColecaoParcelas")) {
      contratoCadastrar.setIndicadorParcelamentoJuros(ConstantesSistema.NAO);
      form.setIndicadorParcelamentoJuros(ConstantesSistema.NAO);
      sessao.removeAttribute("parcelas");
      sessao.setAttribute("contratoCadastrar", contratoCadastrar);
    }

    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;
  }
 /** 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);
       }
     }
   }
 }