gnucash maint: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Sat Aug 7 17:40:32 EDT 2021


Updated	 via  https://github.com/Gnucash/gnucash/commit/be6fb1ab (commit)
	 via  https://github.com/Gnucash/gnucash/commit/3dceb086 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/2ee89f66 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/3f1e2499 (commit)
	from  https://github.com/Gnucash/gnucash/commit/bedc85af (commit)



commit be6fb1abe2b7fac27c4aefc4b32415bd1c73ab92
Merge: bedc85afa 3dceb0868
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat Aug 7 14:39:57 2021 -0700

    Merge Chris Good's 'bug798205ImpOfx' into maint.


commit 3dceb0868e77f931bbf31e413a1c1bfe98f8b0ff
Author: goodvibes2 <goodchris96 at gmail.com>
Date:   Tue Jul 27 13:05:58 2021 +1000

    Delete functions no longer used after mods for bug 798205

diff --git a/gnucash/import-export/import-backend.c b/gnucash/import-export/import-backend.c
index 8e409e6fb..60b01459b 100644
--- a/gnucash/import-export/import-backend.c
+++ b/gnucash/import-export/import-backend.c
@@ -1048,106 +1048,6 @@ gnc_import_process_trans_item (GncImportMatchMap *matchmap,
     return FALSE;
 }
 
-/********************************************************************\
- * check_trans_online_id() Callback function used by
- * gnc_import_exists_online_id.  Takes pointers to transaction and split,
- * returns 0 if their online_ids  do NOT match, or if the split
- * belongs to the transaction
-\********************************************************************/
-static gint check_trans_online_id(Transaction *trans1, void *user_data)
-{
-    Account *account;
-    Split *split1;
-    Split *split2 = user_data;
-    const gchar *online_id1;
-    const gchar *online_id2;
-
-    account = xaccSplitGetAccount(split2);
-    split1 = xaccTransFindSplitByAccount(trans1, account);
-    if (split1 == split2)
-        return 0;
-
-    /* hack - we really want to iterate over the _splits_ of the account
-       instead of the transactions */
-    g_assert(split1 != NULL);
-
-    if (gnc_import_split_has_online_id(split1))
-        online_id1 = gnc_import_get_split_online_id(split1);
-    else
-        online_id1 = gnc_import_get_trans_online_id(trans1);
-
-    online_id2 = gnc_import_get_split_online_id(split2);
-
-    if ((online_id1 == NULL) ||
-            (online_id2 == NULL) ||
-            (strcmp(online_id1, online_id2) != 0))
-    {
-        return 0;
-    }
-    else
-    {
-        /*printf("test_trans_online_id(): Duplicate found\n");*/
-        return 1;
-    }
-}
-
-static gint collect_trans_online_id(Transaction *trans, void *user_data)
-{
-    Split *split;
-    GHashTable *id_hash = user_data;
-    int i=0;
-    
-    const gchar* online_id = gnc_import_get_trans_online_id (trans);
-    if (online_id)
-        g_hash_table_add (id_hash, (void*) online_id);
-
-    for (GList *splits = xaccTransGetSplitList (trans); splits; splits = splits->next)
-    {
-        if (gnc_import_split_has_online_id (splits->data))
-            g_hash_table_add(id_hash, (void*) gnc_import_get_split_online_id (splits->data));
-    }
-    return 0;
-}
-
-/** Checks whether the given transaction's online_id already exists in
-  its parent account. */
-gboolean gnc_import_exists_online_id (Transaction *trans, GHashTable* acct_id_hash)
-{
-    gboolean online_id_exists = FALSE;
-    Account *dest_acct;
-    Split *source_split;
-
-    /* Look for an online_id in the first split */
-    source_split = xaccTransGetSplit(trans, 0);
-    g_assert(source_split);
-
-    // No online id, no point in continuing. We'd crash if we tried.
-    if (!gnc_import_get_split_online_id (source_split))
-        return FALSE;
-    // Create a hash per account of a hash of all transactions IDs. Then the test below will be fast if
-    // we have many transactions to import.
-    dest_acct = xaccSplitGetAccount (source_split);
-    if (!g_hash_table_contains (acct_id_hash, dest_acct))
-    {
-        GHashTable* new_hash = g_hash_table_new (g_str_hash, g_str_equal);
-        g_hash_table_insert (acct_id_hash, dest_acct, new_hash);
-        xaccAccountForEachTransaction (dest_acct, collect_trans_online_id, new_hash);
-    }
-    online_id_exists = g_hash_table_contains (g_hash_table_lookup (acct_id_hash, dest_acct),
-                                              gnc_import_get_split_online_id (source_split));
-    
-    /* If it does, abort the process for this transaction, since it is
-       already in the system. */
-    if (online_id_exists == TRUE)
-    {
-        DEBUG("%s", "Transaction with same online ID exists, destroying current transaction");
-        xaccTransDestroy(trans);
-        xaccTransCommitEdit(trans);
-    }
-    return online_id_exists;
-}
-
-
 /* ******************************************************************
  */
 
diff --git a/gnucash/import-export/import-backend.h b/gnucash/import-export/import-backend.h
index b524d1835..69cd2bc99 100644
--- a/gnucash/import-export/import-backend.h
+++ b/gnucash/import-export/import-backend.h
@@ -57,15 +57,6 @@ typedef enum _action
 /** @name Non-GUI Functions */
 /*@{*/
 
-/** Checks whether the given transaction's online_id already exists in
- * its parent account. The given transaction has to be open for
- * editing. If a matching online_id exists, the transaction is
- * destroyed (!) and TRUE is returned, otherwise FALSE is returned.
- *
- * @param trans The transaction for which to check for an existing
- * online_id. */
-gboolean gnc_import_exists_online_id (Transaction *trans, GHashTable* acct_id_hash);
-
 /** Evaluates the match between trans_info and split using the provided parameters.
  *
  * @param trans_info The TransInfo for the imported transaction
diff --git a/gnucash/import-export/import-main-matcher.c b/gnucash/import-export/import-main-matcher.c
index 07f5a1296..10c916135 100644
--- a/gnucash/import-export/import-main-matcher.c
+++ b/gnucash/import-export/import-main-matcher.c
@@ -76,7 +76,6 @@ struct _main_matcher_info
     gboolean add_toggled;     // flag to indicate that add has been toggled to stop selection
     gint id;
     GSList* temp_trans_list;  // Temporary list of imported transactions
-    GHashTable* acct_id_hash; // Hash table, per account, of list of transaction IDs.
     GSList* edited_accounts;  // List of accounts currently edited.
 };
 
@@ -144,14 +143,6 @@ static gboolean query_tooltip_tree_view_cb (GtkWidget *widget, gint x, gint y,
                                             gpointer user_data);
 /* end local prototypes */
 
-static
-gboolean delete_hash (gpointer key, gpointer value, gpointer user_data)
-{
-    // Value is a hash table that needs to be destroyed.
-    g_hash_table_destroy (value);
-    return TRUE;
-}
-
 static void
 update_all_balances (GNCImportMainMatcher *info)
 {
@@ -218,8 +209,6 @@ gnc_gen_trans_list_delete (GNCImportMainMatcher *info)
     // We've deferred balance computations on many accounts. Let's do it now that we're done.
     update_all_balances (info);
 
-    g_hash_table_foreach_remove (info->acct_id_hash, delete_hash, NULL);
-    info->acct_id_hash = NULL;
     g_free (info);
 }
 
@@ -1133,8 +1122,6 @@ gnc_gen_trans_init_view (GNCImportMainMatcher *info,
                       G_CALLBACK(gnc_gen_trans_onButtonPressed_cb), info);
     g_signal_connect (view, "popup-menu",
                       G_CALLBACK(gnc_gen_trans_onPopupMenu_cb), info);
-
-    info->acct_id_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
 }
 
 static void
diff --git a/gnucash/import-export/import-utilities.c b/gnucash/import-export/import-utilities.c
index 8d672d4e0..4be49b323 100644
--- a/gnucash/import-export/import-utilities.c
+++ b/gnucash/import-export/import-utilities.c
@@ -57,29 +57,6 @@ void gnc_import_set_acc_online_id (Account *account, const gchar *id)
     xaccAccountCommitEdit (account);
 }
 
-const gchar * gnc_import_get_trans_online_id (Transaction * transaction)
-{
-    gchar *id = NULL;
-    qof_instance_get (QOF_INSTANCE (transaction), "online-id", &id, NULL);
-    return id;
-}
-/* Not actually used */
-void gnc_import_set_trans_online_id (Transaction *transaction,
-				     const gchar *id)
-{
-    g_return_if_fail (transaction != NULL);
-    xaccTransBeginEdit (transaction);
-    qof_instance_set (QOF_INSTANCE (transaction), "online-id", id, NULL);
-    xaccTransCommitEdit (transaction);
-}
-
-gboolean gnc_import_trans_has_online_id(Transaction * transaction)
-{
-    const gchar * online_id;
-    online_id = gnc_import_get_trans_online_id(transaction);
-    return (online_id != NULL && strlen(online_id) > 0);
-}
-
 const gchar * gnc_import_get_split_online_id (Split * split)
 {
     gchar *id = NULL;
diff --git a/gnucash/import-export/import-utilities.h b/gnucash/import-export/import-utilities.h
index 1ef733d8b..a39d64157 100644
--- a/gnucash/import-export/import-utilities.h
+++ b/gnucash/import-export/import-utilities.h
@@ -49,17 +49,6 @@ const gchar * gnc_import_get_acc_online_id(Account * account);
 void gnc_import_set_acc_online_id(Account * account,
                                   const gchar * string_value);
 /** @} */
-/** @name Setter-getters
-    Setter and getter functions for the online_id field for
-    Transactions.
-	@{
-*/
-const gchar * gnc_import_get_trans_online_id(Transaction * transaction);
-void gnc_import_set_trans_online_id(Transaction * transaction,
-                                    const gchar * string_value);
-/** @} */
-
-gboolean gnc_import_trans_has_online_id(Transaction * transaction);
 
 /** @name Setter-getters
     Setter and getter functions for the online_id field for

commit 2ee89f6693c031c280432751c4dc5c01b0499877
Author: goodvibes2 <goodchris96 at gmail.com>
Date:   Tue Jul 27 12:15:25 2021 +1000

    Do not drop a potential match just because it has an online_id.
    
    Now that we don't exclude from import a transaction with an FITID that
    matches an already existing transaction, if one accidentally re-imports
    a transaction, this allows it to be automatically matched against the
    previously imported transaction.

diff --git a/gnucash/import-export/import-main-matcher.c b/gnucash/import-export/import-main-matcher.c
index 584c41f03..07f5a1296 100644
--- a/gnucash/import-export/import-main-matcher.c
+++ b/gnucash/import-export/import-main-matcher.c
@@ -1783,8 +1783,6 @@ create_hash_of_potential_matches (GList *candidate_txns,
     {
         Account* split_account;
         GSList* split_list;
-        if (gnc_import_split_has_online_id (candidate->data))
-            continue;
         split_account = xaccSplitGetAccount (candidate->data);
         /* g_hash_table_steal_extended would do the two calls in one shot but is
          * not available until GLib 2.58.

commit 3f1e24991f7e78bed7a96be6929e5b6c0bda86e0
Author: goodvibes2 <goodchris96 at gmail.com>
Date:   Tue Jul 27 11:57:45 2021 +1000

    Bug 798205 Do not exclude from import a transaction that has an FITID
    
    which matches an already existing split. This is because it
    (1) may be a coincidence and therefore the transaction needs to be added
    or
    (2) could be on a transfer from the account being imported to another
    bank account which has already been imported, and so needs to be
    matched, not added.

diff --git a/gnucash/import-export/import-main-matcher.c b/gnucash/import-export/import-main-matcher.c
index 0c31c5a52..584c41f03 100644
--- a/gnucash/import-export/import-main-matcher.c
+++ b/gnucash/import-export/import-main-matcher.c
@@ -1715,16 +1715,11 @@ gnc_gen_trans_list_add_trans_with_ref_id (GNCImportMainMatcher *gui, Transaction
     g_assert (gui);
     g_assert (trans);
 
-    if (gnc_import_exists_online_id (trans, gui->acct_id_hash))
-        return;
-    else
-    {
-        transaction_info = gnc_import_TransInfo_new (trans, NULL);
-        gnc_import_TransInfo_set_ref_id (transaction_info, ref_id);
-        // It's much faster to gather the imported transactions into a GSList than directly into the
-        // treeview.
-        gui->temp_trans_list = g_slist_prepend (gui->temp_trans_list, transaction_info);
-    }
+    transaction_info = gnc_import_TransInfo_new (trans, NULL);
+    gnc_import_TransInfo_set_ref_id (transaction_info, ref_id);
+    // It's much faster to gather the imported transactions into a GSList than directly into the
+    // treeview.
+    gui->temp_trans_list = g_slist_prepend (gui->temp_trans_list, transaction_info);
     return;
 }
 



Summary of changes:
 gnucash/import-export/import-backend.c      | 100 ----------------------------
 gnucash/import-export/import-backend.h      |   9 ---
 gnucash/import-export/import-main-matcher.c |  30 ++-------
 gnucash/import-export/import-utilities.c    |  23 -------
 gnucash/import-export/import-utilities.h    |  11 ---
 5 files changed, 5 insertions(+), 168 deletions(-)



More information about the gnucash-changes mailing list