diff --git a/gnucash/import-export/aqb/assistant-ab-initial.c b/gnucash/import-export/aqb/assistant-ab-initial.c index 13425a67ca..551073ef1f 100644 --- a/gnucash/import-export/aqb/assistant-ab-initial.c +++ b/gnucash/import-export/aqb/assistant-ab-initial.c @@ -64,6 +64,7 @@ #include "gnc-ui-util.h" #include "gnc-session.h" #include "import-account-matcher.h" +#include "import-utilities.h" #ifndef AQBANKING6 # include #endif @@ -682,7 +683,8 @@ static void clear_kvp_acc_cb(gpointer gnc_acc, gpointer ab_acc, gpointer user_data) { g_return_if_fail(gnc_acc); - /* Delete complete "hbci..." KVPs for GnuCash account */ + /* Delete "online-id" and complete "hbci..." KVPs for GnuCash account */ + gnc_account_delete_map_entry((Account *) gnc_acc, "online_id", NULL, NULL, FALSE); gnc_account_delete_map_entry((Account *) gnc_acc, "hbci", NULL, NULL, FALSE); } @@ -694,6 +696,10 @@ save_kvp_acc_cb(gpointer key, gpointer value, gpointer user_data) guint32 ab_account_uid; const gchar *ab_accountid, *gnc_accountid; const gchar *ab_bankcode, *gnc_bankcode; +#ifdef AQBANKING6 + gchar *ab_online_id; + const gchar *gnc_online_id; +#endif g_return_if_fail(ab_acc && gnc_acc); @@ -726,6 +732,14 @@ save_kvp_acc_cb(gpointer key, gpointer value, gpointer user_data) && (!gnc_bankcode || (strcmp(gnc_bankcode, ab_bankcode) != 0))) gnc_ab_set_account_bankcode(gnc_acc, ab_bankcode); + +#ifdef AQBANKING6 + ab_online_id = gnc_ab_create_online_id(ab_bankcode, ab_accountid); + gnc_online_id = gnc_import_get_acc_online_id(gnc_acc); + if (ab_online_id && (!gnc_online_id || (strcmp(ab_online_id, gnc_online_id) != 0))) + gnc_import_set_acc_online_id(gnc_acc, ab_online_id); + g_free(ab_online_id); +#endif } static void diff --git a/gnucash/import-export/aqb/gnc-ab-utils.c b/gnucash/import-export/aqb/gnc-ab-utils.c index 4e965fa351..09e9f1b36a 100644 --- a/gnucash/import-export/aqb/gnc-ab-utils.c +++ b/gnucash/import-export/aqb/gnc-ab-utils.c @@ -63,7 +63,6 @@ G_GNUC_UNUSED static QofLogModule log_module = G_LOG_DOMAIN; static AB_BANKING *gnc_AB_BANKING = NULL; static gint gnc_AB_BANKING_refcount = 0; -static gchar* create_online_id(const gchar *bankcode, const gchar *accountnumber); static gpointer join_ab_strings_cb(const gchar *str, gpointer user_data); static Account *gnc_ab_accinfo_to_gnc_acc(GtkWidget *parent, AB_IMEXPORTER_ACCOUNTINFO *account_info); @@ -318,8 +317,8 @@ gnc_AB_VALUE_to_readable_string(const AB_VALUE *value) } -static gchar* -create_online_id(const gchar *bankcode, const gchar *accountnumber) +gchar* +gnc_ab_create_online_id(const gchar *bankcode, const gchar *accountnumber) { gchar *online_id; @@ -669,7 +668,7 @@ gnc_ab_accinfo_to_gnc_acc(GtkWidget *parent, AB_IMEXPORTER_ACCOUNTINFO *acc_info bankcode = AB_ImExporterAccountInfo_GetBankCode(acc_info); accountnumber = AB_ImExporterAccountInfo_GetAccountNumber(acc_info); - online_id = create_online_id(bankcode, accountnumber); + online_id = gnc_ab_create_online_id(bankcode, accountnumber); gnc_acc = gnc_import_select_account( parent, online_id, 1, AB_ImExporterAccountInfo_GetAccountName(acc_info), NULL, ACCT_TYPE_NONE, NULL, NULL); @@ -708,7 +707,7 @@ gnc_ab_txn_to_gnc_acc(GtkWidget *parent, const AB_TRANSACTION *transaction) return NULL; } - online_id = create_online_id(bankcode, accountnumber); + online_id = gnc_ab_create_online_id(bankcode, accountnumber); gnc_acc = gnc_import_select_account( parent, online_id, 1, AB_Transaction_GetLocalName(transaction), NULL, ACCT_TYPE_NONE, NULL, NULL); diff --git a/gnucash/import-export/aqb/gnc-ab-utils.h b/gnucash/import-export/aqb/gnc-ab-utils.h index 0cfb4db1c6..3f48462287 100644 --- a/gnucash/import-export/aqb/gnc-ab-utils.h +++ b/gnucash/import-export/aqb/gnc-ab-utils.h @@ -276,6 +276,17 @@ gboolean gnc_ab_ieci_run_matcher(GncABImExContextImport *ieci); */ GWEN_DB_NODE *gnc_ab_get_permanent_certs(void); +/** + * Creates an online ID from bank code and account number. + * + * The returned string must be g_free'd by the caller. + * + * @param bankcode Bank code + * @param accountnumber Account number + * @return an online ID + */ +gchar* gnc_ab_create_online_id(const gchar *bankcode, const gchar *accountnumber); + G_END_DECLS /** @} */