From fcc1653822227bc1d4ad0a6153e08541a5499f37 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Thu, 22 Aug 2019 12:23:09 -0700 Subject: [PATCH] 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. --- .../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 | 53 ++++++++-------- libgnucash/engine/qofbook.cpp | 12 ++++ libgnucash/engine/qofbook.h | 1 + po/POTFILES.in | 1 - 9 files changed, 64 insertions(+), 130 deletions(-) delete mode 100644 libgnucash/app-utils/business-helpers.c delete mode 100644 libgnucash/app-utils/business-helpers.h diff --git a/gnucash/register/ledger-core/gncEntryLedgerLoad.c b/gnucash/register/ledger-core/gncEntryLedgerLoad.c index 3684755aa0..ac8b94cec4 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 e293ea476d..50eedc5abd 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 c63a7ef320..0000000000 --- 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 - * 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@gnu.org - */ - -#include - -#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 25032d7173..0000000000 --- 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 - * 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@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 6159d12858..8fa17d1a01 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 5215585e1f..4ec0dafb23 100644 --- a/libgnucash/engine/gncTaxTable.h +++ b/libgnucash/engine/gncTaxTable.h @@ -60,32 +60,6 @@ typedef struct _gncTaxTableClass GncTaxTableClass; }; */ -typedef struct _gncTaxTableEntry GncTaxTableEntry; - -typedef struct _gncAccountValue GncAccountValue; - -#include "Account.h" -#include "qof.h" -#ifdef GNUCASH_MAJOR_VERSION -#include "gncBusiness.h" -#endif - -#define GNC_ID_TAXTABLE "gncTaxTable" - -/* --- type macros --- */ -#define GNC_TYPE_TAXTABLE (gnc_taxtable_get_type ()) -#define GNC_TAXTABLE(o) \ - (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TAXTABLE, GncTaxTable)) -#define GNC_TAXTABLE_CLASS(k) \ - (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TAXTABLE, GncTaxTableClass)) -#define GNC_IS_TAXTABLE(o) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TAXTABLE)) -#define GNC_IS_TAXTABLE_CLASS(k) \ - (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TAXTABLE)) -#define GNC_TAXTABLE_GET_CLASS(o) \ - (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. @@ -104,6 +78,32 @@ typedef enum GNC_TAXINCLUDED_USEGLOBAL, /**< use the global setting */ } GncTaxIncluded; +typedef struct _gncTaxTableEntry GncTaxTableEntry; + +typedef struct _gncAccountValue GncAccountValue; + +#include "Account.h" +#include "qof.h" +#include "gncBusiness.h" +#include "gncOwner.h" + +#define GNC_ID_TAXTABLE "gncTaxTable" + +/* --- type macros --- */ +#define GNC_TYPE_TAXTABLE (gnc_taxtable_get_type ()) +#define GNC_TAXTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TAXTABLE, GncTaxTable)) +#define GNC_TAXTABLE_CLASS(k) \ + (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TAXTABLE, GncTaxTableClass)) +#define GNC_IS_TAXTABLE(o) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TAXTABLE)) +#define GNC_IS_TAXTABLE_CLASS(k) \ + (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TAXTABLE)) +#define GNC_TAXTABLE_GET_CLASS(o) \ + (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TAXTABLE, GncTaxTableClass)) +GType gnc_taxtable_get_type(void); + + 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 8e7dc93cfe..0042778adf 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(); +} + 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 39c21f8c31..bc315c80f8 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 a8d79d06b1..67d490c29c 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