[Gnucash-changes] r12973 - gnucash/trunk/src/import-export - More
proposed work on mt940 importer. More refactoring of HBCI functions.
Christian Stimming
cstim at cvs.gnucash.org
Tue Jan 24 16:26:31 EST 2006
Author: cstim
Date: 2006-01-24 16:26:30 -0500 (Tue, 24 Jan 2006)
New Revision: 12973
Trac: http://svn.gnucash.org/trac/changeset/12973
Modified:
gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c
gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.h
gnucash/trunk/src/import-export/mt940/Makefile.am
gnucash/trunk/src/import-export/mt940/gnc-mt940-import.c
Log:
More proposed work on mt940 importer. More refactoring of HBCI functions.
Modified: gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c
===================================================================
--- gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c 2006-01-24 20:43:05 UTC (rev 12972)
+++ gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c 2006-01-24 21:26:30 UTC (rev 12973)
@@ -46,13 +46,7 @@
gettrans_dates(GtkWidget *parent, Account *gnc_acc,
GWEN_TIME **from_date, GWEN_TIME **to_date);
-static AB_TRANSACTION *trans_list_cb(AB_TRANSACTION *reportn, void *user_data);
-struct trans_list_data
-{
- Account *gnc_acc;
- GNCImportMainMatcher *importer_generic;
-};
void
@@ -233,7 +227,7 @@
data.importer_generic = importer_generic_gui;
data.gnc_acc = gnc_acc;
- AB_Transaction_List2_ForEach (trans_list, trans_list_cb, &data);
+ AB_Transaction_List2_ForEach (trans_list, gnc_hbci_trans_list_cb, &data);
if (run_until_done)
return gnc_gen_trans_list_run (importer_generic_gui);
@@ -243,7 +237,7 @@
/* list_AB_TRANSACTION_foreach callback. The Conversion from HBCI to
GNC transaction is done here, once for each AB_TRANSACTION. */
-static AB_TRANSACTION *trans_list_cb(AB_TRANSACTION *h_trans, void *user_data)
+AB_TRANSACTION *gnc_hbci_trans_list_cb(AB_TRANSACTION *h_trans, void *user_data)
{
time_t current_time;
/* time_t tt1, tt2; */
Modified: gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.h
===================================================================
--- gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.h 2006-01-24 20:43:05 UTC (rev 12972)
+++ gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.h 2006-01-24 21:26:30 UTC (rev 12973)
@@ -24,6 +24,8 @@
#define GNC_HBCI_GETTRANS_H
#include <aqbanking/jobgettransactions.h>
+
+#include "import-main-matcher.h"
#include "Account.h"
/** Start a GetTrans job. */
@@ -46,5 +48,17 @@
AB_TRANSACTION_LIST2 *trans_list,
gboolean run_until_done);
+/** user_data struct for the gnc_hbci_trans_list_cb() structure */
+struct trans_list_data
+{
+ Account *gnc_acc;
+ GNCImportMainMatcher *importer_generic;
+};
+/** AB_TRANSACTION_LIST2_foreach callback. The Conversion from HBCI to
+ GNC transaction is done here, once for each AB_TRANSACTION. */
+AB_TRANSACTION *gnc_hbci_trans_list_cb(AB_TRANSACTION *imported_trans,
+ void *user_data);
+
+
#endif /* GNC_HBCI_GETTRANS_H */
Modified: gnucash/trunk/src/import-export/mt940/Makefile.am
===================================================================
--- gnucash/trunk/src/import-export/mt940/Makefile.am 2006-01-24 20:43:05 UTC (rev 12972)
+++ gnucash/trunk/src/import-export/mt940/Makefile.am 2006-01-24 21:26:30 UTC (rev 12973)
@@ -14,10 +14,16 @@
libgncmod_mt940_la_LIBADD = \
${top_builddir}/src/gnc-module/libgncmodule.la \
+ ${top_builddir}/src/core-utils/libcore-utils.la \
${top_builddir}/src/engine/libgncmod-engine.la \
${top_builddir}/src/import-export/libgncmod-generic-import.la \
+ ${top_builddir}/src/import-export/hbci/libgncmod-hbci.la \
+ ${top_builddir}/src/gnome/libgncgnome.la \
+ ${GNOME_LIBS} \
+ ${GLADE_LIBS} \
+ ${QOF_LIBS} \
${GLIB_LIBS} \
- $(HBCI_LIBS)
+ ${HBCI_LIBS}
AM_CFLAGS = \
-I${top_srcdir}/src \
@@ -28,12 +34,14 @@
-I${top_srcdir}/src/gnome-utils \
-I${top_srcdir}/src/import-export \
-I$(top_srcdir)/src/import-export/hbci \
+ ${G_WRAP_COMPILE_ARGS} \
${GUILE_INCS} \
- ${GLIB_CFLAGS} \
- ${GLADE_CFLAGS} \
${GNOME_CFLAGS} \
${GTKHTML_CFLAGS} \
- $(HBCI_CFLAGS)
+ ${GLADE_CFLAGS} \
+ ${QOF_CFLAGS} \
+ ${GLIB_CFLAGS} \
+ ${HBCI_CFLAGS}
uidir = $(GNC_UI_DIR)
ui_DATA = \
Modified: gnucash/trunk/src/import-export/mt940/gnc-mt940-import.c
===================================================================
--- gnucash/trunk/src/import-export/mt940/gnc-mt940-import.c 2006-01-24 20:43:05 UTC (rev 12972)
+++ gnucash/trunk/src/import-export/mt940/gnc-mt940-import.c 2006-01-24 21:26:30 UTC (rev 12973)
@@ -35,29 +35,28 @@
#include <aqbanking/imexporter.h>
-#include "gnc-hbci-gettrans.h"
-#include "import-account-matcher.h"
-#include "import-main-matcher.h"
-
-#include "Account.h"
+#include "gnc-ui.h"
+#include "qof.h"
#include "Transaction.h"
+#include "Account.h"
#include "gnc-engine.h"
#include "gnc-file.h"
#include "gnc-ui-util.h"
-#include "gnc-gconf-utils.h"
-#include "gnc-hbci-utils.h"
+#include "gnc-hbci-gettrans.h"
+
+#include "import-main-matcher.h"
+#include "import-account-matcher.h"
+#include "gnc-hbci-gettrans.h"
+
#include "gnc-mt940-import.h"
#define GCONF_SECTION "dialogs/import/mt940"
static QofLogModule log_module = GNC_MOD_IMPORT;
-static void *trans_importer_cb (const HBCI_Transaction *h_trans,
- void *user_data);
-
/* Note: This file is broken. See
http://bugzilla.gnome.org/show_bug.cgi?id=325170 . The patch from
there is already included, but the file still won't compile. */
@@ -88,115 +87,109 @@
GNC_FILE_DIALOG_IMPORT);
g_free(default_dir);
- if(selected_filename!=NULL)
+ if(selected_filename!=NULL) {
+ /* Remember the directory as the default. */
+ gnc_extract_directory(&default_dir, selected_filename);
+ gnc_gconf_set_string(GCONF_SECTION, KEY_LAST_PATH, default_dir, NULL);
+ g_free(default_dir);
+
+ /*strncpy(file,selected_filename, 255);*/
+ DEBUG("Filename found: %s",selected_filename);
+
+ /* Create the Generic transaction importer GUI. */
+ gnc_mt940_importer_gui = gnc_gen_trans_list_new(NULL, NULL, FALSE);
+
+ DEBUG("Opening selected file");
+ mt940_file = fopen(selected_filename, "r");
+
{
- /* Remember the directory as the default. */
- gnc_extract_directory(&default_dir, selected_filename);
- gnc_gconf_set_string(GCONF_SECTION, KEY_LAST_PATH, default_dir, NULL);
- g_free(default_dir);
+ int result;
+ AB_BANKING *tr;
+ AB_IMEXPORTER *importer;
+ AB_IMEXPORTER_CONTEXT *ctx=0;
+ GWEN_BUFFEREDIO *buffio;
+ const list_HBCI_Transaction *transactions;
+ /*list_HBCI_Transaction_iter *iter;*/
- /*strncpy(file,selected_filename, 255);*/
- DEBUG("Filename found: %s",selected_filename);
+ tr=AB_Banking_new();
+ /* get import module */
+ importer=AB_Banking_GetImExporter(tr, "swift"); /* possible values: csv, swift, dtaus, */
+ if (!importer) {
+ DEBUG("Import module swift not found");
+ }
- /* Create the Generic transaction importer GUI. */
- gnc_mt940_importer_gui = gnc_gen_trans_list_new(NULL, NULL, FALSE);
+ /* load the import profile */
+ //dbProfiles=AB_Banking_GetImExporterProfiles(tr, "swift");
+ dbProfile="default";
- DEBUG("Opening selected file");
- mt940_file = fopen(selected_filename, "r");
+ /* import new context */
+ ctx=AB_ImExporterContext_new();
- fseek(mt940_file,0,SEEK_END);
- unsigned long filesize=ftell(mt940_file);
- rewind(mt940_file);
+ /* Wrap file in gwen_bufferedio */
+ buffio = GWEN_BufferedIO_File_new(mt940_file);
- char *mt940_records=g_malloc(filesize+1);
+ result=AB_ImExporter_Import(importer,
+ ctx,
+ buffio,
+ dbProfile);
- fread(mt940_records,1,filesize,mt940_file);
- mt940_records[filesize]='\0';
+ DEBUG("Parsing result: %d\n", result);
- DEBUG("Read file data: %s\n",mt940_records);
+ GWEN_BufferedIO_Close(buffio);
+ GWEN_BufferedIO_free(buffio);
{
- int pos=0;
- int result;
- AB_BANKING *tr;
- AB_IMEXPORTER *importer;
- AB_IMEXPORTER_CONTEXT *ctx=0;
- GWEN_DB_NODE *dbCtx;
- const list_HBCI_Transaction *transactions;
- /*list_HBCI_Transaction_iter *iter;*/
+ /* Now get all accountinfos */
+ AB_TRANSACTION *ab_trans;
+ struct trans_list_data data;
+ Account *gnc_acc;
+ AB_IMEXPORTER_ACCOUNTINFO * accinfo;
- tr=AB_Banking_new();
- /* get import module */
- importer=AB_Banking_GetImExporter(tr, "swift"); /* possible values: csv, swift, dtaus, */
- if (!importer) {
- DEBUG("Import module swift not found");
- }
+ /* Create importer GUI */
+ importer_generic_gui = gnc_gen_trans_list_new(parent, NULL, TRUE, 14);
+ data.importer_generic = importer_generic_gui;
- /* load the import profile */
- //dbProfiles=AB_Banking_GetImExporterProfiles(tr, "swift");
- dbProfile="default";
+ /* Iterate through all accounts */
+ accinfo = AB_ImExporterContext_GetFirstAccountInfo(ctx);
+ while (accinfo) {
+ /* FIXME: need to get account name from accinfo
+ structure here */
+ gnc_acc = gnc_import_select_account(account_name, 1, NULL, NULL,
+ NO_TYPE, NULL, NULL);
+ /* Store chosen gnucash account in callback data */
+ data.gnc_acc = gnc_acc;
- /* import new context */
- ctx=AB_ImExporterContext_new();
-
- while(pos<filesize){
- DEBUG("Parsing mt940 string, pos=%d\n",pos);
+ /* Iterate through all transactions */
+ ab_trans =
+ AB_ImExporterAccountInfo_GetFirstTransaction (accinfo);
+ while (ab_trans) {
+ /* This callback in the hbci module will add the
+ imported transaction to gnucash's importer */
+ gnc_hbci_trans_list_cb(ab_trans, &data);
+ ab_trans =
+ AB_ImExporterAccountInfo_GetNextTransaction (accinfo);
+ }
+ /* all transaction finished. */
- result=AB_ImExporter_Import(importer,
- ctx,
- mt940_records,
- dbProfile);
+ accinfo = AB_ImExporterContext_GetNextAccountInfo(ctx);
+ }
+ /* all accounts finished. */
+
+ AB_ImExporterContext_free(ctx);
- DEBUG("Parsing result: %d\n", result);
+ /* that's it */
+ result=AB_Banking_Fini(ab);
+ if (result)
+ DEBUG("ERROR: Error on deinit (%d)\n",result);
- AB_ImExporterContext_toDb(ctx, dbCtx);
+ g_free(selected_filename);
- transactions=HBCI_transactionReport_transactions(tr);
- DEBUG("Got %d transactions.\n",
- list_HBCI_Transaction_size(transactions));
-
- DEBUG("Importing those transaction...\n");
- list_HBCI_Transaction_foreach (transactions, trans_importer_cb, gnc_mt940_importer_gui);
- DEBUG("Imported transactions, looking for next...\n");
- }
- HBCI_transactionReport_delete(tr);
+ /* and run the gnucash importer. */
+ gnc_gen_trans_list_run (importer_generic_gui);
}
- AB_ImExporterContext_free(ctx);
- /* that's is */
- result=AB_Banking_Fini(ab);
- if (result) {
- DEBUG("ERROR: Error on deinit (%d)\n",result);
- g_free(mt940_records);
- g_free(selected_filename);
}
+ }
}
-/* list_HBCI_Transaction_foreach callback. The Conversion from HBCI to
- GNC transaction is done here, once for each HBCI_Transaction.
- */
-static void *trans_importer_cb (const HBCI_Transaction *h_trans,
- void *user_data)
-{
- Account *gnc_acc;
- GNCImportMainMatcher *gnc_importer_gui = user_data;
-
- g_assert(gnc_importer_gui);
- g_assert(h_trans);
-
- char *account_name=(char *)HBCI_Transaction_ourAccountId(h_trans);
- DEBUG("Account name: \"%s\"\n",account_name);
- DEBUG("Transaction code: %d\n", HBCI_Transaction_transactionCode(h_trans));
- const HBCI_Value* value=HBCI_Transaction_value(h_trans);
- DEBUG("Transaction value: %f\n", HBCI_Value_getValue(value));
-
- gnc_acc = gnc_import_select_account(account_name, 1, NULL, NULL, NO_TYPE, NULL, NULL);
- g_assert(gnc_acc);
-
- gnc_hbci_trans_import(h_trans,gnc_importer_gui,gnc_acc);
- // trans_importer(h_trans,gnc_importer_gui,gnc_acc);
-
- return NULL;
-}
-
/** @} */
More information about the gnucash-changes
mailing list