Commit Graph

21806 Commits

Author SHA1 Message Date
Christopher Lam
b5f9cd0b32 [budgets.scm] budget reports handle both natural & reversed budgets 2019-12-05 17:26:46 +08:00
Christopher Lam
775200ef34 [gnc-budget-view.c] totals - 5 fundamental types
previous showed income/expense/transfers/totals budget totals, of
uncertain meaning. now shows income/expense/asset/liability/equity
budget totals.

the 5 lines also become sensitive to global sign-reverses property
2019-12-05 17:26:46 +08:00
Christopher Lam
2cd69e8d85 [budgets.c] handle both natural & reversed signs budgets
introduce new API
* gnc_using_unreversed_budgets - queries book's unreversed feature
* gnc_reverse_budget_balance - check if book unreversal status matches
  2nd argument. if so, return account's reversal status. else, return
  FALSE.

* gnome-budget-view can now show both natural and reversed budgets
* gnome-plugin-page-budget will now read&write both natural and
  reversed budgets.
2019-12-05 17:26:46 +08:00
Christopher Lam
ded336f987 [gnc-features] enable reading of unreversed budgets 2019-12-05 17:26:46 +08:00
Christopher Lam
c06191a656 Transaction.c: avoid slow g_list_nth_data 2019-12-05 13:06:11 +08:00
Christopher Lam
1c64385614 base-typemaps: avoid slow g_list_nth_data
scan GList via glist pointer links rather than incrementing index.
2019-12-05 10:17:12 +08:00
Christopher Lam
7833c59896 Bug 724219 - Customer Summary includes Closing Entries when reporting across the end of year 2019-12-02 22:20:17 +08:00
Christopher Lam
7ad4c4afbd [html-acct-table] compact gnc:html-acct-table-get-cell 2019-12-02 22:20:17 +08:00
Christopher Lam
8bf54ebfc1 [html-acct-table] compact traverse-accounts!
* convert for-each to named-let
* allows reduction of set! calls
2019-12-02 22:20:17 +08:00
Christopher Lam
ab20071d82 [report-utilities] strify hash-table to Hash(kvp-list)
Hash tables are strified to "Hash()" "Hash(key=value,...)"
2019-12-02 18:20:02 +08:00
Christopher Lam
2333b6db27 [reports] avoid "<br/>" literal: use gnc:multiline-to-html-text 2019-12-02 16:48:05 +08:00
Christopher Lam
3ee434edf6 [new-aging] use gnc:html-markup-ol 2019-12-02 00:32:02 +08:00
Christopher Lam
4aa17ef65b [html-text][API] gnc:html-markup-ol, gnc:multiline-to-html-text
* (gnc:html-markup-ol lst)

  creates an ordered list

* gnc:multiline-to-html-text: creates html-text with <br/> elements

  "line1\nline2\nline3" ->
  (gnc:make-html-text "line1" (gnc:html-markup-br)
                      "line2" (gnc:html-markup-br)
                      "line3")
2019-12-02 00:32:02 +08:00
Christopher Lam
a52d60f48e [business-reports] compact gnc:owner-report-text 2019-12-02 00:32:02 +08:00
Geert Janssens
df1f033f41 bindings-python - drop references to gnucash-env
We no longer ship a gnucash-env script, directly use python(3) instead
2019-11-30 13:20:08 +01:00
Christopher Lam
0b11a073f0 Merge branch 'maint' of git://github.com/andrey-legayev/gnucash into maint 2019-11-30 16:34:48 +08:00
Christopher Lam
c21bb66d68 [balsheet-pnl] refactor common account-balance-list adder
* use fold, more efficient, removes the need for intermediate list

  (map cdr (filter filter-fn accounts-balances)): filter will create 1
  intermediate list, which is passed as an argument to map which
  creates the final list. using fold will remove the need for
  intermediate list.

* list->vector for O(1) access
2019-11-30 16:34:28 +08:00
Christopher Lam
def0caa011 [balsheet-pnl] use and-let*, reindent 2019-11-30 16:34:17 +08:00
Christopher Lam
e97b78df80 [balsheet-pnl] fix: single-date balsheet missed printing date 2019-11-30 16:34:17 +08:00
Christopher Lam
54c4575f27 [balsheet-pnl] fix: hide Equity sections when not needed
* If currencies are not converted, Unrealized Gains are
meaningless. Hide them.

* If there are no income/expense accounts, retained earnings will be
nil. Remove row.
2019-11-30 16:34:06 +08:00
Andrey Legayev
34c14b44a9
Remove not needed semicolons in Python bindings 2019-11-29 18:32:50 +02:00
John Ralls
7853f5a24a Ignore trailing noise on imported transaction account numbers.
AQBanking6 uses a separate method for retrieving account numbers
for account info and transactions, where the transactions method can
have additional characters, most often the ISO4217 currency code. That
results in match failures when importing.

As a work-around, compare only the length of the account-info-generated
online id when comparing it to the transaction-generated one.

Note that this is only a partial solution: At least one German bank
also appends characters to the transaction-generated bank id and that
will still cause the match to fail.
2019-11-28 09:17:59 -08:00
Christopher Lam
1af8e272c7 [balsheet-pnl] unrealized-gain calculator is now much faster.
Previous code would call gnc:account-get-comm-value-at-date for each
report-date; this function generates qof-query, retrieves account
splits, scans them to accumulate split->transaction->currency and
split->value into a commodity collector.

This commit will hook into the existing gnc:account-accumulate
function, accumulating the same split->transaction->currency and
split->value into a collector.

Note we must make a copy of the accumulator at each report-date
via (gnc:collector+ val-coll) otherwise the same val-coll will be
mutated through subsequent splits.

For a multicolumn balsheet, for every account with N old splits, and
reporting on M report dates, it would run in O(N*M) time. This
algorithm will hook into existing accumulator, i.e. I think O(1).

The majority speed-up however comes from avoiding M qof-queries per
report.
2019-11-26 21:52:10 +08:00
Christopher Lam
ff298b365f [test-balsheet-pnl] add multicol-balsheet and multicol-pnl tests
This commit adds tests for multicolumn balance-sheet and
income-statement. It mainly tests:

* multiple periods
* unrealized gains calculators
* amounts/balances are predictable
2019-11-26 20:51:35 +08:00
Christopher Lam
88644451ef [test-balsheet-pnl] separate balance-sheet and pnl tests
This is in preparation for balsheet-pnl tests. Note all tests use same
data -- there's no (teardown).
2019-11-26 20:51:20 +08:00
Christopher Lam
119fdc368b [report-utilities] can strify records
srfi-9 records can contain complex objects eg lists/vectors also
gnc:monetary or gnc:html-table objects. previously gnc:strify would
use the default printer; this commit modifies so that they are
prettified.

example output; a :col-datum record from balsheet-pnl. the record's
split-balance contains a $0 monetary object.

Rec::col-datum{last-split=#f, split-balance=[$0.00]}

this last pretty-printer must be the last one before object->string,
because we want previous printers which may be records too
eg. monetary->str etc to use their own printer.
2019-11-26 20:51:02 +08:00
Christopher Lam
0973d54d6c [report-utilities] make gnc:owner-splits->aging-list less noisy
invoice processing messages dumped in debug mode. use gnc:msg
2019-11-25 18:35:26 +08:00
Christopher Lam
9adf8db1a2 [report-utilities] gnc:strify can render vectors too 2019-11-25 18:28:58 +08:00
Christopher Lam
aa451bc89d [balsheet-pnl] compact functions
readability fixes
2019-11-25 18:28:58 +08:00
Christopher Lam
d6a5c8ba54 [balsheet-pnl] accumulate column data report-dates
Previous would call gnc:account-get-balances-at-dates and
gnc:account-accumulate-at-dates to retrieve balances and
last-split. This commit reduces the O(2*N) operation to O(N) which
becomes significant with accounts with large number of splits.

Maybe we can reduce other account splitlist scans in the future; these
will be easier and would only require augmenting the record.
2019-11-25 18:28:58 +08:00
Frank H. Ellenberger
a261c8aadb Merge branch 'emacs' into maint 2019-11-25 07:14:05 +01:00
Frank H. Ellenberger
91183a2af5 drop emacs_trailer from xml files.
Modern versions of emacs know, how to behave on xml files.
2019-11-25 00:42:40 +01:00
Christopher Lam
e83f5b0568 Bug 797506 - New Aging errors out with guile backtrace in case of a few uncommon transactions
Some invalid txns with splits in the wrong APAR account can be
processed, creating cases whereby split->owner returns an invalid
freshly-allocated owner.
2019-11-24 23:09:55 +08:00
Christopher Lam
287b857a18 [html-style-info] deprecate font-face/size/color
Only 'font-color was demonstrated in hello-world.scm, and these were
never used in practice.
2019-11-23 22:55:14 +08:00
Christopher Lam
729bf5ae6a [hello-world] remove 'Text Color' option - will be deprecated
... because deleting an option does not cause crash in saved-reports.
2019-11-23 22:55:14 +08:00
Christopher Lam
101cc91698 [reports] use new api gnc:account-accumulate-at-dates
queries xaccSplitGetNoclosingBalance (which is a pointer dereference)
instead of a more complex conditional-based snippet for split->amount,
should be faster.

The category-barchart change will choose the appropriate split->elt
function according to the account type. This is more efficient than
the old split->amount function which includes a conditional.

Note we don't need to test for account being income/expense:
asset/liability accounts do not have Closing transactions. Therefore
we can use xaccSplitGetNoclosingBalance for splits from any account
type.
2019-11-23 22:55:14 +08:00
Christopher Lam
68b0abdfa6 [report-utilities] gnc:account-accumulate-at-dates: specify default elt
if acc has no splits before report-date, the nosplit->elt will specify
the default value to be inserted in the result list.

e.g. consider:

dates are (date1 date2 date3 date4 date5)
account has splits starting after date2:

(gnc:account-accumulate-at-dates account dates
 #:split->elt (const 'yea) #:nosplit->elt 'nay)

results in '(nay nay yea yea yea)
2019-11-23 22:55:14 +08:00
Robert Fewell
17d3938866 [I18N] Remove trailing colon and space from source file dialogue labels 2019-11-22 13:36:03 +00:00
Robert Fewell
5586ccaa5f [I18N] Remove trailing colon and space from glade dialogue labels - part2 2019-11-22 13:36:03 +00:00
Robert Fewell
6897f13e78 [I18N] Remove trailing colon and space from glade dialogue labels - part1 2019-11-22 13:36:03 +00:00
Christopher Lam
063a270499 [new-owner-report] fix: payment->invoice gets invoice totals
previously the payment-amount deduction loop used the
payment-split-list to obtain the invoice-posting-split's amount. this
would occasionally fail and would return the invoice-payment-split
amount, obtaining the wrong sign.

modify to retrieve the invoice total via gncInvoice API.

therefore payment-amount, minus gncInvoiceGetTotal(inv) amounts,
results in the overpayment amount.
2019-11-21 20:44:29 +08:00
Christopher Lam
b3493509d1 [balsheet-pnl] speed up by pre-generating account report-date splits
previous code was very inefficient: if an account had N old splits and
balance-sheet reported on M recent dates, it would scan splitlist
multiple times: (1) to retrieve splits, (2) filter until
column-date, (3) find the last one. i.e. total O(N * M * 3).

this algorithm pre-generates the account's report-date splits by
scanning each account only once, creating M splits which are queried
by get-cell-anchor-fn via list-ref. i.e. O(N)

it is immedialtely converted to a vector because we want O(1)
access. from get-cell-anchor-fn

a future optimisation may scan the accounts' splitlists once per
report run, acquiring all required data (i.e. last period split,
split->balance, closing entries) in 1 pass, to generate a column-data
record.
2019-11-21 20:11:49 +08:00
Christopher Lam
dda3da8416 [report-utilities][API] gnc:account-accumulate-at-dates
this is a generalised form from gnc:account-get-balances-at-dates to
accumulate a list from report dates.

this function will scan through account splitlist, processing each
split via split->elt, accumulating results at date boundaries into the
results list. it uses ice-9 match for conciseness.

in: acc   - account
    dates - a list of time64
    split->elt - an unary lambda. the result of calling (split->elt split)
                 will be accumulated onto the resulting list. by
                 default it returns the last split-balance before
                 date boundary, similar to gnc:account-get-balances-at-dates

out: (list elt0 elt1 ...), each entry is the result of split->elt
2019-11-21 19:54:18 +08:00
Christopher Lam
f0a189adbb [test-report-utilities] add test-get-account-at-dates 2019-11-21 19:54:14 +08:00
Christopher Lam
2671814251 [balsheet-pnl] income statement parent account can link to TR
this commit modifies the recursive-parent subtotal generator to also
include a link to a transaction report with all relevant accounts.
2019-11-20 21:31:51 +08:00
Christopher Lam
1ab95b5563 [invoice][i18n] enable i18n options helptext
and remove obsolete options "My Company" and "My Company ID"
2019-11-20 21:31:40 +08:00
Christopher Lam
eea5ac98c0 [stylesheet-plain][html5] omit <h3></h3> when headline is empty.
We compare headline with "", rather than test (string-null? headline),
because headline may be either a string or a complex gnc:html-text
object.
2019-11-19 19:35:05 +08:00
Christopher Lam
9bb2e4a21a [html-fonts][html5] add html,body height 100vh
This CSS rule allows children elements (such as <canvas>) to inherit
100% viewport height for displaying full-screen charts. This is
necessary for standards-mode.

https://quirks.spec.whatwg.org/#the-html-element-fills-the-viewport-quirk
2019-11-19 19:34:56 +08:00
Christopher Lam
fbc7c9027e [scm/utilities] even more efficient list-flatten functions
because:

* list? is O(N), because it needs to test for an improper
list. improper lists are lists whose last pair's cdr cell is not
'(). null? and pair? are both O(1).

* avoids reverse which is also O(N): guile has unlimited stack
therefore we can do non-tail-call loop first to pass as parameter to
the tail-call loop. this removes the need for prepend-and-reverse.
2019-11-19 19:28:27 +08:00
Robert Fewell
043abcb436 Reformat the gnc_cell_renderer_date* source files
Change tabs to spaces and fix some spaces issues in the source files.
2019-11-18 16:18:27 +00:00