aqfinance/src/lib/engine/libtest.c @ d22f77e5
1fc5ed1c | Martin Preuss | ||
#include <aqfinance/engine/ae.h>
|
|||
17dbb54a | Martin Preuss | ||
#include <aqdatabase/aqdb_db.h>
|
|||
#include <aqdatabase/aqdb_value.h>
|
|||
1fc5ed1c | Martin Preuss | #include <aqfinance/engine/book/ae_book.h>
|
|
da5046d3 | Martin Preuss | #include <aqfinance/engine/modules/ae_statementimport.h>
|
|
5bb655a9 | Martin Preuss | #include <aqfinance/engine/modules/ae_recontransfers.h>
|
|
da5046d3 | Martin Preuss | ||
#include <aqbanking/imexporter.h>
|
|||
1fc5ed1c | Martin Preuss | ||
#include <gwenhywfar/gwenhywfar.h>
|
|||
#include <gwenhywfar/debug.h>
|
|||
#include <gwenhywfar/logger.h>
|
|||
da5046d3 | Martin Preuss | #include <gwenhywfar/db.h>
|
|
#include <sys/types.h>
|
|||
#include <sys/stat.h>
|
|||
#include <fcntl.h>
|
|||
#include <string.h>
|
|||
#include <errno.h>
|
|||
#include <unistd.h>
|
|||
1fc5ed1c | Martin Preuss | ||
#define DB_URL1 "dir:///tmp/aqfinance-db1"
|
|||
#define DB_URL2 "dir:///tmp/aqfinance-db2"
|
|||
da5046d3 | Martin Preuss | ||
int readContext(const char *ctxFile,
|
|||
AB_IMEXPORTER_CONTEXT **pCtx,
|
|||
int mustExist) {
|
|||
8e9788c6 | Martin Preuss | #if 0
|
|
da5046d3 | Martin Preuss | AB_IMEXPORTER_CONTEXT *ctx;
|
|
int fd;
|
|||
if (ctxFile==0)
|
|||
fd=fileno(stdin);
|
|||
else
|
|||
fd=open(ctxFile, O_RDONLY);
|
|||
if (fd<0) {
|
|||
if (!mustExist) {
|
|||
ctx=AB_ImExporterContext_new();
|
|||
*pCtx=ctx;
|
|||
return 0;
|
|||
}
|
|||
DBG_ERROR(0, "open(%s): %s", ctxFile, strerror(errno));
|
|||
return GWEN_ERROR_IO;
|
|||
}
|
|||
else {
|
|||
GWEN_DB_NODE *dbCtx;
|
|||
int rv;
|
|||
dbCtx=GWEN_DB_Group_new("context");
|
|||
rv=GWEN_DB_ReadFromFd(dbCtx, fd,
|
|||
GWEN_DB_FLAGS_DEFAULT |
|
|||
GWEN_PATH_FLAGS_CREATE_GROUP,
|
|||
0,
|
|||
2000);
|
|||
if (ctxFile)
|
|||
close(fd);
|
|||
if (rv<0) {
|
|||
DBG_ERROR(0, "Error reading context file (%d)", rv);
|
|||
GWEN_DB_Group_free(dbCtx);
|
|||
return rv;
|
|||
}
|
|||
ctx=AB_ImExporterContext_fromDb(dbCtx);
|
|||
if (!ctx) {
|
|||
DBG_ERROR(0, "No context in input data");
|
|||
GWEN_DB_Group_free(dbCtx);
|
|||
return GWEN_ERROR_BAD_DATA;
|
|||
}
|
|||
GWEN_DB_Group_free(dbCtx);
|
|||
*pCtx=ctx;
|
|||
}
|
|||
return 0;
|
|||
8e9788c6 | Martin Preuss | #else
|
|
return -1;
|
|||
#endif
|
|||
da5046d3 | Martin Preuss | }
|
|
1fc5ed1c | Martin Preuss | int test_db_factory() {
|
|
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | int rv;
|
|
rv=AE_DbFactory(DB_URL1, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
17dbb54a | Martin Preuss | AQDB_DB_free(db);
|
|
1fc5ed1c | Martin Preuss | ||
return 0;
|
|||
}
|
|||
int test_db_create() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | int rv;
|
|
rv=AE_DbFactory(DB_URL1, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
17dbb54a | Martin Preuss | rv=AQDB_DB_Create(db, 0);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to create db (%d)\n", rv);
|
|||
17dbb54a | Martin Preuss | AQDB_DB_free(db);
|
|
1fc5ed1c | Martin Preuss | return 2;
|
|
}
|
|||
17dbb54a | Martin Preuss | AQDB_DB_free(db);
|
|
1fc5ed1c | Martin Preuss | ||
return 0;
|
|||
}
|
|||
int test_book_create() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
rv=AE_Book_Create(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
int test_book_open() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
int test_book_setup() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_IdCounter, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_Commodity, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 2 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_Account, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 3 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_BankAccount, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 4 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_BankStatement, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 5 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_CreateTable(b, AE_Book_TableType_BankTransfer, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to create table 6 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
int test_book_opentable() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_IdCounter,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_Commodity,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 2 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_Account,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 3 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankAccount,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 4 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankStatement,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 5 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankTransfer,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 6 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
int test_book_getnextid() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
1fc5ed1c | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
17dbb54a | Martin Preuss | AQDB_ID id=0;
|
|
1fc5ed1c | Martin Preuss | ||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_IdCounter,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
da5046d3 | Martin Preuss | rv=AE_Book_BeginEdit(b, 0);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to begin editing (%d)\n", rv);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
return 2;
|
|||
}
|
|||
da5046d3 | Martin Preuss | rv=AE_Book_GetNextId(b, AE_Book_TableType_Account, &id);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to get next id (%d)\n", rv);
|
|
17dbb54a | Martin Preuss | AE_Book_EndEdit(b, AQDB_ACTION_FLAGS_ABORT);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
return 2;
|
|||
}
|
|||
da5046d3 | Martin Preuss | rv=AE_Book_EndEdit(b, 0);
|
|
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to end editing (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
5dad2b85 | Martin Preuss | int test_book_import_transactions() {
|
|
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
da5046d3 | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
AB_IMEXPORTER_CONTEXT *ctx=NULL;
|
|||
rv=readContext("test.ctx", &ctx, 1);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to read context (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
da5046d3 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_IdCounter,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
da5046d3 | Martin Preuss | AB_ImExporterContext_free(ctx);
|
|
1fc5ed1c | Martin Preuss | return 2;
|
|
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankStatement,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
da5046d3 | Martin Preuss | AB_ImExporterContext_free(ctx);
|
|
1fc5ed1c | Martin Preuss | return 2;
|
|
}
|
|||
5786433b | Martin Preuss | rv=AE_StatementImport_ImportContext(b, ctx, 0);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to import context (%d)\n", rv);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
da5046d3 | Martin Preuss | AB_ImExporterContext_free(ctx);
|
|
1fc5ed1c | Martin Preuss | return 2;
|
|
}
|
|||
da5046d3 | Martin Preuss | rv=AE_Book_Close(b, 0);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
da5046d3 | Martin Preuss | AB_ImExporterContext_free(ctx);
|
|
1fc5ed1c | Martin Preuss | return 2;
|
|
}
|
|||
da5046d3 | Martin Preuss | AE_Book_free(b);
|
|
AB_ImExporterContext_free(ctx);
|
|||
return 0;
|
|||
}
|
|||
5dad2b85 | Martin Preuss | int test_book_import_transfers() {
|
|
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
5dad2b85 | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
AB_IMEXPORTER_CONTEXT *ctx=NULL;
|
|||
rv=readContext("test.ctx", &ctx, 1);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to read context (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_IdCounter,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankTransfer,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
5786433b | Martin Preuss | rv=AE_StatementImport_ImportContext(b, ctx, 0);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to import context (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
AB_ImExporterContext_free(ctx);
|
|||
return 0;
|
|||
}
|
|||
5bb655a9 | Martin Preuss | void _dumpStatement(const AE_STATEMENT *st) {
|
|
33c75334 | Martin Preuss | const GWEN_DATE *ti;
|
|
5bb655a9 | Martin Preuss | const char *s;
|
|
17dbb54a | Martin Preuss | const AQDB_VALUE *v;
|
|
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | ti=AE_Statement_GetDate(st);
|
|
if (ti==NULL)
|
|||
ti=AE_Statement_GetValutaDate(st);
|
|||
if (ti) {
|
|||
33c75334 | Martin Preuss | fprintf(stdout, "%s\t", GWEN_Date_GetString(ti));
|
|
5bb655a9 | Martin Preuss | }
|
|
else
|
|||
fprintf(stdout, "\t");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | fprintf(stdout, "%08x\t", AE_Statement_GetId(st));
|
|
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetInfoText(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | v=AE_Statement_GetValue(st);
|
|
if (v) {
|
|||
GWEN_BUFFER *tbuf;
|
|||
tbuf=GWEN_Buffer_new(0, 32, 0, 1);
|
|||
17dbb54a | Martin Preuss | AQDB_Value_toHumanReadableString(v, tbuf, 2);
|
|
5bb655a9 | Martin Preuss | fprintf(stdout, "%s\t", GWEN_Buffer_GetStart(tbuf));
|
|
GWEN_Buffer_free(tbuf);
|
|||
}
|
|||
else
|
|||
fprintf(stdout, "\t");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetCurrency(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetRemoteName(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetPurpose(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetLocalBankCode(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetLocalAccountNumber(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetRemoteBankCode(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | s=AE_Statement_GetRemoteAccountNumber(st);
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
da5046d3 | Martin Preuss | ||
5bb655a9 | Martin Preuss | fprintf(stdout, "%d\t", AE_Statement_GetTextKey(st));
|
|
s=NULL;
|
|||
switch(AE_Statement_GetStatus(st)) {
|
|||
case AE_Statement_StatusUnknown: s="unknown"; break;
|
|||
case AE_Statement_StatusNone: s="none"; break;
|
|||
d493c2c8 | Martin Preuss | case AE_Statement_StatusEnqueued: s="enqueued"; break;
|
|
5bb655a9 | Martin Preuss | case AE_Statement_StatusSending: s="sending"; break;
|
|
case AE_Statement_StatusAccepted: s="accepted"; break;
|
|||
case AE_Statement_StatusRejected: s="rejected"; break;
|
|||
case AE_Statement_StatusPending: s="pending"; break;
|
|||
case AE_Statement_StatusAutoReconciled: s="autorecon"; break;
|
|||
case AE_Statement_StatusManuallyReconciled: s="manrecon"; break;
|
|||
case AE_Statement_StatusRevoked: s="revoked"; break;
|
|||
b36772b4 | Martin Preuss | case AE_Statement_StatusAborted: s="aborted"; break;
|
|
5bb655a9 | Martin Preuss | }
|
|
fprintf(stdout, "%s\t", s?s:"");
|
|||
fprintf(stdout, "\n");
|
|||
}
|
|||
da5046d3 | Martin Preuss | ||
5dad2b85 | Martin Preuss | ||
da5046d3 | Martin Preuss | ||
b3cdd829 | Martin Preuss | void GWENHYWFAR_CB *_dumpStatementFn(AE_BOOK *bk,
|
|
AE_BOOK_TABLE_TYPE tt,
|
|||
17dbb54a | Martin Preuss | AQDB_OBJECT *o,
|
|
b3cdd829 | Martin Preuss | void *data) {
|
|
5bb655a9 | Martin Preuss | AE_STATEMENT *st=NULL;
|
|
int rv;
|
|||
rv=AE_Statement_fromObject(o, &st);
|
|||
if (rv==0) {
|
|||
_dumpStatement(st);
|
|||
da5046d3 | Martin Preuss | AE_Statement_free(st);
|
|
}
|
|||
return NULL;
|
|||
}
|
|||
int dumpStatements(AE_BOOK *b, AE_BOOK_TABLE_TYPE tt) {
|
|||
void *dummy=NULL;
|
|||
int rv;
|
|||
rv=AE_Book_ForEveryQueryObject(b,
|
|||
tt,
|
|||
0,
|
|||
NULL,
|
|||
5bb655a9 | Martin Preuss | _dumpStatementFn,
|
|
da5046d3 | Martin Preuss | NULL,
|
|
&dummy);
|
|||
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | if (rv!=GWEN_ERROR_NOT_FOUND) {
|
|
DBG_INFO(AE_LOGDOMAIN, "here (%d)", rv);
|
|||
return rv;
|
|||
}
|
|||
DBG_ERROR(0, "No entries found");
|
|||
}
|
|||
return 0;
|
|||
}
|
|||
int test_book_dump_statements() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
da5046d3 | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ);
|
|
da5046d3 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
return 2;
|
|||
}
|
|||
5dad2b85 | Martin Preuss | fprintf(stdout, "Transactions\n");
|
|
da5046d3 | Martin Preuss | rv=AE_Book_OpenTable(b, AE_Book_TableType_BankStatement,
|
|
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ);
|
|
1fc5ed1c | Martin Preuss | if (rv<0) {
|
|
da5046d3 | Martin Preuss | fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=dumpStatements(b, AE_Book_TableType_BankStatement);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to dump statements (%d)\n", rv);
|
|||
1fc5ed1c | Martin Preuss | AE_Book_free(b);
|
|
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
da5046d3 | Martin Preuss | ||
5dad2b85 | Martin Preuss | int test_book_dump_transfers() {
|
|
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
5dad2b85 | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankTransfer,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ);
|
|
5dad2b85 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
fprintf(stdout, "Transfers\n");
|
|||
rv=dumpStatements(b, AE_Book_TableType_BankTransfer);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to dump statements (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
5bb655a9 | Martin Preuss | ||
int test_book_recon_transfers() {
|
|||
17dbb54a | Martin Preuss | AQDB_DB *db=NULL;
|
|
5bb655a9 | Martin Preuss | AE_BOOK *b;
|
|
int rv;
|
|||
rv=AE_DbFactory(DB_URL2, &db);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to instantiate db (%d)\n", rv);
|
|||
return 2;
|
|||
}
|
|||
b=AE_Book_new(db);
|
|||
17dbb54a | Martin Preuss | rv=AE_Book_Open(b, AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5bb655a9 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankStatement,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5bb655a9 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 1 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_OpenTable(b, AE_Book_TableType_BankTransfer,
|
|||
17dbb54a | Martin Preuss | AQDB_ACTION_FLAGS_READ | AQDB_ACTION_FLAGS_WRITE);
|
|
5bb655a9 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to open table 2 (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
fprintf(stdout, "Reconciling transfers\n");
|
|||
1ebea1cf | Martin Preuss | rv=AE_ReconTransfers_ReconTransfers(b, 1);
|
|
5bb655a9 | Martin Preuss | if (rv<0) {
|
|
fprintf(stderr, "ERROR: Unable to reconcile transfers (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
rv=AE_Book_Close(b, 0);
|
|||
if (rv<0) {
|
|||
fprintf(stderr, "ERROR: Unable to close book (%d)\n", rv);
|
|||
AE_Book_free(b);
|
|||
return 2;
|
|||
}
|
|||
AE_Book_free(b);
|
|||
return 0;
|
|||
}
|
|||
1fc5ed1c | Martin Preuss | int test() {
|
|
int rv;
|
|||
int errors=0;
|
|||
rv=test_db_factory();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_db_create();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_create();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_open();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_setup();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_opentable();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_getnextid();
|
|||
if (rv)
|
|||
errors++;
|
|||
64a06eec | Martin Preuss | rv=test_book_getnextid();
|
|
if (rv)
|
|||
errors++;
|
|||
5dad2b85 | Martin Preuss | rv=test_book_import_transactions();
|
|
if (rv)
|
|||
errors++;
|
|||
rv=test_book_import_transactions();
|
|||
da5046d3 | Martin Preuss | if (rv)
|
|
errors++;
|
|||
5dad2b85 | Martin Preuss | rv=test_book_import_transfers();
|
|
da5046d3 | Martin Preuss | if (rv)
|
|
errors++;
|
|||
rv=test_book_dump_statements();
|
|||
if (rv)
|
|||
errors++;
|
|||
5dad2b85 | Martin Preuss | rv=test_book_dump_transfers();
|
|
if (rv)
|
|||
errors++;
|
|||
5bb655a9 | Martin Preuss | rv=test_book_recon_transfers();
|
|
if (rv)
|
|||
errors++;
|
|||
rv=test_book_dump_statements();
|
|||
if (rv)
|
|||
errors++;
|
|||
rv=test_book_dump_transfers();
|
|||
if (rv)
|
|||
errors++;
|
|||
1fc5ed1c | Martin Preuss | if (errors)
|
|
return 2;
|
|||
return 0;
|
|||
}
|
|||
da5046d3 | Martin Preuss | ||
1fc5ed1c | Martin Preuss | int main(int argc, char **argv) {
|
|
int rv;
|
|||
const char *s;
|
|||
rv=GWEN_Init();
|
|||
if (rv) {
|
|||
DBG_ERROR_ERR(0, rv);
|
|||
return rv;
|
|||
}
|
|||
if (!GWEN_Logger_IsOpen(AE_LOGDOMAIN)) {
|
|||
GWEN_Logger_Open(AE_LOGDOMAIN,
|
|||
"aqfinance", 0,
|
|||
GWEN_LoggerType_Console,
|
|||
GWEN_LoggerFacility_User);
|
|||
}
|
|||
s=getenv("AE_LOGLEVEL");
|
|||
if (s && *s) {
|
|||
GWEN_LOGGER_LEVEL ll;
|
|||
ll=GWEN_Logger_Name2Level(s);
|
|||
GWEN_Logger_SetLevel(AE_LOGDOMAIN, ll);
|
|||
}
|
|||
else
|
|||
GWEN_Logger_SetLevel(AE_LOGDOMAIN, GWEN_LoggerLevel_Notice);
|
|||
return test();
|
|||
}
|