/**
   * [UC0146ManterConta] - Manter Conta
   *
   * <p>Metodo verifica se existe contas já pagas nas contas que serão canceladas. Em caso
   * afirmativo, apresenta todos os meses de referencia das contas para informar ao usuário.
   *
   * @author bruno
   * @date 06/05/2009
   * @param String[]: Vetor com todos os id's das contas
   * @param request: Onde se serão informados os parametros para geração da página
   * @param actionMapping: Necessário para geração da página
   * @return Object[3]
   *     <p>Object[0]: ActionFoward com a tela a ser mostrada Object[1]: Se o usuário confimou ou
   *     não a inserção do novo ra Object[2]: Se será redirecionado ao usuário perguntando se as
   *     contas terão os cnta_id removidos dos pagamentos.
   */
  private Object[] validarContasCanceladasPagasRA(
      String[] idsContas, HttpServletRequest request, ActionMapping actionMapping) {

    Object[] retorno = new Object[3];

    // Verificamos se ja foi confimado...
    retorno[1] =
        (request.getParameter("confirmado") != null
            ? request.getParameter("confirmado").equals("ok")
            : null);

    retorno[2] = new Boolean(Boolean.FALSE);

    if (retorno[1] == null) {
      Fachada fachada = Fachada.getInstancia();

      Collection<String> colContasPagas = new ArrayList();

      for (int i = 0; i < idsContas.length; i++) {
        String dadosConta = idsContas[i];
        String id = dadosConta.split("-")[0];

        FiltroPagamento filtro = new FiltroPagamento();

        filtro.adicionarParametro(
            new ParametroSimples(FiltroPagamento.CONTA_ID, Integer.valueOf(id)));

        Collection<Pagamento> colPagamento = fachada.pesquisar(filtro, Pagamento.class.getName());

        Pagamento pagamento = (Pagamento) Util.retonarObjetoDeColecao(colPagamento);

        if (pagamento != null) {
          if (colContasPagas.size() == 0) {
            colContasPagas.add(
                Util.formatarAnoMesParaMesAno(pagamento.getAnoMesReferenciaPagamento()));
          } else {
            colContasPagas.add(
                ", " + Util.formatarAnoMesParaMesAno(pagamento.getAnoMesReferenciaPagamento()));
          }
        }
      }

      if (colContasPagas.size() > 0) {
        String[] arrayIdsContas = new String[colContasPagas.size()];
        System.arraycopy(colContasPagas.toArray(), 0, arrayIdsContas, 0, arrayIdsContas.length);

        request.setAttribute("caminhoActionConclusao", "/gsan/cancelarContaAction.do");
        request.setAttribute("cancelamento", "TRUE");
        request.setAttribute("nomeBotao1", "Sim");
        request.setAttribute("nomeBotao2", "Não");

        retorno[0] =
            montarPaginaConfirmacao(
                "atencao.contas_cancelamento_pagas", request, actionMapping, arrayIdsContas);

        retorno[2] = new Boolean(Boolean.TRUE);
      }
      return retorno;
    }

    retorno[0] = actionMapping.findForward("telaSucesso");
    return retorno;
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // Seta o retorno
    ActionForward retorno = actionMapping.findForward("telaSucesso");

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

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

    PagamentosAClassificarActionForm classificarPagamentosActionForm =
        (PagamentosAClassificarActionForm) actionForm;

    Usuario usuarioLogado = this.getUsuarioLogado(httpServletRequest);

    this.setParametros(new Integer(classificarPagamentosActionForm.getIdSituacaoPagamento()));

    String[] registrosClassificacao = classificarPagamentosActionForm.getIdRegistrosClassificacao();

    Collection<Pagamento> colecaoPagamentos = new ArrayList<Pagamento>();

    if (!classificarPagamentosActionForm.getColecaoPagamentosAClassificar().isEmpty()) {
      Collection<Pagamento> pagamentos =
          (Collection<Pagamento>)
              classificarPagamentosActionForm.getColecaoPagamentosAClassificar();

      Iterator<Pagamento> iteratorPagamentos = pagamentos.iterator();
      while (iteratorPagamentos.hasNext()) {
        Pagamento pagamento = (Pagamento) iteratorPagamentos.next();

        for (int i = 0; i < registrosClassificacao.length; i++) {
          String idPagamento = registrosClassificacao[i];
          if (idPagamento.equals(pagamento.getId().toString())) {
            colecaoPagamentos.add(pagamento);
          }
        }
      }
    }

    try {

      fachada.classificarPagamentosResolvidos(
          colecaoPagamentos,
          usuarioLogado,
          this.creditoTipo,
          this.creditoOrigem,
          false,
          new Integer(classificarPagamentosActionForm.getIdSituacaoPagamento()));

    } catch (ControladorException e) {
      e.printStackTrace();
    }

    montarPaginaSucesso(
        httpServletRequest,
        "Pagamentos selecionados já classificados",
        "Voltar",
        "exibirFiltrarPagamentosAClassificarAction.do?menu=sim");

    sessao.removeAttribute("contas");
    return retorno;
  }