gnucash maint: Bug 797514 - Changing transaction unreconciles a split inconsistently
John Ralls
jralls at code.gnucash.org
Thu Sep 24 20:51:32 EDT 2020
Updated via https://github.com/Gnucash/gnucash/commit/0ef70ab7 (commit)
from https://github.com/Gnucash/gnucash/commit/9ef405a3 (commit)
commit 0ef70ab7c961f9fd5e78af9032def23305f2f155
Author: John Ralls <jralls at ceridwen.us>
Date: Thu Sep 24 17:49:35 2020 -0700
Bug 797514 - Changing transaction unreconciles a split inconsistently
Partial: This make sure that the split's reconcile status gets updated
before the transaction is committed.
diff --git a/gnucash/register/ledger-core/split-register.c b/gnucash/register/ledger-core/split-register.c
index d7448280b..eff5798e1 100644
--- a/gnucash/register/ledger-core/split-register.c
+++ b/gnucash/register/ledger-core/split-register.c
@@ -1677,6 +1677,26 @@ gnc_split_register_save_to_copy_buffer (SplitRegister *reg,
return TRUE;
}
+static void
+unreconcile_splits (SplitRegister* reg)
+{
+ if (reg->unrecn_splits == NULL)
+ return; //Nothing to do.
+ PINFO ("Unreconcile %d splits of reconciled transaction",
+ g_list_length (reg->unrecn_splits));
+
+ for (GList* node = reg->unrecn_splits; node; node = node->next)
+ {
+ Split* split = node->data;
+ Transaction* txn = xaccSplitGetParent (split);
+ if (!xaccTransIsOpen (txn))
+ PWARN ("Unreconcile of split failed because its parent transaction wasn't open for editing");
+ else if (xaccSplitGetReconcile (split) == YREC)
+ xaccSplitSetReconcile (split, NREC);
+ }
+ g_list_free (reg->unrecn_splits);
+ reg->unrecn_splits = NULL;
+}
gboolean
gnc_split_register_save (SplitRegister* reg, gboolean do_commit)
@@ -1756,6 +1776,7 @@ gnc_split_register_save (SplitRegister* reg, gboolean do_commit)
info->pending_trans_guid = *guid_null ();
PINFO ("committing trans (%p)", trans);
+ unreconcile_splits (reg);
xaccTransCommitEdit (trans);
gnc_resume_gui_refresh ();
@@ -1807,6 +1828,7 @@ gnc_split_register_save (SplitRegister* reg, gboolean do_commit)
if (xaccTransIsOpen (pending_trans))
{
g_warning ("Impossible? committing pending %p", pending_trans);
+ unreconcile_splits (reg);
xaccTransCommitEdit (pending_trans);
}
else if (pending_trans)
@@ -1934,29 +1956,10 @@ gnc_split_register_save (SplitRegister* reg, gboolean do_commit)
pending_trans = NULL;
info->pending_trans_guid = *guid_null ();
}
+ unreconcile_splits (reg);
xaccTransCommitEdit (trans);
}
- /* If there are splits in the unreconcile list and we are committing
- * we need to unreconcile them */
- if (do_commit && (reg->unrecn_splits != NULL))
- {
- GList* node;
-
- PINFO ("Unreconcile %d splits of reconciled transaction",
- g_list_length (reg->unrecn_splits));
-
- for (node = reg->unrecn_splits; node; node = node->next)
- {
- Split* split = node->data;
-
- if (xaccSplitGetReconcile (split) == YREC)
- xaccSplitSetReconcile (split, NREC);
- }
- g_list_free (reg->unrecn_splits);
- reg->unrecn_splits = NULL;
- }
-
gnc_table_clear_current_cursor_changes (reg->table);
gnc_resume_gui_refresh ();
Summary of changes:
gnucash/register/ledger-core/split-register.c | 43 ++++++++++++++-------------
1 file changed, 23 insertions(+), 20 deletions(-)
More information about the gnucash-changes
mailing list