GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
gnc-pricedb.h
Go to the documentation of this file.
1 /********************************************************************
2  * gnc-pricedb.h -- a simple price database for gnucash. *
3  * *
4  * This program is free software; you can redistribute it and/or *
5  * modify it under the terms of the GNU General Public License as *
6  * published by the Free Software Foundation; either version 2 of *
7  * the License, or (at your option) any later version. *
8  * *
9  * This program is distributed in the hope that it will be useful, *
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12  * GNU General Public License for more details. *
13  * *
14  * You should have received a copy of the GNU General Public License*
15  * along with this program; if not, contact: *
16  * *
17  * Free Software Foundation Voice: +1-617-542-5942 *
18  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
19  * Boston, MA 02110-1301, USA [email protected] *
20  * *
21  *******************************************************************/
22 
23 #ifndef GNC_PRICEDB_H
24 #define GNC_PRICEDB_H
25 
26 typedef struct _GncPriceClass GNCPriceClass;
27 typedef struct _GncPriceDBClass GNCPriceDBClass;
28 
29 #include <stdio.h>
30 #include "qof.h"
31 #include "gnc-commodity.h"
32 #include "gnc-engine.h"
33 
34 /* --- type macros --- */
35 #define GNC_TYPE_PRICE (gnc_price_get_type ())
36 #define GNC_PRICE(o) \
37  (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_PRICE, GNCPrice))
38 #define GNC_PRICE_CLASS(k) \
39  (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_PRICE, GNCPriceClass))
40 #define GNC_IS_PRICE(o) \
41  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_PRICE))
42 #define GNC_IS_PRICE_CLASS(k) \
43  (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_PRICE))
44 #define GNC_PRICE_GET_CLASS(o) \
45  (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_PRICE, GNCPriceClass))
46 GType gnc_price_get_type(void);
47 
48 /* --- type macros --- */
49 #define GNC_TYPE_PRICEDB (gnc_pricedb_get_type ())
50 #define GNC_PRICEDB(o) \
51  (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_PRICEDB, GNCPriceDB))
52 #define GNC_PRICEDB_CLASS(k) \
53  (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_PRICEDB, GNCPriceDBClass))
54 #define GNC_IS_PRICEDB(o) \
55  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_PRICEDB))
56 #define GNC_IS_PRICEDB_CLASS(k) \
57  (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_PRICEDB))
58 #define GNC_PRICEDB_GET_CLASS(o) \
59  (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_PRICEDB, GNCPriceDBClass))
60 GType gnc_pricedb_get_type(void);
61 
62 
150 /* ================================================================ */
151 
156 typedef struct gnc_price_lookup_s GNCPriceLookup;
157 typedef GList PriceList;
158 
159 /* ------------------ */
165 /*@ dependent @*/
167 
174 /* ------------------ */
180 void gnc_price_ref(GNCPrice *p);
181 
184 void gnc_price_unref(GNCPrice *p);
187 /* ------------------ */
199 void gnc_price_begin_edit (GNCPrice *p);
200 void gnc_price_commit_edit (GNCPrice *p);
201 
202 void gnc_price_set_commodity(GNCPrice *p, gnc_commodity *c);
203 void gnc_price_set_currency(GNCPrice *p, gnc_commodity *c);
204 void gnc_price_set_time(GNCPrice *p, Timespec t);
205 void gnc_price_set_source(GNCPrice *p, const char *source);
206 void gnc_price_set_typestr(GNCPrice *p, const char* type);
207 void gnc_price_set_value(GNCPrice *p, gnc_numeric value);
210 /* ------------------ */
216 GNCPrice * gnc_price_lookup (const GncGUID *guid, QofBook *book);
217 /*@ dependent @*/
218 gnc_commodity * gnc_price_get_commodity(const GNCPrice *p);
219 /*@ dependent @*/
220 gnc_commodity * gnc_price_get_currency(const GNCPrice *p);
221 Timespec gnc_price_get_time(const GNCPrice *p);
222 const char * gnc_price_get_source(const GNCPrice *p);
223 const char * gnc_price_get_typestr(const GNCPrice *p);
224 gnc_numeric gnc_price_get_value(const GNCPrice *p);
225 gboolean gnc_price_equal(const GNCPrice *p1, const GNCPrice *p2);
226 
227 #define gnc_price_get_guid(X) qof_entity_get_guid(QOF_INSTANCE(X))
228 #define gnc_price_return_guid(X) (*(qof_entity_get_guid(QOF_INSTANCE(X))))
229 #define gnc_price_get_book(X) qof_instance_get_book(QOF_INSTANCE(X))
230 
235 void gnc_price_print(GNCPrice *db, FILE *f, int indent);
238 /* ================================================================ */
253 gboolean gnc_price_list_insert(PriceList **prices, GNCPrice *p,
254  gboolean check_dupl);
255 
258 gboolean gnc_price_list_remove(PriceList **prices, GNCPrice *p);
259 
262 void gnc_price_list_destroy(PriceList *prices);
263 
264 gboolean gnc_price_list_equal(PriceList *prices1, PriceList *prices2);
268 /* ================================================================ */
281 typedef struct gnc_price_db_s GNCPriceDB;
282 
284 /*@ dependent @*/
286 GNCPriceDB * gnc_collection_get_pricedb(QofCollection *col);
287 
292 
295 void gnc_pricedb_commit_edit (GNCPriceDB *);
296 
300 void gnc_pricedb_set_bulk_update(GNCPriceDB *db, gboolean bulk_update);
301 
305 gboolean gnc_pricedb_add_price(GNCPriceDB *db, GNCPrice *p);
306 
310 
311 gboolean gnc_pricedb_remove_old_prices(GNCPriceDB *db, Timespec cutoff,
312  const gboolean delete_user, gboolean delete_last);
313 
318  const gnc_commodity *commodity,
319  const gnc_commodity *currency);
320 
325  const gnc_commodity *commodity);
326 
331  const gnc_commodity *commodity,
332  const gnc_commodity *currency);
333 
337 PriceList * gnc_pricedb_get_prices(GNCPriceDB *db,
338  const gnc_commodity *commodity,
339  const gnc_commodity *currency);
340 
344 PriceList * gnc_pricedb_lookup_at_time(GNCPriceDB *db,
345  const gnc_commodity *commodity,
346  const gnc_commodity *currency,
347  Timespec t);
348 
353  const gnc_commodity *commodity,
354  const gnc_commodity *currency,
355  Timespec t);
356 
357 
361  const gnc_commodity *c,
362  const gnc_commodity *currency,
363  Timespec t);
364 
369  const gnc_commodity *c,
370  Timespec t);
374  gnc_commodity *c,
375  gnc_commodity *currency,
376  Timespec t);
377 
382  gnc_commodity *c,
383  Timespec t);
384 
385 
390  gnc_numeric balance,
391  const gnc_commodity *balance_currency,
392  const gnc_commodity *new_currency);
393 
398  gnc_numeric balance,
399  const gnc_commodity *balance_currency,
400  const gnc_commodity *new_currency,
401  Timespec t);
402 
409  gboolean (*f)(GNCPrice *p,
410  gpointer user_data),
411  gpointer user_data,
412  gboolean stable_order);
413 
414 /* The following two convenience functions are used to test the xml backend */
419 gboolean gnc_pricedb_equal (GNCPriceDB *db1, GNCPriceDB *db2);
420 
424 void gnc_pricedb_print_contents(GNCPriceDB *db, FILE *f);
431 #define PRICE_COMMODITY "price-commodity"
432 #define PRICE_CURRENCY "price-currency"
433 #define PRICE_DATE "price-date"
434 #define PRICE_SOURCE "price-source"
435 #define PRICE_TYPE "price-type"
436 #define PRICE_VALUE "price-value"
437 
441 #endif /* GNC_PRICEDB_H */
442 
void gnc_price_list_destroy(PriceList *prices)
Definition: gnc-pricedb.c:701
GNCPrice * gnc_price_create(QofBook *book)
Definition: gnc-pricedb.c:236
GNCPrice * gnc_pricedb_lookup_day(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency, Timespec t)
Definition: gnc-pricedb.c:1536
void gnc_pricedb_print_contents(GNCPriceDB *db, FILE *f)
Definition: gnc-pricedb.c:2480
PriceList * gnc_pricedb_lookup_nearest_in_time_any_currency(GNCPriceDB *db, const gnc_commodity *c, Timespec t)
Definition: gnc-pricedb.c:1908
void gnc_price_unref(GNCPrice *p)
Definition: gnc-pricedb.c:272
gboolean gnc_pricedb_add_price(GNCPriceDB *db, GNCPrice *p)
Definition: gnc-pricedb.c:1053
GNCPriceDB * gnc_collection_get_pricedb(QofCollection *col)
Definition: gnc-pricedb.c:865
gboolean gnc_pricedb_equal(GNCPriceDB *db1, GNCPriceDB *db2)
Definition: gnc-pricedb.c:949
Use a 64-bit unsigned int timespec.
Definition: gnc-date.h:299
gboolean gnc_price_list_insert(PriceList **prices, GNCPrice *p, gboolean check_dupl)
Definition: gnc-pricedb.c:645
GNCPriceDB * gnc_pricedb_get_db(QofBook *book)
Definition: gnc-pricedb.c:872
PriceList * gnc_pricedb_lookup_at_time(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency, Timespec t)
Definition: gnc-pricedb.c:1545
Definition: guid.h:65
gnc_numeric gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency)
Definition: gnc-pricedb.c:2013
GNCPrice * gnc_pricedb_lookup_latest_before(GNCPriceDB *db, gnc_commodity *c, gnc_commodity *currency, Timespec t)
Definition: gnc-pricedb.c:1753
void gnc_pricedb_destroy(GNCPriceDB *db)
Definition: gnc-pricedb.c:828
guint gnc_pricedb_get_num_prices(GNCPriceDB *db)
Definition: gnc-pricedb.c:894
PriceList * gnc_pricedb_lookup_latest_before_any_currency(GNCPriceDB *db, gnc_commodity *c, Timespec t)
Definition: gnc-pricedb.c:1959
gboolean gnc_pricedb_foreach_price(GNCPriceDB *db, gboolean(*f)(GNCPrice *p, gpointer user_data), gpointer user_data, gboolean stable_order)
Definition: gnc-pricedb.c:2344
void gnc_price_print(GNCPrice *db, FILE *f, int indent)
Definition: gnc-pricedb.c:2424
void gnc_pricedb_begin_edit(GNCPriceDB *)
Definition: gnc-pricedb.c:358
PriceList * gnc_pricedb_lookup_latest_any_currency(GNCPriceDB *db, const gnc_commodity *commodity)
Definition: gnc-pricedb.c:1373
GNCPrice * gnc_pricedb_lookup_nearest_in_time(GNCPriceDB *db, const gnc_commodity *c, const gnc_commodity *currency, Timespec t)
Definition: gnc-pricedb.c:1744
All type declarations for the whole Gnucash engine.
gboolean gnc_pricedb_remove_price(GNCPriceDB *db, GNCPrice *p)
Definition: gnc-pricedb.c:1160
gboolean gnc_pricedb_has_prices(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Definition: gnc-pricedb.c:1428
gboolean gnc_price_list_remove(PriceList **prices, GNCPrice *p)
Definition: gnc-pricedb.c:676
GNCPrice * gnc_price_clone(GNCPrice *p, QofBook *book)
Definition: gnc-pricedb.c:295
void gnc_pricedb_set_bulk_update(GNCPriceDB *db, gboolean bulk_update)
Definition: gnc-pricedb.c:844
gnc_numeric gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency, Timespec t)
Definition: gnc-pricedb.c:2109
GNCPrice * gnc_pricedb_lookup_latest(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Definition: gnc-pricedb.c:1309
void gnc_price_ref(GNCPrice *p)
Definition: gnc-pricedb.c:265
Commodity handling public routines.
PriceList * gnc_pricedb_get_prices(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
Definition: gnc-pricedb.c:1479