39 #define GNC_TYPE_PRICE (gnc_price_get_type ()) 40 #define GNC_PRICE(o) \ 41 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_PRICE, GNCPrice)) 42 #define GNC_PRICE_CLASS(k) \ 43 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_PRICE, GNCPriceClass)) 44 #define GNC_IS_PRICE(o) \ 45 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_PRICE)) 46 #define GNC_IS_PRICE_CLASS(k) \ 47 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_PRICE)) 48 #define GNC_PRICE_GET_CLASS(o) \ 49 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_PRICE, GNCPriceClass)) 50 GType gnc_price_get_type(
void);
53 #define GNC_TYPE_PRICEDB (gnc_pricedb_get_type ()) 54 #define GNC_PRICEDB(o) \ 55 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_PRICEDB, GNCPriceDB)) 56 #define GNC_PRICEDB_CLASS(k) \ 57 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_PRICEDB, GNCPriceDBClass)) 58 #define GNC_IS_PRICEDB(o) \ 59 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_PRICEDB)) 60 #define GNC_IS_PRICEDB_CLASS(k) \ 61 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_PRICEDB)) 62 #define GNC_PRICEDB_GET_CLASS(o) \ 63 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_PRICEDB, GNCPriceDBClass)) 64 GType gnc_pricedb_get_type(
void);
162 typedef GList PriceList;
171 PRICE_SOURCE_EDIT_DLG,
173 PRICE_SOURCE_USER_PRICE,
174 PRICE_SOURCE_XFER_DLG_VAL,
175 PRICE_SOURCE_SPLIT_REG,
176 PRICE_SOURCE_SPLIT_IMPORT,
177 PRICE_SOURCE_STOCK_SPLIT,
178 PRICE_SOURCE_STOCK_TRANSACTION,
179 PRICE_SOURCE_INVOICE,
181 PRICE_SOURCE_INVALID,
184 #define PRICE_TYPE_LAST "last" 185 #define PRICE_TYPE_UNK "unknown" 186 #define PRICE_TYPE_TRN "transaction" 238 void gnc_price_begin_edit (GNCPrice *p);
239 void gnc_price_commit_edit (GNCPrice *p);
241 void gnc_price_set_commodity(GNCPrice *p, gnc_commodity *c);
242 void gnc_price_set_currency(GNCPrice *p, gnc_commodity *c);
243 void gnc_price_set_time64(GNCPrice *p,
time64 t);
244 void gnc_price_set_source(GNCPrice *p,
PriceSource source);
245 void gnc_price_set_source_string(GNCPrice *p,
const char* s);
246 void gnc_price_set_typestr(GNCPrice *p,
const char* type);
247 void gnc_price_set_value(GNCPrice *p, gnc_numeric value);
256 GNCPrice * gnc_price_lookup (
const GncGUID *guid, QofBook *book);
258 gnc_commodity * gnc_price_get_commodity(
const GNCPrice *p);
260 gnc_commodity * gnc_price_get_currency(
const GNCPrice *p);
261 time64 gnc_price_get_time64(
const GNCPrice *p);
262 PriceSource gnc_price_get_source(
const GNCPrice *p);
263 const char * gnc_price_get_source_string(
const GNCPrice *p);
264 const char * gnc_price_get_typestr(
const GNCPrice *p);
265 gnc_numeric gnc_price_get_value(
const GNCPrice *p);
266 gboolean gnc_price_equal(
const GNCPrice *p1,
const GNCPrice *p2);
268 #define gnc_price_get_guid(X) qof_entity_get_guid(QOF_INSTANCE(X)) 269 #define gnc_price_return_guid(X) (*(qof_entity_get_guid(QOF_INSTANCE(X)))) 270 #define gnc_price_get_book(X) qof_instance_get_book(QOF_INSTANCE(X)) 285 #define CURRENCY_DENOM 10000 286 #define COMMODITY_DENOM_MULT 10000 304 gboolean check_dupl);
314 gboolean gnc_price_list_equal(PriceList *prices1, PriceList *prices2);
383 PRICE_REMOVE_SOURCE_FQ = 1,
384 PRICE_REMOVE_SOURCE_USER = 2,
385 PRICE_REMOVE_SOURCE_APP = 4,
386 PRICE_REMOVE_SOURCE_COMM = 8,
387 } PriceRemoveSourceFlags;
391 PRICE_REMOVE_KEEP_NONE,
392 PRICE_REMOVE_KEEP_LAST_WEEKLY,
393 PRICE_REMOVE_KEEP_LAST_MONTHLY,
394 PRICE_REMOVE_KEEP_LAST_QUARTERLY,
395 PRICE_REMOVE_KEEP_LAST_PERIOD,
396 PRICE_REMOVE_KEEP_SCALED,
397 } PriceRemoveKeepOptions;
409 GDate *fiscal_end_date,
time64 cutoff,
410 PriceRemoveSourceFlags source,
411 PriceRemoveKeepOptions keep);
423 const gnc_commodity *commodity,
424 const gnc_commodity *currency);
436 const gnc_commodity *commodity);
449 const gnc_commodity *commodity,
450 const gnc_commodity *currency);
463 const gnc_commodity *commodity,
464 const gnc_commodity *currency);
479 const gnc_commodity *commodity,
480 const gnc_commodity *currency,
495 const gnc_commodity *c,
496 const gnc_commodity *currency,
512 const gnc_commodity *c,
527 const gnc_commodity *c,
528 const gnc_commodity *currency,
542 const gnc_commodity *c,
555 const gnc_commodity *orig_currency,
556 const gnc_commodity *new_currency,
569 const gnc_commodity *orig_currency,
570 const gnc_commodity *new_currency,
581 const gnc_commodity *orig_currency,
582 const gnc_commodity *new_currency);
597 const gnc_commodity *balance_currency,
598 const gnc_commodity *new_currency);
613 const gnc_commodity *balance_currency,
614 const gnc_commodity *new_currency,
630 const gnc_commodity *balance_currency,
631 const gnc_commodity *new_currency,
634 typedef gboolean (*GncPriceForeachFunc)(GNCPrice *p, gpointer user_data);
651 GncPriceForeachFunc f,
653 gboolean stable_order);
662 const gnc_commodity *c);
673 const gnc_commodity *c,
676 void gnc_pricedb_nth_price_reset_cache (GNCPriceDB *db);
700 #define PRICE_COMMODITY "price-commodity" 701 #define PRICE_CURRENCY "price-currency" 702 #define PRICE_DATE "price-date" 703 #define PRICE_SOURCE "price-source" 704 #define PRICE_TYPE "price-type" 705 #define PRICE_VALUE "price-value" void gnc_price_list_destroy(PriceList *prices)
gnc_price_list_destroy - destroy the given price list, calling gnc_price_unref on all the prices incl...
GNCPrice * gnc_pricedb_lookup_day_t64(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency, time64 t)
Return the price between the two commodities on the indicated day.
GNCPrice * gnc_price_create(QofBook *book)
gnc_price_create - returns a newly allocated and initialized price with a reference count of 1...
GNCPrice * gnc_pricedb_nth_price(GNCPriceDB *db, const gnc_commodity *c, const int n)
Get the nth price for the given commodity in reverse date order.
void gnc_pricedb_print_contents(GNCPriceDB *db, FILE *f)
This simple function can be useful for debugging the pricedb code.
GNCPrice * gnc_price_invert(GNCPrice *p)
Return a newly-allocated price that's the inverse of the given price, p.
int gnc_pricedb_num_prices(GNCPriceDB *db, const gnc_commodity *c)
Get the number of prices, in any currency, for a given commodity.
void gnc_price_unref(GNCPrice *p)
gnc_price_unref - indicate you're finished with a price (i.e.
gboolean gnc_pricedb_add_price(GNCPriceDB *db, GNCPrice *p)
Add a price to the pricedb.
GNCPriceDB * gnc_collection_get_pricedb(QofCollection *col)
Return the pricedb via the Book's collection.
gboolean gnc_pricedb_equal(GNCPriceDB *db1, GNCPriceDB *db2)
Test equality of two pricedbs.
gnc_numeric gnc_pricedb_get_nearest_price(GNCPriceDB *pdb, const gnc_commodity *orig_currency, const gnc_commodity *new_currency, const time64 t)
Retrieve the price one currency to another using the price nearest to the given time.
gboolean gnc_pricedb_remove_old_prices(GNCPriceDB *db, GList *comm_list, GDate *fiscal_end_date, time64 cutoff, PriceRemoveSourceFlags source, PriceRemoveKeepOptions keep)
Remove and unref prices older than a certain time.
gnc_numeric gnc_pricedb_get_latest_price(GNCPriceDB *pdb, const gnc_commodity *orig_currency, const gnc_commodity *new_currency)
Retrieve the price one currency to another using the latest price.
gboolean gnc_price_list_insert(PriceList **prices, GNCPrice *p, gboolean check_dupl)
gnc_price_list_insert - insert a price into the given list, calling gnc_price_ref on it during the pr...
gnc_numeric gnc_pricedb_convert_balance_nearest_before_price_t64(GNCPriceDB *pdb, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency, time64 t)
Convert a balance from one currency to another using the price nearest to before the given time...
GNCPriceDB * gnc_pricedb_get_db(QofBook *book)
Return the pricedb associated with the book.
gnc_numeric gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency)
Convert a balance from one currency to another using the most recent price between the two...
void gnc_pricedb_destroy(GNCPriceDB *db)
Destroy the given pricedb and unref all of the prices it contains.
guint gnc_pricedb_get_num_prices(GNCPriceDB *db)
Return the number of prices in the database.
void gnc_price_print(GNCPrice *db, FILE *f, int indent)
This simple function can be useful for debugging the price code.
gnc_numeric gnc_pricedb_get_nearest_before_price(GNCPriceDB *pdb, const gnc_commodity *orig_currency, const gnc_commodity *new_currency, const time64 t)
Retrieve the price one currency to another using the price nearest to before the given time...
PriceList * gnc_pricedb_lookup_nearest_in_time_any_currency_t64(GNCPriceDB *db, const gnc_commodity *c, time64 t)
Return the price nearest in time to that given between the given commodity and every other...
void gnc_pricedb_begin_edit(GNCPriceDB *)
Begin an edit.
PriceList * gnc_pricedb_lookup_latest_any_currency(GNCPriceDB *db, const gnc_commodity *commodity)
Find the most recent price between a commodity and all other commodities.
All type declarations for the whole Gnucash engine.
gboolean gnc_pricedb_remove_price(GNCPriceDB *db, GNCPrice *p)
Remove a price from the pricedb and unref the price.
GNCPrice * gnc_pricedb_lookup_nearest_in_time64(GNCPriceDB *db, const gnc_commodity *c, const gnc_commodity *currency, time64 t)
Return the price between the two commoditiesz nearest to the given time.
gboolean gnc_pricedb_has_prices(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Report whether the pricedb contains prices for one commodity in another.
gboolean gnc_price_list_remove(PriceList **prices, GNCPrice *p)
gnc_price_list_remove - remove the price, p, from the given list, calling gnc_price_unref on it durin...
GNCPrice * gnc_price_clone(GNCPrice *p, QofBook *book)
gnc_price_clone - returns a newly allocated price that's a content-wise duplicate of the given price...
gnc_numeric gnc_pricedb_convert_balance_nearest_price_t64(GNCPriceDB *pdb, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency, time64 t)
Convert a balance from one currency to another using the price nearest to the given time...
PriceSource
Price source enum.
void gnc_pricedb_set_bulk_update(GNCPriceDB *db, gboolean bulk_update)
Set flag to indicate whether duplication checks should be performed.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
gboolean gnc_pricedb_foreach_price(GNCPriceDB *db, GncPriceForeachFunc f, gpointer user_data, gboolean stable_order)
Call a GncPriceForeachFunction once for each price in db, until the function returns FALSE...
GNCPrice * gnc_pricedb_lookup_latest(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Find the most recent price between the two commodities.
PriceList * gnc_pricedb_lookup_nearest_before_any_currency_t64(GNCPriceDB *db, const gnc_commodity *c, time64 t)
Return the nearest price between the given commodity and any other before the given time...
The type used to store guids in C.
GNCPrice * gnc_pricedb_lookup_nearest_before_t64(GNCPriceDB *db, const gnc_commodity *c, const gnc_commodity *currency, time64 t)
Return the nearest price between the given commodities before the given time.
void gnc_price_ref(GNCPrice *p)
gnc_price_ref - indicate your need for a given price to stick around (i.e.
Commodity handling public routines.
void gnc_pricedb_commit_edit(GNCPriceDB *)
Commit an edit.
PriceList * gnc_pricedb_get_prices(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Return all the prices for a given commodity in another.