int LC_HIPersonalData_ReadDb(LC_HI_PERSONAL_DATA *st, GWEN_DB_NODE *db) { assert(st); assert(db); LC_HIPersonalData_SetInsuranceId(st, GWEN_DB_GetCharValue(db, "insuranceId", 0, 0)); LC_HIPersonalData_SetPrename(st, GWEN_DB_GetCharValue(db, "prename", 0, 0)); LC_HIPersonalData_SetName(st, GWEN_DB_GetCharValue(db, "name", 0, 0)); LC_HIPersonalData_SetTitle(st, GWEN_DB_GetCharValue(db, "title", 0, 0)); LC_HIPersonalData_SetNameSuffix(st, GWEN_DB_GetCharValue(db, "nameSuffix", 0, 0)); LC_HIPersonalData_SetSex(st, LC_HIPersonalData_Sex_fromString(GWEN_DB_GetCharValue(db, "sex", 0, 0))); if (1) { /* for local vars */ GWEN_DB_NODE *dbT; dbT=GWEN_DB_GetGroup(db, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "dateOfBirth"); if (dbT) { if (st->dateOfBirth) GWEN_Time_free(st->dateOfBirth); st->dateOfBirth=GWEN_Time_fromDb(dbT); } } LC_HIPersonalData_SetAddrZipCode(st, GWEN_DB_GetCharValue(db, "addrZipCode", 0, 0)); LC_HIPersonalData_SetAddrCity(st, GWEN_DB_GetCharValue(db, "addrCity", 0, 0)); LC_HIPersonalData_SetAddrState(st, GWEN_DB_GetCharValue(db, "addrState", 0, 0)); LC_HIPersonalData_SetAddrCountry(st, GWEN_DB_GetCharValue(db, "addrCountry", 0, 0)); LC_HIPersonalData_SetAddrStreet(st, GWEN_DB_GetCharValue(db, "addrStreet", 0, 0)); LC_HIPersonalData_SetAddrHouseNum(st, GWEN_DB_GetCharValue(db, "addrHouseNum", 0, 0)); return 0; }
int AHB_DTAUS__CreateSetA(GWEN_BUFFER *dst, GWEN_DB_NODE *cfg) { unsigned int i; GWEN_TIME *gt; char buffer[16]; int day, month, year; const char *p; GWEN_DB_NODE *dbT; DBG_DEBUG(AQBANKING_LOGDOMAIN, "Creating A set"); /* field 1, 2: record header */ GWEN_Buffer_AppendString(dst, "0128A"); /* field 3: type */ p=GWEN_DB_GetCharValue(cfg, "type", 0, "transfer"); if (strcasecmp(p, "transfer")==0 || strcasecmp(p, "transaction")==0) GWEN_Buffer_AppendString(dst, "GK"); else if (strcasecmp(p, "debitnote")==0) GWEN_Buffer_AppendString(dst, "LK"); else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unknown group \"%s\"", GWEN_DB_GroupName(cfg)); return -1; } /* field 4: bank code */ if (AHB_DTAUS__AddNum(dst, 8, GWEN_DB_GetCharValue(cfg, "bankCode", 0, "0"))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing bankCode to buffer"); return -1; } /* field 5: 0s */ for (i=0; i<8; i++) GWEN_Buffer_AppendByte(dst, '0'); /* field 6: sender name */ if (AHB_DTAUS__AddWord(dst, 27, GWEN_DB_GetCharValue(cfg, "name", 0, "0"))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing name to buffer"); return -1; } /* field 7: date */ gt=GWEN_CurrentTime(); if (GWEN_Time_GetBrokenDownDate(gt, &day, &month, &year)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unable to break down date"); GWEN_Time_free(gt); return -1; } GWEN_Time_free(gt); snprintf(buffer, sizeof(buffer), "%02d%02d%02d", day, month+1, year%100); if (AHB_DTAUS__AddWord(dst, 6, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); return -1; } /* field 8: blanks */ for (i=0; i<4; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 9: account id */ if (AHB_DTAUS__AddNum(dst, 10, GWEN_DB_GetCharValue(cfg, "accountid", 0, ""))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing accountid to buffer"); return -1; } /* field 10: customer reference */ if (AHB_DTAUS__AddNum(dst, 10, GWEN_DB_GetCharValue(cfg, "custref", 0, "0"))) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing custref to buffer"); return -1; } /* field 11a: blanks */ for (i=0; i<15; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 11b: date of execution */ dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "execdate"); if (dbT) { GWEN_TIME *ti; ti=GWEN_Time_fromDb(dbT); if (!ti) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad execution date"); return -1; } if (GWEN_Time_GetBrokenDownDate(ti, &day, &month, &year)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Bad execution date"); GWEN_Time_free(ti); return -1; } snprintf(buffer, sizeof(buffer), "%02d%02d%04d", day, month+1, year); if (AHB_DTAUS__AddWord(dst, 8, buffer)) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing execdate to buffer"); GWEN_Time_free(ti); return -1; } GWEN_Time_free(ti); } else { if (AHB_DTAUS__AddWord(dst, 8, "")) { DBG_ERROR(AQBANKING_LOGDOMAIN, "Error writing to buffer"); return -1; } } /* field 11c: blanks */ for (i=0; i<24; i++) GWEN_Buffer_AppendByte(dst, ' '); /* field 12: currency */ p=GWEN_DB_GetCharValue(cfg, "currency", 0, "EUR"); if (strcasecmp(p, "EUR")==0) GWEN_Buffer_AppendByte(dst, '1'); else if (strcasecmp(p, "DEM")==0) GWEN_Buffer_AppendByte(dst, ' '); else { DBG_ERROR(AQBANKING_LOGDOMAIN, "Unknown currency \"%s\"", p); return -1; } return 0; }
/* --------------------------------------------------------------- FUNCTION */ int AH_Job_GetTransactions__ReadTransactions(AH_JOB *j, AB_IMEXPORTER_ACCOUNTINFO *ai, const char *docType, int noted, GWEN_BUFFER *buf){ GWEN_DBIO *dbio; GWEN_SYNCIO *sio; int rv; GWEN_DB_NODE *db; GWEN_DB_NODE *dbDay; GWEN_DB_NODE *dbParams; AB_ACCOUNT *a; AB_USER *u; uint32_t progressId; uint64_t cnt=0; a=AH_AccountJob_GetAccount(j); assert(a); u=AH_Job_GetUser(j); assert(u); dbio=GWEN_DBIO_GetPlugin("swift"); if (!dbio) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Plugin SWIFT is not found"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Error, I18N("Plugin \"SWIFT\" not found.")); return AB_ERROR_PLUGIN_MISSING; } GWEN_Buffer_Rewind(buf); sio=GWEN_SyncIo_Memory_new(buf, 0); db=GWEN_DB_Group_new("transactions"); dbParams=GWEN_DB_Group_new("params"); GWEN_DB_SetCharValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "type", docType); if (AH_User_GetFlags(u) & AH_USER_FLAGS_KEEP_MULTIPLE_BLANKS) GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "keepMultipleBlanks", 1); else GWEN_DB_SetIntValue(dbParams, GWEN_DB_FLAGS_OVERWRITE_VARS, "keepMultipleBlanks", 0); rv=GWEN_DBIO_Import(dbio, sio, db, dbParams, GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Error parsing SWIFT %s (%d)", docType, rv); GWEN_DB_Group_free(dbParams); GWEN_DB_Group_free(db); GWEN_SyncIo_free(sio); GWEN_DBIO_free(dbio); return rv; } GWEN_DB_Group_free(dbParams); GWEN_SyncIo_free(sio); GWEN_DBIO_free(dbio); /* first count the groups */ dbDay=GWEN_DB_FindFirstGroup(db, "day"); while(dbDay) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(dbDay, "transaction"); while(dbT) { cnt++; dbT=GWEN_DB_FindNextGroup(dbT, "transaction"); } /* while */ dbDay=GWEN_DB_FindNextGroup(dbDay, "day"); } /* while */ progressId=GWEN_Gui_ProgressStart(GWEN_GUI_PROGRESS_DELAY | GWEN_GUI_PROGRESS_ALLOW_EMBED | GWEN_GUI_PROGRESS_SHOW_PROGRESS | GWEN_GUI_PROGRESS_SHOW_ABORT, I18N("Importing transactions..."), NULL, cnt, 0); /* add transactions to list */ dbDay=GWEN_DB_FindFirstGroup(db, "day"); while(dbDay) { GWEN_DB_NODE *dbT; dbT=GWEN_DB_FindFirstGroup(dbDay, "transaction"); while(dbT) { AB_TRANSACTION *t; t=AB_Transaction_fromDb(dbT); if (!t) { DBG_ERROR(AQHBCI_LOGDOMAIN, "Bad transaction data:"); GWEN_DB_Dump(dbT, 2); } else { const char *s; AB_Transaction_SetLocalBankCode(t, AB_User_GetBankCode(u)); AB_Transaction_SetLocalAccountNumber(t, AB_Account_GetAccountNumber(a)); /* some translations */ s=AB_Transaction_GetRemoteIban(t); if (!(s && *s)) { const char *sAid; /* no remote IBAN set, check whether the bank sends this info in the * fields for national account specifications (instead of the SWIFT * field "?38" which was specified for this case) */ sAid=AB_Transaction_GetRemoteAccountNumber(t); if (sAid && *sAid && AB_Banking_CheckIban(sAid)==0) { /* there is a remote account number specification, and that is an IBAN, * so we set that accordingly */ DBG_INFO(AQBANKING_LOGDOMAIN, "Setting remote IBAN from account number"); AB_Transaction_SetRemoteIban(t, sAid); /* set remote BIC if it not already is */ s=AB_Transaction_GetRemoteBic(t); if (!(s && *s)) { const char *sBid; sBid=AB_Transaction_GetRemoteBankCode(t); if (sBid && *sBid) { DBG_INFO(AQBANKING_LOGDOMAIN, "Setting remote BIC from bank code"); AB_Transaction_SetRemoteBic(t, sBid); } } } } DBG_INFO(AQHBCI_LOGDOMAIN, "Adding transaction"); if (noted) AB_ImExporterAccountInfo_AddNotedTransaction(ai, t); else AB_ImExporterAccountInfo_AddTransaction(ai, t); } if (GWEN_ERROR_USER_ABORTED== GWEN_Gui_ProgressAdvance(progressId, GWEN_GUI_PROGRESS_ONE)) { GWEN_Gui_ProgressEnd(progressId); return GWEN_ERROR_USER_ABORTED; } dbT=GWEN_DB_FindNextGroup(dbT, "transaction"); } /* while */ /* read all endsaldos */ if (!noted) { dbT=GWEN_DB_FindFirstGroup(dbDay, "endSaldo"); while (dbT) { GWEN_DB_NODE *dbX; GWEN_TIME *ti=0; dbX=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "date"); if (dbX) ti=GWEN_Time_fromDb(dbX); dbX=GWEN_DB_GetGroup(dbT, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "value"); if (dbX) { AB_VALUE *v; v=AB_Value_fromDb(dbX); if (v) { AB_BALANCE *bal; AB_ACCOUNT_STATUS *as; bal=AB_Balance_new(v, ti); AB_Value_free(v); as=AB_AccountStatus_new(); if (ti) AB_AccountStatus_SetTime(as, ti); AB_AccountStatus_SetNotedBalance(as, bal); AB_Balance_free(bal); AB_ImExporterAccountInfo_AddAccountStatus(ai, as); } } GWEN_Time_free(ti); dbT=GWEN_DB_FindNextGroup(dbT, "endSaldo"); } /* while */ } dbDay=GWEN_DB_FindNextGroup(dbDay, "day"); } /* while */ GWEN_Gui_ProgressEnd(progressId); GWEN_DB_Group_free(db); return 0; }