mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13049 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
7940c68a7a
commit
8a0f2cf7e3
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
||||
2006-01-29 Derek Atkins <derek@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@employees.org>
|
||||
|
||||
* src/gtk-compat.h:
|
||||
|
@ -629,6 +629,10 @@ billterm_scrub_cust (QofEntity * cust_p, gpointer ht_p)
|
||||
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 @@ billterm_scrub_vendor (QofEntity * vendor_p, gpointer ht_p)
|
||||
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 @@ billterm_scrub (QofBook *book)
|
||||
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 @@ billterm_scrub (QofBook *book)
|
||||
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_billterm_xml_initialize (void)
|
||||
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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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 @@ customer_terms_handler (xmlNodePtr node, gpointer cust_pdata)
|
||||
|
||||
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);
|
||||
|
||||
|
@ -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 @@ invoice_terms_handler (xmlNodePtr node, gpointer invoice_pdata)
|
||||
|
||||
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);
|
||||
|
||||
|
@ -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 @@ vendor_terms_handler (xmlNodePtr node, gpointer vendor_pdata)
|
||||
|
||||
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);
|
||||
|
||||
|
@ -148,6 +148,8 @@ GncBillTerm * gncBillTermCreate (QofBook *book)
|
||||
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);
|
||||
|
@ -57,9 +57,10 @@ typedef struct _gncBillTerm GncBillTerm;
|
||||
* 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)
|
||||
|
Loading…
Reference in New Issue
Block a user