mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Merge d634902c1f
into 5ce3a9dd1d
This commit is contained in:
commit
c79a9f355c
@ -43,6 +43,9 @@
|
||||
#include <gnc-engine.h>
|
||||
#include "gnc-report.h"
|
||||
|
||||
#include "unicode/dtitvfmt.h"
|
||||
#include "unicode/smpdtfmt.h"
|
||||
|
||||
extern "C" SCM scm_init_sw_report_module(void);
|
||||
|
||||
static QofLogModule log_module = GNC_MOD_GUI;
|
||||
@ -428,3 +431,71 @@ gnc_get_optiondb_from_dispatcher(SCM dispatcher)
|
||||
return u_ptr->get();
|
||||
}
|
||||
|
||||
static icu::DateIntervalFormat*
|
||||
get_date_interval_format ()
|
||||
{
|
||||
static std::unique_ptr<icu::DateIntervalFormat> difmt;
|
||||
if (!difmt)
|
||||
{
|
||||
icu::Locale locale;
|
||||
if (auto lc_time_locale = setlocale (LC_TIME, nullptr))
|
||||
{
|
||||
std::string localeStr(lc_time_locale);
|
||||
if (size_t dotPos = localeStr.find('.'); dotPos != std::string::npos)
|
||||
localeStr = localeStr.substr(0, dotPos);
|
||||
|
||||
locale = icu::Locale::createCanonical (localeStr.c_str());
|
||||
}
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
difmt.reset(icu::DateIntervalFormat::createInstance(UDAT_YEAR_NUM_MONTH_DAY, locale, status));
|
||||
if (U_FAILURE(status))
|
||||
return nullptr;
|
||||
}
|
||||
return difmt.get();
|
||||
}
|
||||
|
||||
static gchar*
|
||||
date_interval_format (time64 from_date, time64 to_date)
|
||||
{
|
||||
auto difmt = get_date_interval_format();
|
||||
if (!difmt)
|
||||
{
|
||||
PWARN("couldn't create DateIntervalFormat");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto interval = new icu::DateInterval (from_date * 1000, to_date * 1000);
|
||||
icu::UnicodeString result;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
difmt->format(interval, result, status);
|
||||
if (U_FAILURE(status))
|
||||
{
|
||||
PWARN("Error formatting interval");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string interval_string;
|
||||
result.toUTF8String(interval_string);
|
||||
|
||||
return g_strdup (interval_string.c_str());
|
||||
}
|
||||
|
||||
gchar*
|
||||
gnc_date_interval_format (time64 from_date, time64 to_date)
|
||||
{
|
||||
gchar* rv = nullptr;
|
||||
|
||||
if (qof_date_format_get() == QOF_DATE_FORMAT_LOCALE)
|
||||
rv = date_interval_format (from_date, to_date);
|
||||
|
||||
// not using locale, or icu failure
|
||||
if (!rv)
|
||||
{
|
||||
gchar from_buff[MAX_DATE_LENGTH+1], to_buff[MAX_DATE_LENGTH+1];
|
||||
qof_print_date_buff (from_buff, MAX_DATE_LENGTH, from_date);
|
||||
qof_print_date_buff (to_buff, MAX_DATE_LENGTH, to_date);
|
||||
rv = g_strdup_printf (_("%s to %s"), from_buff, to_buff);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include <glib.h>
|
||||
#include <libguile.h>
|
||||
#include <gnc-engine-guile.h>
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
@ -74,6 +75,8 @@ gboolean gnc_saved_reports_backup(void);
|
||||
|
||||
gboolean gnc_saved_reports_write_to_file(const gchar* report_def, gboolean overwrite);
|
||||
|
||||
gchar* gnc_date_interval_format (time64 from_date, time64 to_date);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} //extern "C"
|
||||
/**
|
||||
|
@ -42,3 +42,6 @@ gchar* gnc_get_default_report_font_family();
|
||||
|
||||
void gnc_saved_reports_backup (void);
|
||||
gboolean gnc_saved_reports_write_to_file (const gchar* report_def, gboolean overwrite);
|
||||
|
||||
%newobject gnc_date_interval_format;
|
||||
gchar* gnc_date_interval_format (time64 from_date, time64 to_date);
|
||||
|
@ -256,10 +256,7 @@
|
||||
chart (list
|
||||
report-title
|
||||
(string-append
|
||||
(format #f
|
||||
(G_ "~a to ~a")
|
||||
(qof-print-date from-date)
|
||||
(qof-print-date to-date))
|
||||
(gnc-date-interval-format from-date to-date)
|
||||
(if show-total?
|
||||
(let ((total (apply + daily-totals)))
|
||||
(format
|
||||
|
@ -510,10 +510,7 @@ balance at a given time"))
|
||||
chart (list report-title
|
||||
(string-append
|
||||
(if do-intervals?
|
||||
(format #f
|
||||
(G_ "~a to ~a")
|
||||
(qof-print-date from-date)
|
||||
(qof-print-date to-date))
|
||||
(gnc-date-interval-format from-date to-date)
|
||||
(format #f
|
||||
(G_ "Balance at ~a")
|
||||
(qof-print-date to-date)))
|
||||
|
@ -270,9 +270,7 @@ date point, a projected minimum balance including scheduled transactions."))
|
||||
(gnc:html-chart-set-type! chart 'line)
|
||||
;; Set the chart titles
|
||||
(gnc:html-chart-set-title!
|
||||
chart (list report-title
|
||||
(format #f (G_ "~a to ~a")
|
||||
(qof-print-date from-date) (qof-print-date to-date))))
|
||||
chart (list report-title (gnc-date-interval-format from-date to-date)))
|
||||
;; Set the chart size
|
||||
(gnc:html-chart-set-width! chart plot-width)
|
||||
(gnc:html-chart-set-height! chart plot-height)
|
||||
|
@ -859,8 +859,7 @@ also show overall period profit & loss."))
|
||||
(display report-title)
|
||||
(display " ")
|
||||
(if (or (not (eq? incr 'disabled)) (eq? report-type 'pnl))
|
||||
(format #t (G_ "~a to ~a")
|
||||
(qof-print-date startdate) (qof-print-date enddate))
|
||||
(gnc-date-interval-format startdate enddate)
|
||||
(display (qof-print-date enddate))))))
|
||||
|
||||
(if (eq? (get-option gnc:pagename-general optname-options-summary) 'always)
|
||||
|
@ -465,9 +465,9 @@
|
||||
((eq? (car column-list) 'total)
|
||||
(G_ "Total"))
|
||||
((list? (car column-list))
|
||||
(format #f (G_ "~a to ~a")
|
||||
(period-to-date-string (car (car column-list)))
|
||||
(period-to-date-string (last (car column-list)))))
|
||||
(gnc-date-interval-format
|
||||
(gnc-budget-get-period-start-date budget (car (car column-list)))
|
||||
(gnc-budget-get-period-start-date budget (last (car column-list)))))
|
||||
(else
|
||||
(period-to-date-string (car column-list)))))
|
||||
|
||||
|
@ -180,8 +180,7 @@
|
||||
doc (string-append
|
||||
(get-option gnc:pagename-general gnc:optname-reportname)
|
||||
" - "
|
||||
(format #f (G_ "~a to ~a")
|
||||
(qof-print-date from-date-t64) (qof-print-date to-date-t64))))
|
||||
(gnc-date-interval-format from-date-t64 to-date-t64)))
|
||||
|
||||
(if (not (null? accounts))
|
||||
|
||||
|
@ -254,11 +254,7 @@
|
||||
(gnc:report-percent-done 90)
|
||||
|
||||
(gnc:html-chart-set-title!
|
||||
chart (list report-title
|
||||
(format #f
|
||||
(G_ "~a to ~a")
|
||||
(qof-print-date from-date-t64)
|
||||
(qof-print-date to-date-t64))))
|
||||
chart (list report-title (gnc-date-interval-format from-date-t64 to-date-t64)))
|
||||
(gnc:html-chart-set-width! chart width)
|
||||
(gnc:html-chart-set-height! chart height)
|
||||
(gnc:html-chart-set-y-axis-label!
|
||||
|
@ -518,12 +518,8 @@ Please deselect the accounts with negative balances."))
|
||||
|
||||
(gnc:html-chart-set-title!
|
||||
chart (list report-title
|
||||
(format #f
|
||||
(if do-intervals?
|
||||
(G_ "~a to ~a")
|
||||
(G_ "Balances ~a to ~a"))
|
||||
(qof-print-date from-date-t64)
|
||||
(qof-print-date to-date-t64))))
|
||||
(format #f (if do-intervals? "~a" (G_ "Balances ~a"))
|
||||
(gnc-date-interval-format from-date-t64 to-date-t64))))
|
||||
|
||||
(gnc:html-chart-set-width! chart width)
|
||||
(gnc:html-chart-set-height! chart height)
|
||||
|
@ -1960,10 +1960,9 @@
|
||||
(gnc:html-document-set-title!
|
||||
document
|
||||
(format #f
|
||||
(G_ "~a, ~a to ~a")
|
||||
(G_ "~a, ~a")
|
||||
(get-option gnc:pagename-general gnc:optname-reportname)
|
||||
(qof-print-date from-date)
|
||||
(qof-print-date to-date)))
|
||||
(gnc-date-interval-format from-date to-date)))
|
||||
|
||||
(cond
|
||||
((not (null? accounts))
|
||||
@ -1986,11 +1985,7 @@
|
||||
(list colname-unrealized-gain))
|
||||
'()))))
|
||||
(gnc:html-chart-set-title! chart
|
||||
(list (N_ "Account Lot Gains")
|
||||
(format #f
|
||||
(G_ "~a to ~a")
|
||||
(qof-print-date from-date)
|
||||
(qof-print-date to-date))))
|
||||
(list (N_ "Account Lot Gains") (gnc-date-interval-format from-date to-date)))
|
||||
(gnc:html-chart-set-type! chart 'bar)
|
||||
(gnc:html-chart-set-width! chart chart-width)
|
||||
(gnc:html-chart-set-height! chart chart-height)
|
||||
|
@ -312,10 +312,7 @@
|
||||
(gnc:html-chart-set-width! chart width)
|
||||
(gnc:html-chart-set-height! chart height)
|
||||
(gnc:html-chart-set-title!
|
||||
chart (list report-title
|
||||
(format #f (G_ "~a to ~a")
|
||||
(qof-print-date from-date-t64)
|
||||
(qof-print-date to-date-t64))))
|
||||
chart (list report-title (gnc-date-interval-format from-date-t64 to-date-t64)))
|
||||
(gnc:html-chart-set-y-axis-label!
|
||||
chart (gnc-commodity-get-mnemonic report-currency))
|
||||
(gnc:html-chart-set-grid?! chart y-grid)
|
||||
|
@ -1128,8 +1128,8 @@ and do not match the transaction."))))))))
|
||||
|
||||
(gnc:html-document-add-object!
|
||||
document (gnc:make-html-text
|
||||
(string-append (G_ "Date Range") ": " (qof-print-date start-date)
|
||||
" - " (qof-print-date end-date))))
|
||||
(string-append (G_ "Date Range") ": "
|
||||
(gnc-date-interval-format start-date end-date))))
|
||||
|
||||
(make-break! document)
|
||||
|
||||
|
@ -182,10 +182,7 @@
|
||||
(string-append
|
||||
(gnc-commodity-get-mnemonic base-commodity)
|
||||
" - "
|
||||
(format #f
|
||||
(G_ "~a to ~a")
|
||||
(qof-print-date from-date)
|
||||
(qof-print-date to-date)))))
|
||||
(gnc-date-interval-format from-date to-date))))
|
||||
(gnc:html-chart-set-width! chart width)
|
||||
(gnc:html-chart-set-height! chart height)
|
||||
(gnc:html-chart-set! chart
|
||||
|
@ -183,7 +183,7 @@ Select a different subset of transactions, or increase the limit in the options.
|
||||
1 3 "total-label-cell"
|
||||
(gnc:make-html-text
|
||||
(G_ "Total For ")
|
||||
(format #f "~a to ~a" (qof-print-date from-date) (qof-print-date to-date))))
|
||||
(gnc-date-interval-format from-date to-date)))
|
||||
(map (lambda (acc total)
|
||||
(gnc:make-html-table-cell/markup
|
||||
"total-number-cell"
|
||||
|
@ -291,6 +291,12 @@ in the Options panel."))
|
||||
(define (split->time64 s)
|
||||
(xaccTransGetDate (xaccSplitGetParent s)))
|
||||
|
||||
|
||||
(define (date-get-week-year-string date)
|
||||
(let ((beginweekt64 (* (gnc:time64-get-week (gnc-mktime date)) 7 86400)))
|
||||
(gnc-date-interval-format (+ beginweekt64 (* 3 86400))
|
||||
(+ beginweekt64 (* 9 86400)))))
|
||||
|
||||
(define date-subtotal-list
|
||||
;; List for date option.
|
||||
;; Defines the different date sorting keys, as an association-list. Each entry:
|
||||
@ -316,7 +322,7 @@ in the Options panel."))
|
||||
(cons 'split-sortvalue (lambda (s) (time64-week (split->time64 s))))
|
||||
(cons 'date-sortvalue time64-week)
|
||||
(cons 'text (G_ "Weekly"))
|
||||
(cons 'renderer-fn (compose gnc:date-get-week-year-string
|
||||
(cons 'renderer-fn (compose date-get-week-year-string
|
||||
gnc-localtime
|
||||
split->time64)))
|
||||
|
||||
@ -2542,11 +2548,7 @@ be excluded from periodic reporting.")
|
||||
document
|
||||
(gnc:make-html-text
|
||||
(gnc:html-markup-h3
|
||||
(format #f
|
||||
;; Translators: Both ~a's are dates
|
||||
(G_ "From ~a to ~a")
|
||||
(qof-print-date begindate)
|
||||
(qof-print-date enddate)))))
|
||||
(gnc-date-interval-format begindate enddate))))
|
||||
|
||||
(when (eq? infobox-display 'always)
|
||||
(gnc:html-document-add-object!
|
||||
|
Loading…
Reference in New Issue
Block a user