GnuCash 2.4.99
gnc-commodity.h
Go to the documentation of this file.
00001 /********************************************************************
00002  * gnc-commodity.h -- API for tradable commodities (incl. currency) *
00003  *                                                                  *
00004  * This program is free software; you can redistribute it and/or    *
00005  * modify it under the terms of the GNU General Public License as   *
00006  * published by the Free Software Foundation; either version 2 of   *
00007  * the License, or (at your option) any later version.              *
00008  *                                                                  *
00009  * This program is distributed in the hope that it will be useful,  *
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
00012  * GNU General Public License for more details.                     *
00013  *                                                                  *
00014  * You should have received a copy of the GNU General Public License*
00015  * along with this program; if not, contact:                        *
00016  *                                                                  *
00017  * Free Software Foundation           Voice:  +1-617-542-5942       *
00018  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
00019  * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
00020  *                                                                  *
00021  *******************************************************************/
00022 
00046 #ifndef GNC_COMMODITY_H
00047 #define GNC_COMMODITY_H
00048 
00049 typedef struct _GncCommodityClass gnc_commodityClass;
00050 typedef struct _GncCommodityNamespaceClass gnc_commodity_namespaceClass;
00051 
00052 #include <glib.h>
00053 #include "gnc-engine.h"
00054 
00055 /* --- type macros --- */
00056 #define GNC_TYPE_COMMODITY            (gnc_commodity_get_type ())
00057 #define GNC_COMMODITY(o)              \
00058      (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY, gnc_commodity))
00059 #define GNC_COMMODITY_CLASS(k)        \
00060      (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY, gnc_commodityClass))
00061 #define GNC_IS_COMMODITY(o)           \
00062      (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY))
00063 #define GNC_IS_COMMODITY_CLASS(k)     \
00064      (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY))
00065 #define GNC_COMMODITY_GET_CLASS(o)    \
00066      (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY, gnc_commodityClass))
00067 GType gnc_commodity_get_type(void);
00068 
00069 /* --- type macros --- */
00070 #define GNC_TYPE_COMMODITY_NAMESPACE            (gnc_commodity_namespace_get_type ())
00071 #define GNC_COMMODITY_NAMESPACE(o)              \
00072      (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespace))
00073 #define GNC_COMMODITY_NAMESPACE_CLASS(k)        \
00074      (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass))
00075 #define GNC_IS_COMMODITY_NAMESPACE(o)           \
00076      (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY_NAMESPACE))
00077 #define GNC_IS_COMMODITY_NAMESPACE_CLASS(k)     \
00078      (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY_NAMESPACE))
00079 #define GNC_COMMODITY_NAMESPACE_GET_CLASS(o)    \
00080      (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass))
00081 GType gnc_commodity_namespace_get_type(void);
00082 
00083 
00084 #define GNC_COMMODITY_TABLE "gnc_commodity_table"
00085 
00097 #define GNC_COMMODITY_NS_LEGACY "GNC_LEGACY_CURRENCIES"
00098 /* The ISO define is deprecated in favor of CURRENCY */
00099 #define GNC_COMMODITY_NS_ISO    "ISO4217"
00100 #define GNC_COMMODITY_NS_CURRENCY "CURRENCY"
00101 #define GNC_COMMODITY_NS_NASDAQ "NASDAQ"
00102 #define GNC_COMMODITY_NS_NYSE   "NYSE"
00103 #define GNC_COMMODITY_NS_EUREX  "EUREX"
00104 #define GNC_COMMODITY_NS_MUTUAL "FUND"
00105 #define GNC_COMMODITY_NS_AMEX   "AMEX"
00106 #define GNC_COMMODITY_NS_ASX    "ASX"
00107 
00108 typedef GList CommodityList;
00109 
00118 typedef enum
00119 {
00120     SOURCE_SINGLE = 0,  
00124     SOURCE_MULTI,               
00127     SOURCE_UNKNOWN,     
00131     SOURCE_MAX,
00132     SOURCE_CURRENCY = SOURCE_MAX, 
00133 } QuoteSourceType;
00134 
00141 gboolean gnc_quote_source_fq_installed (void);
00142 
00152 void gnc_quote_source_set_fq_installed (const GList *sources_list);
00153 
00160 gint gnc_quote_source_num_entries(QuoteSourceType type);
00161 
00173 gnc_quote_source *gnc_quote_source_add_new(const char * name, gboolean supported);
00174 
00183 /*@ dependent @*/
00184 gnc_quote_source *gnc_quote_source_lookup_by_internal(const char * internal_name);
00185 
00196 gnc_quote_source *gnc_quote_source_lookup_by_ti(QuoteSourceType type, gint index);
00197 
00206 gboolean gnc_quote_source_get_supported (const gnc_quote_source *source);
00207 
00215 QuoteSourceType gnc_quote_source_get_type (const gnc_quote_source *source);
00216 
00224 gint gnc_quote_source_get_index (const gnc_quote_source *source);
00225 
00234 /*@ dependent @*/
00235 const char *gnc_quote_source_get_user_name (const gnc_quote_source *source);
00236 
00245 /*@ dependent @*/
00246 const char *gnc_quote_source_get_internal_name (const gnc_quote_source *source);
00247 
00287 /*@ dependent @*/
00288 gnc_commodity * gnc_commodity_new(QofBook *book,
00289                                   /*@ null @*/ const char * fullname,
00290                                   /*@ null @*/ const char * commodity_namespace,
00291                                   /*@ null @*/ const char * mnemonic,
00292                                   /*@ null @*/ const char * cusip,
00293                                   int fraction);
00294 
00300 void  gnc_commodity_destroy(gnc_commodity * cm);
00301 
00303 void  gnc_commodity_copy(gnc_commodity * dest, const gnc_commodity *src);
00304 
00306 gnc_commodity * gnc_commodity_clone(const gnc_commodity *src, QofBook *dest_book);
00324 const char * gnc_commodity_get_mnemonic(const gnc_commodity * cm);
00325 
00335 const char * gnc_commodity_get_namespace(const gnc_commodity * cm);
00336 
00349 const char * gnc_commodity_get_namespace_compat(const gnc_commodity * cm);
00350 
00359 gnc_commodity_namespace *gnc_commodity_get_namespace_ds(const gnc_commodity * cm);
00360 
00370 const char * gnc_commodity_get_fullname(const gnc_commodity * cm);
00371 
00382 const char * gnc_commodity_get_printname(const gnc_commodity * cm);
00383 
00399 const char * gnc_commodity_get_cusip(const gnc_commodity * cm);
00400 
00412 const char * gnc_commodity_get_unique_name(const gnc_commodity * cm);
00413 
00424 int     gnc_commodity_get_fraction(const gnc_commodity * cm);
00425 
00435 gboolean    gnc_commodity_get_quote_flag(const gnc_commodity *cm);
00436 
00445 /*@ dependent @*/
00446 gnc_quote_source* gnc_commodity_get_quote_source(const gnc_commodity *cm);
00447 /*@ dependent @*/
00448 gnc_quote_source* gnc_commodity_get_default_quote_source(const gnc_commodity *cm);
00449 
00460 const char* gnc_commodity_get_quote_tz(const gnc_commodity *cm);
00479 void  gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic);
00480 
00491 void  gnc_commodity_set_namespace(gnc_commodity * cm, const char * new_namespace);
00492 
00503 void  gnc_commodity_set_fullname(gnc_commodity * cm, const char * fullname);
00504 
00519 void  gnc_commodity_set_cusip(gnc_commodity * cm, const char * cusip);
00520 
00531 void  gnc_commodity_set_fraction(gnc_commodity * cm, int smallest_fraction);
00532 
00547 void  gnc_commodity_user_set_quote_flag(gnc_commodity *cm,
00548                                         const gboolean flag);
00549 
00559 void  gnc_commodity_set_quote_flag(gnc_commodity *cm, const gboolean flag);
00560 
00570 void  gnc_commodity_set_quote_source(gnc_commodity *cm, gnc_quote_source *src);
00571 
00583 void  gnc_commodity_set_quote_tz(gnc_commodity *cm, const char *tz);
00597 void
00598 gnc_commodity_increment_usage_count(gnc_commodity *cm);
00599 
00606 void
00607 gnc_commodity_decrement_usage_count(gnc_commodity *cm);
00621 gboolean gnc_commodity_equiv(const gnc_commodity * a, const gnc_commodity * b);
00622 
00627 gboolean gnc_commodity_equal(const gnc_commodity * a, const gnc_commodity * b);
00628 
00636 int gnc_commodity_compare(const gnc_commodity * a, const gnc_commodity * b);
00637 
00642 int gnc_commodity_compare_void(const void * a, const void * b);
00656 gboolean gnc_commodity_namespace_is_iso(const char *commodity_namespace);
00657 
00663 gboolean gnc_commodity_is_iso(const gnc_commodity * cm);
00664 
00671 gboolean gnc_commodity_is_currency(const gnc_commodity *cm);
00672 
00676 /* =============================================================== */
00683 /*@ dependent @*/
00684 gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book);
00685 
00687 /* ---------------------------------------------------------- */
00691 gnc_commodity * gnc_commodity_table_lookup(const gnc_commodity_table * table,
00692         const char * commodity_namespace,
00693         const char * mnemonic);
00694 gnc_commodity *
00695 gnc_commodity_table_lookup_unique(const gnc_commodity_table *table,
00696                                   const char * unique_name);
00697 gnc_commodity * gnc_commodity_table_find_full(const gnc_commodity_table * t,
00698         const char * commodity_namespace,
00699         const char * fullname);
00700 
00701 /*@ dependent @*/
00702 gnc_commodity * gnc_commodity_find_commodity_by_guid(const GncGUID *guid,
00703         QofBook *book);
00704 
00706 /* ---------------------------------------------------------- */
00707 
00726 /*@ dependent @*/
00727 gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table * table,
00728         gnc_commodity * comm);
00729 
00736 void gnc_commodity_table_remove(gnc_commodity_table * table,
00737                                 gnc_commodity * comm);
00738 
00747 gboolean gnc_commodity_table_add_default_data(gnc_commodity_table *table, QofBook *book);
00748 
00750 /* ---------------------------------------------------------- */
00761 const char * gnc_commodity_namespace_get_name (const gnc_commodity_namespace *ns) ;
00762 
00763 
00770 GList * gnc_commodity_namespace_get_commodity_list(const gnc_commodity_namespace * ns);
00771 
00772 
00781 int gnc_commodity_table_has_namespace(const gnc_commodity_table * table,
00782                                       const char * commodity_namespace);
00783 
00791 GList * gnc_commodity_table_get_namespaces(const gnc_commodity_table * t);
00792 
00800 GList * gnc_commodity_table_get_namespaces_list(const gnc_commodity_table * t);
00801 
00812 gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table * table,
00813         const char * commodity_namespace,
00814         QofBook *book);
00815 
00824 gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table * table,
00825         const char * commodity_namespace);
00826 
00836 void      gnc_commodity_table_delete_namespace(gnc_commodity_table * table,
00837         const char * commodity_namespace);
00839 /* ---------------------------------------------------------- */
00850 guint gnc_commodity_table_get_size(const gnc_commodity_table* tbl);
00851 
00864 CommodityList * gnc_commodity_table_get_commodities(
00865     const gnc_commodity_table * table, const char * commodity_namespace);
00866 
00884 CommodityList * gnc_commodity_table_get_quotable_commodities(
00885     const gnc_commodity_table * table);
00886 
00897 gboolean gnc_commodity_table_foreach_commodity(const gnc_commodity_table * table,
00898         gboolean (*f)(gnc_commodity *cm,
00899                       gpointer user_data),
00900         gpointer user_data);
00904 /* ---------------------------------------------------------- */
00913 gnc_commodity_table * gnc_commodity_table_new(void);
00914 void          gnc_commodity_table_destroy(gnc_commodity_table * table);
00915 
00921 gnc_commodity * gnc_commodity_obtain_twin (const gnc_commodity *findlike, QofBook *book);
00922 
00927 gboolean gnc_commodity_table_register (void);
00928 
00929 void gnc_commodity_begin_edit (gnc_commodity *cm);
00930 void gnc_commodity_commit_edit (gnc_commodity *cm);
00931 
00937 struct _gnc_monetary
00938 {
00939     gnc_commodity *commodity;
00940     gnc_numeric value;
00941 };
00942 
00943 typedef struct _gnc_monetary gnc_monetary;
00944 
00945 /* A list of monetary values.  This could be a hash table, but as currently
00946 * used it rarely contains more than one or two different commodities so
00947 * it doesn't seem worth the trouble.
00948 */
00949 typedef GList MonetaryList;
00950 
00954 static inline
00955 gnc_monetary gnc_monetary_create(gnc_commodity *commod, gnc_numeric val)
00956 {
00957     gnc_monetary out;
00958     out.commodity = commod;
00959     out.value = val;
00960     return out;
00961 }
00967 static inline
00968 gnc_commodity * gnc_monetary_commodity(gnc_monetary a)
00969 {
00970     return a.commodity;
00971 }
00972 
00973 static inline
00974 gnc_numeric gnc_monetary_value(gnc_monetary a)
00975 {
00976     return a.value;
00977 }
00985 MonetaryList *gnc_monetary_list_add_monetary(MonetaryList *list, gnc_monetary mon);
00986 
00988 static inline
00989 MonetaryList *gnc_monetary_list_add_value(MonetaryList *list,
00990         gnc_commodity *commod,
00991         gnc_numeric value)
00992 {
00993     return gnc_monetary_list_add_monetary(list,
00994                                           gnc_monetary_create(commod, value));
00995 }
00996 
00998 MonetaryList *gnc_monetary_list_delete_zeros(MonetaryList *list);
00999 
01001 void gnc_monetary_list_free(MonetaryList *list);
01006 #endif /* GNC_COMMODITY_H */
01007 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines