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 @@
Perform financial calculations, such as a loan repayment
+ GnuCash Project
Finance
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
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/gnucash/report/html-document.scm b/gnucash/report/html-document.scm
index 58c73e92f1..550a66d822 100644
--- a/gnucash/report/html-document.scm
+++ b/gnucash/report/html-document.scm
@@ -151,7 +151,7 @@
;;/gnucash/reports/data/balsheet-eg.eguile.scm:
;;/gnucash/reports/data/receipt.eguile.scm:
- (push "\n")
+ (push "\n")
(push "\n")
(push "\n")
(if style-text
diff --git a/gnucash/report/html-fonts.scm b/gnucash/report/html-fonts.scm
index e9ea98f35f..eb30fe726e 100644
--- a/gnucash/report/html-fonts.scm
+++ b/gnucash/report/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/reports/standard/balsheet-eg.scm b/gnucash/report/reports/standard/balsheet-eg.scm
index 4f815ff2aa..2978fee5fc 100644
--- a/gnucash/report/reports/standard/balsheet-eg.scm
+++ b/gnucash/report/reports/standard/balsheet-eg.scm
@@ -324,7 +324,7 @@
(opt-report-commodity (get-option commodities-page optname-report-commodity))
(opt-price-source (get-option commodities-page optname-price-source))
(opt-show-foreign? (get-option commodities-page optname-show-foreign))
- (opt-report-title (get-option general-page optname-report-title))
+ (opt-report-title (get-option general-page gnc:optname-reportname))
(opt-date (gnc:time64-end-day-time
(gnc:date-option-absolute-time
(get-option general-page optname-date))))
@@ -563,6 +563,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,
@@ -576,10 +582,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)
@@ -598,7 +604,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))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/gnucash/report/reports/standard/balsheet-pnl.scm b/gnucash/report/reports/standard/balsheet-pnl.scm
index dcdd835ce4..adb0a3de08 100644
--- a/gnucash/report/reports/standard/balsheet-pnl.scm
+++ b/gnucash/report/reports/standard/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))
diff --git a/gnucash/report/reports/standard/general-journal.scm b/gnucash/report/reports/standard/general-journal.scm
index fad6e6ca9e..1573f8f935 100644
--- a/gnucash/report/reports/standard/general-journal.scm
+++ b/gnucash/report/reports/standard/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))
@@ -90,14 +91,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 +120,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
diff --git a/gnucash/report/reports/standard/general-ledger.scm b/gnucash/report/reports/standard/general-ledger.scm
index 6806676248..2f86c930f4 100644
--- a/gnucash/report/reports/standard/general-ledger.scm
+++ b/gnucash/report/reports/standard/general-ledger.scm
@@ -30,7 +30,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-module (gnucash reports standard 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))
@@ -147,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
diff --git a/gnucash/report/reports/support/balsheet-eg.css b/gnucash/report/reports/support/balsheet-eg.css
index 83d6d5b437..5a8d4b8e2c 100644
--- a/gnucash/report/reports/support/balsheet-eg.css
+++ b/gnucash/report/reports/support/balsheet-eg.css
@@ -26,11 +26,9 @@
width: 1em;
}
td.accname {
- text-align: left;
vertical-align: top;
}
td.accnametotal {
- text-align: left;
vertical-align: top;
font-weight: bold;
}
diff --git a/gnucash/report/reports/support/balsheet-eg.eguile.scm b/gnucash/report/reports/support/balsheet-eg.eguile.scm
index c3bcfe9e13..23cd32e3c9 100644
--- a/gnucash/report/reports/support/balsheet-eg.eguile.scm
+++ b/gnucash/report/reports/support/balsheet-eg.eguile.scm
@@ -125,10 +125,10 @@
?>
-
+
-
+
-
+
diff --git a/gnucash/report/reports/support/taxinvoice.eguile.scm b/gnucash/report/reports/support/taxinvoice.eguile.scm
index 9a8036273d..1a14bc5088 100644
--- a/gnucash/report/reports/support/taxinvoice.eguile.scm
+++ b/gnucash/report/reports/support/taxinvoice.eguile.scm
@@ -125,7 +125,7 @@
-
+
diff --git a/gnucash/report/test/test-report-html.scm b/gnucash/report/test/test-report-html.scm
index 04821ba453..3455791297 100644
--- a/gnucash/report/test/test-report-html.scm
+++ b/gnucash/report/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\
diff --git a/libgnucash/app-utils/CMakeLists.txt b/libgnucash/app-utils/CMakeLists.txt
index 0cdd51c9b2..b34ca641c8 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/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))))
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 9339bf3a38..36cc528b7b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -501,7 +501,6 @@ gnucash/report/stylesheets/head-or-tail.scm
gnucash/report/stylesheets/plain.scm
gnucash/report/trep-engine.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