From 5e609dac0d2b4c1a7ec59dfff675c620fb734a95 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Sun, 23 Aug 2015 11:44:24 +0100 Subject: [PATCH] Check for an existing price before adding one in split_reg. To make the behavior the same as in xfer_dialog. --- src/register/ledger-core/split-register.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/register/ledger-core/split-register.c b/src/register/ledger-core/split-register.c index fc4f5873b6..119a4593bc 100644 --- a/src/register/ledger-core/split-register.c +++ b/src/register/ledger-core/split-register.c @@ -2051,8 +2051,9 @@ record_price (SplitRegister *reg, Account *account, gnc_numeric value) gnc_commodity *comm = xaccAccountGetCommodity (account); gnc_commodity *curr = xaccTransGetCurrency (trans); GNCPrice *price; + gnc_numeric price_value; Timespec ts; - BasicCell *cell; + BasicCell *cell = gnc_table_layout_get_cell (reg->table->layout, DATE_CELL); /* Only record the price for account types that don't have a * "rate" cell. They'll get handled later by @@ -2060,8 +2061,26 @@ record_price (SplitRegister *reg, Account *account, gnc_numeric value) */ if (gnc_split_reg_has_rate_cell (reg->type)) return; - cell = gnc_table_layout_get_cell (reg->table->layout, DATE_CELL); gnc_date_cell_get_date ((DateCell*)cell, &ts); + price = gnc_pricedb_lookup_day (pricedb, comm, curr, ts); + if (price) + { + price_value = gnc_price_get_value(price); + } + else + { + price = gnc_pricedb_lookup_day (pricedb, curr, comm, ts); + if (price) + { + price_value = gnc_numeric_div (gnc_numeric_create(1, 1), + gnc_price_get_value(price), + GNC_DENOM_AUTO, + GNC_HOW_DENOM_REDUCE); + } + } + + if (price && gnc_numeric_equal(value, price_value)) + return; price = gnc_price_create (book); gnc_price_begin_edit (price); gnc_price_set_commodity (price, comm);