示例#1
0
AB_TRANSACTION *mkSepaDebitNote(AB_ACCOUNT *a, GWEN_DB_NODE *db) {
  AB_TRANSACTION *t;
  const char *s;

  t=mkSepaTransfer(a, db, AB_Job_TypeSepaDebitNote);
  if (t==NULL) {
    DBG_INFO(0, "here");
    return NULL;
  }

  /* read some additional fields */
  s=GWEN_DB_GetCharValue(db, "creditorSchemeId", 0, 0);
  if (!(s && *s)) {
    DBG_ERROR(0, "Missing creditor scheme id");
    AB_Transaction_free(t);
    return NULL;
  }
  AB_Transaction_SetCreditorSchemeId(t, s);

  s=GWEN_DB_GetCharValue(db, "mandateId", 0, 0);
  if (!(s && *s)) {
    DBG_ERROR(0, "Missing mandate id");
    AB_Transaction_free(t);
    return NULL;
  }
  AB_Transaction_SetMandateId(t, s);

  s=GWEN_DB_GetCharValue(db, "mandateDate", 0, 0);
  if (!(s && *s)) {
    DBG_ERROR(0, "Missing mandate date");
    AB_Transaction_free(t);
    return NULL;
  }
  else {
    GWEN_DATE *dt;

    dt=GWEN_Date_fromString(s);
    if (dt==NULL) {
      DBG_ERROR(0, "Bad date format for mandate date");
      AB_Transaction_free(t);
      return NULL;
    }
    AB_Transaction_SetMandateDate(t, dt);
    GWEN_Date_free(dt);
  }

  s=GWEN_DB_GetCharValue(db, "sequenceType", 0, "once");
  if (s && *s) {
    AB_TRANSACTION_SEQUENCETYPE st;

    st=AB_Transaction_SequenceType_fromString(s);
    if (st!=AB_Transaction_SequenceTypeUnknown)
      AB_Transaction_SetSequenceType(t, st);
    else {
      DBG_ERROR(0, "Unknown sequence type [%s]", s);
      AB_Transaction_free(t);
      return NULL;
    }
  }
  else
    AB_Transaction_SetSequenceType(t, AB_Transaction_SequenceTypeOnce);

  return t;
}
示例#2
0
int sepaTransfer(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv)
{
  GWEN_DB_NODE *db;
  AB_ACCOUNT_SPEC *as;
  int rv;
  int rvExec=0;
  const char *ctxFile;
  AB_TRANSACTION *t;
  int noCheck;

  /* parse command line arguments */
  db=_readCommandLine(dbArgs, argc, argv);
  if (db==NULL) {
    /* error in command line */
    return 1;
  }

  /* read arguments */
  noCheck=GWEN_DB_GetIntValue(db, "noCheck", 0, 0);
  ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0);

  /* init AqBanking */
  rv=AB_Banking_Init(ab);
  if (rv) {
    DBG_ERROR(0, "Error on init (%d)", rv);
    return 2;
  }

  /* get account to work with */
  as=getSingleSelectedAccount(ab, db);
  if (as==NULL) {
    AB_Banking_Fini(ab);
    return 2;
  }

  /* create transaction from arguments */
  t=mkSepaTransfer(db, AB_Transaction_CommandSepaTransfer);
  if (t==NULL) {
    DBG_ERROR(0, "Could not create SEPA transaction from arguments");
    AB_Transaction_free(t);
    AB_AccountSpec_free(as);
    AB_Banking_Fini(ab);
    return 2;
  }
  AB_Transaction_SetUniqueAccountId(t, AB_AccountSpec_GetUniqueId(as));

  /* set local account info from selected AB_ACCOUNT_SPEC */
  AB_Banking_FillTransactionFromAccountSpec(t, as);

  /* some checks */
  rv=checkTransactionIbans(t);
  if (rv!=0) {
    AB_Transaction_free(t);
    AB_AccountSpec_free(as);
    AB_Banking_Fini(ab);
    return rv;
  }

  /* probably check against transaction limits */
  if (!noCheck) {
    rv=checkTransactionLimits(t,
                              AB_AccountSpec_GetTransactionLimitsForCommand(as, AB_Transaction_GetCommand(t)),
                              AQBANKING_TOOL_LIMITFLAGS_PURPOSE  |
                              AQBANKING_TOOL_LIMITFLAGS_NAMES    |
                              AQBANKING_TOOL_LIMITFLAGS_DATE     |
                              AQBANKING_TOOL_LIMITFLAGS_SEPA);
    if (rv!=0) {
      AB_Transaction_free(t);
      AB_AccountSpec_free(as);
      AB_Banking_Fini(ab);
      return rv;
    }
  }
  AB_AccountSpec_free(as);

  /* execute job */
  rv=execSingleBankingJob(ab, t, ctxFile);
  if (rv) {
    fprintf(stderr, "Error on executeQueue (%d)\n", rv);
    rvExec=rv;
  }

  /* cleanup */
  AB_Transaction_free(t);

  /* that's it */
  rv=AB_Banking_Fini(ab);
  if (rv<0) {
    fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv);
    if (rvExec==0)
      rvExec=5;
  }

  return rvExec;
}