mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 763111 - commodities prices editor creates hidden db entries
There were two problems: First, if there were multiple prices in the database for a particular day only one would be displayed. Second, if one manually created a second price on a day in the price editor the first wouldn't be removed.
This commit is contained in:
parent
5b40df510d
commit
2b95816125
@ -1001,18 +1001,6 @@ gnc_pricedb_equal (GNCPriceDB *db1, GNCPriceDB *db2)
|
|||||||
return equal_data.equal;
|
return equal_data.equal;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
insert_or_replace_price(GNCPriceDB *db, GNCPrice *p)
|
|
||||||
{
|
|
||||||
GNCPrice *old_price = gnc_pricedb_lookup_day (db, p->commodity,
|
|
||||||
p->currency, p->tmspec);
|
|
||||||
if (old_price == NULL)
|
|
||||||
return TRUE;
|
|
||||||
if (p->source < old_price->source)
|
|
||||||
return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
}
|
|
||||||
/* ==================================================================== */
|
/* ==================================================================== */
|
||||||
/* The add_price() function is a utility that only manages the
|
/* The add_price() function is a utility that only manages the
|
||||||
* dual hash table instertion */
|
* dual hash table instertion */
|
||||||
@ -1026,6 +1014,7 @@ add_price(GNCPriceDB *db, GNCPrice *p)
|
|||||||
gnc_commodity *commodity;
|
gnc_commodity *commodity;
|
||||||
gnc_commodity *currency;
|
gnc_commodity *currency;
|
||||||
GHashTable *currency_hash;
|
GHashTable *currency_hash;
|
||||||
|
GNCPrice *old_price;
|
||||||
|
|
||||||
if (!db || !p) return FALSE;
|
if (!db || !p) return FALSE;
|
||||||
ENTER ("db=%p, pr=%p dirty=%d destroying=%d",
|
ENTER ("db=%p, pr=%p dirty=%d destroying=%d",
|
||||||
@ -1072,19 +1061,32 @@ add_price(GNCPriceDB *db, GNCPrice *p)
|
|||||||
LEAVE ("gnc_price_list_insert failed");
|
LEAVE ("gnc_price_list_insert failed");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!price_list)
|
if (!price_list)
|
||||||
{
|
{
|
||||||
LEAVE (" no price list");
|
LEAVE (" no price list");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!insert_or_replace_price(db, p))
|
/* Check for an existing price on the same day. If there is no existing price,
|
||||||
|
* add this one. If this price is of equal or better precedence than the old
|
||||||
|
* one, copy this one over the old one.
|
||||||
|
*/
|
||||||
|
old_price = gnc_pricedb_lookup_day (db, p->commodity, p->currency,
|
||||||
|
p->tmspec);
|
||||||
|
if (!db->bulk_update && old_price != NULL)
|
||||||
{
|
{
|
||||||
LEAVE("A better price already exists");
|
if (p->source > old_price->source)
|
||||||
return FALSE;
|
{
|
||||||
|
gnc_price_unref(p);
|
||||||
|
LEAVE ("Better price already in DB.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
gnc_pricedb_remove_price(db, old_price);
|
||||||
}
|
}
|
||||||
g_hash_table_insert(currency_hash, currency, price_list);
|
g_hash_table_insert(currency_hash, currency, price_list);
|
||||||
p->db = db;
|
p->db = db;
|
||||||
|
|
||||||
qof_event_gen (&p->inst, QOF_EVENT_ADD, NULL);
|
qof_event_gen (&p->inst, QOF_EVENT_ADD, NULL);
|
||||||
|
|
||||||
LEAVE ("db=%p, pr=%p dirty=%d dextroying=%d commodity=%s/%s currency_hash=%p",
|
LEAVE ("db=%p, pr=%p dirty=%d dextroying=%d commodity=%s/%s currency_hash=%p",
|
||||||
|
Loading…
Reference in New Issue
Block a user