[Gnucash-changes] r12961 - gnucash/trunk - Fix QSF import and merge, closes [Bug 327640]. r12961.

Neil Williams codehelp at cvs.gnucash.org
Mon Jan 23 14:00:26 EST 2006


Author: codehelp
Date: 2006-01-23 14:00:26 -0500 (Mon, 23 Jan 2006)
New Revision: 12961
Trac: http://svn.gnucash.org/trac/changeset/12961

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/gnome/druid-merge.c
   gnucash/trunk/src/gnome/druid-merge.h
   gnucash/trunk/src/gnome/glade/merge.glade
Log:
Fix QSF import and merge, closes [Bug 327640]. r12961.

Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2006-01-23 18:59:22 UTC (rev 12960)
+++ gnucash/trunk/ChangeLog	2006-01-23 19:00:26 UTC (rev 12961)
@@ -1,13 +1,27 @@
 2006-01-23  Neil Williams <linux at codehelp.co.uk>
 
-    * lib/libqof/backend/file/qsf-backend.c : Prevent 
-    bad time values from being passed to entity.
-    * lib/libqof/qof/qof_book_merge.c : Fix merge 
-    handling of	QOF_TYPE_CHAR to use gchar instead of 
-    casting	from a gchar*
-    * lib/libqof/qof/qof_book_merge.h : Use gchar 
-    consistently instead of mixing with char.
+	* src/engine/Transaction.c : Let the backend
+	work with splits without checking for the parent Trans
+	* src/gnome/glade/chart-export.glade : glade-fixup change.
+	* src/gnome/glade/merge.glade : Reviewed for QSF Import usage
+	* src/gnome/druid-merge.c : Fix QSF import and merge, closes
+	[Bug 327640]. r12961. 
+	* src/gnome/druid-merge.h : Remove unneeded function.
+	* src/gnome/druid-hierarchy.c : Expand on the error message,
+	should it still be required.
+	* configure.in : Increase QOF dependency to the next release
+	to ensure compatibility.
 
+2006-01-23  Neil Williams <linux at codehelp.co.uk>
+
+	* lib/libqof/backend/file/qsf-backend.c : Prevent 
+	bad time values from being passed to entity.
+	* lib/libqof/qof/qof_book_merge.c : Fix merge 
+	handling of QOF_TYPE_CHAR to use gchar instead of 
+	casting	from a gchar*
+	* lib/libqof/qof/qof_book_merge.h : Use gchar 
+	consistently instead of mixing with char.
+
 2006-01-22  David Hampton  <hampton at employees.org>
 
 	* src/gnome/dialog-chart-export.c:

Modified: gnucash/trunk/src/gnome/druid-merge.c
===================================================================
--- gnucash/trunk/src/gnome/druid-merge.c	2006-01-23 18:59:22 UTC (rev 12960)
+++ gnucash/trunk/src/gnome/druid-merge.c	2006-01-23 19:00:26 UTC (rev 12961)
@@ -40,36 +40,35 @@
 #include "Account.h"
 #include "Group.h"
 
-static GtkWidget			*qof_book_merge_window = NULL;
-GtkWidget			*druid_hierarchy_window = NULL;
-static GtkWidget	*qsf_import_merge_window = NULL;
-QofSession			*previous_session = NULL;
-gint					count = 0;
-qof_book_mergeData	*mergeData = NULL;
-QofSession 			*merge_session = NULL;
-QofBook				*mergeBook = NULL;
-QofBook				*targetBook = NULL;
-gchar 				*buffer = "";
+GtkWidget               *druid_hierarchy_window = NULL;
+static GtkWidget        *qsf_import_merge_window = NULL;
+QofSession              *previous_session = NULL;
+gint                    count = 0;
+qof_book_mergeData      *mergeData = NULL;
+QofSession              *merge_session = NULL;
+QofBook                 *mergeBook = NULL;
+QofBook                 *targetBook = NULL;
+gchar                   *buffer = "";
 
-static QofLogModule log_module = GNC_MOD_GUI;
+static QofLogModule log_module = GNC_QSF_IMPORT;
 
 void collision_rule_loop ( qof_book_mergeData*, qof_book_mergeRule*, guint );
 
 static GtkWidget*
 merge_get_widget (const char *name)
 {
-  if (!qof_book_merge_window) return NULL;
+  if (!qsf_import_merge_window) return NULL;
 
-  return gnc_glade_lookup_widget (qof_book_merge_window, name);
+  return gnc_glade_lookup_widget (qsf_import_merge_window, name);
 }
 
 static void
 delete_merge_window (void)
 {
-	if (!qof_book_merge_window) return;
+	if (!qsf_import_merge_window) return;
 	
-	gtk_widget_destroy (qof_book_merge_window);
-	qof_book_merge_window = NULL;
+	gtk_widget_destroy (qsf_import_merge_window);
+	qsf_import_merge_window = NULL;
 }
 
 static void
@@ -87,16 +86,25 @@
 }
 
 
-
 static void
 on_MergeUpdate_clicked 	(GtkButton       *button,
               		    gpointer         user_data)
 {
+	GtkLabel *output;
+
 	g_return_if_fail(mergeData != NULL);
 	ENTER (" ");
 	mergeData = qof_book_mergeUpdateResult(mergeData, MERGE_UPDATE); 
 	count = 0;
  	qof_book_mergeRuleForeach(mergeData, collision_rule_loop, MERGE_REPORT);
+    if(count == 0)
+    {
+    	output = GTK_LABEL(merge_get_widget("OutPut"));
+		buffer = g_strdup_printf(_("No conflicts to be resolved."));
+    	gtk_label_set_text(output,buffer);
+	    gtk_widget_show(GTK_WIDGET(output));
+    }
+    LEAVE (" ");
 }
 
 static void
@@ -104,6 +112,7 @@
               			    gpointer         user_data)
 {
 	qof_book_mergeRule *currentRule;
+	GtkLabel *output;
 	
 	g_return_if_fail(mergeData != NULL);
 	ENTER (" ");
@@ -117,6 +126,14 @@
 		count = 0;
 	}
  	qof_book_mergeRuleForeach(mergeData, collision_rule_loop, MERGE_REPORT);
+    if(count == 0)
+    {
+    	output = GTK_LABEL(merge_get_widget("OutPut"));
+		buffer = g_strdup_printf(_("No conflicts to be resolved."));
+    	gtk_label_set_text(output,buffer);
+	    gtk_widget_show(GTK_WIDGET(output));
+    }
+    LEAVE (" ");
 }
 
 static void
@@ -124,16 +141,25 @@
               		gpointer         user_data)
 {
 	qof_book_mergeRule *currentRule;
+	GtkLabel *output;
 
-	ENTER (" ");
 	g_return_if_fail(mergeData != NULL);
 	currentRule = mergeData->currentRule;
 	g_return_if_fail(currentRule != NULL);
+	ENTER (" ");
 	if(currentRule->mergeAbsolute == FALSE) { 
 		mergeData = qof_book_mergeUpdateResult(mergeData, MERGE_NEW);
 	}
 	count = 0;
  	qof_book_mergeRuleForeach(mergeData, collision_rule_loop, MERGE_REPORT);
+    if(count == 0)
+    {
+    	output = GTK_LABEL(merge_get_widget("OutPut"));
+		buffer = g_strdup_printf(_("No conflicts to be resolved."));
+    	gtk_label_set_text(output,buffer);
+	    gtk_widget_show(GTK_WIDGET(output));
+    }
+    LEAVE (" ");
 }
 
 static gboolean
@@ -141,17 +167,27 @@
                        gpointer         arg1,
                        gpointer         user_data)
 {
+	GtkWidget *top;
+	gchar *message;
+
+    if(count > 0)
+    {
+        message = g_strdup_printf(_("Error: Please resolve all %d "
+            "conflicts before trying to commit the data."), count);
+		top = gtk_widget_get_toplevel (GTK_WIDGET (gnomedruidpage));
+	    gnc_error_dialog(top, message);
+        g_free(message);
+        return TRUE;
+    }
 	return FALSE;
 }
 
 static void
-on_merge_cancel (	GnomeDruid      *gnomedruid,
-			gpointer         user_data)
+on_merge_cancel (GnomeDruid *gnomedruid, gpointer user_data)
 {
 	gnc_suspend_gui_refresh ();
 	g_return_if_fail(mergeData != NULL);
 	delete_merge_window();
-	qof_session_set_current_session(previous_session);
 	qof_book_destroy(mergeBook);
 	qof_session_end(merge_session);	
 	gnc_resume_gui_refresh ();
@@ -169,7 +205,8 @@
 {
 	if(!ent) return;
 	if(xaccAccountGetParent((Account*)ent) == NULL) {
-		xaccGroupInsertAccount(xaccGroupGetRoot(xaccGetAccountGroup(targetBook)), (Account*)ent);
+		xaccGroupInsertAccount(xaccGroupGetRoot(
+			xaccGetAccountGroup(targetBook)), (Account*)ent);
 	}
 }
 
@@ -179,26 +216,26 @@
            gpointer         user_data)
 {
 	gint result;
-    GtkWidget *top;
-    const char *message;
+	GtkWidget *top;
+	const char *message;
 
 	ENTER (" ");
-	message = _("Error: the Commit operation failed.");
 	g_return_if_fail(mergeData != NULL);
 	gnc_suspend_gui_refresh ();
 	result = qof_book_mergeCommit(mergeData);
 	if(result != 0) {
+    	message = _("Error: the Commit operation failed.");
 		top = gtk_widget_get_toplevel (GTK_WIDGET (gnomedruidpage));
 	    gnc_error_dialog(top, message);
 	}
 	g_return_if_fail(result == 0);
 	delete_merge_window ();
-	qof_session_set_current_session(previous_session);
 	qof_object_foreach(GNC_ID_ACCOUNT, targetBook, currency_transfer_cb, NULL);
 	qof_object_foreach(GNC_ID_ACCOUNT, targetBook, reference_parent_cb,  NULL);
 	qof_book_destroy(mergeBook);
 	qof_session_end(merge_session);
 	gnc_resume_gui_refresh ();
+	LEAVE (" ");
 }
 
 static void
@@ -206,30 +243,44 @@
                             gpointer         arg1,
                             gpointer         user_data)
 {
-	GtkLabel *progress;
+	GtkLabel *progress, *output;
 
 	gnc_suspend_gui_refresh ();
 	ENTER (" ");
 	progress = GTK_LABEL (merge_get_widget("ResultsBox"));
 	/* blank out old data */
 	gtk_label_set_text(progress, "");
-	g_return_if_fail(mergeBook != NULL);
-	g_return_if_fail(targetBook != NULL);
+	g_return_if_fail(mergeBook || targetBook);
 	mergeData = qof_book_mergeInit(mergeBook, targetBook);
 	g_return_if_fail(mergeData != NULL);
+    count = 0;
  	qof_book_mergeRuleForeach(mergeData, collision_rule_loop, MERGE_REPORT);
+    if(count == 0)
+    {
+    	output = GTK_LABEL(merge_get_widget("OutPut"));
+		buffer = g_strdup_printf(_("No conflicts to be resolved."));
+    	gtk_label_set_text(output,buffer);
+	    gtk_widget_show(GTK_WIDGET(output));
+    }
 	gnc_resume_gui_refresh ();
+	LEAVE (" ");
 }
 
 static GtkWidget *
 gnc_create_import_druid ( void )
 {
-  GtkWidget *dialog;
-  GtkWidget *druid;
+  GtkWidget *dialog, *druid, *start_page;
   GladeXML *xml;
 
 	xml = gnc_glade_xml_new ("merge.glade", "Merge Druid");
 
+	dialog = glade_xml_get_widget (xml, "Merge Druid");
+	druid = glade_xml_get_widget (xml, "merge_druid");
+	gnc_druid_set_colors (GNOME_DRUID (druid));
+	start_page = glade_xml_get_widget (xml, "start_page");
+	gtk_widget_show (start_page);
+    gtk_widget_show (glade_xml_get_widget (xml, "MergeDruidFinishPage"));
+
 	glade_xml_signal_connect(xml, "on_start_page_next",
 		G_CALLBACK (on_import_start_page_next));
 	
@@ -254,16 +305,13 @@
 	glade_xml_signal_connect (xml, "on_MergeNew_clicked",
 		G_CALLBACK (on_MergeNew_clicked));
 
-	dialog = glade_xml_get_widget (xml, "Merge Druid");
-	druid = glade_xml_get_widget (xml, "merge_druid");
-	gnc_druid_set_colors (GNOME_DRUID (druid));
-
 	g_signal_connect (dialog, "destroy",
 			  G_CALLBACK(qof_book_merge_destroy_cb), NULL);
 	return dialog;
 }
 
-void collision_rule_loop(qof_book_mergeData *mergeData, qof_book_mergeRule *rule, guint remainder)
+void collision_rule_loop(qof_book_mergeData *mergeData, qof_book_mergeRule *rule, 
+                        guint remainder)
 {
 	GSList *user_reports;
 	QofParam *one_param;
@@ -271,10 +319,10 @@
 	GtkLabel *output;
 	
 	g_return_if_fail(rule != NULL);
-	ENTER (" count=%d", count);
 	buffer = "";
 	/* there is a rule awaiting resolution, don't print any more */
-	if(count > 0) return;
+	if(count > 0) { return; }
+	ENTER (" remainder=%d", remainder);
 	gnc_suspend_gui_refresh ();
 	user_reports = rule->mergeParam;
 	mergeData->currentRule = rule;
@@ -285,22 +333,27 @@
 	count = 1; /* user display text counts from 1, not zero */
 	importstring = targetstring = NULL;
 	gnc_suspend_gui_refresh ();
- 	if(remainder == 1) { 
-		buffer = g_strdup_printf("\n%i conflict needs to be resolved.\n", remainder);
+ 	if(remainder == 1) {
+		buffer = g_strdup_printf(_("\n%i conflict needs to be resolved.\n"), 
+            remainder);
 	}
-	else { 
-		buffer = g_strdup_printf("\n%i conflicts need to be resolved.\n", remainder); 
+	else {
+		buffer = g_strdup_printf(_("\n%i conflicts need to be resolved.\n"), 
+            remainder); 
 	}
-	buffer = g_strconcat(buffer, g_strdup_printf("\n%i parameter values for this \"%s\" object.\n", 
-		   g_slist_length(user_reports), rule->targetEnt->e_type), NULL);
+	buffer = g_strconcat(buffer, 
+		g_strdup_printf(_("\n%i parameter values for this \"%s\" object.\n"), 
+		g_slist_length(user_reports), rule->targetEnt->e_type), NULL);
 	while(user_reports != NULL) {
 		one_param = user_reports->data;
-		buffer = g_strconcat(buffer, g_strdup_printf("%i:Parameter name: %s ", 
+		buffer = g_strconcat(buffer, g_strdup_printf(_("%i:Parameter name: %s "), 
 			count, one_param->param_name), NULL);
 		importstring = qof_book_merge_param_as_string(one_param, rule->importEnt);
-		buffer = g_strconcat(buffer, g_strdup_printf("Import data : %s ", importstring), NULL);
+		buffer = g_strconcat(buffer, 
+			g_strdup_printf(_("Import data : %s "), importstring), NULL);
 		targetstring = qof_book_merge_param_as_string(one_param, rule->targetEnt);
-		buffer = g_strconcat(buffer, g_strdup_printf("Original data : %s\n", targetstring), NULL);
+		buffer = g_strconcat(buffer, 
+			g_strdup_printf(_("Original data : %s\n"), targetstring), NULL);
 		user_reports = g_slist_next(user_reports);
 		count++;
 	}
@@ -310,15 +363,9 @@
 	g_free(buffer);
 	g_free(importstring);
 	g_free(targetstring);
+    LEAVE (" ");
 }
 
-GtkWidget*
-qof_book_merge_running (void)
-{
-	if (qof_book_merge_window) return qof_book_merge_window;
-	return NULL;
-}
-
 void
 gnc_ui_qsf_import_merge_druid (QofSession *original, QofSession *import)
 {

Modified: gnucash/trunk/src/gnome/druid-merge.h
===================================================================
--- gnucash/trunk/src/gnome/druid-merge.h	2006-01-23 18:59:22 UTC (rev 12960)
+++ gnucash/trunk/src/gnome/druid-merge.h	2006-01-23 19:00:26 UTC (rev 12961)
@@ -76,7 +76,7 @@
 
 void gnc_ui_qsf_import_merge_druid(QofSession *original, QofSession *import);
 
-GtkWidget* qof_book_merge_running (void);
+#define GNC_QSF_IMPORT "gnc-qsf-import-druid"
 
 /** \brief 	gncCommodity is not QOF enabled, need to set a default commodity before the merge */
 void currency_transfer_cb ( QofEntity* ent, gpointer user_data);

Modified: gnucash/trunk/src/gnome/glade/merge.glade
===================================================================
--- gnucash/trunk/src/gnome/glade/merge.glade	2006-01-23 18:59:22 UTC (rev 12960)
+++ gnucash/trunk/src/gnome/glade/merge.glade	2006-01-23 19:00:26 UTC (rev 12961)
@@ -6,9 +6,9 @@
 
 <widget class="GtkWindow" id="Merge Druid">
   <property name="visible">True</property>
-  <property name="title" translatable="yes">Merge Account Hierarchy Setup</property>
+  <property name="title" translatable="yes">QSF Data Import Setup</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
   <property name="modal">False</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
@@ -17,6 +17,7 @@
   <property name="skip_pager_hint">False</property>
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="urgency_hint">False</property>
 
   <child>
     <widget class="GnomeDruid" id="merge_druid">
@@ -29,16 +30,18 @@
 	<widget class="GnomeDruidPageEdge" id="start_page">
 	  <property name="visible">True</property>
 	  <property name="position">GNOME_EDGE_START</property>
-	  <property name="title" translatable="yes">Merge Account Hierarchy Setup</property>
-	  <property name="text" translatable="yes">This druid will merge your new hierarchy into the currently open GnuCash file.
+	  <property name="title" translatable="yes">QSF Data Import Setup</property>
+	  <property name="text" translatable="yes">This druid will merge your QSF data into the currently open GnuCash file.
 
-You will be asked how to proceed if some accounts clash with the account tree in your existing GnuCash data file.
+You will be asked how to proceed if some QSF data clashes with the your existing GnuCash data file.
 
-There is NO way to undo this operation! Please ensure you have a backup of your file BEFORE continuing! You will be given the option to cancel the merge at all stages until the final merge operation. Once you click Finish, the new account tree will be committed to your current data file.
+There is NO way to undo this operation! Please ensure you have a backup of your file BEFORE continuing! You will be given the option to cancel the merge at all stages until the final merge operation. Once you click Finish, the new QSF data will be committed to your current data file.
 
-There is currently no currency or price support in the merge operation, the new accounts will inherit any default currency or you can change the currency after the merge is complete.
+There is currently no currency or price support in the merge operation, the new data will inherit any default currency or you can change the currency after the merge is complete.
 
-Click 'Cancel'  if you do not wish to merge your new account types now.</property>
+Your QSF data is ready to import
+
+Click 'Cancel'  if you do not wish to merge your QSF data now.</property>
 	  <property name="title_color">#ffffffffffff</property>
 	  <property name="text_color">#000000000000</property>
 	  <property name="background_color">#191919197070</property>
@@ -49,46 +52,6 @@
       </child>
 
       <child>
-	<widget class="GnomeDruidPageStandard" id="summary_page">
-	  <property name="visible">True</property>
-	  <property name="title" translatable="yes">Your new accounts are ready to merge</property>
-	  <property name="title_foreground">#ffffffffffff</property>
-	  <property name="background">#191919197070</property>
-	  <property name="logo_background">#ffffffffffff</property>
-
-	  <child internal-child="vbox">
-	    <widget class="GtkVBox" id="druid-vbox7">
-	      <property name="border_width">16</property>
-	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<widget class="GtkLabel" id="label2">
-		  <property name="visible">True</property>
-		  <property name="label" translatable="yes">The next screen will allow you to resolve any conflicts in merging your new account tree into your current GnuCash file.</property>
-		  <property name="use_underline">False</property>
-		  <property name="use_markup">False</property>
-		  <property name="justify">GTK_JUSTIFY_CENTER</property>
-		  <property name="wrap">True</property>
-		  <property name="selectable">False</property>
-		  <property name="xalign">0.5</property>
-		  <property name="yalign">0.5</property>
-		  <property name="xpad">0</property>
-		  <property name="ypad">0</property>
-		</widget>
-		<packing>
-		  <property name="padding">0</property>
-		  <property name="expand">True</property>
-		  <property name="fill">False</property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-      </child>
-
-      <child>
 	<widget class="GnomeDruidPageStandard" id="qof_book_merge">
 	  <property name="visible">True</property>
 	  <property name="title" translatable="yes">Please resolve any conflicts in the merge</property>
@@ -120,7 +83,7 @@
 		      <child>
 			<widget class="GtkLabel" id="ResultsBox">
 			  <property name="visible">True</property>
-			  <property name="label" translatable="yes">Number of reports still to be reconciled.</property>
+			  <property name="label"></property>
 			  <property name="use_underline">False</property>
 			  <property name="use_markup">False</property>
 			  <property name="justify">GTK_JUSTIFY_CENTER</property>
@@ -155,11 +118,14 @@
 			      <child>
 				<widget class="GtkViewport" id="viewport1">
 				  <property name="border_width">5</property>
+				  <property name="height_request">51</property>
 				  <property name="visible">True</property>
+				  <property name="tooltip" translatable="yes">Shows how your QSF data conflicts with existing data in your file.</property>
 				  <property name="shadow_type">GTK_SHADOW_IN</property>
 
 				  <child>
 				    <widget class="GtkLabel" id="OutPut">
+				      <property name="height_request">50</property>
 				      <property name="visible">True</property>
 				      <property name="label" translatable="yes"></property>
 				      <property name="use_underline">False</property>
@@ -194,11 +160,14 @@
 		      <child>
 			<widget class="GtkLabel" id="Static">
 			  <property name="visible">True</property>
-			  <property name="label" translatable="yes">You have three choices for each collision: 1. The import object can be allowed to overwrite the target - use this to update your existing book. 2. The import object can be ignored - use this if the import is a duplicate of an object in the existing book. 3. The import object can be created as a new object in the existing book.</property>
+			  <property name="label" translatable="yes">You have three choices for each collision: 
+1. The import object can be allowed to overwrite the target - use this to update your existing book. 
+2. The import object can be ignored - use this if the import is a duplicate of an object in the existing book. 
+3. The import object can be created as a new object in the existing book.</property>
 			  <property name="use_underline">False</property>
 			  <property name="use_markup">False</property>
-			  <property name="justify">GTK_JUSTIFY_CENTER</property>
-			  <property name="wrap">True</property>
+			  <property name="justify">GTK_JUSTIFY_FILL</property>
+			  <property name="wrap">False</property>
 			  <property name="selectable">False</property>
 			  <property name="xalign">0.5</property>
 			  <property name="yalign">0.5</property>
@@ -292,14 +261,14 @@
 	<widget class="GnomeDruidPageEdge" id="MergeDruidFinishPage">
 	  <property name="visible">True</property>
 	  <property name="position">GNOME_EDGE_FINISH</property>
-	  <property name="title" translatable="yes">Commit Merged Account Hierachy to data file</property>
-	  <property name="text" translatable="yes">Press `Apply' to merge your new accounts into the current GnuCash file.
+	  <property name="title" translatable="yes">Commit QSF Import Data to data file</property>
+	  <property name="text" translatable="yes">Press `Apply' to merge your QSF data into the current GnuCash file.
 
 Press `Back' to review your selections.
 
-Press `Cancel' to close this dialog without creating any new accounts.
+Press `Cancel' to close this dialog without changing your current data file.
 
-REMEMBER: There is no way to undo this final operation! Make sure you have a backup before clicking Finish.</property>
+REMEMBER: There is no way to undo this final operation! Make sure you have a backup before clicking 'Apply'.</property>
 	  <property name="title_color">#ffffffffffff</property>
 	  <property name="text_color">#000000000000</property>
 	  <property name="background_color">#191919197070</property>



More information about the gnucash-changes mailing list