From 8b1ada6048b5c2ada16140bac632dc475631672f Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 18 Aug 2019 00:16:55 +0800 Subject: [PATCH 01/12] [balsheet-eguile] monetaries must be rounded to their scu previously balsheet-eguile would convert monetaries to exact fractions. --- gnucash/report/business-reports/balsheet-eg.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gnucash/report/business-reports/balsheet-eg.scm b/gnucash/report/business-reports/balsheet-eg.scm index ccec8c5ae0..928512a8ba 100644 --- a/gnucash/report/business-reports/balsheet-eg.scm +++ b/gnucash/report/business-reports/balsheet-eg.scm @@ -565,6 +565,12 @@ (negstyle (nbsp mny-string))) (nbsp mny-string))) + (define (monetary-rounded mon) + (let ((c (gnc:gnc-monetary-commodity mon)) + (a (gnc:gnc-monetary-amount mon))) + (gnc:make-gnc-monetary + c (gnc-numeric-convert a (gnc-commodity-get-fraction c) GNC-RND-ROUND)))) + (define (format-monetary mny) ;; Format the given gnc:monetary value according to opt-neg-format ;; If mny's currency isn't the same as that of the report, @@ -578,10 +584,10 @@ (if (not (gnc-commodity-equiv comm opt-report-commodity)) (begin (if opt-show-foreign? - (set! answer (string-append (foreignstyle (neg-format (gnc:monetary->string mny) neg?)) " "))) + (set! answer (string-append (foreignstyle (neg-format (gnc:monetary->string (monetary-rounded mny)) neg?)) " "))) (set! mny (exchange-fn mny opt-report-commodity)))) ; main currency - converted if necessary - (set! answer (string-append answer (neg-format (gnc:monetary->string mny) neg?))) + (set! answer (string-append answer (neg-format (gnc:monetary->string (monetary-rounded mny)) neg?))) answer)) (define (format-comm-coll cc) @@ -600,7 +606,7 @@ (define (fmtmoney2 mny) ;; format a monetary amount in the given currency/commodity ;; !! this takes a gnc-monetary - (nbsp (gnc:monetary->string mny))) + (nbsp (gnc:monetary->string (monetary-rounded mny)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; From a13e8f923761ec78aff5e5477dffe01833a09c3d Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 18 Aug 2019 13:38:26 +0800 Subject: [PATCH 02/12] [general-ledger] deprecate gnc:make-general-ledger-report --- gnucash/report/standard-reports/general-ledger.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gnucash/report/standard-reports/general-ledger.scm b/gnucash/report/standard-reports/general-ledger.scm index 521b89263b..ffd0a3b117 100644 --- a/gnucash/report/standard-reports/general-ledger.scm +++ b/gnucash/report/standard-reports/general-ledger.scm @@ -30,7 +30,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-module (gnucash report standard-reports general-ledger)) -(export gnc:make-general-ledger-report) +(export gnc:make-general-ledger-report) ;deprecated (use-modules (gnucash utilities)) (use-modules (gnucash gnc-module)) (use-modules (gnucash gettext)) @@ -45,6 +45,7 @@ ;; report constructor (define (gnc:make-general-ledger-report) + (issue-deprecation-warning "gnc:make-general-ledger-report is unused") (let* ((xactrpt (gnc:make-report xactrptguid))) xactrpt)) From 4a81bb34cef73b66997f7b1aa6ab157f1b6033b3 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 18 Aug 2019 13:38:47 +0800 Subject: [PATCH 03/12] [general-ledger] internationalize general-ledger title --- gnucash/report/standard-reports/general-ledger.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gnucash/report/standard-reports/general-ledger.scm b/gnucash/report/standard-reports/general-ledger.scm index ffd0a3b117..7535441368 100644 --- a/gnucash/report/standard-reports/general-ledger.scm +++ b/gnucash/report/standard-reports/general-ledger.scm @@ -148,7 +148,10 @@ (define (general-ledger-renderer report-obj) ;; just delegate rendering to the Transaction Report renderer... - ((gnc:report-template-renderer/report-guid xactrptguid xactrptname) report-obj)) + (let ((document ((gnc:report-template-renderer/report-guid xactrptguid xactrptname) + report-obj))) + (gnc:html-document-set-title! document (_ reportname)) + document)) (gnc:define-report 'version 1 From 99c69023cce04c8a5fcc4309abc3b1337091281a Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Sun, 18 Aug 2019 19:26:09 +0800 Subject: [PATCH 04/12] Bug 793018 - Balance (with >>eguile<<) - Report Title can't be changed --- gnucash/report/business-reports/balsheet-eg.eguile.scm | 4 ++-- gnucash/report/business-reports/balsheet-eg.scm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gnucash/report/business-reports/balsheet-eg.eguile.scm b/gnucash/report/business-reports/balsheet-eg.eguile.scm index c3bcfe9e13..e4ab987f34 100644 --- a/gnucash/report/business-reports/balsheet-eg.eguile.scm +++ b/gnucash/report/business-reports/balsheet-eg.eguile.scm @@ -128,7 +128,7 @@ -<?scm:d coyname ?> <?scm:d reportname ?> <?scm:d (qof-print-date opt-date) ?> +<?scm:d coyname ?> <?scm:d opt-report-title ?> <?scm:d (qof-print-date opt-date) ?> - + <?scm:d coyname ?> <?scm:d opt-report-title ?> <?scm:d (qof-print-date opt-date) ?> diff --git a/gnucash/report/business-reports/receipt.eguile.scm b/gnucash/report/business-reports/receipt.eguile.scm index 155b42dcdd..6097384c15 100644 --- a/gnucash/report/business-reports/receipt.eguile.scm +++ b/gnucash/report/business-reports/receipt.eguile.scm @@ -103,7 +103,7 @@ - + <?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?> diff --git a/gnucash/report/business-reports/taxinvoice.eguile.scm b/gnucash/report/business-reports/taxinvoice.eguile.scm index 9a8036273d..1a14bc5088 100644 --- a/gnucash/report/business-reports/taxinvoice.eguile.scm +++ b/gnucash/report/business-reports/taxinvoice.eguile.scm @@ -125,7 +125,7 @@ - + <?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?> diff --git a/gnucash/report/report-system/html-document.scm b/gnucash/report/report-system/html-document.scm index f7124f6bd7..ecb045e2c3 100644 --- a/gnucash/report/report-system/html-document.scm +++ b/gnucash/report/report-system/html-document.scm @@ -150,7 +150,7 @@ ;;./share/gnucash/scm/gnucash/report/taxinvoice.eguile.scm: ;;./share/gnucash/scm/gnucash/report/balsheet-eg.eguile.scm: - (push "\n") + (push "\n") (push "\n") (push "\n") (if style-text diff --git a/gnucash/report/report-system/html-fonts.scm b/gnucash/report/report-system/html-fonts.scm index e9ea98f35f..eb30fe726e 100644 --- a/gnucash/report/report-system/html-fonts.scm +++ b/gnucash/report/report-system/html-fonts.scm @@ -140,7 +140,7 @@ (string-append "h3 { " title-font-info " }\n" "a { " account-link-font-info " }\n" - "body, p, table, tr, td { text-align: left; vertical-align: top; " text-cell-font-info " }\n" + "body, p, table, tr, td { vertical-align: top; " text-cell-font-info " }\n" "tr.alternate-row { background: " alternate-row-color " }\n" "tr { page-break-inside: avoid !important;}\n" "th.column-heading-left { text-align: left; " number-header-font-info " }\n" diff --git a/gnucash/report/report-system/test/test-report-html.scm b/gnucash/report/report-system/test/test-report-html.scm index 7e44f36d81..e4a854d488 100644 --- a/gnucash/report/report-system/test/test-report-html.scm +++ b/gnucash/report/report-system/test/test-report-html.scm @@ -45,7 +45,7 @@ ) (define html-doc-header-no-title -"\n\ +"\n\ \n\ \n\ ") @@ -87,7 +87,7 @@ (gnc:html-document-set-title! test-doc "HTML Document Title") (test-equal "HTML Document - Render with title" -"\n\ +"\n\ \n\ \n\ \n\ From bd9edbbbf68c39f486d2fe17bf06c06761fc7a3e Mon Sep 17 00:00:00 2001 From: Christopher Lam <christopher.lck@gmail.com> Date: Fri, 16 Aug 2019 09:32:56 +0800 Subject: [PATCH 06/12] Bug 797279 - Reports RTL do not support RTL - fix string fix guile-2.0 string handling to prevent munging unicode in report-titles etc. while loading/saving reports --- libgnucash/scm/utilities.scm | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/libgnucash/scm/utilities.scm b/libgnucash/scm/utilities.scm index 83a0ab1390..105f493413 100644 --- a/libgnucash/scm/utilities.scm +++ b/libgnucash/scm/utilities.scm @@ -194,3 +194,53 @@ ((null? (cdr lst)) (reverse (cons (car lst) result))) ((= (car lst) (cadr lst)) (lp (cdr lst) result)) (else (lp (cdr lst) (cons (car lst) result)))))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; compatibility hack for fixing guile-2.0 string handling. this code +;; may be removed when minimum guile is 2.2 or later. see +;; https://lists.gnu.org/archive/html/guile-user/2019-04/msg00012.html +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(when (string=? (effective-version) "2.0") + ;; When using Guile 2.0.x, use monkey patching to change the + ;; behavior of string ports to use UTF-8 as the internal encoding. + ;; Note that this is the default behavior in Guile 2.2 or later. + (let* ((mod (resolve-module '(guile))) + (orig-open-input-string (module-ref mod 'open-input-string)) + (orig-open-output-string (module-ref mod 'open-output-string)) + (orig-object->string (module-ref mod 'object->string)) + (orig-simple-format (module-ref mod 'simple-format))) + + (define (open-input-string str) + (with-fluids ((%default-port-encoding "UTF-8")) + (orig-open-input-string str))) + + (define (open-output-string) + (with-fluids ((%default-port-encoding "UTF-8")) + (orig-open-output-string))) + + (define (object->string . args) + (with-fluids ((%default-port-encoding "UTF-8")) + (apply orig-object->string args))) + + (define (simple-format . args) + (with-fluids ((%default-port-encoding "UTF-8")) + (apply orig-simple-format args))) + + (define (call-with-input-string str proc) + (proc (open-input-string str))) + + (define (call-with-output-string proc) + (let ((port (open-output-string))) + (proc port) + (get-output-string port))) + + (module-set! mod 'open-input-string open-input-string) + (module-set! mod 'open-output-string open-output-string) + (module-set! mod 'object->string object->string) + (module-set! mod 'simple-format simple-format) + (module-set! mod 'call-with-input-string call-with-input-string) + (module-set! mod 'call-with-output-string call-with-output-string) + + (when (eqv? (module-ref mod 'format) orig-simple-format) + (module-set! mod 'format simple-format)))) From b3ff04eedc989080b4f73244bb01edbb81f6a83f Mon Sep 17 00:00:00 2001 From: Christopher Lam <christopher.lck@gmail.com> Date: Sun, 18 Aug 2019 14:37:45 +0800 Subject: [PATCH 07/12] [balsheet-pnl] reuse i18n strings --- gnucash/report/standard-reports/balsheet-pnl.scm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gnucash/report/standard-reports/balsheet-pnl.scm b/gnucash/report/standard-reports/balsheet-pnl.scm index 5bf1c2f980..8e9afe25e3 100644 --- a/gnucash/report/standard-reports/balsheet-pnl.scm +++ b/gnucash/report/standard-reports/balsheet-pnl.scm @@ -879,10 +879,10 @@ also show overall period profit & loss.")) (lambda () (display report-title) (display " ") - (when (or incr (eq? report-type 'pnl)) - (display (qof-print-date startdate)) - (display (_ " to "))) - (display (qof-print-date enddate))))) + (if (or incr (eq? report-type 'pnl)) + (format #t (_ "~a to ~a") + (qof-print-date startdate) (qof-print-date enddate)) + (qof-print-date enddate))))) (if (eq? (get-option gnc:pagename-general optname-options-summary) 'always) (gnc:html-document-add-object! @@ -1057,9 +1057,9 @@ also show overall period profit & loss.")) multicol-table-right (_ "Equity") (append equity-accounts (list - (vector "Unrealized Gains" + (vector (_ "Unrealized Gains") unrealized-gain-fn) - (vector "Retained Earnings" + (vector (_ "Retained Earnings") retained-earnings-fn))) #:negate-amounts? #t) @@ -1074,7 +1074,7 @@ also show overall period profit & loss.")) (gnc:html-document-add-object! doc (gnc:make-html-text - (gnc:html-markup-anchor chart "Barchart")))))) + (gnc:html-markup-anchor chart (_ "Barchart"))))))) ((eq? report-type 'pnl) (let* ((closing-str (get-option pagename-entries optname-closing-pattern)) From 416e7f7e5eabeaf70bc851f08347d5d43599cbd9 Mon Sep 17 00:00:00 2001 From: Christopher Lam <christopher.lck@gmail.com> Date: Sun, 18 Aug 2019 23:29:17 +0800 Subject: [PATCH 08/12] [general-journal] set document title after rendering Instead of setting document <title> register.scm's General/Title option, set it in the document returned by register.scm's renderer. This is in anticipation of "General"/"Title" option in register.scm being removed. --- .../report/standard-reports/general-journal.scm | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/gnucash/report/standard-reports/general-journal.scm b/gnucash/report/standard-reports/general-journal.scm index 23e3cb7c03..5babfd8619 100644 --- a/gnucash/report/standard-reports/general-journal.scm +++ b/gnucash/report/standard-reports/general-journal.scm @@ -90,14 +90,7 @@ ) ) ;; we'll leave query malloc'd in case this is required by the C side... - - ;; set options in the general tab... - (set-option! - gnc:pagename-general (N_ "Title") (_ reportname)) - ;; we can't (currently) set the Report name here - ;; because it is automatically set to the template - ;; name... :( - + ;; set options in the display tab... (for-each (lambda (l) @@ -126,7 +119,10 @@ (define (general-journal-renderer report-obj) ;; just delegate rendering to the Register Report renderer... - ((gnc:report-template-renderer/report-guid regrptguid regrptname) report-obj)) + (let* ((renderer (gnc:report-template-renderer/report-guid regrptguid #f)) + (doc (renderer report-obj))) + (gnc:html-document-set-title! doc (_ reportname)) + doc)) (gnc:define-report 'version 1 From 0a3fd5984e53b8c8e588c4a0af733343eef4762e Mon Sep 17 00:00:00 2001 From: Christopher Lam <christopher.lck@gmail.com> Date: Sun, 18 Aug 2019 23:36:02 +0800 Subject: [PATCH 09/12] [general-journal] deprecate the journal report generator it is unused. --- gnucash/report/standard-reports/general-journal.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/gnucash/report/standard-reports/general-journal.scm b/gnucash/report/standard-reports/general-journal.scm index 5babfd8619..3600b62ee8 100644 --- a/gnucash/report/standard-reports/general-journal.scm +++ b/gnucash/report/standard-reports/general-journal.scm @@ -41,6 +41,7 @@ ;; report constructor (define (gnc:make-general-journal-report) + (issue-deprecation-warning "gnc:make-general-journal-report is unused.") (let* ((regrpt (gnc:make-report regrptguid))) regrpt)) From 5c87344dbde9a11494b5f90442f4c19eae40b266 Mon Sep 17 00:00:00 2001 From: Geert Janssens <geert@kobaltwit.be> Date: Sun, 18 Aug 2019 11:47:13 +0200 Subject: [PATCH 10/12] Add developer name to our appdata It has no legal bearing as far as I know, but consumers like gnome-software or flathub will display this info. --- gnucash/gnome/gnucash.appdata.xml.in | 1 + 1 file changed, 1 insertion(+) diff --git a/gnucash/gnome/gnucash.appdata.xml.in b/gnucash/gnome/gnucash.appdata.xml.in index d0cff4f95d..81aa28ade8 100644 --- a/gnucash/gnome/gnucash.appdata.xml.in +++ b/gnucash/gnome/gnucash.appdata.xml.in @@ -25,6 +25,7 @@ <li>Perform financial calculations, such as a loan repayment</li> </ul> </description> + <developer_name>GnuCash Project</developer_name> <categories> <category>Finance</category> </categories> From 33b1a19eb22a874db51edc70c36543c103bd30ef Mon Sep 17 00:00:00 2001 From: Geert Janssens <geert@kobaltwit.be> Date: Tue, 20 Aug 2019 18:30:31 +0200 Subject: [PATCH 11/12] Disable text-tx-import.cpp There are no tests in this file yet --- gnucash/import-export/csv-imp/test/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gnucash/import-export/csv-imp/test/CMakeLists.txt b/gnucash/import-export/csv-imp/test/CMakeLists.txt index e9dc7bb9b9..217cbf3ed7 100644 --- a/gnucash/import-export/csv-imp/test/CMakeLists.txt +++ b/gnucash/import-export/csv-imp/test/CMakeLists.txt @@ -24,10 +24,11 @@ if (NOT WIN32) gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS SRCDIR=${CMAKE_SOURCE_DIR}/gnucash/import-export/csv-imp/test) - set(test_tx_import_SOURCES - test-tx-import.cpp) - gnc_add_test(test-tx_import "${test_tx_import_SOURCES}" - gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS) + # Disable for now - there are no tests added yet to this source file + #set(test_tx_import_SOURCES + # test-tx-import.cpp) + #gnc_add_test(test-tx_import "${test_tx_import_SOURCES}" + # gtest_csv_imp_INCLUDES gtest_csv_imp_LIBS) endif() set_dist_list(test_csv_import_DIST CMakeLists.txt From fcc1653822227bc1d4ad0a6153e08541a5499f37 Mon Sep 17 00:00:00 2001 From: John Ralls <jralls@ceridwen.us> Date: Thu, 22 Aug 2019 12:23:09 -0700 Subject: [PATCH 12/12] 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 | 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 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 <warlord@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@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 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 <warlord@MIT.EDU> - * Copyright (C) 2003 Derek Atkins <warlord@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@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,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 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<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 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