[Gnucash-changes] r13049 - gnucash/trunk - Clear up the billterm data lossage (due to a broken enum definition).

Derek Atkins warlord at cvs.gnucash.org
Mon Jan 30 00:57:09 EST 2006


Author: warlord
Date: 2006-01-30 00:57:08 -0500 (Mon, 30 Jan 2006)
New Revision: 13049
Trac: http://svn.gnucash.org/trac/changeset/13049

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.c
   gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.h
   gnucash/trunk/src/business/business-core/file/gnc-customer-xml-v2.c
   gnucash/trunk/src/business/business-core/file/gnc-invoice-xml-v2.c
   gnucash/trunk/src/business/business-core/file/gnc-vendor-xml-v2.c
   gnucash/trunk/src/business/business-core/gncBillTerm.c
   gnucash/trunk/src/business/business-core/gncBillTerm.h
Log:
Clear up the billterm data lossage (due to a broken enum definition).

	* src/business/business-core/file/gnc-bill-term-xml-v2.c:
	* src/business/business-core/file/gnc-bill-term-xml-v2.h:
	  Add a new API to "find-or-create" a billterm so all the
	  code is collated in one location.
	  Add more debugging during the scrub phases.
	* src/business/business-core/file/gnc-invoice-xml-v2.c:
	* src/business/business-core/file/gnc-vendor-xml-v2.c:
	* src/business/business-core/file/gnc-customer-xml-v2.c:
	  Use the new bill-term find-or-create API
	* src/business/business-core/gncBillTerm.c:
	  add some additional debugging
	* src/business/business-core/gncBillTerm.h:
	  The Billterm Type ENUM must start at 1, not zero.  The data file
	  now appears to properly save itself without destroying data.
	  Fixes rest of #328790.



Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/ChangeLog	2006-01-30 05:57:08 UTC (rev 13049)
@@ -1,3 +1,21 @@
+2006-01-29  Derek Atkins  <derek at ihtfp.com>
+
+	* src/business/business-core/file/gnc-bill-term-xml-v2.c:
+	* src/business/business-core/file/gnc-bill-term-xml-v2.h:
+	  Add a new API to "find-or-create" a billterm so all the
+	  code is collated in one location.
+	  Add more debugging during the scrub phases.
+	* src/business/business-core/file/gnc-invoice-xml-v2.c:
+	* src/business/business-core/file/gnc-vendor-xml-v2.c:
+	* src/business/business-core/file/gnc-customer-xml-v2.c:
+	  Use the new bill-term find-or-create API
+	* src/business/business-core/gncBillTerm.c:
+	  add some additional debugging
+	* src/business/business-core/gncBillTerm.h:
+	  The Billterm Type ENUM must start at 1, not zero.  The data file
+	  now appears to properly save itself without destroying data.
+	  Fixes rest of #328790.
+
 2006-01-29  David Hampton  <hampton at employees.org>
 
 	* src/gtk-compat.h:

Modified: gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.c
===================================================================
--- gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.c	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.c	2006-01-30 05:57:08 UTC (rev 13049)
@@ -629,6 +629,10 @@
     count = GPOINTER_TO_INT(g_hash_table_lookup(ht, term));
     count++;
     g_hash_table_insert(ht, term, GINT_TO_POINTER(count));
+    if (billterm_is_grandchild(term))
+      PWARN("customer %s has grandchild billterm %s\n",
+	    guid_to_string(qof_instance_get_guid(QOF_INSTANCE(cust))),
+	    guid_to_string(qof_instance_get_guid(QOF_INSTANCE(term))));
   }
 }
 
@@ -645,6 +649,10 @@
     count = GPOINTER_TO_INT(g_hash_table_lookup(ht, term));
     count++;
     g_hash_table_insert(ht, term, GINT_TO_POINTER(count));
+    if (billterm_is_grandchild(term))
+      PWARN("vendor %s has grandchild billterm %s\n",
+	    guid_to_string(qof_instance_get_guid(QOF_INSTANCE(vendor))),
+	    guid_to_string(qof_instance_get_guid(QOF_INSTANCE(term))));
   }
 }
 
@@ -670,6 +678,7 @@
   GncBillTerm *parent, *term;
   GHashTable *ht = g_hash_table_new(g_direct_hash, g_direct_equal);
 
+  PDEBUG("scrubbing billterms...");
   qof_object_foreach (GNC_ID_INVOICE,  book, billterm_scrub_invoices, ht);
   qof_object_foreach (GNC_ID_CUSTOMER, book, billterm_scrub_cust, ht);
   qof_object_foreach (GNC_ID_VENDOR,   book, billterm_scrub_vendor, ht);
@@ -679,7 +688,7 @@
   for (node = list; node; node = node->next) {
     term = node->data;
 
-    PINFO ("deleting grandchild billterm: %s\n",
+    PWARN ("deleting grandchild billterm: %s\n",
 	   guid_to_string(qof_instance_get_guid(QOF_INSTANCE(term))));
 
     /* Make sure the parent has no children */
@@ -725,3 +734,24 @@
 			    GNC_FILE_BACKEND,
 			    &be_data);
 }
+
+GncBillTerm *
+gnc_billterm_xml_find_or_create(QofBook *book, GUID *guid)
+{
+  GncBillTerm *term;
+
+  g_return_val_if_fail(book, NULL);
+  g_return_val_if_fail(guid, NULL);
+  term = gncBillTermLookup(book, guid);
+  PDEBUG("looking for billterm %s, found %p", guid_to_string(guid), term);
+  if (!term) {
+    term = gncBillTermCreate(book);
+    gncBillTermBeginEdit(term);
+    gncBillTermSetGUID(term, guid);
+    gncBillTermCommitEdit(term);
+    PDEBUG("Created term: %p", term);
+  } else
+    gncBillTermDecRef(term);
+
+  return term;
+}

Modified: gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.h
===================================================================
--- gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.h	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/file/gnc-bill-term-xml-v2.h	2006-01-30 05:57:08 UTC (rev 13049)
@@ -24,6 +24,8 @@
 #ifndef GNC_BILLTERM_XML_V2_H
 #define GNC_BILLTERM_XML_V2_H
 
+#include "gncBillTerm.h"
 void gnc_billterm_xml_initialize (void);
+GncBillTerm *gnc_billterm_xml_find_or_create(QofBook *book, GUID *guid);
 
 #endif /* GNC_BILLTERM_XML_V2_H */

Modified: gnucash/trunk/src/business/business-core/file/gnc-customer-xml-v2.c
===================================================================
--- gnucash/trunk/src/business/business-core/file/gnc-customer-xml-v2.c	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/file/gnc-customer-xml-v2.c	2006-01-30 05:57:08 UTC (rev 13049)
@@ -46,6 +46,7 @@
 #include "gncTaxTableP.h"
 #include "gnc-customer-xml-v2.h"
 #include "gnc-address-xml-v2.h"
+#include "gnc-bill-term-xml-v2.h"
 
 #include "xml-helpers.h"
 
@@ -230,15 +231,8 @@
 
     guid = dom_tree_to_guid(node);
     g_return_val_if_fail (guid, FALSE);
-    term = gncBillTermLookup (pdata->book, guid);
-    if (!term) {
-      term = gncBillTermCreate (pdata->book);
-      gncBillTermBeginEdit (term);
-      gncBillTermSetGUID (term, guid);
-      gncBillTermCommitEdit (term);
-    } else
-      gncBillTermDecRef (term);
-
+    term = gnc_billterm_xml_find_or_create(pdata->book, guid);
+    g_assert(term);
     g_free (guid);
     gncCustomerSetTerms (pdata->customer, term);
     

Modified: gnucash/trunk/src/business/business-core/file/gnc-invoice-xml-v2.c
===================================================================
--- gnucash/trunk/src/business/business-core/file/gnc-invoice-xml-v2.c	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/file/gnc-invoice-xml-v2.c	2006-01-30 05:57:08 UTC (rev 13049)
@@ -45,6 +45,7 @@
 #include "gncInvoiceP.h"
 #include "gnc-invoice-xml-v2.h"
 #include "gnc-owner-xml-v2.h"
+#include "gnc-bill-term-xml-v2.h"
 
 #define _GNC_MOD_NAME	GNC_ID_INVOICE
 
@@ -290,15 +291,8 @@
 
     guid = dom_tree_to_guid(node);
     g_return_val_if_fail (guid, FALSE);
-    term = gncBillTermLookup (pdata->book, guid);
-    if (!term) {
-      term = gncBillTermCreate (pdata->book);
-      gncBillTermBeginEdit (term);
-      gncBillTermSetGUID (term, guid);
-      gncBillTermCommitEdit (term);
-    } else
-      gncBillTermDecRef (term);
-
+    term = gnc_billterm_xml_find_or_create(pdata->book, guid);
+    g_assert(term);
     g_free (guid);
     gncInvoiceSetTerms (pdata->invoice, term);
     

Modified: gnucash/trunk/src/business/business-core/file/gnc-vendor-xml-v2.c
===================================================================
--- gnucash/trunk/src/business/business-core/file/gnc-vendor-xml-v2.c	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/file/gnc-vendor-xml-v2.c	2006-01-30 05:57:08 UTC (rev 13049)
@@ -47,6 +47,7 @@
 #include "gnc-vendor-xml-v2.h"
 #include "gnc-address-xml-v2.h"
 #include "xml-helpers.h"
+#include "gnc-bill-term-xml-v2.h"
 
 #define _GNC_MOD_NAME	GNC_ID_VENDOR
 
@@ -212,15 +213,8 @@
 
     guid = dom_tree_to_guid(node);
     g_return_val_if_fail (guid, FALSE);
-    term = gncBillTermLookup (pdata->book, guid);
-    if (!term) {
-      term = gncBillTermCreate (pdata->book);
-      gncBillTermBeginEdit (term);
-      gncBillTermSetGUID (term, guid);
-      gncBillTermCommitEdit (term);
-    } else
-      gncBillTermDecRef (term);
-
+    term = gnc_billterm_xml_find_or_create(pdata->book, guid);
+    g_assert(term);
     g_free (guid);
     gncVendorSetTerms (pdata->vendor, term);
     

Modified: gnucash/trunk/src/business/business-core/gncBillTerm.c
===================================================================
--- gnucash/trunk/src/business/business-core/gncBillTerm.c	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/gncBillTerm.c	2006-01-30 05:57:08 UTC (rev 13049)
@@ -148,6 +148,8 @@
 void gncBillTermDestroy (GncBillTerm *term)
 {
   if (!term) return;
+  PDEBUG("destroying bill term %s (%p)",
+	    guid_to_string(qof_instance_get_guid(&term->inst)), term);
   term->inst.do_free = TRUE;
   qof_collection_mark_dirty (term->inst.entity.collection);
   gncBillTermCommitEdit (term);

Modified: gnucash/trunk/src/business/business-core/gncBillTerm.h
===================================================================
--- gnucash/trunk/src/business/business-core/gncBillTerm.h	2006-01-30 04:57:46 UTC (rev 13048)
+++ gnucash/trunk/src/business/business-core/gncBillTerm.h	2006-01-30 05:57:08 UTC (rev 13049)
@@ -57,9 +57,10 @@
  * How to interpret the amount.
  * You can interpret it as a VALUE or a PERCENT.
  * ??? huh?
+ * NOTE: This enum /depends/ on starting at value 1
  */
 #define ENUM_TERMS_TYPE(_)  \
- _(GNC_TERM_TYPE_DAYS,) \
+ _(GNC_TERM_TYPE_DAYS,=1) \
  _(GNC_TERM_TYPE_PROXIMO,)
 
 DEFINE_ENUM(GncBillTermType, ENUM_TERMS_TYPE)



More information about the gnucash-changes mailing list