r22664 - gnucash/trunk/src/gnome-utils - Another but in r22646, still getting the existing price check wrong.
Mike Alexander
mta at code.gnucash.org
Tue Dec 18 01:07:47 EST 2012
Author: mta
Date: 2012-12-18 01:07:46 -0500 (Tue, 18 Dec 2012)
New Revision: 22664
Trac: http://svn.gnucash.org/trac/changeset/22664
Modified:
gnucash/trunk/src/gnome-utils/dialog-transfer.c
Log:
Another but in r22646, still getting the existing price check wrong.
It's a long-standing rule that I don't do numbers well. Third time's
a charm, I hope.
Modified: gnucash/trunk/src/gnome-utils/dialog-transfer.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-transfer.c 2012-12-17 13:51:32 UTC (rev 22663)
+++ gnucash/trunk/src/gnome-utils/dialog-transfer.c 2012-12-18 06:07:46 UTC (rev 22664)
@@ -1542,6 +1542,7 @@
!(gnc_is_euro_currency (from) && gnc_is_euro_currency (to)))
{
GNCPrice *price;
+ gnc_numeric price_value;
gnc_numeric value;
gnc_commodity *tmp;
gnc_numeric from_amt, to_amt;
@@ -1575,41 +1576,39 @@
price = gnc_pricedb_lookup_day (xferData->pricedb, from, to, ts);
if (price)
{
- gnc_numeric price_value = gnc_price_get_value(price);
- if (!gnc_numeric_equal (gnc_numeric_mul (from_amt, price_value,
- GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE),
- to_amt))
- {
- gnc_price_unref (price);
- price = NULL;
- }
- if (price)
- PINFO("Found price for %s in %s", gnc_commodity_get_mnemonic(from),
- gnc_commodity_get_mnemonic(to));
+ price_value = gnc_price_get_value(price);
}
else
{
price = gnc_pricedb_lookup_day (xferData->pricedb, to, from, ts);
if (price)
{
- gnc_numeric price_value = gnc_numeric_div (gnc_numeric_create(1, 1),
- gnc_price_get_value(price),
- GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
- if (!gnc_numeric_equal (gnc_numeric_mul (from_amt, price_value,
- GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE),
- to_amt))
- {
- gnc_price_unref (price);
- price = NULL;
- }
- if (price)
- PINFO("Found reverse price for %s in %s", gnc_commodity_get_mnemonic(to),
- gnc_commodity_get_mnemonic(from));
+ price_value = gnc_numeric_div (gnc_numeric_create(1, 1),
+ gnc_price_get_value(price),
+ GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
}
}
+
+ /* See if we found a good enough price */
+ if (price)
+ {
+ int scu = gnc_commodity_get_fraction (to);
+ if (!gnc_numeric_equal (gnc_numeric_mul (from_amt, price_value,
+ scu, GNC_HOW_RND_ROUND_HALF_UP),
+ to_amt))
+ {
+ gnc_price_unref (price);
+ price = NULL;
+ }
+ }
- if (!price)
+ if (price)
{
+ PINFO("Found price for %s in %s", gnc_commodity_get_mnemonic(from),
+ gnc_commodity_get_mnemonic(to));
+ }
+ else
+ {
price = gnc_price_create (xferData->book);
gnc_price_begin_edit (price);
gnc_price_set_commodity (price, from);
More information about the gnucash-changes
mailing list