public void execute(ServiceData serviceData) throws ServiceException {
    log.debug("::Iniciando execução do servico CancelarDocumentoPagamentoService");

    try {
      log.debug("Preparando os argumentos");
      IEntity<? extends DocumentoPagamento> inDocumento =
          (IEntity<? extends DocumentoPagamento>)
              serviceData.getArgumentList().getProperty(IN_DOCUMENTO);
      Calendar inDataCancelamento =
          (Calendar) serviceData.getArgumentList().getProperty(IN_DATA_CANCELAMENTO);

      IGerenciadorDocumentoPagamento gerenciador =
          this.retrieveGerenciadorPorDocumento((DocumentoPagamento) inDocumento.getObject());

      log.debug("Executando o método cancelarDocumento avulso do gerenciador");
      gerenciador.cancelarDocumento(inDocumento, inDataCancelamento, serviceData);

      log.debug("Adicionando a mensagem de sucesso: cancelarDocumento");
      this.addInfoMessage(serviceData, "CANCELAR_DOCUMENTO_SUCESSO", inDocumento.toString());

    } catch (BusinessException e) {
      log.fatal(e.getErrorList());
      /* O Serviço não precisa adicionar mensagem local. O Manager já indica qual srv falhou e os parâmetros. */
      throw new ServiceException(e.getErrorList());
    } catch (Exception e) {
      log.fatal(e.getMessage());

      /* Indica que o serviço falhou por causa de uma exceção do hibernate. */
      throw new ServiceException(MessageList.createSingleInternalError(e));
    }
  }
  @Test
  public void quitar() throws Exception {
    /*
     * Cria os parâmetros necessários para o serviço.
     */
    Conta conta = UtilsCrud.objectRetrieve(this.serviceManager, Conta.class, 1l, null);
    Contrato contrato = UtilsCrud.objectRetrieve(this.serviceManager, Contrato.class, 1l, null);
    Operacao operacao = UtilsCrud.objectRetrieve(this.serviceManager, Operacao.class, 1l, null);
    CentroCusto centroCusto =
        UtilsCrud.objectRetrieve(this.serviceManager, CentroCusto.class, 1l, null);
    ItemCusto itemCusto = UtilsCrud.objectRetrieve(this.serviceManager, ItemCusto.class, 1l, null);
    ClassificacaoContabil classificacaoContabil =
        UtilsCrud.objectRetrieve(this.serviceManager, ClassificacaoContabil.class, 1l, null);

    Calendar data = CalendarUtils.getCalendar(2007, Calendar.SEPTEMBER, 18);
    BigDecimal valor = DecimalUtils.TEN;

    Lancamento lancamento =
        UtilsLancamento.inserir(
            this.serviceManager,
            conta,
            contrato,
            data,
            data,
            "",
            operacao,
            Transacao.CREDITO,
            centroCusto,
            classificacaoContabil,
            itemCusto,
            valor,
            null,
            false,
            null);
    /*
     * Executa o serviço.
     */
    ServiceData sd = new ServiceData(QuitarLancamentoService.SERVICE_NAME, null);
    sd.getArgumentList().setProperty(QuitarLancamentoService.IN_CONTA, conta);
    sd.getArgumentList().setProperty(QuitarLancamentoService.IN_DATA, data);
    sd.getArgumentList().setProperty(QuitarLancamentoService.IN_LANCAMENTO, lancamento);
    sd.getArgumentList().setProperty(QuitarLancamentoService.IN_VALOR, valor);
    this.serviceManager.execute(sd);

    /*
     * Recarrega o lançamento para atualização.
     */
    lancamento =
        UtilsCrud.objectRetrieve(this.serviceManager, Lancamento.class, lancamento.getId(), null);

    lancamentoMovimento = (LancamentoMovimento) sd.getFirstOutput();
    assertEquals(conta.toString(), lancamentoMovimento.getConta().toString());
    assertEquals(data, lancamentoMovimento.getData());
    assertEquals(lancamento.toString(), lancamentoMovimento.getLancamento().toString());
    assertEquals(
        LancamentoMovimentoCategoria.QUITADO,
        lancamentoMovimento.getLancamentoMovimentoCategoria());
    assertEquals(valor, lancamentoMovimento.getValor());
    assertEquals(DecimalUtils.getBigDecimal(0), lancamento.getSaldo());
  }
  @Test
  public void testExecute() throws BusinessException {
    //		String documento = "04175308000129";
    String documento = "";
    Calendar dataInicial = CalendarUtils.getCalendar(2009, Calendar.MARCH, 1);
    Calendar dataFinal = CalendarUtils.getCalendar(2009, Calendar.MARCH, 31);
    //		List<ItemCusto> itemCustoList = UtilsCrud.objectList(this.serviceManager, ItemCusto.class,
    // "nome like 'Material%'", null);
    Situacao situacao = Situacao.TODOS;

    ServiceData sd = new ServiceData(ListarPosicaoContratoService.SERVICE_NAME, null);
    sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_DOCUMENTO_OPT, documento);
    sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_CONTA_LIST_OPT, new Long[0]);
    //		sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_ITEM_CUSTO_LIST_OPT,
    // itemCustoList);
    sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_DATA_INICIAL_OPT, dataInicial);
    sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_DATA_FINAL_OPT, dataFinal);
    sd.getArgumentList().setProperty(ListarPosicaoContratoService.IN_SITUACAO_OPT, situacao);
    this.serviceManager.execute(sd);

    List<Lancamento> list = sd.getFirstOutput();
    assertTrue(list.size() > 0);

    System.out.printf("%-6s ", "ID");
    System.out.printf("%-30s ", "Nome");
    System.out.printf("%-30s ", "Descrição");
    System.out.printf("%10s ", "Valor");
    System.out.println();
    //		System.out.println("------ ------------------------------ ");
    for (Lancamento lancamento : list) {
      System.out.printf("%6s ", lancamento.getId());
      System.out.printf("%-30s ", lancamento.getContrato().getPessoa().getNome());
      System.out.printf("%-30s ", lancamento.getDescricao());
      System.out.printf("%10.2f ", lancamento.getSaldo());
      System.out.println();
      //			System.out.println(
      //					lancamento.getId() + " | " +
      //					CalendarUtils.formatDate(lancamento.getData()) + " | " +
      //					lancamento.getLancamentoItens().get(0).getItemCusto());
    }
  }
  public void execute() {
    log.debug("Iniciando RelatorioRecebimentoProcess...");
    try {
      ServiceData sd = new ServiceData(RelatorioRecebimentoService.SERVICE_NAME, null);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_ITEM_CUSTO_ID_LIST, this.itemCustoIdList);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_ITEM_CUSTO_NOT, this.itemCustoNot);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_ESCRITORIO_CONTABIL_ID_LIST,
              this.escritorioContabilIdList);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_CATEGORIA_CONTRATO_ID, this.categoriaContratoId);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_TIPO_CONTRATO, this.tipoContrato);
      //			sd.getArgumentList().setProperty(RelatorioRecebimentoService.IN_DATA_LANCAMENTO_INICIAL,
      // this.dataLancamentoInicial);
      //			sd.getArgumentList().setProperty(RelatorioRecebimentoService.IN_DATA_LANCAMENTO_FINAL,
      // this.dataLancamentoFinal);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_DATA_VENCIMENTO_INICIAL, this.dataVencimentoInicial);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_DATA_VENCIMENTO_FINAL, this.dataVencimentoFinal);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_DATA_RECEBIMENTO_INICIAL, this.dataRecebimentoInicial);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_DATA_RECEBIMENTO_FINAL, this.dataRecebimentoFinal);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_QUANTIDADE_ITENS_INICIAL, this.quantidadeItensInicial);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_QUANTIDADE_ITENS_FINAL, this.quantidadeItensFinal);
      sd.getArgumentList().setProperty(RelatorioRecebimentoService.IN_CPF_CNPJ, this.cpfCnpj);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_MUNICIPIO_ID_OPT, this.municipioId);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_NOT_MUNICIPIO_OPT, this.notMunicipio);
      sd.getArgumentList().setProperty(RelatorioRecebimentoService.IN_CONTA_ID_OPT, this.contaId);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_CONTRATO_REPRESENTANTE_ID_OPT,
              this.contratoRepresentanteId);
      sd.getArgumentList()
          .setProperty(RelatorioRecebimentoService.IN_OUTPUT_STREAM, this.outputStream);
      sd.getArgumentList()
          .setProperty(
              RelatorioRecebimentoService.IN_APPLICATION_USER_OPT,
              this.getUserSession().getUser().getObject());
      this.getProcessManager().getServiceManager().execute(sd);
      sd.getFirstOutput();

    } catch (BusinessException e) {
      /* Armazenando a lista de erros */
      this.getMessageList().addAll(e.getErrorList());
    }
  }
  @SuppressWarnings("unchecked")
  public void execute(ServiceData serviceData) throws ServiceException {
    log.debug("::Iniciando a execução do serviço ListarLancamentoMovimentoService");
    try {
      log.debug("Preparando os argumentos");
      /* Obrigatórios */
      String inPropriedadeData =
          (String) serviceData.getArgumentList().getProperty(IN_PROPRIEDADE_DATA);
      int inOrdem = (Integer) serviceData.getArgumentList().getProperty(IN_ORDEM);

      /* Opcionais */
      Long[] inContasId =
          (serviceData.getArgumentList().containsProperty(IN_CONTAS_ID_OPT)
              ? (Long[]) serviceData.getArgumentList().getProperty(IN_CONTAS_ID_OPT)
              : null);
      Calendar inDataInicial =
          (serviceData.getArgumentList().containsProperty(IN_DATA_INICIAL_OPT)
              ? (Calendar) serviceData.getArgumentList().getProperty(IN_DATA_INICIAL_OPT)
              : CalendarUtils.getCalendarBaseDate());
      Calendar inDataFinal =
          (serviceData.getArgumentList().containsProperty(IN_DATA_FINAL_OPT)
              ? (Calendar) serviceData.getArgumentList().getProperty(IN_DATA_FINAL_OPT)
              : null);
      Long inLancamentoId =
          (serviceData.getArgumentList().containsProperty(IN_LANCAMENTO_ID_OPT)
              ? (Long) serviceData.getArgumentList().getProperty(IN_LANCAMENTO_ID_OPT)
              : null);
      Long inDocumentoId =
          (serviceData.getArgumentList().containsProperty(IN_DOCUMENTO_ID_OPT)
              ? (Long) serviceData.getArgumentList().getProperty(IN_DOCUMENTO_ID_OPT)
              : null);
      Long inContratoId =
          (serviceData.getArgumentList().containsProperty(IN_CONTRATO_ID_OPT)
              ? (Long) serviceData.getArgumentList().getProperty(IN_CONTRATO_ID_OPT)
              : null);
      Long inItemCustoId =
          (serviceData.getArgumentList().containsProperty(IN_ITEM_CUSTO_ID_OPT)
              ? (Long) serviceData.getArgumentList().getProperty(IN_ITEM_CUSTO_ID_OPT)
              : null);
      Long inDocumentoCobrancaCategoriaId =
          (serviceData.getArgumentList().containsProperty(IN_DOCUMENTO_COBRANCA_CATEGORIA_ID_OPT)
              ? (Long)
                  serviceData.getArgumentList().getProperty(IN_DOCUMENTO_COBRANCA_CATEGORIA_ID_OPT)
              : null);
      String inCpfCnpj =
          (serviceData.getArgumentList().containsProperty(IN_CPF_CNPJ_OPT)
              ? (String) serviceData.getArgumentList().getProperty(IN_CPF_CNPJ_OPT)
              : null);
      LancamentoMovimentoCategoria inTipoOperacao =
          (serviceData.getArgumentList().containsProperty(IN_TIPO_OPERACAO_OPT)
              ? (LancamentoMovimentoCategoria)
                  serviceData.getArgumentList().getProperty(IN_TIPO_OPERACAO_OPT)
              : null);
      Transacao inTransacao =
          (serviceData.getArgumentList().containsProperty(IN_TIPO_TRANSACAO_OPT)
              ? (Transacao) serviceData.getArgumentList().getProperty(IN_TIPO_TRANSACAO_OPT)
              : null);

      log.debug("Buscando registros");

      /* Montando a clausula SELECT */
      String sqlSelect = QueryLancamentoMovimento.SELECT;
      sqlSelect += " left outer join movimento.lancamento.lancamentos as lancamentos ";

      /* Montando a clausula WHERE */
      String sqlWhere = " where (true = true)";
      if (inContasId != null) {
        String listaContas = "";
        for (int i = 0; i < inContasId.length; i++) {
          if (i > 0) listaContas += ", ";
          listaContas += inContasId[i].toString();
        }
        sqlWhere +=
            " and (lancamentoMovimento." + LancamentoMovimento.CONTA + " in (" + listaContas + "))";
      }
      if (inLancamentoId != null)
        sqlWhere +=
            " and (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + " = "
                + inLancamentoId
                + ")";
      if (inDocumentoId != null)
        sqlWhere +=
            " and (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + "."
                + Lancamento.DOCUMENTO_PAGAMENTO
                + " = "
                + Long.toString(inDocumentoId)
                + ")";
      if (inContratoId != null)
        sqlWhere +=
            " and (lancamentomovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + "."
                + Lancamento.CONTRATO
                + " = "
                + Long.toString(inContratoId)
                + ")";
      if (inItemCustoId != null)
        sqlWhere +=
            " and (lancamentos."
                + LancamentoItem.ITEM_CUSTO
                + " = "
                + Long.toString(inItemCustoId)
                + ")";
      if (inDocumentoCobrancaCategoriaId != null && inDocumentoCobrancaCategoriaId != 0)
        sqlWhere +=
            " and (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + "."
                + Lancamento.DOCUMENTO_PAGAMENTO
                + "."
                + DocumentoCobranca.DOCUMENTO_COBRANCA_CATEGORIA
                + " = "
                + Long.toString(inDocumentoCobrancaCategoriaId)
                + ")";
      if (inCpfCnpj != null)
        sqlWhere +=
            " and (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + "."
                + Lancamento.CONTRATO
                + "."
                + Contrato.PESSOA
                + "."
                + Pessoa.DOCUMENTO
                + "='"
                + inCpfCnpj
                + "')";
      if (inDataFinal != null)
        sqlWhere +=
            " and (lancamentoMovimento."
                + inPropriedadeData
                + " between '"
                + CalendarUtils.formatToSQLDate(inDataInicial)
                + "' and '"
                + CalendarUtils.formatToSQLDate(inDataFinal)
                + "')";

      if (inTransacao == Transacao.CREDITO) sqlWhere += " and (lancamentoMovimento.valor>=0)";
      else if (inTransacao == Transacao.DEBITO) sqlWhere += " and (lancamentoMovimento.valor<0)";

      /*
       *  Atribui as condições do filtro da Operação
       *  Para cada Tipo de Operação, há duas operações a serem filtradas.
       *  Exemplo: Lançar e Extorno de Lançado.
       */
      if (inTipoOperacao == LancamentoMovimentoCategoria.QUITADO) {
        sqlWhere +=
            " and ((lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + " = "
                + LancamentoMovimentoCategoria.QUITADO
                + ") or (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + " = "
                + LancamentoMovimentoCategoria.QUITADO_ESTORNADO
                + "))";
      }
      if (inTipoOperacao == LancamentoMovimentoCategoria.CANCELADO) {
        sqlWhere +=
            " and ((lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + " = "
                + LancamentoMovimentoCategoria.CANCELADO
                + ") or (lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + " = "
                + LancamentoMovimentoCategoria.CANCELADO_ESTORNADO
                + "))";
      }

      /* Montando a clausula ORDER */
      String sqlOrder = " order by";
      if (inOrdem == ORDEM_DATA) {
        sqlOrder +=
            " lancamentoMovimento."
                + inPropriedadeData
                + ", lancamentoMovimento."
                + IDAO.PROPERTY_ID_NAME;
      }
      if (inOrdem == ORDEM_LANCAMENTO) {
        sqlOrder +=
            " lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + ", lancamentoMovimento."
                + inPropriedadeData
                + ", lancamentoMovimento."
                + IDAO.PROPERTY_ID_NAME;
      }
      if (inOrdem == ORDEM_NOME) {
        sqlOrder +=
            " lancametoMovimento."
                + LancamentoMovimento.LANCAMENTO_MOVIMENTO_CATEGORIA
                + "."
                + Lancamento.CONTRATO
                + "."
                + Contrato.PESSOA
                + "."
                + Pessoa.NOME
                + ", lancamentoMovimento."
                + LancamentoMovimento.LANCAMENTO
                + ", lancamentoMovimento."
                + inPropriedadeData
                + ", lancamentoMovimento."
                + IDAO.PROPERTY_ID_NAME;
      }

      /* Executando serviço da query */
      String sql = sqlSelect.concat(sqlWhere).concat(sqlOrder);
      Query query = serviceData.getCurrentSession().createQuery(sql);
      List<QueryLancamentoMovimento> beanList = query.list();

      log.debug("::Fim da execução do serviço");
      serviceData.getOutputData().add(beanList);

    } catch (BusinessException e) {
      log.fatal(e.getErrorList());
      /* O Serviço não precisa adicionar mensagem local. O Manager já indica qual srv falhou e os parâmetros. */
      throw new ServiceException(e.getErrorList());
    } catch (Exception e) {
      log.fatal(e.getMessage());
      /* Indica que o serviço falhou por causa de uma exceção do hibernate. */
      throw new ServiceException(MessageList.createSingleInternalError(e));
    }
  }