The BIC code for SEPA transfer used to be mandantory, but turned optional
more recently and the local IBAN code is sufficient. Gnucash still
checked the local BIC code existence and forced the user to get it
from somewhere. This is no longer needed - local IBAN is enough.
The visibility of the entered content was set to FALSE (=invisible) always,
which was wrong for certain types of input as indicated by the GUI_INPUT_FLAGS.
This should now be honored and visibility set to TRUE (=visible) for
the correct flags.
797029 Import Customer & Vendors: blank name and company in import data row crashes GnuCash
797031 Import customer & Vendors: import can create customer and vendors without address data
797030 Import Customer & Vendors: several issues with the matching of data rows
We can't use std::locale::global because all streams imbue it by
default and if it's not 'C' (aka std::locale::classic) then we
must imbue all the streams that we don't want localized, and that's
most of them.
Provides error checking for setting the C++ locale from the environment.
This is necessary both because the environment might have an invalid
locale, which would cause an unhandled exception crash.
On windows std::locale("") can't handle some Microsoft-style locale
strings (e.g. Spanish_Spain) so we use boost::locale's gen("") function
to set the locale--though even that can't handle a Microsoft-style
locale string with an appended charset (e.g. Spanish_Spain.1252) and
that's what glibc's setlocale(LC_ALL, NULL) emits.
Testing notes: Based on the averages of 3 runs, the net
user CPU to save the XML file I use is:
10.2 seconds without this change
7.6 seconds with this change
In my environment the first call to the format routine
in question, the call that sets the cache value, is at
the end of the XML load.
The refactoring provides roughly 10% reduction in user CPU
use for XML file load by moving an expensive function
to within an if-clause where the result is used. The diff looks
like a full re-write but only the if statements, indenting,
and commentary changed.
This gives a significant speed-up when selecting multiple lines for deletion.
Otherwise the full GUI refresh would be run for each single selected
line, which sucks if the accounts and register windows contain a lot
of txns. Better do that once after we are finished with all line deletions.
This value is queried on each comparison of split or txn sort function,
which means it is called quite a lot. Avoiding the KVP lookup of this
property gains a lot in terms of CPU cycles.