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;
  }