GnuCash  5.6-150-g038405b370+
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Files | Data Structures | Macros | Typedefs | Functions

A commodity is something of value that is easily tradeable or sellable; for example, currencies, stocks, bonds, grain, copper, and oil are all commodities. More...

Files

file  gnc-commodity.h
 Commodity handling public routines.
 
file  gnc-commodity.hpp
 Commodity handling public routines (C++ api)
 

Data Structures

struct  gnc_monetary
 

Macros

#define GNC_TYPE_COMMODITY   (gnc_commodity_get_type ())
 
#define GNC_COMMODITY(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY, gnc_commodity))
 
#define GNC_COMMODITY_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY, gnc_commodityClass))
 
#define GNC_IS_COMMODITY(o)   (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY))
 
#define GNC_IS_COMMODITY_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY))
 
#define GNC_COMMODITY_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY, gnc_commodityClass))
 
#define GNC_TYPE_COMMODITY_NAMESPACE   (gnc_commodity_namespace_get_type ())
 
#define GNC_COMMODITY_NAMESPACE(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespace))
 
#define GNC_COMMODITY_NAMESPACE_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass))
 
#define GNC_IS_COMMODITY_NAMESPACE(o)   (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY_NAMESPACE))
 
#define GNC_IS_COMMODITY_NAMESPACE_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY_NAMESPACE))
 
#define GNC_COMMODITY_NAMESPACE_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass))
 
#define GNC_COMMODITY_TABLE   "gnc_commodity_table"
 
#define GNC_COMMODITY_NS_LEGACY   "GNC_LEGACY_CURRENCIES"
 The commodity namespace definitions are used to tag a commodity by its type, or a stocks by the exchange where it is traded. More...
 
#define GNC_COMMODITY_NS_TEMPLATE   "template"
 
#define GNC_COMMODITY_NS_ISO   "ISO4217"
 
#define GNC_COMMODITY_NS_CURRENCY   "CURRENCY"
 
#define GNC_COMMODITY_NS_NONCURRENCY   "NONCURRENCY"
 
#define GNC_COMMODITY_NS_NONISO_GUI   NC_("Commodity Type", "All non-currency")
 
#define GNC_COMMODITY_NS_ISO_GUI   NC_("Commodity Type", "Currencies")
 
#define GNC_COMMODITY_MAX_FRACTION   1000000000
 Max fraction is 10^9 because 10^10 would require changing it to an int64_t.
 

Typedefs

typedef GList CommodityList
 
using CommVec = std::vector< gnc_commodity * >
 

Functions

GType gnc_commodity_get_type (void)
 
GType gnc_commodity_namespace_get_type (void)
 
void gnc_quote_source_set_fq_installed (const char *version_string, const std::vector< std::string > &sources_list)
 Update gnucash internal tables based on what Finance::Quote sources are installed. More...
 

Commodity Quote Source functions

enum  QuoteSourceType {
  SOURCE_SINGLE = 0, SOURCE_MULTI, SOURCE_UNKNOWN, SOURCE_MAX,
  SOURCE_CURRENCY = SOURCE_MAX
}
 The quote source type enum account types are used to determine how the transaction data in the account is displayed. More...
 
gboolean gnc_quote_source_fq_installed (void)
 This function indicates whether or not the Finance::Quote module is installed on a user's computer. More...
 
const char * gnc_quote_source_fq_version (void)
 This function returns the version of the Finance::Quote module installed on a user's computer. More...
 
gint gnc_quote_source_num_entries (QuoteSourceType type)
 Return the number of entries for a given type of quote source. More...
 
gnc_quote_source * gnc_quote_source_add_new (const char *name, gboolean supported)
 Create a new quote source. More...
 
gnc_quote_source * gnc_quote_source_lookup_by_internal (const char *internal_name)
 Given the internal (gnucash or F::Q) name of a quote source, find the data structure identified by this name. More...
 
gnc_quote_source * gnc_quote_source_lookup_by_ti (QuoteSourceType type, gint index)
 Given the type/index of a quote source, find the data structure identified by this pair. More...
 
gboolean gnc_quote_source_get_supported (const gnc_quote_source *source)
 Given a gnc_quote_source data structure, return the flag that indicates whether this particular quote source is supported by the user's F::Q installation. More...
 
QuoteSourceType gnc_quote_source_get_type (const gnc_quote_source *source)
 Given a gnc_quote_source data structure, return the type of this particular quote source. More...
 
gint gnc_quote_source_get_index (const gnc_quote_source *source)
 Given a gnc_quote_source data structure, return the index of this particular quote source within its type. More...
 
const char * gnc_quote_source_get_user_name (const gnc_quote_source *source)
 Given a gnc_quote_source data structure, return the user friendly name of this quote source. More...
 
const char * gnc_quote_source_get_internal_name (const gnc_quote_source *source)
 Given a gnc_quote_source data structure, return the internal name of this quote source. More...
 

Commodity Creation

gnc_commodity * gnc_commodity_new (QofBook *book, const char *fullname, const char *commodity_namespace, const char *mnemonic, const char *cusip, int fraction)
 Create a new commodity. More...
 
void gnc_commodity_destroy (gnc_commodity *cm)
 Destroy a commodity. More...
 
void gnc_commodity_copy (gnc_commodity *dest, const gnc_commodity *src)
 Copy src into dest.
 
gnc_commodity * gnc_commodity_clone (const gnc_commodity *src, QofBook *dest_book)
 allocate and copy
 

Commodity Accessor Routines - Get

const char * gnc_commodity_get_mnemonic (const gnc_commodity *cm)
 Retrieve the mnemonic for the specified commodity. More...
 
const char * gnc_commodity_get_namespace (const gnc_commodity *cm)
 Retrieve the namespace for the specified commodity. More...
 
gnc_commodity_namespace * gnc_commodity_get_namespace_ds (const gnc_commodity *cm)
 Retrieve the namespace data structure for the specified commodity. More...
 
const char * gnc_commodity_get_fullname (const gnc_commodity *cm)
 Retrieve the full name for the specified commodity. More...
 
const char * gnc_commodity_get_printname (const gnc_commodity *cm)
 Retrieve the 'print' name for the specified commodity. More...
 
const char * gnc_commodity_get_cusip (const gnc_commodity *cm)
 Retrieve the 'exchange code' for the specified commodity. More...
 
const char * gnc_commodity_get_unique_name (const gnc_commodity *cm)
 Retrieve the 'unique' name for the specified commodity. More...
 
int gnc_commodity_get_fraction (const gnc_commodity *cm)
 Retrieve the fraction for the specified commodity. More...
 
gboolean gnc_commodity_get_quote_flag (const gnc_commodity *cm)
 Retrieve the automatic price quote flag for the specified commodity. More...
 
gnc_quote_source * gnc_commodity_get_quote_source (const gnc_commodity *cm)
 Retrieve the automatic price quote source for the specified commodity. More...
 
gnc_quote_source * gnc_commodity_get_default_quote_source (const gnc_commodity *cm)
 
const char * gnc_commodity_get_quote_tz (const gnc_commodity *cm)
 Retrieve the automatic price quote timezone for the specified commodity. More...
 
const char * gnc_commodity_get_user_symbol (const gnc_commodity *cm)
 Retrieve the user-defined symbol for the specified commodity. More...
 
const char * gnc_commodity_get_default_symbol (const gnc_commodity *cm)
 Retrieve the default symbol for the specified commodity. More...
 
const char * gnc_commodity_get_nice_symbol (const gnc_commodity *cm)
 Retrieve a symbol for the specified commodity, suitable for display to the user. More...
 

Commodity Accessor Routines - Set

void gnc_commodity_set_mnemonic (gnc_commodity *cm, const char *mnemonic)
 Set the mnemonic for the specified commodity. More...
 
void gnc_commodity_set_namespace (gnc_commodity *cm, const char *new_namespace)
 Set the namespace for the specified commodity. More...
 
void gnc_commodity_set_fullname (gnc_commodity *cm, const char *fullname)
 Set the full name for the specified commodity. More...
 
void gnc_commodity_set_cusip (gnc_commodity *cm, const char *cusip)
 Set the 'exchange code' for the specified commodity. More...
 
void gnc_commodity_set_fraction (gnc_commodity *cm, int smallest_fraction)
 Set the fraction for the specified commodity. More...
 
void gnc_commodity_user_set_quote_flag (gnc_commodity *cm, const gboolean flag)
 Set the automatic price quote flag for the specified commodity, based on user input. More...
 
void gnc_commodity_set_quote_flag (gnc_commodity *cm, const gboolean flag)
 Set the automatic price quote flag for the specified commodity. More...
 
void gnc_commodity_set_quote_source (gnc_commodity *cm, gnc_quote_source *src)
 Set the automatic price quote source for the specified commodity. More...
 
void gnc_commodity_set_quote_tz (gnc_commodity *cm, const char *tz)
 Set the automatic price quote timezone for the specified commodity. More...
 
void gnc_commodity_set_user_symbol (gnc_commodity *cm, const char *user_symbol)
 Set a user-defined symbol for the specified commodity. More...
 

Commodity Usage Count Adjustment Routines

void gnc_commodity_increment_usage_count (gnc_commodity *cm)
 Increment a commodity's internal counter that tracks how many accounts are using that commodity. More...
 
void gnc_commodity_decrement_usage_count (gnc_commodity *cm)
 Decrement a commodity's internal counter that tracks how many accounts are using that commodity. More...
 

Commodity Comparison

gboolean gnc_commodity_equiv (const gnc_commodity *a, const gnc_commodity *b)
 This routine returns TRUE if the two commodities are equivalent. More...
 
gboolean gnc_commodity_equal (const gnc_commodity *a, const gnc_commodity *b)
 This routine returns TRUE if the two commodities are equal. More...
 
int gnc_commodity_compare (const gnc_commodity *a, const gnc_commodity *b)
 This routine returns 0 if the two commodities are equal, 1 otherwise. More...
 
int gnc_commodity_compare_void (const void *a, const void *b)
 A wrapper around gnc_commodity_compare() which offers the function declaration that is needed for g_list_find_custom(), which needs void pointers instead of gnc_commodity ones.
 

Currency Checks

gboolean gnc_commodity_namespace_is_iso (const char *commodity_namespace)
 Checks to see if the specified commodity namespace is the namespace for ISO 4217 currencies. More...
 
gboolean gnc_commodity_is_iso (const gnc_commodity *cm)
 Checks to see if the specified commodity is an ISO 4217 recognized currency. More...
 
gboolean gnc_commodity_is_currency (const gnc_commodity *cm)
 Checks to see if the specified commodity is an ISO 4217 recognized currency or a legacy currency. More...
 

Commodity Table

gnc_commodity_table * gnc_commodity_table_get_table (QofBook *book)
 Returns the commodity table associated with a book.
 

Commodity Table Lookup functions

gnc_commodity * gnc_commodity_table_lookup (const gnc_commodity_table *table, const char *commodity_namespace, const char *mnemonic)
 
gnc_commodity * gnc_commodity_table_lookup_unique (const gnc_commodity_table *table, const char *unique_name)
 
gnc_commodity * gnc_commodity_table_find_full (const gnc_commodity_table *t, const char *commodity_namespace, const char *fullname)
 
gnc_commodity * gnc_commodity_find_commodity_by_guid (const GncGUID *guid, QofBook *book)
 

Commodity Table Maintenance functions

gnc_commodity * gnc_commodity_table_insert (gnc_commodity_table *table, gnc_commodity *comm)
 Add a new commodity to the commodity table. More...
 
void gnc_commodity_table_remove (gnc_commodity_table *table, gnc_commodity *comm)
 Remove a commodity from the commodity table. More...
 
gboolean gnc_commodity_table_add_default_data (gnc_commodity_table *table, QofBook *book)
 Add all the standard namespaces and currencies to the commodity table. More...
 

Commodity Table Namespace functions

const char * gnc_commodity_namespace_get_name (const gnc_commodity_namespace *ns)
 Return the textual name of a namespace data structure. More...
 
const char * gnc_commodity_namespace_get_gui_name (const gnc_commodity_namespace *ns)
 Return the textual name of a namespace data structure in a form suitable to present to the user. More...
 
GList * gnc_commodity_namespace_get_commodity_list (const gnc_commodity_namespace *ns)
 Return a list of all commodity data structures in the specified namespace. More...
 
int gnc_commodity_table_has_namespace (const gnc_commodity_table *table, const char *commodity_namespace)
 Test to see if the indicated namespace exits in the commodity table. More...
 
GList * gnc_commodity_table_get_namespaces (const gnc_commodity_table *t)
 Return a list of all namespaces in the commodity table. More...
 
GList * gnc_commodity_table_get_namespaces_list (const gnc_commodity_table *t)
 Return a list of all namespace data structures in the commodity table. More...
 
gnc_commodity_namespace * gnc_commodity_table_add_namespace (gnc_commodity_table *table, const char *commodity_namespace, QofBook *book)
 This function adds a new string to the list of commodity namespaces. More...
 
gnc_commodity_namespace * gnc_commodity_table_find_namespace (const gnc_commodity_table *table, const char *commodity_namespace)
 This function finds a commodity namespace in the set of existing commodity namespaces. More...
 
void gnc_commodity_table_delete_namespace (gnc_commodity_table *table, const char *commodity_namespace)
 This function deletes a string from the list of commodity namespaces. More...
 

Commodity Table Accessor functions

guint gnc_commodity_table_get_size (const gnc_commodity_table *tbl)
 Returns the number of commodities in the commodity table. More...
 
CommodityList * gnc_commodity_table_get_commodities (const gnc_commodity_table *table, const char *commodity_namespace)
 Return a list of all commodities in the commodity table that are in the given namespace. More...
 
CommodityList * gnc_commodity_table_get_quotable_commodities (const gnc_commodity_table *table)
 This function returns a list of commodities for which price quotes should be retrieved. More...
 
gboolean gnc_commodity_table_foreach_commodity (const gnc_commodity_table *table, gboolean(*f)(gnc_commodity *cm, gpointer user_data), gpointer user_data)
 Call a function once for each commodity in the commodity table. More...
 

Commodity Table Private/Internal-Use Only Routines

gnc_commodity_table * gnc_commodity_table_new (void)
 You probably shouldn't be using gnc_commodity_table_new() directly, it's for internal use only. More...
 
void gnc_commodity_table_destroy (gnc_commodity_table *table)
 
gnc_commodity * gnc_commodity_obtain_twin (const gnc_commodity *findlike, QofBook *book)
 Given the commodity 'findlike', this routine will find and return the equivalent commodity (commodity with the same 'unique name') in the indicated book. More...
 
gboolean gnc_commodity_table_register (void)
 You should probably not be using gnc_commodity_table_register() It is an internal routine for registering the gncObject for the commodity table.
 
void gnc_commodity_begin_edit (gnc_commodity *cm)
 
void gnc_commodity_commit_edit (gnc_commodity *cm)
 
#define gnc_commodity_get_kvp_frame(cm)   qof_instance_get_slots(QOF_INSTANCE(cm))
 Get the internal KVP from of the currency. More...
 

Monetary value, commodity identity and numeric value

typedef GList MonetaryList
 

Manipulate MonetaryList lists

MonetaryList * gnc_monetary_list_add_monetary (MonetaryList *list, gnc_monetary mon)
 Add a gnc_monetary to the list.
 
MonetaryList * gnc_monetary_list_delete_zeros (MonetaryList *list)
 Delete all the zero-value entries from a list. More...
 
void gnc_monetary_list_free (MonetaryList *list)
 Free a monetary list and all the items it points to. More...
 

Detailed Description

A commodity is something of value that is easily tradeable or sellable; for example, currencies, stocks, bonds, grain, copper, and oil are all commodities.

This file provides an API for defining a commodities, and for working with collections of commodities. All GnuCash financial transactions must identify the commodity that is being traded.

Warning
The system used here does not follow the object handling and identification system (GncGUID's, Entities, etc.) that the other parts of GnuCash use. The API really should be ported over. This would allow us to get rid of the commodity table routines defined below.

Macro Definition Documentation

◆ gnc_commodity_get_kvp_frame

#define gnc_commodity_get_kvp_frame (   cm)    qof_instance_get_slots(QOF_INSTANCE(cm))

Get the internal KVP from of the currency.

You should rather use the individual accessors for individual properties

Definition at line 983 of file gnc-commodity.h.

◆ GNC_COMMODITY_NS_LEGACY

#define GNC_COMMODITY_NS_LEGACY   "GNC_LEGACY_CURRENCIES"

The commodity namespace definitions are used to tag a commodity by its type, or a stocks by the exchange where it is traded.

The LEGACY name is only used by the file i/o routines, and is converted to another commodity namespace before it is seen by the rest of the system. The ISO namespace represents currencies. With the exception of the NASDAQ namespace (which is used once in the binary importer) the rest of the namespace declarations are only used to populate an option menu in the commodity selection window.

Definition at line 103 of file gnc-commodity.h.

Enumeration Type Documentation

◆ QuoteSourceType

The quote source type enum account types are used to determine how the transaction data in the account is displayed.

These values can be safely changed from one release to the next.

Enumerator
SOURCE_SINGLE 

This quote source pulls from a single specific web site.

For example, the yahoo_australia source only pulls from the yahoo web site.

SOURCE_MULTI 

This quote source may pull from multiple web sites.

For example, the australia source may pull from ASX, yahoo, etc.

SOURCE_UNKNOWN 

This is a locally installed quote source that gnucash knows nothing about.

May pull from single or multiple locations.

SOURCE_CURRENCY 

The special currency quote source.

Definition at line 128 of file gnc-commodity.h.

129 {
130  SOURCE_SINGLE = 0,
134  SOURCE_MULTI,
141  SOURCE_MAX,
142  SOURCE_CURRENCY = SOURCE_MAX,
This quote source pulls from a single specific web site.
The special currency quote source.
This is a locally installed quote source that gnucash knows nothing about.
QuoteSourceType
The quote source type enum account types are used to determine how the transaction data in the accoun...
This quote source may pull from multiple web sites.

Function Documentation

◆ gnc_commodity_compare()

int gnc_commodity_compare ( const gnc_commodity *  a,
const gnc_commodity *  b 
)

This routine returns 0 if the two commodities are equal, 1 otherwise.

Commodities are equal if they have the same namespace, mnemonic, fullname, exchange private code and fraction. This function is useful for list-traversal comparison purposes where The semantics are 0, <0, or >0 (equal, greater than, less than) rather than "true or false"

Definition at line 1536 of file gnc-commodity.cpp.

1537 {
1538  if (a == b) return 0;
1539  if (a && !b) return 1;
1540  if (b && !a) return -1;
1541  return qof_instance_guid_compare(a, b);
1542 }
gint qof_instance_guid_compare(gconstpointer ptr1, gconstpointer ptr2)
Compare the GncGUID values of two instances.

◆ gnc_commodity_decrement_usage_count()

void gnc_commodity_decrement_usage_count ( gnc_commodity *  cm)

Decrement a commodity's internal counter that tracks how many accounts are using that commodity.

For currencies, this may have the side effect of disabling the commodity's quote flag.

Parameters
cmA pointer to a commodity data structure.

Definition at line 1469 of file gnc-commodity.cpp.

1470 {
1471  gnc_commodityPrivate* priv;
1472 
1473  ENTER("(cm=%p)", cm);
1474 
1475  if (!cm)
1476  {
1477  LEAVE("");
1478  return;
1479  }
1480 
1481  priv = GET_PRIVATE(cm);
1482 
1483  if (priv->usage_count == 0)
1484  {
1485  PWARN("usage_count already zero");
1486  LEAVE("");
1487  return;
1488  }
1489 
1490  priv->usage_count--;
1491  if ((priv->usage_count == 0) && priv->quote_flag
1492  && gnc_commodity_get_auto_quote_control_flag(cm)
1493  && gnc_commodity_is_iso(cm))
1494  {
1495  /* if this is a currency with auto quote control enabled and no more
1496  * accounts reference this currency, disable quote retrieval */
1497  gnc_commodity_set_quote_flag(cm, FALSE);
1498  }
1499  LEAVE("(usage_count=%d)", priv->usage_count);
1500 }
void gnc_commodity_set_quote_flag(gnc_commodity *cm, const gboolean flag)
Set the automatic price quote flag for the specified commodity.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.

◆ gnc_commodity_destroy()

void gnc_commodity_destroy ( gnc_commodity *  cm)

Destroy a commodity.

Release all memory attached to this data structure.

Note
This function does not (can not) check to see if the commodity is referenced anywhere.
Parameters
cmThe commodity to destroy.

Definition at line 872 of file gnc-commodity.cpp.

873 {
874  gnc_commodity_begin_edit(cm);
875  qof_instance_set_destroying(cm, TRUE);
876  gnc_commodity_commit_edit(cm);
877 }

◆ gnc_commodity_equal()

gboolean gnc_commodity_equal ( const gnc_commodity *  a,
const gnc_commodity *  b 
)

This routine returns TRUE if the two commodities are equal.

Commodities are equal if they have the same namespace, mnemonic, fullname, exchange private code and fraction.

Definition at line 1529 of file gnc-commodity.cpp.

1530 {
1531  return gnc_commodity_compare(a, b) == 0;
1532 }
int gnc_commodity_compare(const gnc_commodity *a, const gnc_commodity *b)
This routine returns 0 if the two commodities are equal, 1 otherwise.

◆ gnc_commodity_equiv()

gboolean gnc_commodity_equiv ( const gnc_commodity *  a,
const gnc_commodity *  b 
)

This routine returns TRUE if the two commodities are equivalent.

Commodities are equivalent if they have the same namespace and mnemonic. Equivalent commodities may belong to different exchanges, may have different fullnames, and may have different fractions.

Definition at line 1512 of file gnc-commodity.cpp.

1513 {
1514  gnc_commodityPrivate* priv_a;
1515  gnc_commodityPrivate* priv_b;
1516 
1517  if (a == b) return TRUE;
1518  if (!a || !b) return FALSE;
1519 
1520  priv_a = GET_PRIVATE(a);
1521  priv_b = GET_PRIVATE(b);
1522  if (priv_a->name_space != priv_b->name_space) return FALSE;
1523  if (g_strcmp0(priv_a->mnemonic, priv_b->mnemonic) != 0) return FALSE;
1524 
1525  return TRUE;
1526 }

◆ gnc_commodity_get_cusip()

const char* gnc_commodity_get_cusip ( const gnc_commodity *  cm)

Retrieve the 'exchange code' for the specified commodity.

This will be a pointer to a null terminated string of the form "AXQ14728", etc. This field is often used when presenting information to the user.

Note
This is a unique code that specifies a particular item or set of shares of a commodity, not a code that specifies a stock exchange. That is the namespace field.
Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the exchange code for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 997 of file gnc-commodity.cpp.

998 {
999  if (!cm) return nullptr;
1000  return GET_PRIVATE(cm)->cusip;
1001 }

◆ gnc_commodity_get_default_symbol()

const char* gnc_commodity_get_default_symbol ( const gnc_commodity *  cm)

Retrieve the default symbol for the specified commodity.

This will be a pointer to a nul terminated string like "£", "US$", etc. Note that for the locale currency, you probably want to look at the system-provided symbol first. See gnc_commodity_get_nice_symbol.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the default symbol for this commodity.

Definition at line 1099 of file gnc-commodity.cpp.

1100 {
1101  if (!cm) return nullptr;
1102  return GET_PRIVATE(cm)->default_symbol;
1103 }

◆ gnc_commodity_get_fraction()

int gnc_commodity_get_fraction ( const gnc_commodity *  cm)

Retrieve the fraction for the specified commodity.

This will be an integer value specifying the number of fractional units that one of these commodities can be divided into. Should always be a power of 10.

Parameters
cmA pointer to a commodity data structure.
Returns
The number of fractional units that one of these commodities can be divided into.

Definition at line 1008 of file gnc-commodity.cpp.

1009 {
1010  if (!cm) return 0;
1011  return GET_PRIVATE(cm)->fraction;
1012 }

◆ gnc_commodity_get_fullname()

const char* gnc_commodity_get_fullname ( const gnc_commodity *  cm)

Retrieve the full name for the specified commodity.

This will be a pointer to a null terminated string of the form "Acme Systems, Inc.", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the full name for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 973 of file gnc-commodity.cpp.

974 {
975  if (!cm) return nullptr;
976  return GET_PRIVATE(cm)->fullname;
977 }

◆ gnc_commodity_get_mnemonic()

const char* gnc_commodity_get_mnemonic ( const gnc_commodity *  cm)

Retrieve the mnemonic for the specified commodity.

This will be a pointer to a null terminated string of the form "ACME", "QWER", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the mnemonic for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 932 of file gnc-commodity.cpp.

933 {
934  if (!cm) return nullptr;
935  return GET_PRIVATE(cm)->mnemonic;
936 }

◆ gnc_commodity_get_namespace()

const char* gnc_commodity_get_namespace ( const gnc_commodity *  cm)

Retrieve the namespace for the specified commodity.

This will be a pointer to a null terminated string of the form "AMEX", "NASDAQ", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the namespace for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 955 of file gnc-commodity.cpp.

956 {
957  if (!cm) return nullptr;
958  return gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->name_space);
959 }
const char * gnc_commodity_namespace_get_name(const gnc_commodity_namespace *ns)
Return the textual name of a namespace data structure.

◆ gnc_commodity_get_namespace_ds()

gnc_commodity_namespace* gnc_commodity_get_namespace_ds ( const gnc_commodity *  cm)

Retrieve the namespace data structure for the specified commodity.

This will be a pointer to another data structure.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the namespace data structure for this commodity.

Definition at line 962 of file gnc-commodity.cpp.

963 {
964  if (!cm) return nullptr;
965  return GET_PRIVATE(cm)->name_space;
966 }

◆ gnc_commodity_get_nice_symbol()

const char* gnc_commodity_get_nice_symbol ( const gnc_commodity *  cm)

Retrieve a symbol for the specified commodity, suitable for display to the user.

This will be a pointer to a nul terminated string like "£", "US$", etc. That function is locale-aware and will base its choice of symbol on the user-configured symbol, the locale a

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the symbol for this commodity.

Definition at line 1109 of file gnc-commodity.cpp.

1110 {
1111  const char *nice_symbol;
1112  struct lconv *lc;
1113  if (!cm) return nullptr;
1114 
1115  nice_symbol = gnc_commodity_get_user_symbol(cm);
1116  if (nice_symbol && *nice_symbol)
1117  return nice_symbol;
1118 
1119  lc = gnc_localeconv();
1120  nice_symbol = lc->currency_symbol;
1121  if (!g_strcmp0(gnc_commodity_get_mnemonic(cm), lc->int_curr_symbol))
1122  return nice_symbol;
1123 
1124  nice_symbol = gnc_commodity_get_default_symbol(cm);
1125  if (nice_symbol && *nice_symbol)
1126  return nice_symbol;
1127 
1128  return gnc_commodity_get_mnemonic(cm);
1129 }
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
Retrieve the mnemonic for the specified commodity.
const char * gnc_commodity_get_user_symbol(const gnc_commodity *cm)
Retrieve the user-defined symbol for the specified commodity.
const char * gnc_commodity_get_default_symbol(const gnc_commodity *cm)
Retrieve the default symbol for the specified commodity.

◆ gnc_commodity_get_printname()

const char* gnc_commodity_get_printname ( const gnc_commodity *  cm)

Retrieve the 'print' name for the specified commodity.

This will be a pointer to a null terminated string of the form "Acme Systems, Inc. (ACME)", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the print name for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 943 of file gnc-commodity.cpp.

944 {
945  if (!cm) return nullptr;
946  return GET_PRIVATE(cm)->printname;
947 }

◆ gnc_commodity_get_quote_flag()

gboolean gnc_commodity_get_quote_flag ( const gnc_commodity *  cm)

Retrieve the automatic price quote flag for the specified commodity.

This flag indicates whether stock quotes should be retrieved for the specified stock.

Parameters
cmA pointer to a commodity data structure.
Returns
TRUE if quotes should be pulled for this commodity, FALSE otherwise.

Definition at line 1038 of file gnc-commodity.cpp.

1039 {
1040  if (!cm) return FALSE;
1041  return (GET_PRIVATE(cm)->quote_flag);
1042 }

◆ gnc_commodity_get_quote_source()

gnc_quote_source* gnc_commodity_get_quote_source ( const gnc_commodity *  cm)

Retrieve the automatic price quote source for the specified commodity.

This will be a pointer to a null terminated string of the form "Yahoo (Asia)", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the price quote source for this commodity.

Definition at line 1049 of file gnc-commodity.cpp.

1050 {
1051  gnc_commodityPrivate* priv;
1052 
1053  if (!cm) return nullptr;
1054  priv = GET_PRIVATE(cm);
1055  if (!priv->quote_source && gnc_commodity_is_iso(cm))
1056  return &currency_quote_sources.front();
1057  return priv->quote_source;
1058 }
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.

◆ gnc_commodity_get_quote_tz()

const char* gnc_commodity_get_quote_tz ( const gnc_commodity *  cm)

Retrieve the automatic price quote timezone for the specified commodity.

This will be a pointer to a null terminated string of the form "America/New_York", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the price quote timezone for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 1074 of file gnc-commodity.cpp.

1075 {
1076  if (!cm) return nullptr;
1077  return GET_PRIVATE(cm)->quote_tz;
1078 }

◆ gnc_commodity_get_unique_name()

const char* gnc_commodity_get_unique_name ( const gnc_commodity *  cm)

Retrieve the 'unique' name for the specified commodity.

This will be a pointer to a null terminated string of the form "AMEX::ACME", etc. This field is often used when performing comparisons or other functions invisible to the user.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the 'unique' name for this commodity. This string is owned by the engine and should not be freed by the caller.

Definition at line 985 of file gnc-commodity.cpp.

986 {
987  if (!cm) return nullptr;
988  return GET_PRIVATE(cm)->unique_name;
989 }

◆ gnc_commodity_get_user_symbol()

const char* gnc_commodity_get_user_symbol ( const gnc_commodity *  cm)

Retrieve the user-defined symbol for the specified commodity.

This will be a pointer to a nul terminated string like "£", "US$", etc.

Parameters
cmA pointer to a commodity data structure.
Returns
A pointer to the user-defined symbol for this commodity. NULL means that the user didn't define any symbol, and that fallback to e.g. the mnemonic is in order. This string is owned by the engine and should not be freed by the caller.

Definition at line 1084 of file gnc-commodity.cpp.

1085 {
1086  g_return_val_if_fail (GNC_IS_COMMODITY (cm), nullptr);
1087 
1088  GValue v = G_VALUE_INIT;
1089  qof_instance_get_kvp (QOF_INSTANCE(cm), &v, 1, "user_symbol");
1090  const char *rv = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : nullptr;
1091  g_value_unset (&v);
1092  return rv;
1093 }
void qof_instance_get_kvp(QofInstance *, GValue *value, unsigned count,...)
Retrieves the contents of a KVP slot into a provided GValue.

◆ gnc_commodity_increment_usage_count()

void gnc_commodity_increment_usage_count ( gnc_commodity *  cm)

Increment a commodity's internal counter that tracks how many accounts are using that commodity.

For currencies, this may have the side effect of enabling the commodity's quote flag.

Parameters
cmA pointer to a commodity data structure.

Definition at line 1434 of file gnc-commodity.cpp.

1435 {
1436  gnc_commodityPrivate* priv;
1437 
1438  ENTER("(cm=%p)", cm);
1439 
1440  if (!cm)
1441  {
1442  LEAVE("");
1443  return;
1444  }
1445 
1446  priv = GET_PRIVATE(cm);
1447 
1448  if ((priv->usage_count == 0) && !priv->quote_flag
1449  && gnc_commodity_get_auto_quote_control_flag(cm)
1450  && gnc_commodity_is_iso(cm))
1451  {
1452  /* compatibility hack - Gnucash 1.8 gets currency quotes when a
1453  non-default currency is assigned to an account. */
1454  gnc_commodity_begin_edit(cm);
1455  gnc_commodity_set_quote_flag(cm, TRUE);
1457  gnc_commodity_get_default_quote_source(cm));
1458  gnc_commodity_commit_edit(cm);
1459  }
1460  priv->usage_count++;
1461  LEAVE("(usage_count=%d)", priv->usage_count);
1462 }
void gnc_commodity_set_quote_flag(gnc_commodity *cm, const gboolean flag)
Set the automatic price quote flag for the specified commodity.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
void gnc_commodity_set_quote_source(gnc_commodity *cm, gnc_quote_source *src)
Set the automatic price quote source for the specified commodity.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.

◆ gnc_commodity_is_currency()

gboolean gnc_commodity_is_currency ( const gnc_commodity *  cm)

Checks to see if the specified commodity is an ISO 4217 recognized currency or a legacy currency.

Parameters
cmThe commodity to check.
Returns
TRUE if the commodity represents a currency, FALSE otherwise.

Definition at line 1985 of file gnc-commodity.cpp.

1986 {
1987  const char *ns_name;
1988  if (!cm) return FALSE;
1989 
1990  ns_name = gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->name_space);
1991  return (!g_strcmp0(ns_name, GNC_COMMODITY_NS_LEGACY) ||
1992  !g_strcmp0(ns_name, GNC_COMMODITY_NS_CURRENCY));
1993 }
const char * gnc_commodity_namespace_get_name(const gnc_commodity_namespace *ns)
Return the textual name of a namespace data structure.
#define GNC_COMMODITY_NS_LEGACY
The commodity namespace definitions are used to tag a commodity by its type, or a stocks by the excha...

◆ gnc_commodity_is_iso()

gboolean gnc_commodity_is_iso ( const gnc_commodity *  cm)

Checks to see if the specified commodity is an ISO 4217 recognized currency.

Parameters
cmThe commodity to check.
Returns
TRUE if the commodity represents a currency, FALSE otherwise.

Definition at line 1973 of file gnc-commodity.cpp.

1974 {
1975  gnc_commodityPrivate* priv;
1976 
1977  if (!cm) return FALSE;
1978 
1979  priv = GET_PRIVATE(cm);
1980  if ( !priv->name_space) return FALSE;
1981  return priv->name_space->iso4217;
1982 }

◆ gnc_commodity_namespace_get_commodity_list()

GList* gnc_commodity_namespace_get_commodity_list ( const gnc_commodity_namespace *  ns)

Return a list of all commodity data structures in the specified namespace.

Returns
A pointer to the list of structures. NULL if an invalid argument was supplied.
Note
This list is owned by the caller who must free the list.

Definition at line 1573 of file gnc-commodity.cpp.

1574 {
1575  if (!name_space)
1576  return nullptr;
1577 
1578  return g_list_copy (name_space->cm_list);
1579 }

◆ gnc_commodity_namespace_get_gui_name()

const char* gnc_commodity_namespace_get_gui_name ( const gnc_commodity_namespace *  ns)

Return the textual name of a namespace data structure in a form suitable to present to the user.

Parameters
nsA pointer to the namespace data structure.
Returns
A pointer to the gui friendly name of the namespace. This string is owned by the engine and should not be freed by the caller.

The returned string is marked for translation, but not translated yet. If you want it translated pass the return value on to gettext.

Definition at line 1563 of file gnc-commodity.cpp.

1564 {
1565  if (ns == nullptr)
1566  return nullptr;
1567  if (g_strcmp0 (ns->name, GNC_COMMODITY_NS_CURRENCY) == 0)
1568  return GNC_COMMODITY_NS_ISO_GUI;
1569  return ns->name;
1570 }

◆ gnc_commodity_namespace_get_name()

const char* gnc_commodity_namespace_get_name ( const gnc_commodity_namespace *  ns)

Return the textual name of a namespace data structure.

Parameters
nsA pointer to the namespace data structure.
Returns
A pointer to the name of the namespace. This string is owned by the engine and should not be freed by the caller.

Definition at line 1555 of file gnc-commodity.cpp.

1556 {
1557  if (ns == nullptr)
1558  return nullptr;
1559  return ns->name;
1560 }

◆ gnc_commodity_namespace_is_iso()

gboolean gnc_commodity_namespace_is_iso ( const char *  commodity_namespace)

Checks to see if the specified commodity namespace is the namespace for ISO 4217 currencies.

Parameters
commodity_namespaceThe string to check.
Returns
TRUE if the string indicates an ISO currency, FALSE otherwise.

Definition at line 1582 of file gnc-commodity.cpp.

1583 {
1584  return ((g_strcmp0(name_space, GNC_COMMODITY_NS_ISO) == 0) ||
1585  (g_strcmp0(name_space, GNC_COMMODITY_NS_CURRENCY) == 0));
1586 }

◆ gnc_commodity_new()

gnc_commodity* gnc_commodity_new ( QofBook *  book,
const char *  fullname,
const char *  commodity_namespace,
const char *  mnemonic,
const char *  cusip,
int  fraction 
)

Create a new commodity.

This function allocates a new commodity data structure, populates it with the data provided, and then generates the dynamic names that exist as part of a commodity.

Note
This function does not check to see if the commodity exists before adding a new commodity.
Parameters
bookThe book that the new commodity will belong to.
fullnameThe complete name of this commodity. E.G. "Acme Systems, Inc."
commodity_namespaceAn aggregation of commodities. E.G. ISO4217, Nasdaq, Downbelow, etc.
mnemonicAn abbreviation for this stock. For publicly traced stocks, this field should contain the stock ticker symbol. This field is used to get online price quotes, so it must match the stock ticker symbol used by the exchange where you want to get automatic stock quote updates. E.G. ACME, ACME.US, etc.
cusipA string containing the CUSIP code or similar UNIQUE code for this commodity like the ISIN. The stock ticker is NOT appropriate as that goes in the mnemonic field.
fractionThe smallest division of this commodity allowed. I.E. If this is 1, then the commodity must be traded in whole units; if 100 then the commodity may be traded in 0.01 units, etc.
Returns
A pointer to the new commodity.

Definition at line 779 of file gnc-commodity.cpp.

782 {
783  auto retval = GNC_COMMODITY(g_object_new(GNC_TYPE_COMMODITY, nullptr));
784 
785  qof_instance_init_data (&retval->inst, GNC_ID_COMMODITY, book);
786  gnc_commodity_begin_edit(retval);
787 
788  if ( name_space != nullptr )
789  {
790  /* Prevent setting anything except template in namespace template. */
791  if (g_strcmp0 (name_space, GNC_COMMODITY_NS_TEMPLATE) == 0 &&
792  g_strcmp0 (mnemonic, "template") != 0)
793  {
794  PWARN("Converting commodity %s from namespace template to "
795  "namespace User", mnemonic);
796  name_space = "User";
797  }
798  gnc_commodity_set_namespace(retval, name_space);
799  if (gnc_commodity_namespace_is_iso(name_space))
800  {
803  }
804  }
805  gnc_commodity_set_fullname(retval, fullname);
806  gnc_commodity_set_mnemonic(retval, mnemonic);
807  gnc_commodity_set_cusip(retval, cusip);
808  gnc_commodity_set_fraction(retval, fraction);
809  mark_commodity_dirty (retval);
810  gnc_commodity_commit_edit(retval);
811 
812  qof_event_gen (&retval->inst, QOF_EVENT_CREATE, nullptr);
813 
814  return retval;
815 }
void gnc_commodity_set_fraction(gnc_commodity *cm, int fraction)
Set the fraction for the specified commodity.
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
void qof_instance_init_data(QofInstance *inst, QofIdType type, QofBook *book)
Initialise the settings associated with an instance.
void gnc_commodity_set_quote_source(gnc_commodity *cm, gnc_quote_source *src)
Set the automatic price quote source for the specified commodity.
void gnc_commodity_set_cusip(gnc_commodity *cm, const char *cusip)
Set the &#39;exchange code&#39; for the specified commodity.
gboolean gnc_commodity_namespace_is_iso(const char *name_space)
Checks to see if the specified commodity namespace is the namespace for ISO 4217 currencies.
gnc_quote_source * gnc_quote_source_lookup_by_internal(const char *name)
Given the internal (gnucash or F::Q) name of a quote source, find the data structure identified by th...
void gnc_commodity_set_fullname(gnc_commodity *cm, const char *fullname)
Set the full name for the specified commodity.
void gnc_commodity_set_mnemonic(gnc_commodity *cm, const char *mnemonic)
Set the mnemonic for the specified commodity.
void gnc_commodity_set_namespace(gnc_commodity *cm, const char *name_space)
Set the namespace for the specified commodity.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
Definition: qofevent.cpp:231

◆ gnc_commodity_obtain_twin()

gnc_commodity* gnc_commodity_obtain_twin ( const gnc_commodity *  findlike,
QofBook *  book 
)

Given the commodity 'findlike', this routine will find and return the equivalent commodity (commodity with the same 'unique name') in the indicated book.

This routine is primarily useful for setting up clones of things across multiple books.

Definition at line 1622 of file gnc-commodity.cpp.

1623 {
1624  gnc_commodity *twin;
1625  const char * ucom;
1626  gnc_commodity_table * comtbl;
1627 
1628  if (!from) return nullptr;
1629  comtbl = gnc_commodity_table_get_table (book);
1630  if (!comtbl) return nullptr;
1631 
1632  ucom = gnc_commodity_get_unique_name (from);
1633  twin = gnc_commodity_table_lookup_unique (comtbl, ucom);
1634  if (!twin)
1635  {
1636  twin = gnc_commodity_clone (from, book);
1637  twin = gnc_commodity_table_insert (comtbl, twin);
1638  }
1639  return twin;
1640 }
gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table *table, gnc_commodity *comm)
Add a new commodity to the commodity table.
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
Returns the commodity table associated with a book.
gnc_commodity * gnc_commodity_clone(const gnc_commodity *src, QofBook *dest_book)
allocate and copy
const char * gnc_commodity_get_unique_name(const gnc_commodity *cm)
Retrieve the &#39;unique&#39; name for the specified commodity.

◆ gnc_commodity_set_cusip()

void gnc_commodity_set_cusip ( gnc_commodity *  cm,
const char *  cusip 
)

Set the 'exchange code' for the specified commodity.

This should be a pointer to a null terminated string of the form "AXQ14728", etc.

Note
This is a unique code that specifies a particular item or set of shares of a commodity, not a code that specifies a stock exchange. That is the namespace field.
Parameters
cmA pointer to a commodity data structure.
cusipA pointer to the cusip or other exchange specific data for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1211 of file gnc-commodity.cpp.

1213 {
1214  gnc_commodityPrivate* priv;
1215 
1216  if (!cm) return;
1217 
1218  priv = GET_PRIVATE(cm);
1219  if (priv->cusip == cusip) return;
1220 
1221  gnc_commodity_begin_edit(cm);
1222  CACHE_REMOVE (priv->cusip);
1223  priv->cusip = CACHE_INSERT (cusip);
1224  mark_commodity_dirty(cm);
1225  gnc_commodity_commit_edit(cm);
1226 }

◆ gnc_commodity_set_fraction()

void gnc_commodity_set_fraction ( gnc_commodity *  cm,
int  smallest_fraction 
)

Set the fraction for the specified commodity.

This should be an integer value specifying the number of fractional units that one of these commodities can be divided into. Should always be a power of 10.

Parameters
cmA pointer to a commodity data structure.
smallest_fractionThe number of fractional units that one of these commodities can be divided into.

Definition at line 1233 of file gnc-commodity.cpp.

1234 {
1235  if (!cm) return;
1236  gnc_commodity_begin_edit(cm);
1237  GET_PRIVATE(cm)->fraction = fraction;
1238  mark_commodity_dirty(cm);
1239  gnc_commodity_commit_edit(cm);
1240 }

◆ gnc_commodity_set_fullname()

void gnc_commodity_set_fullname ( gnc_commodity *  cm,
const char *  fullname 
)

Set the full name for the specified commodity.

This should be a pointer to a null terminated string of the form "Acme Systems, Inc.", etc.

Parameters
cmA pointer to a commodity data structure.
fullnameA pointer to the full name for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1189 of file gnc-commodity.cpp.

1190 {
1191  gnc_commodityPrivate* priv;
1192 
1193  if (!cm) return;
1194  priv = GET_PRIVATE(cm);
1195  if (priv->fullname == fullname) return;
1196 
1197  CACHE_REMOVE (priv->fullname);
1198  priv->fullname = CACHE_INSERT (fullname);
1199 
1200  gnc_commodity_begin_edit(cm);
1201  mark_commodity_dirty(cm);
1202  reset_printname(priv);
1203  gnc_commodity_commit_edit(cm);
1204 }

◆ gnc_commodity_set_mnemonic()

void gnc_commodity_set_mnemonic ( gnc_commodity *  cm,
const char *  mnemonic 
)

Set the mnemonic for the specified commodity.

This should be a pointer to a null terminated string of the form "ACME", "QWER", etc.

Parameters
cmA pointer to a commodity data structure.
mnemonicA pointer to the mnemonic for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1136 of file gnc-commodity.cpp.

1137 {
1138  gnc_commodityPrivate* priv;
1139 
1140  if (!cm) return;
1141  priv = GET_PRIVATE(cm);
1142  if (priv->mnemonic == mnemonic) return;
1143 
1144  gnc_commodity_begin_edit(cm);
1145  CACHE_REMOVE (priv->mnemonic);
1146  priv->mnemonic = CACHE_INSERT(mnemonic);
1147 
1148  mark_commodity_dirty (cm);
1149  reset_printname(priv);
1150  reset_unique_name(priv);
1151  gnc_commodity_commit_edit(cm);
1152 }

◆ gnc_commodity_set_namespace()

void gnc_commodity_set_namespace ( gnc_commodity *  cm,
const char *  new_namespace 
)

Set the namespace for the specified commodity.

This should be a pointer to a null terminated string of the form "AMEX", "NASDAQ", etc.

Parameters
cmA pointer to a commodity data structure.
new_namespaceA pointer to the namespace for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1159 of file gnc-commodity.cpp.

1160 {
1161  QofBook *book;
1162  gnc_commodity_table *table;
1163  gnc_commodity_namespace *nsp;
1164  gnc_commodityPrivate* priv;
1165 
1166  if (!cm) return;
1167  priv = GET_PRIVATE(cm);
1168  book = qof_instance_get_book (&cm->inst);
1170  nsp = gnc_commodity_table_add_namespace(table, name_space, book);
1171  if (priv->name_space == nsp)
1172  return;
1173 
1174  gnc_commodity_begin_edit(cm);
1175  priv->name_space = nsp;
1176  if (nsp->iso4217)
1177  priv->quote_source = gnc_quote_source_lookup_by_internal("currency");
1178  mark_commodity_dirty(cm);
1179  reset_printname(priv);
1180  reset_unique_name(priv);
1181  gnc_commodity_commit_edit(cm);
1182 }
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
Returns the commodity table associated with a book.
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table *table, const char *name_space, QofBook *book)
This function adds a new string to the list of commodity namespaces.
gnc_quote_source * gnc_quote_source_lookup_by_internal(const char *name)
Given the internal (gnucash or F::Q) name of a quote source, find the data structure identified by th...

◆ gnc_commodity_set_quote_flag()

void gnc_commodity_set_quote_flag ( gnc_commodity *  cm,
const gboolean  flag 
)

Set the automatic price quote flag for the specified commodity.

This flag indicates whether stock quotes should be retrieved for the specified stock.

Parameters
cmA pointer to a commodity data structure.
flagTRUE if quotes should be pulled for this commodity, FALSE otherwise.

Definition at line 1314 of file gnc-commodity.cpp.

1315 {
1316  ENTER ("(cm=%p, flag=%d)", cm, flag);
1317 
1318  if (!cm) return;
1319  gnc_commodity_begin_edit(cm);
1320  GET_PRIVATE(cm)->quote_flag = flag;
1321  mark_commodity_dirty(cm);
1322  gnc_commodity_commit_edit(cm);
1323  LEAVE(" ");
1324 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_commodity_set_quote_source()

void gnc_commodity_set_quote_source ( gnc_commodity *  cm,
gnc_quote_source *  src 
)

Set the automatic price quote source for the specified commodity.

This should be a pointer to a null terminated string of the form "Yahoo (Asia)", etc. Legal values can be found in the quote_sources array in the file gnc-ui-util.c.

Parameters
cmA pointer to a commodity data structure.
srcA pointer to the price quote source for this commodity.

Definition at line 1331 of file gnc-commodity.cpp.

1332 {
1333  ENTER ("(cm=%p, src=%p(%s))", cm, src, src ? src->get_internal_name() : "unknown");
1334 
1335  if (!cm) return;
1336  gnc_commodity_begin_edit(cm);
1337  GET_PRIVATE(cm)->quote_source = src;
1338  mark_commodity_dirty(cm);
1339  gnc_commodity_commit_edit(cm);
1340  LEAVE(" ");
1341 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_commodity_set_quote_tz()

void gnc_commodity_set_quote_tz ( gnc_commodity *  cm,
const char *  tz 
)

Set the automatic price quote timezone for the specified commodity.

This should be a pointer to a null terminated string of the form "America/New_York", etc. Legal values can be found in the known_timezones array in the file src/gnome-utils/dialog-commodity.c.

Parameters
cmA pointer to a commodity data structure.
tzA pointer to the price quote timezone for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1348 of file gnc-commodity.cpp.

1349 {
1350  gnc_commodityPrivate* priv;
1351 
1352  if (!cm) return;
1353 
1354  ENTER ("(cm=%p, tz=%s)", cm, tz ? tz : "(null)");
1355 
1356  priv = GET_PRIVATE(cm);
1357 
1358  if (tz == priv->quote_tz)
1359  {
1360  LEAVE("Already correct TZ");
1361  return;
1362  }
1363 
1364  gnc_commodity_begin_edit(cm);
1365  CACHE_REMOVE (priv->quote_tz);
1366  priv->quote_tz = CACHE_INSERT (tz);
1367  mark_commodity_dirty(cm);
1368  gnc_commodity_commit_edit(cm);
1369  LEAVE(" ");
1370 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_commodity_set_user_symbol()

void gnc_commodity_set_user_symbol ( gnc_commodity *  cm,
const char *  user_symbol 
)

Set a user-defined symbol for the specified commodity.

This should be a pointer to a nul terminated string like "£", "US$", etc.

Parameters
cmA pointer to a commodity data structure.
tzA pointer to the symbol for this commodity. This string belongs to the caller and will be duplicated by the engine.

Definition at line 1377 of file gnc-commodity.cpp.

1378 {
1379  struct lconv *lc;
1380 
1381  if (!cm) return;
1382 
1383  ENTER ("(cm=%p, symbol=%s)", cm, user_symbol ? user_symbol : "(null)");
1384 
1385  lc = gnc_localeconv();
1386  if (!user_symbol || !*user_symbol)
1387  user_symbol = nullptr;
1388  else if (!g_strcmp0(lc->int_curr_symbol, gnc_commodity_get_mnemonic(cm)) &&
1389  !g_strcmp0(lc->currency_symbol, user_symbol))
1390  /* if the user gives the ISO symbol for the locale currency or the
1391  * default symbol, actually remove the user symbol */
1392  user_symbol = nullptr;
1393  else if (!g_strcmp0(user_symbol, gnc_commodity_get_default_symbol(cm)))
1394  user_symbol = nullptr;
1395 
1396  gnc_commodity_begin_edit (cm);
1397 
1398  if (user_symbol)
1399  {
1400  GValue v = G_VALUE_INIT;
1401  g_value_init (&v, G_TYPE_STRING);
1402  g_value_set_static_string (&v, user_symbol);
1403  qof_instance_set_kvp (QOF_INSTANCE(cm), &v, 1, "user_symbol");
1404  g_value_unset (&v);
1405  }
1406  else
1407  {
1408  qof_instance_set_kvp (QOF_INSTANCE(cm), nullptr, 1, "user_symbol");
1409  }
1410 
1411  mark_commodity_dirty(cm);
1412  gnc_commodity_commit_edit(cm);
1413 
1414  LEAVE(" ");
1415 }
void qof_instance_set_kvp(QofInstance *, GValue const *value, unsigned count,...)
Sets a KVP slot to a value from a GValue.
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
Retrieve the mnemonic for the specified commodity.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
const char * gnc_commodity_get_default_symbol(const gnc_commodity *cm)
Retrieve the default symbol for the specified commodity.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_commodity_table_add_default_data()

gboolean gnc_commodity_table_add_default_data ( gnc_commodity_table *  table,
QofBook *  book 
)

Add all the standard namespaces and currencies to the commodity table.

This routine creates the namespaces for the NYSE, NASDAQ, etc. It also adds all of the ISO 4217 currencies to the commodity table.

Parameters
tableA pointer to the commodity table.
bookUnused.

Definition at line 2318 of file gnc-commodity.cpp.

2319 {
2320  QofCollection *col;
2321  gnc_commodity* c;
2322 
2323  ENTER ("table=%p", table);
2324  gnc_commodity_table_add_namespace(table, GNC_COMMODITY_NS_TEMPLATE, book);
2325  c = gnc_commodity_new(book, "template", GNC_COMMODITY_NS_TEMPLATE, "template", "template", 1);
2327 
2328 #include "iso-4217-currencies.c"
2329 
2330  /* We've just created the default namespaces and currencies. Mark
2331  * these collections as clean because there is no USER entered data
2332  * in these collections as of yet. */
2333  col = qof_book_get_collection(book, GNC_ID_COMMODITY);
2335  col = qof_book_get_collection(book, GNC_ID_COMMODITY_NAMESPACE);
2337 
2338  LEAVE ("table=%p", table);
2339  return TRUE;
2340 }
gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table *table, gnc_commodity *comm)
Add a new commodity to the commodity table.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table *table, const char *name_space, QofBook *book)
This function adds a new string to the list of commodity namespaces.
gnc_commodity * gnc_commodity_new(QofBook *book, const char *fullname, const char *name_space, const char *mnemonic, const char *cusip, int fraction)
Create a new commodity.
void qof_collection_mark_clean(QofCollection *)
reset value of dirty flag
Definition: qofid.cpp:261
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
QofCollection * qof_book_get_collection(const QofBook *book, QofIdType entity_type)
Return The table of entities of the given type.
Definition: qofbook.cpp:521

◆ gnc_commodity_table_add_namespace()

gnc_commodity_namespace* gnc_commodity_table_add_namespace ( gnc_commodity_table *  table,
const char *  commodity_namespace,
QofBook *  book 
)

This function adds a new string to the list of commodity namespaces.

If the new namespace already exists, nothing happens.

Parameters
tableA pointer to the commodity table
commodity_namespaceThe new namespace to be added.
bookThe book that the new namespace will belong to.
Returns
A pointer to the newly created namespace.

Definition at line 2138 of file gnc-commodity.cpp.

2141 {
2142  gnc_commodity_namespace * ns = nullptr;
2143 
2144  if (!table) return nullptr;
2145 
2146  name_space = gnc_commodity_table_map_namespace(name_space);
2147  ns = gnc_commodity_table_find_namespace(table, name_space);
2148  if (!ns)
2149  {
2150  ns = static_cast<gnc_commodity_namespace*>(g_object_new(GNC_TYPE_COMMODITY_NAMESPACE, nullptr));
2151  ns->cm_table = g_hash_table_new(g_str_hash, g_str_equal);
2152  ns->name = CACHE_INSERT(static_cast<const char*>(name_space));
2153  ns->iso4217 = gnc_commodity_namespace_is_iso(name_space);
2154  qof_instance_init_data (&ns->inst, GNC_ID_COMMODITY_NAMESPACE, book);
2155  qof_event_gen (&ns->inst, QOF_EVENT_CREATE, nullptr);
2156 
2157  g_hash_table_insert(table->ns_table,
2158  (gpointer) ns->name,
2159  (gpointer) ns);
2160  table->ns_list = g_list_append(table->ns_list, ns);
2161  qof_event_gen (&ns->inst, QOF_EVENT_ADD, nullptr);
2162  }
2163  return ns;
2164 }
void qof_instance_init_data(QofInstance *inst, QofIdType type, QofBook *book)
Initialise the settings associated with an instance.
gboolean gnc_commodity_namespace_is_iso(const char *name_space)
Checks to see if the specified commodity namespace is the namespace for ISO 4217 currencies.
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
Definition: qofevent.cpp:231

◆ gnc_commodity_table_delete_namespace()

void gnc_commodity_table_delete_namespace ( gnc_commodity_table *  table,
const char *  commodity_namespace 
)

This function deletes a string from the list of commodity namespaces.

If the namespace does not exist, nothing happens.

Parameters
tableA pointer to the commodity table
commodity_namespaceThe namespace to be deleted.
Note
This routine will destroy any commodities that exist as part of this namespace. Use it carefully.

Definition at line 2203 of file gnc-commodity.cpp.

2205 {
2206  gnc_commodity_namespace * ns;
2207 
2208  if (!table) return;
2209 
2210  ns = gnc_commodity_table_find_namespace(table, name_space);
2211  if (!ns)
2212  return;
2213 
2214  qof_event_gen (&ns->inst, QOF_EVENT_REMOVE, nullptr);
2215  g_hash_table_remove(table->ns_table, name_space);
2216  table->ns_list = g_list_remove(table->ns_list, ns);
2217 
2218  g_list_free(ns->cm_list);
2219  ns->cm_list = nullptr;
2220 
2221  g_hash_table_foreach_remove(ns->cm_table, ns_helper, nullptr);
2222  g_hash_table_destroy(ns->cm_table);
2223  CACHE_REMOVE(ns->name);
2224 
2225  qof_event_gen (&ns->inst, QOF_EVENT_DESTROY, nullptr);
2226  /* qof_instance_release(&ns->inst); */
2227  g_object_unref(ns);
2228 }
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
Definition: qofevent.cpp:231

◆ gnc_commodity_table_find_namespace()

gnc_commodity_namespace* gnc_commodity_table_find_namespace ( const gnc_commodity_table *  table,
const char *  commodity_namespace 
)

This function finds a commodity namespace in the set of existing commodity namespaces.

Parameters
tableA pointer to the commodity table
commodity_namespaceThe new namespace to be added.
Returns
The a pointer to the namespace found, or NULL if the namespace doesn't exist.

Definition at line 2168 of file gnc-commodity.cpp.

2170 {
2171  if (!table || !name_space)
2172  return nullptr;
2173 
2174  name_space = gnc_commodity_table_map_namespace(name_space);
2175  return static_cast<gnc_commodity_namespace*>(g_hash_table_lookup(table->ns_table, (gpointer)name_space));
2176 }

◆ gnc_commodity_table_foreach_commodity()

gboolean gnc_commodity_table_foreach_commodity ( const gnc_commodity_table *  table,
gboolean(*)(gnc_commodity *cm, gpointer user_data)  f,
gpointer  user_data 
)

Call a function once for each commodity in the commodity table.

This table walk returns whenever the end of the table is reached, or the function returns FALSE.

Parameters
tableA pointer to the commodity table
fThe function to call for each commodity.
user_dataA pointer that is passed into the function unchanged by the table walk routine.

◆ gnc_commodity_table_get_commodities()

CommodityList* gnc_commodity_table_get_commodities ( const gnc_commodity_table *  table,
const char *  commodity_namespace 
)

Return a list of all commodities in the commodity table that are in the given namespace.

Parameters
tableA pointer to the commodity table
commodity_namespaceA string indicating which commodities should be returned. It is a required argument.
Returns
A pointer to the list of commodities. NULL if an invalid argument was supplied, or the namespace could not be found.
Note
It is the callers responsibility to free the list.

Definition at line 2021 of file gnc-commodity.cpp.

2023 {
2024  gnc_commodity_namespace * ns = nullptr;
2025 
2026  if (!table)
2027  return nullptr;
2028  if (g_strcmp0(name_space, GNC_COMMODITY_NS_NONISO_GUI) == 0)
2029  return commodity_table_get_all_noncurrency_commodities(table);
2030  ns = gnc_commodity_table_find_namespace(table, name_space);
2031  if (!ns)
2032  return nullptr;
2033 
2034  return g_hash_table_values(ns->cm_table);
2035 }
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.

◆ gnc_commodity_table_get_namespaces()

GList* gnc_commodity_table_get_namespaces ( const gnc_commodity_table *  t)

Return a list of all namespaces in the commodity table.

This returns both system and user defined namespaces.

Returns
A pointer to the list of names. NULL if an invalid argument was supplied.
Note
It is the callers responsibility to free the list.

Definition at line 1949 of file gnc-commodity.cpp.

1950 {
1951  if (!table)
1952  return nullptr;
1953 
1954  return g_hash_table_keys(table->ns_table);
1955 }

◆ gnc_commodity_table_get_namespaces_list()

GList* gnc_commodity_table_get_namespaces_list ( const gnc_commodity_table *  t)

Return a list of all namespace data structures in the commodity table.

This returns both system and user defined namespace structures.

Returns
A pointer to the list of structures. NULL if an invalid argument was supplied.
Note
This list is owned by the caller who must free the list.

Definition at line 1958 of file gnc-commodity.cpp.

1959 {
1960  if (!table)
1961  return nullptr;
1962 
1963  return g_list_copy (table->ns_list);
1964 }

◆ gnc_commodity_table_get_quotable_commodities()

CommodityList* gnc_commodity_table_get_quotable_commodities ( const gnc_commodity_table *  table)

This function returns a list of commodities for which price quotes should be retrieved.

It will scan the entire commodity table (or a subset) and check each commodity to see if the price_quote_flag field has been set. All matching commodities are queued onto a list, and the head of that list is returned. Use the command-line given expression as a filter on the commodities to be returned. If non-null, only commodities in namespace that match the specified regular expression are checked. If none was given, all commodities are checked.

Parameters
tableA pointer to the commodity table
Returns
A pointer to a list of commodities. NULL if invalid arguments were supplied or if there no commodities are flagged for quote retrieval.
Note
It is the callers responsibility to free the list.

Definition at line 2067 of file gnc-commodity.cpp.

2068 {
2069  gnc_commodity_namespace * ns = nullptr;
2070  const char *name_space;
2071  GList * nslist, * tmp;
2072  GList * l = nullptr;
2073  regex_t pattern;
2074  const char *expression = gnc_prefs_get_namespace_regexp();
2075 
2076  ENTER("table=%p, expression=%s", table, expression);
2077  if (!table)
2078  return nullptr;
2079 
2080  if (expression && *expression)
2081  {
2082  if (regcomp(&pattern, expression, REG_EXTENDED | REG_ICASE) != 0)
2083  {
2084  LEAVE("Cannot compile regex");
2085  return nullptr;
2086  }
2087 
2089  for (tmp = nslist; tmp; tmp = tmp->next)
2090  {
2091  name_space = static_cast<const char*>(tmp->data);
2092  if (regexec(&pattern, name_space, 0, nullptr, 0) == 0)
2093  {
2094  DEBUG("Running list of %s commodities", name_space);
2095  ns = gnc_commodity_table_find_namespace(table, name_space);
2096  if (ns)
2097  {
2098  g_hash_table_foreach(ns->cm_table, &get_quotables_helper1, (gpointer) &l);
2099  }
2100  }
2101  }
2102  g_list_free(nslist);
2103  regfree(&pattern);
2104  }
2105  else
2106  {
2107  gnc_commodity_table_foreach_commodity(table, get_quotables_helper2,
2108  (gpointer) &l);
2109  }
2110  LEAVE("list head %p", l);
2111  return l;
2112 }
gboolean gnc_commodity_table_foreach_commodity(const gnc_commodity_table *table, gboolean(*f)(gnc_commodity *cm, gpointer user_data), gpointer user_data)
Call a function once for each commodity in the commodity table.
#define DEBUG(format, args...)
Print a debugging message.
Definition: qoflog.h:264
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
GList * gnc_commodity_table_get_namespaces(const gnc_commodity_table *table)
Return a list of all namespaces in the commodity table.
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_commodity_table_get_size()

guint gnc_commodity_table_get_size ( const gnc_commodity_table *  tbl)

Returns the number of commodities in the commodity table.

Parameters
tblA pointer to the commodity table
Returns
The number of commodities in the table. 0 if there are no commodities, or the routine was passed a bad argument.

Definition at line 1665 of file gnc-commodity.cpp.

1666 {
1667  guint count = 0;
1668  g_return_val_if_fail(tbl, 0);
1669  g_return_val_if_fail(tbl->ns_table, 0);
1670 
1671  g_hash_table_foreach(tbl->ns_table, count_coms, (gpointer)&count);
1672 
1673  return count;
1674 }

◆ gnc_commodity_table_has_namespace()

int gnc_commodity_table_has_namespace ( const gnc_commodity_table *  table,
const char *  commodity_namespace 
)

Test to see if the indicated namespace exits in the commodity table.

Parameters
tableA pointer to the commodity table
commodity_namespaceThe new namespace to check.
Returns
1 if the namespace exists. 0 if it doesn't exist, or the routine was passed a bad argument.

Definition at line 1892 of file gnc-commodity.cpp.

1894 {
1895  gnc_commodity_namespace * nsp = nullptr;
1896 
1897  if (!table || !name_space)
1898  {
1899  return 0;
1900  }
1901 
1902  nsp = gnc_commodity_table_find_namespace(table, name_space);
1903  if (nsp)
1904  {
1905  return 1;
1906  }
1907  else
1908  {
1909  return 0;
1910  }
1911 }
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.

◆ gnc_commodity_table_insert()

gnc_commodity* gnc_commodity_table_insert ( gnc_commodity_table *  table,
gnc_commodity *  comm 
)

Add a new commodity to the commodity table.

This routine handles the cases where the commodity already exists in the database (does nothing), or another entries has the same namespace and mnemonic (updates the existing entry).

Parameters
tableA pointer to the commodity table
commA pointer to the commodity to add.
Returns
The added commodity. Null on error.
Note
The commodity pointer passed to this function should not be used after its return, as it may have been destroyed. Use the return value which is guaranteed to be valid.

Definition at line 1786 of file gnc-commodity.cpp.

1788 {
1789  gnc_commodity_namespace * nsp = nullptr;
1790  gnc_commodity *c;
1791  const char *ns_name;
1792  gnc_commodityPrivate* priv;
1793  QofBook *book;
1794 
1795  if (!table) return nullptr;
1796  if (!comm) return nullptr;
1797 
1798  priv = GET_PRIVATE(comm);
1799 
1800  ENTER ("(table=%p, comm=%p) %s %s", table, comm,
1801  (priv->mnemonic == nullptr ? "(null)" : priv->mnemonic),
1802  (priv->fullname == nullptr ? "(null)" : priv->fullname));
1803  ns_name = gnc_commodity_namespace_get_name(priv->name_space);
1804  c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
1805 
1806  if (c)
1807  {
1808  if (c == comm)
1809  {
1810  LEAVE("already in table");
1811  return c;
1812  }
1813 
1814  /* Backward compatibility support for currencies that have
1815  * recently changed. */
1816  if (priv->name_space->iso4217)
1817  {
1818  auto it = gnc_new_iso_codes.find (priv->mnemonic);
1819  if (it != gnc_new_iso_codes.end())
1820  gnc_commodity_set_mnemonic(comm, it->second.c_str());
1821  }
1822  gnc_commodity_copy (c, comm);
1823  gnc_commodity_destroy (comm);
1824  LEAVE("found at %p", c);
1825  return c;
1826  }
1827 
1828  /* Prevent setting anything except template in namespace template. */
1829  if (g_strcmp0 (ns_name, GNC_COMMODITY_NS_TEMPLATE) == 0 &&
1830  g_strcmp0 (priv->mnemonic, "template") != 0)
1831  {
1832  PWARN("Converting commodity %s from namespace template to "
1833  "namespace User", priv->mnemonic);
1834  gnc_commodity_set_namespace (comm, "User");
1835  ns_name = "User";
1836  mark_commodity_dirty (comm);
1837  }
1838 
1839  book = qof_instance_get_book (&comm->inst);
1840  nsp = gnc_commodity_table_add_namespace(table, ns_name, book);
1841 
1842  PINFO ("insert %p %s into nsp=%p %s", priv->mnemonic, priv->mnemonic,
1843  nsp->cm_table, nsp->name);
1844  g_hash_table_insert(nsp->cm_table,
1845  (gpointer)CACHE_INSERT(priv->mnemonic),
1846  (gpointer)comm);
1847  nsp->cm_list = g_list_append(nsp->cm_list, comm);
1848 
1849  qof_event_gen (&comm->inst, QOF_EVENT_ADD, nullptr);
1850  LEAVE ("(table=%p, comm=%p)", table, comm);
1851  return comm;
1852 }
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
#define PINFO(format, args...)
Print an informational note.
Definition: qoflog.h:256
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table *table, const char *name_space, QofBook *book)
This function adds a new string to the list of commodity namespaces.
const char * gnc_commodity_namespace_get_name(const gnc_commodity_namespace *ns)
Return the textual name of a namespace data structure.
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
void gnc_commodity_set_mnemonic(gnc_commodity *cm, const char *mnemonic)
Set the mnemonic for the specified commodity.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
void gnc_commodity_set_namespace(gnc_commodity *cm, const char *name_space)
Set the namespace for the specified commodity.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
Definition: qofevent.cpp:231
void gnc_commodity_copy(gnc_commodity *dest, const gnc_commodity *src)
Copy src into dest.
void gnc_commodity_destroy(gnc_commodity *cm)
Destroy a commodity.

◆ gnc_commodity_table_new()

gnc_commodity_table* gnc_commodity_table_new ( void  )

You probably shouldn't be using gnc_commodity_table_new() directly, it's for internal use only.

You should probably be using gnc_commodity_table_get_table()

Definition at line 1602 of file gnc-commodity.cpp.

1603 {
1604  gnc_commodity_table * retval = g_new0(gnc_commodity_table, 1);
1605  retval->ns_table = g_hash_table_new(&g_str_hash, &g_str_equal);
1606  retval->ns_list = nullptr;
1607  return retval;
1608 }

◆ gnc_commodity_table_remove()

void gnc_commodity_table_remove ( gnc_commodity_table *  table,
gnc_commodity *  comm 
)

Remove a commodity from the commodity table.

If the commodity to remove doesn't exist, nothing happens.

Parameters
tableA pointer to the commodity table
commA pointer to the commodity to remove.

Definition at line 1860 of file gnc-commodity.cpp.

1862 {
1863  gnc_commodity_namespace * nsp;
1864  gnc_commodity *c;
1865  gnc_commodityPrivate* priv;
1866  const char *ns_name;
1867 
1868  if (!table) return;
1869  if (!comm) return;
1870 
1871  priv = GET_PRIVATE(comm);
1872  ns_name = gnc_commodity_namespace_get_name(priv->name_space);
1873  c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
1874  if (c != comm) return;
1875 
1876  qof_event_gen (&comm->inst, QOF_EVENT_REMOVE, nullptr);
1877 
1878  nsp = gnc_commodity_table_find_namespace(table, ns_name);
1879  if (!nsp) return;
1880 
1881  nsp->cm_list = g_list_remove(nsp->cm_list, comm);
1882  g_hash_table_remove (nsp->cm_table, priv->mnemonic);
1883  /* XXX minor mem leak, should remove the key as well */
1884 }
const char * gnc_commodity_namespace_get_name(const gnc_commodity_namespace *ns)
Return the textual name of a namespace data structure.
gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table *table, const char *name_space)
This function finds a commodity namespace in the set of existing commodity namespaces.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
Definition: qofevent.cpp:231

◆ gnc_commodity_user_set_quote_flag()

void gnc_commodity_user_set_quote_flag ( gnc_commodity *  cm,
const gboolean  flag 
)

Set the automatic price quote flag for the specified commodity, based on user input.

This flag indicates whether stock quotes should be retrieved for the specified stock.

It is necessary to have a separate function to distinguish when this setting is being modified by a user so that the auto-enabling/auto-disabling of currencies can be handled properly.

Parameters
cmA pointer to a commodity data structure.
flagTRUE if quotes should be pulled for this commodity, FALSE otherwise.

Definition at line 1278 of file gnc-commodity.cpp.

1279 {
1280  gnc_commodityPrivate* priv;
1281 
1282  ENTER ("(cm=%p, flag=%d)", cm, flag);
1283 
1284  if (!cm)
1285  {
1286  LEAVE("");
1287  return;
1288  }
1289 
1290  priv = GET_PRIVATE(cm);
1291  gnc_commodity_begin_edit(cm);
1292  gnc_commodity_set_quote_flag(cm, flag);
1293  if (gnc_commodity_is_iso(cm))
1294  {
1295  /* For currencies, disable auto quote control if the quote flag is being
1296  * changed from its default value and enable it if the quote flag is being
1297  * reset to its default value. The defaults for the quote flag are
1298  * disabled if no accounts are using the currency, and true otherwise.
1299  * Thus enable auto quote control if flag is FALSE and there are not any
1300  * accounts using this currency OR flag is TRUE and there are accounts
1301  * using this currency; otherwise disable auto quote control */
1302  gnc_commodity_set_auto_quote_control_flag(cm,
1303  (!flag && (priv->usage_count == 0)) || (flag && (priv->usage_count != 0)));
1304  }
1305  gnc_commodity_commit_edit(cm);
1306  LEAVE("");
1307 }
void gnc_commodity_set_quote_flag(gnc_commodity *cm, const gboolean flag)
Set the automatic price quote flag for the specified commodity.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
Checks to see if the specified commodity is an ISO 4217 recognized currency.

◆ gnc_monetary_list_delete_zeros()

MonetaryList* gnc_monetary_list_delete_zeros ( MonetaryList *  list)

Delete all the zero-value entries from a list.

Delete all the zero-value entries from a list.

Return list pointer will be a null pointer if there are no non-zero entries

Definition at line 2470 of file gnc-commodity.cpp.

2471 {
2472  MonetaryList *node, *next;
2473  for (node = list; node; node = next)
2474  {
2475  auto mon = static_cast<gnc_monetary*>(node->data);
2476  next = node->next;
2477  if (gnc_numeric_zero_p(mon->value))
2478  {
2479  g_free(mon);
2480  list = g_list_delete_link(list, node);
2481  }
2482  }
2483  return list;
2484 }
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.

◆ gnc_monetary_list_free()

void gnc_monetary_list_free ( MonetaryList *  list)

Free a monetary list and all the items it points to.

Free a monetary list and all the items it points to.

Definition at line 2488 of file gnc-commodity.cpp.

2489 {
2490  MonetaryList *tmp;
2491  for (tmp = list; tmp; tmp = tmp->next)
2492  {
2493  g_free(tmp->data);
2494  }
2495 
2496  g_list_free(list);
2497 }

◆ gnc_quote_source_add_new()

gnc_quote_source* gnc_quote_source_add_new ( const char *  name,
gboolean  supported 
)

Create a new quote source.

This is called by the F::Q startup code or the XML parsing code to add new entries to the list of available quote sources.

Parameters
nameThe internal name for this new quote source.
supportedTRUE if this quote source is supported by F::Q. Should only be set by the F::Q startup routine.
Returns
A pointer to the newly created quote source.

Definition at line 321 of file gnc-commodity.cpp.

322 {
323  DEBUG("Creating new source %s", (!source_name ? "(null)" : source_name));
324  /* This name can be changed if/when support for this price source is
325  * integrated into gnucash. */
326  /* This name is permanent and must be kept the same if/when support
327  * for this price source is integrated into gnucash (i.e. for a
328  * nice user name). */
329  return &new_quote_sources.emplace_back (supported, SOURCE_UNKNOWN, source_name, source_name);
330 }
#define DEBUG(format, args...)
Print a debugging message.
Definition: qoflog.h:264
This is a locally installed quote source that gnucash knows nothing about.

◆ gnc_quote_source_fq_installed()

gboolean gnc_quote_source_fq_installed ( void  )

This function indicates whether or not the Finance::Quote module is installed on a user's computer.

This includes any other related modules that gnucash need to process F::Q information.

Returns
TRUE is F::Q is installed properly.

Definition at line 268 of file gnc-commodity.cpp.

269 {
270  return (!fq_version.empty());
271 }

◆ gnc_quote_source_fq_version()

const char* gnc_quote_source_fq_version ( void  )

This function returns the version of the Finance::Quote module installed on a user's computer.

If no proper installation is found it will return NULL.

Returns
a version string or NULL

Definition at line 281 of file gnc-commodity.cpp.

282 {
283  return fq_version.c_str();
284 }

◆ gnc_quote_source_get_index()

gint gnc_quote_source_get_index ( const gnc_quote_source *  source)

Given a gnc_quote_source data structure, return the index of this particular quote source within its type.

Parameters
sourceThe quote source in question.
Returns
The index of this quote source in its type.

Definition at line 392 of file gnc-commodity.cpp.

393 {
394  if (!source)
395  {
396  PWARN ("bad source");
397  return 0;
398  }
399 
400  auto& sources = get_quote_source_from_type (source->get_type());
401  auto is_source = [&source](const auto& findif_source)
402  { return &findif_source == source; };
403 
404  auto iter = std::find_if (sources.begin(), sources.end(), is_source);
405  if (iter != sources.end())
406  return std::distance (sources.begin(), iter);
407 
408  PWARN ("couldn't locate source");
409  return 0;
410 }
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250

◆ gnc_quote_source_get_internal_name()

const char* gnc_quote_source_get_internal_name ( const gnc_quote_source *  source)

Given a gnc_quote_source data structure, return the internal name of this quote source.

This is the name used by both gnucash and by Finance::Quote. E.G. "yahoo_australia" or "australia"

Parameters
sourceThe quote source in question.
Returns
The internal name.

Definition at line 440 of file gnc-commodity.cpp.

441 {
442  ENTER("%p", source);
443  if (!source)
444  {
445  LEAVE("bad source");
446  return nullptr;
447  }
448  LEAVE("internal name %s", source->get_internal_name());
449  return source->get_internal_name();
450 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_quote_source_get_supported()

gboolean gnc_quote_source_get_supported ( const gnc_quote_source *  source)

Given a gnc_quote_source data structure, return the flag that indicates whether this particular quote source is supported by the user's F::Q installation.

Parameters
sourceThe quote source in question.
Returns
TRUE if the user's computer supports this quote source.

Definition at line 413 of file gnc-commodity.cpp.

414 {
415  ENTER("%p", source);
416  if (!source)
417  {
418  LEAVE("bad source");
419  return FALSE;
420  }
421 
422  LEAVE("%s supported", source && source->get_supported() ? "" : "not ");
423  return source->get_supported();
424 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_quote_source_get_type()

QuoteSourceType gnc_quote_source_get_type ( const gnc_quote_source *  source)

Given a gnc_quote_source data structure, return the type of this particular quote source.

(SINGLE, MULTI, UNKNOWN)

Parameters
sourceThe quote source in question.
Returns
The type of this quote source.

Definition at line 378 of file gnc-commodity.cpp.

379 {
380  ENTER("%p", source);
381  if (!source)
382  {
383  LEAVE("bad source");
384  return SOURCE_SINGLE;
385  }
386 
387  LEAVE("type is %d", source->get_type());
388  return source->get_type();
389 }
This quote source pulls from a single specific web site.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_quote_source_get_user_name()

const char* gnc_quote_source_get_user_name ( const gnc_quote_source *  source)

Given a gnc_quote_source data structure, return the user friendly name of this quote source.

E.G. "Yahoo Australia" or "Australia (Yahoo, ASX, ...)"

Parameters
sourceThe quote source in question.
Returns
The user friendly name.

Definition at line 427 of file gnc-commodity.cpp.

428 {
429  ENTER("%p", source);
430  if (!source)
431  {
432  LEAVE("bad source");
433  return nullptr;
434  }
435  LEAVE("user name %s", source->get_user_name());
436  return source->get_user_name();
437 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_quote_source_lookup_by_internal()

gnc_quote_source* gnc_quote_source_lookup_by_internal ( const char *  internal_name)

Given the internal (gnucash or F::Q) name of a quote source, find the data structure identified by this name.

Parameters
internal_nameThe name of this quote source.
Returns
A pointer to the price quote source that has the specified internal name.

Definition at line 354 of file gnc-commodity.cpp.

355 {
356  if (!name || !*name)
357  return nullptr;
358 
359  for (const auto& [_, sources] : quote_sources_map)
360  {
361  auto source_it = std::find_if (sources.begin(), sources.end(),
362  [name] (const auto& qs)
363  { return (g_strcmp0(name, qs.get_internal_name()) == 0); });
364  if (source_it != sources.end())
365  return &(*source_it);
366  }
367 
368  DEBUG("gnc_quote_source_lookup_by_internal: Unknown source %s", name);
369  return nullptr;
370 }
#define DEBUG(format, args...)
Print a debugging message.
Definition: qoflog.h:264

◆ gnc_quote_source_lookup_by_ti()

gnc_quote_source* gnc_quote_source_lookup_by_ti ( QuoteSourceType  type,
gint  index 
)

Given the type/index of a quote source, find the data structure identified by this pair.

Parameters
typeThe type of this quote source.
indexThe index of this quote source within its type.
Returns
A pointer to the price quote source that has the specified type/index.

Definition at line 338 of file gnc-commodity.cpp.

339 {
340  ENTER("type/index is %d/%d", type, index);
341  auto& sources = get_quote_source_from_type (type);
342  if ((size_t) index < sources.size())
343  {
344  auto it = std::next(sources.begin(), index);
345  LEAVE("found %s", it->get_user_name());
346  return &*it;
347  }
348 
349  LEAVE("not found");
350  return nullptr;
351 }
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282

◆ gnc_quote_source_num_entries()

gint gnc_quote_source_num_entries ( QuoteSourceType  type)

Return the number of entries for a given type of quote source.

Parameters
typeThe quote source type whose count should be returned.
Returns
The number of entries for this type of quote source.

Definition at line 304 of file gnc-commodity.cpp.

305 {
306  auto source{get_quote_source_from_type(type)};
307  return std::distance(source.begin(), source.end());
308 }

◆ gnc_quote_source_set_fq_installed()

void gnc_quote_source_set_fq_installed ( const char *  version_string,
const std::vector< std::string > &  sources_list 
)

Update gnucash internal tables based on what Finance::Quote sources are installed.

Sources that have been explicitly coded into gnucash are marked sensitive/insensitive based upon whether they are present. New sources that gnucash doesn't know about are added to its internal tables.

Parameters
sources_listA list of strings containing the source names as they are known to F::Q.

Definition at line 460 of file gnc-commodity.cpp.

462 {
463  ENTER(" ");
464 
465  if (sources_list.empty())
466  return;
467 
468  if (version_string)
469  fq_version = version_string;
470  else
471  fq_version.clear();
472 
473  for (const auto& source_name_str : sources_list)
474  {
475  auto source_name = source_name_str.c_str();
476  auto source = gnc_quote_source_lookup_by_internal(source_name);
477 
478  if (source)
479  {
480  DEBUG("Found source %s: %s", source_name, source->get_user_name());
481  source->set_supported (true);
482  continue;
483  }
484 
485  gnc_quote_source_add_new(source_name, TRUE);
486  }
487  LEAVE(" ");
488 }
gnc_quote_source * gnc_quote_source_add_new(const char *source_name, gboolean supported)
Create a new quote source.
#define DEBUG(format, args...)
Print a debugging message.
Definition: qoflog.h:264
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
gnc_quote_source * gnc_quote_source_lookup_by_internal(const char *name)
Given the internal (gnucash or F::Q) name of a quote source, find the data structure identified by th...
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282