Skip to content

Commit

Permalink
Bug 797514 - Changing transaction unreconciles a split inconsistently
Browse files Browse the repository at this point in the history
Partial: This make sure that the split's reconcile status gets updated
before the transaction is committed.
  • Loading branch information
jralls committed Sep 25, 2020
1 parent 9ef405a commit 0ef70ab
Showing 1 changed file with 23 additions and 20 deletions.
43 changes: 23 additions & 20 deletions gnucash/register/ledger-core/split-register.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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 ();
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 ();
Expand Down

0 comments on commit 0ef70ab

Please sign in to comment.