[Gnucash-changes] r13035 - gnucash/trunk - SX Since-Last-Run now
reports transaction-creation errors to the user, degrades
(somewhat) gracefully; report cleanup.
Joshua Sled
jsled at cvs.gnucash.org
Sun Jan 29 14:32:49 EST 2006
Author: jsled
Date: 2006-01-29 14:32:48 -0500 (Sun, 29 Jan 2006)
New Revision: 13035
Trac: http://svn.gnucash.org/trac/changeset/13035
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/gnome/dialog-sxsincelast.c
gnucash/trunk/src/report/report-gnome/report-gnome.scm
gnucash/trunk/src/report/utility-reports/welcome-to-gnucash.scm
Log:
SX Since-Last-Run now reports transaction-creation errors to the user, degrades (somewhat) gracefully; report cleanup.
2006-01-29 Joshua Sled <jsled at asynchronous.org>
* src/report/utility-reports/welcome-to-gnucash.scm: register
menu item for self.
* src/report/report-gnome/report-gnome.scm
(gnc:report-menu-setup): Remove report menu-item creation.
* src/gnome/dialog-sxsincelast.c (create_each_transaction_helper):
Degrade more gracefully in the face of errors during scheduled-transaction
creation; record errors in-band rather than simply to the log, and
display them to the user. Resolves bugs: 151157, 167858, 151487.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-01-29 19:23:25 UTC (rev 13034)
+++ gnucash/trunk/ChangeLog 2006-01-29 19:32:48 UTC (rev 13035)
@@ -1,3 +1,16 @@
+2006-01-29 Joshua Sled <jsled at asynchronous.org>
+
+ * src/report/utility-reports/welcome-to-gnucash.scm: register
+ menu item for self.
+
+ * src/report/report-gnome/report-gnome.scm
+ (gnc:report-menu-setup): Remove report menu-item creation.
+
+ * src/gnome/dialog-sxsincelast.c (create_each_transaction_helper):
+ Degrade more gracefully in the face of errors during scheduled-transaction
+ creation; record errors in-band rather than simply to the log, and
+ display them to the user. Resolves bugs: 151157, 167858, 151487.
+
2006-01-29 David Hampton <hampton at employees.org>
* src/register/ledger-core/split-register.c:
Modified: gnucash/trunk/src/gnome/dialog-sxsincelast.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-sxsincelast.c 2006-01-29 19:23:25 UTC (rev 13034)
+++ gnucash/trunk/src/gnome/dialog-sxsincelast.c 2006-01-29 19:32:48 UTC (rev 13035)
@@ -221,9 +221,12 @@
typedef struct creation_helper_userdata_ {
/* the to-create tuple */
toCreateInstance *tci;
- /* a [pointer to a] GList to append the GUIDs of newly-created
+ /* a pointer to a GList to append the GUIDs of newly-created
* Transactions to, or NULL */
GList **createdGUIDs;
+ /* a pointer to a GList<GString*> of error-messages encountered while
+ * creating the transactions. **/
+ GList **creation_errors;
} createData;
/**
@@ -316,10 +319,11 @@
static void sxsincelast_entry_changed( GtkEditable *e, gpointer ud );
static void sxsincelast_destroy( GtkObject *o, gpointer ud );
static void sxsincelast_save_size( sxSinceLastData *sxsld );
-static void create_transactions_on( SchedXaction *sx,
- GDate *gd,
- toCreateInstance *tci,
- GList **createdGUIDs );
+static void create_transactions_on(SchedXaction *sx,
+ GDate *gd,
+ toCreateInstance *tci,
+ GList **createdGUIDs,
+ GList **creation_errors);
static gint create_each_transaction_helper( Transaction *t, void *d );
/* External for what reason ... ? */
void sxsl_get_sx_vars( SchedXaction *sx, GHashTable *varHash );
@@ -334,7 +338,7 @@
static void clean_sincelast_data( sxSinceLastData *sxsld );
static void clean_variable_table( sxSinceLastData *sxsld );
-static void process_auto_create_list( GList *, sxSinceLastData *sxsld );
+static void process_auto_create_list(GList *, sxSinceLastData *sxsld, GList **creation_errors);
static void add_to_create_list_to_gui( GList *, sxSinceLastData *sxsld );
static void add_reminders_to_gui( GList *, sxSinceLastData *sxsld );
static void add_dead_list_to_gui( GList *, sxSinceLastData *sxsld );
@@ -378,13 +382,17 @@
gpointer userdata );
static void gnc_sxsld_free_entry_numeric( GObject *o, gpointer ud );
-static gint sxsld_process_to_create_instance( sxSinceLastData *sxsld,
- toCreateInstance *tci );
+static gint sxsld_process_to_create_instance(sxSinceLastData *sxsld,
+ toCreateInstance *tci,
+ GList **creation_errors);
static void sxsld_revert_to_create_txns( sxSinceLastData *sxsld,
toCreateInstance *tci );
-static gint sxsld_create_to_create_txns( sxSinceLastData *sxsld,
- toCreateInstance *tci );
+static gint sxsld_create_to_create_txns(sxSinceLastData *sxsld,
+ toCreateInstance *tci,
+ GList **creation_errors);
static gint sxsld_get_future_created_txn_count( sxSinceLastData *sxsld );
+static void creation_errors_dialog(GList *creation_errors);
+static void creation_errors_free(GList *creation_errors);
static GtkActionEntry gnc_sxsld_menu_entries [] =
{
@@ -1068,8 +1076,9 @@
**/
static
gint
-sxsld_create_to_create_txns( sxSinceLastData *sxsld,
- toCreateInstance *tci )
+sxsld_create_to_create_txns(sxSinceLastData *sxsld,
+ toCreateInstance *tci,
+ GList **creation_errors)
{
gint toRet = 0;
GList *l = NULL;
@@ -1092,10 +1101,11 @@
sxsld_revert_to_create_txns( sxsld, tci );
}
- create_transactions_on( tci->parentTCT->sx,
- tci->date,
- tci,
- &created );
+ create_transactions_on(tci->parentTCT->sx,
+ tci->date,
+ tci,
+ &created,
+ creation_errors);
tci->dirty = FALSE;
/* Add to the Query for that register. */
@@ -1122,8 +1132,9 @@
**/
static
gint
-sxsld_process_to_create_instance( sxSinceLastData *sxsld,
- toCreateInstance *tci )
+sxsld_process_to_create_instance(sxSinceLastData *sxsld,
+ toCreateInstance *tci,
+ GList **creation_errors)
{
gint toRet = 0;
@@ -1189,7 +1200,7 @@
break;
case TO_CREATE:
/* Go ahead and create... */
- toRet = sxsld_create_to_create_txns( sxsld, tci );
+ toRet = sxsld_create_to_create_txns(sxsld, tci, creation_errors);
break;
default:
g_assert( FALSE );
@@ -1244,7 +1255,7 @@
sxsld_process_to_create_page( sxSinceLastData *sxsld )
{
GtkCTree *ct;
- GList *tcList, *tcInstList;
+ GList *tcList, *tcInstList, *creation_errors;
gboolean allVarsBound;
toCreateTuple *tct;
toCreateInstance *tci;
@@ -1294,6 +1305,7 @@
tcList = sxsld->toCreateList;
g_assert( tcList != NULL );
+ creation_errors = NULL;
gnc_suspend_gui_refresh();
for ( ; tcList ; tcList = tcList->next ) {
tct = (toCreateTuple*)tcList->data;
@@ -1303,10 +1315,15 @@
tcInstList = tcInstList->next ) {
tci = (toCreateInstance*)tcInstList->data;
- sxsld_process_to_create_instance( sxsld, tci );
+ sxsld_process_to_create_instance(sxsld, tci, &creation_errors);
}
}
gnc_resume_gui_refresh();
+ if (g_list_length(creation_errors) > 0)
+ {
+ creation_errors_dialog(creation_errors);
+ creation_errors_free(creation_errors);
+ }
return FALSE;
}
@@ -1526,6 +1543,7 @@
GtkWidget *w;
GObject *o;
GnomeDruidPage *nextPage;
+ GList *creation_errors;
int i;
static widgetSignalHandlerTuple widgets[] = {
{ SINCELAST_DRUID, "cancel", sxsincelast_druid_cancelled },
@@ -1643,7 +1661,13 @@
/* Do not call show_all here. Screws up the gtkuimanager code */
gtk_widget_show( sxsld->sincelast_window );
- process_auto_create_list( sxsld->autoCreateList, sxsld );
+ creation_errors = NULL;
+ process_auto_create_list(sxsld->autoCreateList, sxsld, &creation_errors);
+ if (g_list_length(creation_errors) > 0)
+ {
+ creation_errors_dialog(creation_errors);
+ creation_errors_free(creation_errors);
+ }
w = glade_xml_get_widget( sxsld->gxml, WHAT_TO_DO_PG );
nextPage = gnc_sxsld_get_appropriate_page( sxsld,
@@ -1759,7 +1783,7 @@
}
static void
-process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld )
+process_auto_create_list(GList *autoCreateList, sxSinceLastData *sxsld, GList **creation_errors)
{
GList *l;
toCreateTuple *tct;
@@ -1784,7 +1808,7 @@
instances = instances->next ) {
tci = (toCreateInstance*)instances->data;
sxsld->autoCreatedCount +=
- sxsld_process_to_create_instance( sxsld, tci );
+ sxsld_process_to_create_instance( sxsld, tci, creation_errors );
}
}
gnc_resume_gui_refresh();
@@ -1843,10 +1867,9 @@
andequal_numerics_set,
&allVarsBound );
rowText[1] = ( allVarsBound
- ? _( "Ready to create" )
- /* READY_TEXT */
- : _( "Needs values for variables" )
- /* NEEDS_BINDINGS_TEXT */ );
+ ? _( "Ready to create" ) /* READY_TEXT */
+ : _( "Needs values for variables" ) /* NEEDS_BINDINGS_TEXT */
+ );
break;
case IGNORE:
rowText[1] = _( "Ignored" ) /* IGNORE_TEXT */ ;
@@ -2058,9 +2081,10 @@
/* special auto-create-opt processing; process it now. */
if ( autoCreateOpt ) {
+ GList *creation_errors = NULL;
list = NULL;
list = g_list_append( list, tct );
- process_auto_create_list( list, sxsld );
+ process_auto_create_list( list, sxsld, &creation_errors );
list = NULL;
}
@@ -2216,7 +2240,13 @@
/* if we're about to return a negative value [indicating only
* auto-create no-notify txns], then actually create them. */
if ( toRet < 0 ) {
- process_auto_create_list( sxsld->autoCreateList, sxsld );
+ GList *creation_errors = NULL;
+ process_auto_create_list( sxsld->autoCreateList, sxsld, &creation_errors );
+ if (g_list_length(creation_errors) > 0)
+ {
+ creation_errors_dialog(creation_errors);
+ creation_errors_free(creation_errors);
+ }
}
return toRet;
@@ -2474,8 +2504,8 @@
* keys, below. */
g_hash_table_insert( actualVars, g_strdup("i"), varIValue );
- for ( ; sList && osList ;
- sList = sList->next, osList = osList->next ) {
+ for ( ; sList && osList; sList = sList->next, osList = osList->next)
+ {
Account *acct;
split = (Split*)sList->data;
@@ -2495,29 +2525,48 @@
GNC_SX_ID,
GNC_SX_ACCOUNT,
NULL );
- if ( kvp_val == NULL ) {
- PERR( "Null kvp_val for account" );
+ if (kvp_val == NULL) {
+ GString *err = g_string_new("");
+ g_string_printf(err, "Null account kvp value for SX [%s], cancelling creation.",
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx));
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ errFlag = TRUE;
+ break;
}
acct_guid = kvp_value_get_guid( kvp_val );
- acct = xaccAccountLookup( acct_guid,
- gnc_get_current_book ());
-#if 0 /* debug */
- DEBUG( "Got account with name \"%s\"",
- xaccAccountGetName( acct ) );
-#endif /* 0 -- debug */
+ acct = xaccAccountLookup( acct_guid, gnc_get_current_book ());
+ if (acct == NULL)
+ {
+ const char *guidStr;
+ GString *err;
+ guidStr = guid_to_string((const GUID*)acct_guid);
+ err = g_string_new("");
+ g_string_printf(err, "Unknown account for guid [%s], cancelling SX [%s] creation.",
+ guidStr, xaccSchedXactionGetName(createUD->tci->parentTCT->sx));
+ g_free((char*)guidStr);
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ errFlag = TRUE;
+ break;
+ }
+
if ( commonCommodity != NULL ) {
if ( commonCommodity != xaccAccountGetCommodity( acct ) ) {
- PERR( "Common-commodity difference: old=%s, new=%s\n",
- gnc_commodity_get_mnemonic( commonCommodity ),
- gnc_commodity_get_mnemonic( xaccAccountGetCommodity( acct ) ) );
+ GString *err = g_string_new("");
+ g_string_printf(err, "Common-commodity difference for SX [%s]: old=[%s], new=[%s]\n",
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx),
+ gnc_commodity_get_mnemonic(commonCommodity),
+ gnc_commodity_get_mnemonic(xaccAccountGetCommodity(acct)));
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
}
}
- commonCommodity = xaccAccountGetCommodity( acct );
- xaccAccountBeginEdit( acct );
- xaccAccountInsertSplit( acct, split );
+ else
+ {
+ commonCommodity = xaccAccountGetCommodity( acct );
+ }
+ xaccAccountBeginEdit(acct);
+ xaccAccountInsertSplit(acct, split);
}
- /* commonCommodity = xaccTransGetCurrency( t ); */
/* credit/debit formulas */
{
char *str, *parseErrorLoc;
@@ -2530,21 +2579,18 @@
NULL);
str = kvp_value_get_string( kvp_val );
credit_num = gnc_numeric_create( 0, 1 );
- if ( str != NULL
- && strlen(str) != 0 ) {
- if ( ! gnc_exp_parser_parse_separate_vars( str, &credit_num,
- &parseErrorLoc,
- actualVars ) ) {
- PERR( "Error parsing credit formula \"%s\" at \"%s\": %s",
- str, parseErrorLoc, gnc_exp_parser_error_string() );
- errFlag = TRUE;
- break;
+ if (str != NULL && strlen(str) != 0) {
+ if (!gnc_exp_parser_parse_separate_vars(str, &credit_num,
+ &parseErrorLoc,
+ actualVars))
+ {
+ GString *err = g_string_new("");
+ g_string_printf(err, "Error parsing SX [%s] credit formula [%s] at [%s]: %s",
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx),
+ str, parseErrorLoc, gnc_exp_parser_error_string());
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ credit_num = gnc_numeric_create( 0, 1 );
}
-#if 0 /* debug */
- DEBUG( "gnc_numeric::credit: \"%s\" -> %s [%s]",
- str, gnc_numeric_to_string( credit_num ),
- gnc_numeric_to_string( gnc_numeric_reduce( credit_num ) ) );
-#endif /* 0 -- debug */
}
kvp_val = kvp_frame_get_slot_path( split_kvpf,
@@ -2554,58 +2600,40 @@
str = kvp_value_get_string( kvp_val );
debit_num = gnc_numeric_create( 0, 1 );
- if ( str != NULL
- && strlen(str) != 0 ) {
- if ( ! gnc_exp_parser_parse_separate_vars( str, &debit_num,
- &parseErrorLoc,
- actualVars ) ) {
- PERR( "Error parsing debit_formula \"%s\" at \"%s\": %s",
- str, parseErrorLoc, gnc_exp_parser_error_string() );
- errFlag = TRUE;
- break;
+ if (str != NULL && strlen(str) != 0) {
+ if (!gnc_exp_parser_parse_separate_vars(str, &debit_num,
+ &parseErrorLoc,
+ actualVars))
+ {
+ GString *err = g_string_new("");
+ g_string_printf(err, "Error parsing SX [%s] debit formula [%s] at [%s]: %s",
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx),
+ str, parseErrorLoc, gnc_exp_parser_error_string());
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ debit_num = gnc_numeric_create( 0, 1 );
}
-#if 0 /* debug */
- DEBUG( "gnc_numeric::debit: \"%s\" -> %s [%s]",
- str, gnc_numeric_to_string( debit_num ),
- gnc_numeric_to_string( gnc_numeric_reduce( debit_num ) ) );
-#endif /* 0 -- debug */
}
final = gnc_numeric_sub_fixed( debit_num, credit_num );
- gncn_error = gnc_numeric_check( final );
- if ( gncn_error != GNC_ERROR_OK ) {
- PERR( "Error %d in final gnc_numeric value", gncn_error );
- errFlag = TRUE;
- break;
+ gncn_error = gnc_numeric_check(final);
+ if (gncn_error != GNC_ERROR_OK) {
+ GString *err = g_string_new("");
+ g_string_printf(err, "Error %d in SX [%s] final gnc_numeric value, using 0 instead.",
+ gncn_error,
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx));
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ final = gnc_numeric_create(0, 1);
}
-#if 0 /* debug */
- DEBUG( "gnc_numeric::final: \"%s\"",
- gnc_numeric_to_string( final ) );
-#endif /* 0 -- debug */
xaccSplitSetValue( split, final );
xaccSplitScrub( split );
}
-#if 0
-/* NOT [YET] USED */
- kvp_val = kvp_frame_get_slot_path( split_kvpf,
- GNC_SX_ID,
- GNC_SX_SHARES,
- NULL);
-
- kvp_val = kvp_frame_get_slot_path( split_kvpf,
- GNC_SX_ID,
- GNC_SX_AMNT,
- NULL);
-#endif /* 0 */
-
xaccAccountCommitEdit( acct );
}
-
/* Cleanup actualVars table. */
{
g_hash_table_foreach( actualVars,
@@ -2615,32 +2643,34 @@
actualVars = NULL;
}
- /* set the balancing currency. */
- if ( commonCommodity == NULL ) {
- PERR( "Unable to find common currency/commodity." );
- } else {
- xaccTransSetCurrency( newT, commonCommodity );
+ if (commonCommodity == NULL) {
+ GString *err = g_string_new("");
+ g_string_printf(err, "Unable to find common currency/commodity for SX [%s]; using default.",
+ xaccSchedXactionGetName(createUD->tci->parentTCT->sx));
+ *createUD->creation_errors = g_list_append(*createUD->creation_errors, err);
+ commonCommodity = gnc_default_currency();
}
+ xaccTransSetCurrency(newT, commonCommodity);
+ if (errFlag) {
+ PERR("Some error in new transaction creation...");
+ xaccTransRollbackEdit(newT);
+ xaccTransDestroy(newT);
+ xaccTransCommitEdit(newT);
+ return 13;
+ }
+
{
kvp_frame *txn_frame;
/* set a kvp-frame element in the transaction indicating and
* pointing-to the SX this was created from. */
- txn_frame = xaccTransGetSlots( newT );
- kvp_frame_set_guid ( txn_frame, "from-sched-xaction",
- xaccSchedXactionGetGUID(tci->parentTCT->sx) );
+ txn_frame = xaccTransGetSlots(newT);
+ kvp_frame_set_guid(txn_frame, "from-sched-xaction",
+ xaccSchedXactionGetGUID(tci->parentTCT->sx));
}
- if ( errFlag ) {
- PERR( "Some error in new transaction creation..." );
- xaccTransRollbackEdit( newT );
- xaccTransDestroy( newT );
- xaccTransCommitEdit( newT );
- return 13;
- }
+ xaccTransCommitEdit(newT);
- xaccTransCommitEdit( newT );
-
if ( createUD->createdGUIDs != NULL ) {
*createUD->createdGUIDs =
g_list_append( *(createUD->createdGUIDs),
@@ -2655,34 +2685,39 @@
* will set the last occur date incorrectly.
**/
static void
-create_transactions_on( SchedXaction *sx,
- GDate *gd,
- toCreateInstance *tci,
- GList **createdGUIDs )
+create_transactions_on(SchedXaction *sx,
+ GDate *gd,
+ toCreateInstance *tci,
+ GList **createdGUIDs,
+ GList **creation_errors)
{
createData createUD;
AccountGroup *ag;
Account *acct;
const char *id;
- if ( tci ) {
- g_assert( g_date_compare( gd, tci->date ) == 0 );
+ if (tci) {
+ g_assert(g_date_compare(gd, tci->date) == 0);
}
ag = gnc_book_get_template_group( gnc_get_current_book () );
id = guid_to_string( xaccSchedXactionGetGUID(sx) );
- if ( ag && id ) {
- /* This looks strange but it's right. The account is
- named after the guid string. */
- acct = xaccGetAccountFromName( ag, id );
- if ( acct ) {
- createUD.tci = tci;
- createUD.createdGUIDs = createdGUIDs;
- xaccAccountForEachTransaction( acct,
- create_each_transaction_helper,
- /*tct*/ &createUD );
- }
+ if ( !(ag && id) ) {
+ return;
}
+ /* This looks strange but it's right. The account is
+ named after the guid string. */
+ acct = xaccGetAccountFromName( ag, id );
+ if (!acct) {
+ return;
+ }
+
+ createUD.tci = tci;
+ createUD.createdGUIDs = createdGUIDs;
+ createUD.creation_errors = creation_errors;
+ xaccAccountForEachTransaction(acct,
+ create_each_transaction_helper,
+ /*tct*/ &createUD);
}
static void
@@ -3050,15 +3085,9 @@
toRet = 0;
if ( ! gnc_exp_parser_parse_separate_vars( formula, num,
&errLoc, varHash ) ) {
-#if 0 /* just too verbose, as "Numeric errors" are acceptable in this
- * context. */
- PERR( "Error parsing at \"%s\": %s",
- errLoc, gnc_exp_parser_error_string() );
-#endif /* 0 */
toRet = -1;
}
- DEBUG( "result/num: %s", gnc_numeric_to_string( *num ) );
if ( !result ) {
g_free( num );
}
@@ -3896,3 +3925,34 @@
TRUE );
}
+static
+void
+_adderror(gpointer data, gpointer user_data)
+{
+ GString *dialog_text = (GString*)user_data;
+ g_string_append_printf(dialog_text, "- %s\n", ((GString*)data)->str);
+}
+
+static
+void
+creation_errors_dialog(GList *creation_errors)
+{
+ GString *dialog_text = g_string_new(_("The following errors were encountered while creating the Scheduled Transactions:\n"));
+ g_list_foreach(creation_errors, (GFunc)_adderror, dialog_text);
+ gnc_info_dialog(NULL, "%s", dialog_text->str);
+ g_string_free(dialog_text, TRUE);
+}
+
+static void
+_free_creation_errors(gpointer data, gpointer user_data_unused)
+{
+ g_string_free((GString*)data, TRUE);
+}
+
+static
+void
+creation_errors_free(GList *creation_errors)
+{
+ g_list_foreach(creation_errors, (GFunc)_free_creation_errors, NULL);
+ g_list_free(creation_errors);
+}
Modified: gnucash/trunk/src/report/report-gnome/report-gnome.scm
===================================================================
--- gnucash/trunk/src/report/report-gnome/report-gnome.scm 2006-01-29 19:23:25 UTC (rev 13034)
+++ gnucash/trunk/src/report/report-gnome/report-gnome.scm 2006-01-29 19:32:48 UTC (rev 13035)
@@ -119,12 +119,4 @@
;; push reports (new items added on top of menu)
(gnc:add-report-template-menu-items)
- ;; the Welcome to GnuCash "extravaganza" report
- (gnc:add-extension
- (gnc:make-menu-item
- (N_ "Welcome Sample Report")
- (N_ "Welcome-to-GnuCash report screen")
- (list gnc:menuname-reports gnc:menuname-utility "")
- (lambda (window)
- (gnc:main-window-open-report (gnc:make-welcome-report) window))))
)
Modified: gnucash/trunk/src/report/utility-reports/welcome-to-gnucash.scm
===================================================================
--- gnucash/trunk/src/report/utility-reports/welcome-to-gnucash.scm 2006-01-29 19:23:25 UTC (rev 13034)
+++ gnucash/trunk/src/report/utility-reports/welcome-to-gnucash.scm 2006-01-29 19:32:48 UTC (rev 13035)
@@ -86,7 +86,7 @@
(gnc:define-report
'name (N_ "Welcome to GnuCash")
- 'in-menu? #f
+ 'version 1
+ 'menu-path (list gnc:menuname-utility)
'options-generator options
'renderer renderer)
-
More information about the gnucash-changes
mailing list