In the invoices due dialog, the column 'Company' should show the name of the customer/vendor of an invoice/bill.
Currently the content is set to the owner name, but if a job is assigned to the invoice, that will show the job name.
This change changes the content to the name of the owner parent, which is always the customer/vendor name.
Setting CTEST_OUTPUT_ON_FAILURE will cause ctest to log all
output from failing tests (and only from failing tests).
This will reduce our ci output in case of failures as our
homebrew script 'afterfailure' would output all test logs
in case of failure not only the output of failed tests.
It depends on the business-reports module which is not available to
standard-reports at build time
Interestingly this only is an issue for the makefile generator
The ninja generator works fine
A reverse hash table is introduced in order to memorize the
matched GnuCash accounts before starting the matching wizard.
This hash table is used within the aai_on_finish callback
to delete only the KVPs of those GnuCash accounts which are
no longer matched with an AqBanking account.
All other GnuCash accounts (previously matched and currently
matched) are just updated with the new assignments.
Using the equality check introduced with the previous commit 2f38095
also for checking if a newly assigned GnuCash account has been
previously assigned to a different AqBanking account and
deleting the previous assignment to keep the matches unique.
Introducing a dedicated callback function to test two AqBanking accounts for equality and
an associated hash function returning the account unique id as hash value.
Add missing namespaces.
Replace type="guid" by type="new".
Add Placeholder slot to groups.
Remove redundant
'<act:commodity-scu>100</act:commodity-scu>' and
'<act:description>.*</act:description>'
<act:type> adjustments:
RECEIVABLE should only be used for invoices,
PAYABLE: "Verbindlichkeiten aus Lieferungen und Leistungen"
(at least one) EQUITY is required. Because we currently do not have
an account type PASSIVA, the node "Passiven" was replaced by a note in
<description> it's child accounts.
Use (ice-9 match) for easier matching for the variable
'path'. Explanation; consider the snippet
(cond
((null? path) ...A...)
((and (pair? (car path)) (number (caar path))) ...B...)
(else ...C...))
This snippet is a shorthand for nested if-then-else clauses, testing
'path' successfully to determine whether to evaluate A, B or C. Some
code will also use components of 'path' eg B uses (caar path).
Using Alex Shinn's match.scm library allows more concise matching and
assignment at the same time. The syntax is (match EXPR (CLAUSE BODY ...))
(define (try path)
(match path
(() (display "null"))
((((? number? idx)) . tail) (display "B") (display idx) (newline) (display tail))
((head . tail) (display "C") (display head) (newline) (display tail))))
A: the first match is easy -- if path is '() then evaluate the first
body.
(try '())
--> "null"
C: the third match is easy -- if path is a pair, then assign 'head' to
pair's car, 'tail' to the pair's cdr, and evaluate the body which has
access to head and tail. Note the head is a string, and the tail is a
list containing a single string.
(try '("this" "that"))
--> Cthis
(that)
B: the second match is more difficult -- let's consider the
broken-down clause: a pair, (HEAD . tail); where HEAD is a
single-element list (ELT), and ELT is a match conditional satisfying
number? and is also assigns the variable idx (? number? idx).
Example:
(try '((2) "two"))
--> B2
(two)
This means the match is successful when 'path' is a pair, the pair's
car is a single-element list, and the list's sole element is a
number. The latter is bound to the variable 'idx' which is accessible
in the body. The variable 'tail' contains the path's cdr which
contains a single string.
Note: later in same commit we also use the identifier _ to denote
elements which *must* be matched, but are *not* bound to any variable.
e.g. the clause (((? out-of-bound?)) . _) means that path is a pair,
whose car is a single-element list, and the element satisfies the
predicate out-of-bound?. We don't need to use the (cdr path) therefore
we use _ as a placeholder.
This fix prevents empty strings as tokens and removes duplicated tokens.
Function tokenize_string() is used for bayesian import matching, where
empty token strings or duplicated tokens lead to wrong results within
probability calculation for matching of a transaction to an account.
Empty token strings can occur if (see function g_strsplit())
* two or more spaces occur directly after another
* the string begins or ends with spaces
Instead of retrieving the preference 'use red for negative numbers'
every time the budget cells are updated/refreshed which could be many
times retrieve it on create and store it in GncBudgetView and set up a
preference call back to track the value.
To make it easier to change the hidden property on multiple accounts,
a new column can be added to the CoA to toggle the account hidden
property. This only makes sense if the 'View->Filter By...' other tab
has been accessed to enable showing of hidden accounts first.
This fixes an error message 'page_changed is invalid for instance of
type GncEmbeddedWindow' when you double click on the selected schedule
in the sx editor.
The reports page uses a g_idle_add against the plugin_page to load the
report once the container for the report is realized. With the changes
to the page focus functions, the use of g_idle_remove_by_data removed
this idle function so no report. Change the page focus functions to
record the id used and then use this id to remove the page focus idle
function.
If you create a new budget and do not change any thing when closing the
budget or quitting with new budget open the state information for that
budget is saved but the budget is not. To fix this make a change to the
new budget description to force the save of the new budget.