Merge branch 'maint'

This commit is contained in:
John Ralls 2019-08-22 12:39:49 -07:00
commit 1fc831002d
23 changed files with 158 additions and 167 deletions

View File

@ -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>

View File

@ -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

View File

@ -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);

View File

@ -151,7 +151,7 @@
;;<guile-sitedir>/gnucash/reports/data/balsheet-eg.eguile.scm:<html>
;;<guile-sitedir>/gnucash/reports/data/receipt.eguile.scm:<html>
(push "<html>\n")
(push "<html dir='auto'>\n")
(push "<head>\n")
(push "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n")
(if style-text

View File

@ -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"

View File

@ -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?)) "&nbsp;")))
(set! answer (string-append (foreignstyle (neg-format (gnc:monetary->string (monetary-rounded mny)) neg?)) "&nbsp;")))
(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))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -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))

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -125,10 +125,10 @@
?>
<!-- The HTML starts here... -->
<html>
<html dir='auto'>
<head>
<meta http-equiv="content-type" content="text-html; charset=utf-8">
<title><?scm:d coyname ?> <?scm:d reportname ?> <?scm:d (qof-print-date opt-date) ?></title>
<title><?scm:d coyname ?> <?scm:d opt-report-title ?> <?scm:d (qof-print-date opt-date) ?></title>
<link rel="stylesheet" href="<?scm:d opt-css-file ?>" type="text/css">
<!-- Note that the stylesheet file is overridden by some options, i.e.
@ -152,7 +152,7 @@
</head>
<body>
<h3><?scm:d coyname ?></h3>
<h2><?scm:d reportname ?> <?scm:d (qof-print-date opt-date) ?></h2>
<h2><?scm:d opt-report-title ?> <?scm:d (qof-print-date opt-date) ?></h2>
<?scm
;; This is where the work is done.

View File

@ -103,7 +103,7 @@
<!-- ====================================================================== -->
<!-- The HTML for the invoice starts here -->
<html>
<html dir='auto'>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title><?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?></title>

View File

@ -125,7 +125,7 @@
<!-- ====================================================================== -->
<!-- The HTML for the invoice starts here -->
<html>
<html dir='auto'>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title><?scm:d (_ "Invoice") ?> <?scm:d invoiceid ?></title>

View File

@ -45,7 +45,7 @@
)
(define html-doc-header-no-title
"<html>\n\
"<html dir='auto'>\n\
<head>\n\
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\
</head><body>")
@ -87,7 +87,7 @@
(gnc:html-document-set-title! test-doc "HTML Document Title")
(test-equal "HTML Document - Render with title"
"<html>\n\
"<html dir='auto'>\n\
<head>\n\
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\
<title>\n\

View File

@ -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

View File

@ -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;
}

View File

@ -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_ */

View File

@ -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;

View File

@ -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);

View File

@ -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)
{

View File

@ -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.

View File

@ -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))))

View File

@ -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