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