Skip to content

Commit

Permalink
Bug 777472 - reconcile does not work if transaction selected
Browse files Browse the repository at this point in the history
If there's an existing transaction with pending edits when starting
reconciliation, that transaction can appear in the list of transactions and
be modified by the reconciliation but as soon as navigation to another
transaction occurs the pending edit will be saved, overwriting the change
to mark it as reconciled. The result is that reconciliation appears to have
failed or not marked the transaction as reconciled.

This commonly happens when marking several transactions as cleared before
performing reconciliation. If the last transaction is still being edited
it will typically be saved after the reconciliation finishes and overwrite
any change made.

Check that there's no outstanding activity in the current register page
before starting a reconciliation.

It is still possible to start modifying a transaction after the
reconciliation window is open but this will stop the most common issue with
the process.

Starting a reconciliation from the account tree is left unprotected.
  • Loading branch information
nomis committed Jun 7, 2023
1 parent 8e360bb commit 5923a59
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
11 changes: 11 additions & 0 deletions gnucash/gnome/gnc-plugin-page-account-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1782,6 +1782,17 @@ gnc_plugin_page_account_tree_cmd_reconcile (GSimpleAction *simple,
account = gnc_plugin_page_account_tree_get_current_account (page);
g_return_if_fail (account != NULL);

/* To prevent mistakes involving saving an edited transaction after
* finishing a reconciliation (reverting the reconcile state), we could look
* at all open registers and determine if any of them have a transaction
* being edited that involves the account to be reconciled.
*
* However, the reconcile window isn't modal so it's still possible to start
* editing a transaction after opening it. Assume the user knows what
* they're doing if they start a reconciliation from the account tree and
* don't attempt to stop them.
*/

window = GNC_PLUGIN_PAGE (page)->window;
recnData = recnWindow (window, account);
gnc_ui_reconcile_window_raise (recnData);
Expand Down
11 changes: 11 additions & 0 deletions gnucash/gnome/gnc-plugin-page-register.c
Original file line number Diff line number Diff line change
Expand Up @@ -4327,6 +4327,17 @@ gnc_plugin_page_register_cmd_reconcile (GSimpleAction *simple,

g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (page));

/* To prevent mistakes involving saving an edited transaction after
* finishing a reconciliation (reverting the reconcile state), require
* pending activity on the current register to be finished.
*
* The reconcile window isn't modal so it's still possible to start editing
* a transaction after opening it, but at that point the user should know
* what they're doing is unsafe.
*/
if (!gnc_plugin_page_register_finish_pending (GNC_PLUGIN_PAGE (page)))
return;

account = gnc_plugin_page_register_get_account (page);

window = gnc_window_get_gtk_window (GNC_WINDOW (GNC_PLUGIN_PAGE (
Expand Down

0 comments on commit 5923a59

Please sign in to comment.