From 4afde76e8391bf4c60da92202f07099f6deb0be5 Mon Sep 17 00:00:00 2001 From: Joshua Sled Date: Sun, 25 Feb 2007 19:51:00 +0000 Subject: [PATCH] Keep track of auto-created transactions, and review them as well. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@15661 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/doc/sx.rst | 7 +++++- src/gnome/dialog-sx-since-last-run.c | 34 +++++++++++++-------------- src/gnome/dialog-sx-since-last-run.h | 6 ++--- src/gnome/gnc-plugin-basic-commands.c | 9 ++++--- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/doc/sx.rst b/src/doc/sx.rst index 2a31dfef0e..1e820302df 100644 --- a/src/doc/sx.rst +++ b/src/doc/sx.rst @@ -49,10 +49,15 @@ TODO - [x] display-using src/gnome-utils/test/test-sx.c - bugs -! - [ ] auto-create (+notify) txns not in review list. [ve20070209]_ + +! - [ ] parse from 1.8 file doesn't setup start date correctly; + daily-auto-yes-notify.xac has start date of 2006-09-26, but new TXN is + for $today. ! - [ ] with SLR open (with instances), add variables to SX; only newly-created instances will have appropriate variable tables. +! - [x] auto-create (+notify) txns not in review list. [ve20070209]_ + - [x] sx-from-trans: "unknown get.type [3]" [dh20070120]_ ! - [x] crash with two sx lists open and SX mutation diff --git a/src/gnome/dialog-sx-since-last-run.c b/src/gnome/dialog-sx-since-last-run.c index e5485cd84d..ffa6984ebf 100644 --- a/src/gnome/dialog-sx-since-last-run.c +++ b/src/gnome/dialog-sx-since-last-run.c @@ -51,6 +51,7 @@ struct _GncSxSinceLastRunDialog GncSxSlrTreeModelAdapter *editing_model; GtkTreeView *instance_view; GtkToggleButton *review_created_txns_toggle; + GList *created_txns; }; /* ------------------------------------------------------------ */ @@ -794,6 +795,7 @@ gnc_sx_slr_tree_model_adapter_new(GncSxInstanceModel *instances) void gnc_sx_sxsincelast_book_opened(void) { + GList *auto_created_txns = NULL; GncSxInstanceModel *inst_model; GncSxSummary summary; @@ -803,11 +805,12 @@ gnc_sx_sxsincelast_book_opened(void) inst_model = gnc_sx_get_current_instances(); gnc_sx_instance_model_summarize(inst_model, &summary); gnc_sx_summary_print(&summary); - gnc_sx_instance_model_effect_change(inst_model, TRUE, NULL, NULL); + gnc_sx_instance_model_effect_change(inst_model, TRUE, &auto_created_txns, NULL); if (summary.need_dialog) { - gnc_ui_sx_since_last_run_dialog(inst_model); + gnc_ui_sx_since_last_run_dialog(inst_model, auto_created_txns); + auto_created_txns = NULL; } else { @@ -824,18 +827,10 @@ gnc_sx_sxsincelast_book_opened(void) summary.num_auto_create_no_notify_instances); } } + g_list_free(auto_created_txns); g_object_unref(G_OBJECT(inst_model)); } -void -gnc_ui_sxsincelast_dialog_create(void) -{ - GncSxInstanceModel *model = gnc_sx_get_current_instances(); - gnc_sx_instance_model_effect_change(model, TRUE, NULL, NULL); - gnc_ui_sx_since_last_run_dialog(model); - g_object_unref(G_OBJECT(model)); -} - static void instance_state_changed_cb(GtkCellRendererText *cell, const gchar *path, @@ -922,7 +917,7 @@ variable_value_changed_cb(GtkCellRendererText *cell, } GncSxSinceLastRunDialog* -gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances) +gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances, GList *auto_created_txn_guids) { GncSxSinceLastRunDialog *dialog; GladeXML *glade; @@ -936,6 +931,8 @@ gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances) g_object_ref(G_OBJECT(dialog->editing_model)); dialog->review_created_txns_toggle = GTK_TOGGLE_BUTTON(glade_xml_get_widget(glade, "review_txn_toggle")); + + dialog->created_txns = auto_created_txn_guids; { GtkCellRenderer *renderer; @@ -1070,15 +1067,18 @@ dialog_response_cb(GtkDialog *dialog, gint response_id, GncSxSinceLastRunDialog } } gnc_suspend_gui_refresh(); - gnc_sx_slr_model_effect_change(app_dialog->editing_model, FALSE, &created_txns, NULL); + gnc_sx_slr_model_effect_change(app_dialog->editing_model, FALSE, &app_dialog->created_txns, NULL); gnc_resume_gui_refresh(); if (gtk_toggle_button_get_active(app_dialog->review_created_txns_toggle) - && g_list_length(created_txns) > 0) + && g_list_length(app_dialog->created_txns) > 0) { - _show_created_transactions(app_dialog, created_txns); + + _show_created_transactions(app_dialog, app_dialog->created_txns); } - g_list_free(created_txns); - created_txns = NULL; + g_list_foreach(app_dialog->created_txns, (GFunc)guid_free, NULL); + g_list_free(app_dialog->created_txns); + app_dialog->created_txns = NULL; + /* FALLTHROUGH */ case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: diff --git a/src/gnome/dialog-sx-since-last-run.h b/src/gnome/dialog-sx-since-last-run.h index d4c8da0148..eb59a2a4c3 100644 --- a/src/gnome/dialog-sx-since-last-run.h +++ b/src/gnome/dialog-sx-since-last-run.h @@ -42,9 +42,7 @@ void gnc_sx_sxsincelast_book_opened(void); /** * Create the since-last-run dialog. **/ -GncSxSinceLastRunDialog* gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances); - -// eliminate... -void gnc_ui_sxsincelast_dialog_create(void); +GncSxSinceLastRunDialog* gnc_ui_sx_since_last_run_dialog(GncSxInstanceModel *sx_instances, + GList *auto_created_txn_guids); #endif diff --git a/src/gnome/gnc-plugin-basic-commands.c b/src/gnome/gnc-plugin-basic-commands.c index 3b72c138c4..fbd80f252d 100644 --- a/src/gnome/gnc-plugin-basic-commands.c +++ b/src/gnome/gnc-plugin-basic-commands.c @@ -448,19 +448,21 @@ gnc_main_window_cmd_actions_since_last_run (GtkAction *action, GncMainWindowActi GncMainWindow *window; GncSxInstanceModel *sx_instances; GncSxSummary summary; + GList *auto_created_txns = NULL; const char *nothing_to_do_msg = _( "There are no Scheduled Transactions to be entered at this time." ); g_return_if_fail (data != NULL); window = data->window; - + sx_instances = gnc_sx_get_current_instances(); gnc_sx_instance_model_summarize(sx_instances, &summary); - gnc_sx_instance_model_effect_change(sx_instances, TRUE, NULL, NULL); + gnc_sx_instance_model_effect_change(sx_instances, TRUE, &auto_created_txns, NULL); if (summary.need_dialog) { - gnc_ui_sx_since_last_run_dialog(sx_instances); + gnc_ui_sx_since_last_run_dialog(sx_instances, auto_created_txns); + auto_created_txns = NULL; } else { @@ -481,6 +483,7 @@ gnc_main_window_cmd_actions_since_last_run (GtkAction *action, GncMainWindowActi summary.num_auto_create_no_notify_instances); } } + g_list_free(auto_created_txns); g_object_unref(G_OBJECT(sx_instances)); }