gnucash maint: Replace overly indirect gnc_business_get_default_tax_table.

John Ralls jralls at code.gnucash.org
Thu Aug 22 15:37:00 EDT 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/fcc16538 (commit)
	from  https://github.com/Gnucash/gnucash/commit/33b1a19e (commit)



commit fcc1653822227bc1d4ad0a6153e08541a5499f37
Author: John Ralls <jralls at ceridwen.us>
Date:   Thu Aug 22 12:23:09 2019 -0700

    Replace overly indirect gnc_business_get_default_tax_table.
    
    With gncTaxTableGetDefault.
    
    qof_book_get_default_tax_table would have been even better but it
    would have created a circular dependency between QofBook and
    GncTaxTable.

diff --git a/gnucash/register/ledger-core/gncEntryLedgerLoad.c b/gnucash/register/ledger-core/gncEntryLedgerLoad.c
index 3684755aa..ac8b94cec 100644
--- a/gnucash/register/ledger-core/gncEntryLedgerLoad.c
+++ b/gnucash/register/ledger-core/gncEntryLedgerLoad.c
@@ -34,8 +34,6 @@
 #include "gnc-ui-util.h"
 #include "recncell.h"
 
-#include "business-helpers.h"
-
 #include "gncEntry.h"
 #include "gncEntryLedger.h"
 #include "gncEntryLedgerP.h"
@@ -430,16 +428,16 @@ void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list)
                 switch (gncOwnerGetType (owner))
                 {
                 case GNC_OWNER_CUSTOMER:
-                    table = gnc_business_get_default_tax_table (ledger->book,
-                            GNC_OWNER_CUSTOMER);
+                    table = gncTaxTableGetDefault (ledger->book,
+                                                   GNC_OWNER_CUSTOMER);
 
                     if (gncCustomerGetTaxTableOverride (owner->owner.customer))
                         table = gncCustomerGetTaxTable (owner->owner.customer);
                     break;
 
                 case GNC_OWNER_VENDOR:
-                    table = gnc_business_get_default_tax_table (ledger->book,
-                            GNC_OWNER_VENDOR);
+                    table = gncTaxTableGetDefault (ledger->book,
+                                                   GNC_OWNER_VENDOR);
 
                     if (gncVendorGetTaxTableOverride (owner->owner.vendor))
                         table = gncVendorGetTaxTable (owner->owner.vendor);
diff --git a/libgnucash/app-utils/CMakeLists.txt b/libgnucash/app-utils/CMakeLists.txt
index e293ea476..50eedc5ab 100644
--- a/libgnucash/app-utils/CMakeLists.txt
+++ b/libgnucash/app-utils/CMakeLists.txt
@@ -11,7 +11,6 @@ set (app_utils_noinst_HEADERS
 
 set (app_utils_HEADERS
   QuickFill.h
-  business-helpers.h
   business-options.h
   file-utils.h
   gfec.h
@@ -52,7 +51,6 @@ gnc_add_swig_python_command (swig-app-utils-python
 set (app_utils_SOURCES
   calculation/expression_parser.c
   calculation/fin.c
-  business-helpers.c
   business-options.c
   QuickFill.c
   file-utils.c
diff --git a/libgnucash/app-utils/business-helpers.c b/libgnucash/app-utils/business-helpers.c
deleted file mode 100644
index c63a7ef32..000000000
--- a/libgnucash/app-utils/business-helpers.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * business-options.c -- non-GUI helper functions for business features
- *
- * Written By: Derek Atkins <warlord at MIT.EDU>
- * Copyright (C) 2003  Derek Atkins
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, contact:
- *
- * Free Software Foundation           Voice:  +1-617-542-5942
- * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652
- * Boston, MA  02110-1301,  USA       gnu at gnu.org
- */
-
-#include <config.h>
-
-#include "business-options.h"
-#include "business-helpers.h"
-
-GncTaxTable* gnc_business_get_default_tax_table (QofBook *book, GncOwnerType ownertype)
-{
-    GncTaxTable *table = NULL;
-    GNCOptionDB *odb;
-
-    odb = gnc_option_db_new_for_type (GNC_ID_BOOK);
-    qof_book_load_options (book, gnc_option_db_load, odb);
-
-    switch (ownertype)
-    {
-    case GNC_OWNER_CUSTOMER:
-        table = gnc_option_db_lookup_taxtable_option (odb,
-                "Business",
-                "Default Customer TaxTable",
-                NULL);
-        break;
-
-    case GNC_OWNER_VENDOR:
-        table = gnc_option_db_lookup_taxtable_option (odb,
-                "Business",
-                "Default Vendor TaxTable",
-                NULL);
-        break;
-
-    default:
-        break;
-    }
-
-    gnc_option_db_destroy (odb);
-    return table;
-}
diff --git a/libgnucash/app-utils/business-helpers.h b/libgnucash/app-utils/business-helpers.h
deleted file mode 100644
index 25032d717..000000000
--- a/libgnucash/app-utils/business-helpers.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * business-helpers.h -- non-GUI helper functions for business features
- *
- * Written By: Derek Atkins <warlord at MIT.EDU>
- * Copyright (C) 2003 Derek Atkins <warlord at MIT.EDU>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, contact:
- *
- * Free Software Foundation           Voice:  +1-617-542-5942
- * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652
- * Boston, MA  02110-1301,  USA       gnu at gnu.org
- */
-
-#ifndef GNC_BUSINESS_HELPERS_H_
-#define GNC_BUSINESS_HELPERS_H_
-
-#include "gncTaxTable.h"
-#include "gncOwner.h"
-
-
-GncTaxTable* gnc_business_get_default_tax_table (QofBook *book, GncOwnerType ownertype);
-
-
-#endif /* GNC_BUSINESS_HELPERS_H_ */
diff --git a/libgnucash/engine/gncTaxTable.c b/libgnucash/engine/gncTaxTable.c
index 6159d1285..8fa17d1a0 100644
--- a/libgnucash/engine/gncTaxTable.c
+++ b/libgnucash/engine/gncTaxTable.c
@@ -681,6 +681,26 @@ GncTaxTable *gncTaxTableLookupByName (QofBook *book, const char *name)
     return NULL;
 }
 
+GncTaxTable*
+gncTaxTableGetDefault (QofBook *book, GncOwnerType type)
+{
+    GSList *path = NULL;
+    const GncGUID *guid = NULL;
+    const char *vendor = "Default Vendor TaxTable";
+    const char *customer = "Default Customer TaxTable";
+    const char *section = "Business";
+
+    g_return_val_if_fail (book != NULL, NULL);
+    g_return_val_if_fail (type == GNC_OWNER_CUSTOMER || \
+                          type == GNC_OWNER_VENDOR, NULL);
+    path = g_slist_prepend (path, type == GNC_OWNER_CUSTOMER ? (void*)customer : (void*)vendor);
+    path = g_slist_prepend (path, (void*)section);
+
+    guid = qof_book_get_guid_option (book, path);
+    g_return_val_if_fail (guid, NULL);
+    return gncTaxTableLookup (book, guid);
+}
+
 GncTaxTableList * gncTaxTableGetTables (QofBook *book)
 {
     struct _book_info *bi;
diff --git a/libgnucash/engine/gncTaxTable.h b/libgnucash/engine/gncTaxTable.h
index 5215585e1..4ec0dafb2 100644
--- a/libgnucash/engine/gncTaxTable.h
+++ b/libgnucash/engine/gncTaxTable.h
@@ -60,15 +60,32 @@ typedef struct _gncTaxTableClass GncTaxTableClass;
 };
 
 */
+/**
+ * How to interpret the amount.
+ * You can interpret it as a VALUE or a PERCENT.
+ */
+typedef enum
+{
+    GNC_AMT_TYPE_VALUE = 1, 	/**< tax is a number */
+    GNC_AMT_TYPE_PERCENT		/**< tax is a percentage */
+} GncAmountType;
+
+/** How to interpret the TaxIncluded */
+typedef enum
+{
+    GNC_TAXINCLUDED_YES = 1,  /**< tax is included */
+    GNC_TAXINCLUDED_NO,		/**< tax is not included */
+    GNC_TAXINCLUDED_USEGLOBAL, /**< use the global setting */
+} GncTaxIncluded;
+
 typedef struct _gncTaxTableEntry GncTaxTableEntry;
 
 typedef struct _gncAccountValue GncAccountValue;
 
 #include "Account.h"
 #include "qof.h"
-#ifdef GNUCASH_MAJOR_VERSION
 #include "gncBusiness.h"
-#endif
+#include "gncOwner.h"
 
 #define GNC_ID_TAXTABLE       "gncTaxTable"
 
@@ -86,23 +103,6 @@ typedef struct _gncAccountValue GncAccountValue;
      (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TAXTABLE, GncTaxTableClass))
 GType gnc_taxtable_get_type(void);
 
-/**
- * How to interpret the amount.
- * You can interpret it as a VALUE or a PERCENT.
- */
-typedef enum
-{
-    GNC_AMT_TYPE_VALUE = 1, 	/**< tax is a number */
-    GNC_AMT_TYPE_PERCENT		/**< tax is a percentage */
-} GncAmountType;
-
-/** How to interpret the TaxIncluded */
-typedef enum
-{
-    GNC_TAXINCLUDED_YES = 1,  /**< tax is included */
-    GNC_TAXINCLUDED_NO,		/**< tax is not included */
-    GNC_TAXINCLUDED_USEGLOBAL, /**< use the global setting */
-} GncTaxIncluded;
 
 const char * gncAmountTypeToString (GncAmountType type);
 gboolean gncAmountStringToType (const char *str, GncAmountType *type);
@@ -151,6 +151,7 @@ static inline GncTaxTable *gncTaxTableLookup (const QofBook* book, const GncGUID
 }
 
 GncTaxTable *gncTaxTableLookupByName (QofBook *book, const char *name);
+GncTaxTable *gncTaxTableGetDefault (QofBook *book, GncOwnerType type);
 
 typedef GList GncTaxTableList;
 GncTaxTableList  * gncTaxTableGetTables (QofBook *book);
diff --git a/libgnucash/engine/qofbook.cpp b/libgnucash/engine/qofbook.cpp
index 8e7dc93cf..0042778ad 100644
--- a/libgnucash/engine/qofbook.cpp
+++ b/libgnucash/engine/qofbook.cpp
@@ -1173,6 +1173,18 @@ qof_book_set_string_option(QofBook* book, const char* opt_name, const char* opt_
     qof_book_commit_edit(book);
 }
 
+const GncGUID*
+qof_book_get_guid_option(QofBook* book, GSList* path)
+{
+    g_return_val_if_fail(book != nullptr, nullptr);
+    g_return_val_if_fail(path != nullptr, nullptr);
+
+    auto table_value = qof_book_get_option(book, path);
+    if (!table_value)
+        return nullptr;
+    return table_value->get<GncGUID*>();
+}
+
 void
 qof_book_option_frame_delete (QofBook *book, const char* opt_name)
 {
diff --git a/libgnucash/engine/qofbook.h b/libgnucash/engine/qofbook.h
index 39c21f8c3..bc315c80f 100644
--- a/libgnucash/engine/qofbook.h
+++ b/libgnucash/engine/qofbook.h
@@ -375,6 +375,7 @@ char *qof_book_get_counter_format (const QofBook *book,
 
 const char* qof_book_get_string_option(const QofBook* book, const char* opt_name);
 void qof_book_set_string_option(QofBook* book, const char* opt_name, const char* opt_val);
+const GncGUID* qof_book_get_guid_option(QofBook* book, GSList* path);
 void qof_book_option_frame_delete (QofBook *book, const char* opt_name);
 
 /** Access functions for reading and setting the used-features on this book.
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a8d79d06b..67d490c29 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -506,7 +506,6 @@ gnucash/report/utility-reports/utility-reports.scm
 gnucash/report/utility-reports/view-column.scm
 gnucash/report/utility-reports/welcome-to-gnucash.scm
 libgnucash/app-utils/app-utils.scm
-libgnucash/app-utils/business-helpers.c
 libgnucash/app-utils/business-options.c
 libgnucash/app-utils/business-options.scm
 libgnucash/app-utils/business-prefs.scm



Summary of changes:
 gnucash/register/ledger-core/gncEntryLedgerLoad.c | 10 ++--
 libgnucash/app-utils/CMakeLists.txt               |  2 -
 libgnucash/app-utils/business-helpers.c           | 60 -----------------------
 libgnucash/app-utils/business-helpers.h           | 35 -------------
 libgnucash/engine/gncTaxTable.c                   | 20 ++++++++
 libgnucash/engine/gncTaxTable.h                   | 39 ++++++++-------
 libgnucash/engine/qofbook.cpp                     | 12 +++++
 libgnucash/engine/qofbook.h                       |  1 +
 po/POTFILES.in                                    |  1 -
 9 files changed, 57 insertions(+), 123 deletions(-)
 delete mode 100644 libgnucash/app-utils/business-helpers.c
 delete mode 100644 libgnucash/app-utils/business-helpers.h



More information about the gnucash-changes mailing list