r22660 - gnucash/trunk/src/gnome-utils - Fix a bug in r22646: incorrect test for equivalent price already in price DB
Mike Alexander
mta at code.gnucash.org
Mon Dec 17 00:35:34 EST 2012
Author: mta
Date: 2012-12-17 00:35:34 -0500 (Mon, 17 Dec 2012)
New Revision: 22660
Trac: http://svn.gnucash.org/trac/changeset/22660
Modified:
gnucash/trunk/src/gnome-utils/dialog-transfer.c
Log:
Fix a bug in r22646: incorrect test for equivalent price already in price DB
Modified: gnucash/trunk/src/gnome-utils/dialog-transfer.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-transfer.c 2012-12-17 05:35:27 UTC (rev 22659)
+++ gnucash/trunk/src/gnome-utils/dialog-transfer.c 2012-12-17 05:35:34 UTC (rev 22660)
@@ -1544,28 +1544,29 @@
GNCPrice *price;
gnc_numeric value;
gnc_commodity *tmp;
+ gnc_numeric from_amt, to_amt;
+ gnc_numeric tmp_amt;
+ from_amt = gnc_amount_edit_get_amount(GNC_AMOUNT_EDIT(xferData->amount_edit));
+ to_amt = gnc_amount_edit_get_amount(GNC_AMOUNT_EDIT(xferData->to_amount_edit));
+
/* compute the price -- maybe we need to swap? */
- value = gnc_xfer_dialog_compute_price(xferData);
+ value = gnc_numeric_div(to_amt, from_amt, GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
value = gnc_numeric_abs (value);
/* Try to be consistent about how quotes are installed. */
- if (from == gnc_default_currency())
- {
- tmp = from;
- from = to;
- to = tmp;
- value = gnc_numeric_div (gnc_numeric_create(1, 1), value,
- GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
- }
- else if ((to != gnc_default_currency()) &&
+ if (from == gnc_default_currency() ||
+ ((to != gnc_default_currency()) &&
(strcmp (gnc_commodity_get_mnemonic(from),
- gnc_commodity_get_mnemonic(to)) < 0))
+ gnc_commodity_get_mnemonic(to)) < 0)))
{
tmp = from;
from = to;
to = tmp;
+ tmp_amt = from_amt;
+ from_amt = to_amt;
+ to_amt = tmp_amt;
value = gnc_numeric_div (gnc_numeric_create(1, 1), value,
GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
}
@@ -1575,10 +1576,9 @@
if (price)
{
gnc_numeric price_value = gnc_price_get_value(price);
- if (!gnc_numeric_same (value, price_value,
- MIN(gnc_numeric_denom(value),
- gnc_numeric_denom(price_value)),
- GNC_HOW_RND_ROUND_HALF_UP))
+ 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;
@@ -1595,10 +1595,9 @@
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_same (value, price_value,
- MIN(gnc_numeric_denom(value),
- gnc_numeric_denom(price_value)),
- GNC_HOW_RND_ROUND_HALF_UP))
+ 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;
More information about the gnucash-changes
mailing list