Bug 357784

Summary: Buying investments not always displaying correct investment sum
Product: [Applications] kmymoney Reporter: T.B. <hummerfisch>
Component: generalAssignee: KMyMoney Devel Mailing List <kmymoney-devel>
Status: RESOLVED FIXED    
Severity: minor CC: dbyy
Priority: NOR    
Version: 4.7.1   
Target Milestone: ---   
Platform: Microsoft Windows   
OS: Microsoft Windows   
URL: https://picload.org/image/wrpgill/investmentfractionimpactonpric.png
Latest Commit: Version Fixed In: 5.0.0
Sentry Crash Report:

Description T.B. 2016-01-10 11:02:07 UTC
The displayed sum of investments being bought or saled may be subject to a rounding error depending on the fraction setup of the investment.

The sum of money involved is rounded according to the fraction setting of the investment, which is wrong. While investments may be subject to fractions, the price for the investment needs financial rounding according to the currency of the price, what are usually 2 digits to display Cent values.

Reproducible: Always

Steps to Reproduce:
1. Create or edit any investment. Let it have a fraction value of 1 / 1
2. In your stocks account, buy 11 pieces of that investment having a price of 12,34 € (currency does not matter).
3. review the sum price of the investment

Actual Results:  
The sum is being reported as 136 € without any digits. 

Expected Results:  
The correct sum would be 135,74 €

If the behaviour is as desired, at least the german help information is wrong. It qotes "Stückelung: Die Genauigkeit, mit der Ihr Aktienbesitz gemessen wird.  [...]  Aktien werden oft nur in ganzen Einheiten gerechnet. Für eine solche Aktie muss der Wert „1“ eingegeben werden." 
The suggested fraction for stocks is 1 and there is no mention of an impact of the displayed investment sum. Once stored, the investment sum is displayed correctly, it is an annoying effect during entering the transaction.
Comment 1 wojnilowicz 2017-04-01 06:19:11 UTC
Git commit c6e31c96a03ad5a7ec5e3695bbfa8336181ab81c by Łukasz Wojniłowicz.
Committed on 01/04/2017 at 06:16.
Pushed by wojnilowicz into branch 'master'.

Fix rounding problem with investments

Patch introduces rounding rules per security for fixing bug #372163. It
seems that this broker always rounds amounts down while my broker rounds
amounts depending on the outlying digit, so it couldn't work for both of
us without rules.

Rounding is done in InvestTransactionEditor because it has all needed
informations at hand.

No rounding of shares is done in InvestTransactionEditor::setupPrice.
Transaction from bug #372163 looks as follows:
brokerage:
shares = 1,009 ; value = 1,009
investment:
shares = -1 ; value = 1,009

InvestTransactionEditor::setupPrice causes brokerage to look as follows:
shares = 1,01 ; value = 1,009
As we can see shares and value diverge, which is unacceptable here.

Patch makes assumption that transaction has only single split of
stock/mutual fund/bond.
Related: bug 345655, bug 365177, bug 372163
FIXED-IN:5.0

Differential Revision: https://phabricator.kde.org/D5187

Signed-off-by: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>

M  +32   -15   kmymoney/dialogs/investtransactioneditor.cpp
M  +31   -0    kmymoney/kmymoneyutils.cpp
M  +22   -0    kmymoney/kmymoneyutils.h
M  +39   -0    kmymoney/mymoney/mymoneysecurity.cpp
M  +27   -8    kmymoney/mymoney/mymoneysecurity.h
M  +1    -0    kmymoney/mymoney/storage/mymoneydbdef.cpp
M  +3    -0    kmymoney/mymoney/storage/mymoneystoragesql.cpp
M  +4    -3    kmymoney/widgets/transaction.cpp
M  +11   -0    kmymoney/wizards/newinvestmentwizard/kinvestmentdetailswizardpage.cpp
M  +104  -90   kmymoney/wizards/newinvestmentwizard/kinvestmentdetailswizardpagedecl.ui
M  +2    -0    kmymoney/wizards/newinvestmentwizard/knewinvestmentwizard.cpp

https://commits.kde.org/kmymoney/c6e31c96a03ad5a7ec5e3695bbfa8336181ab81c