GnuCash  5.6-150-g038405b370+
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...
 
bool gnc_commodity_table_rename_namespace (const gnc_commodity_table *table, const char *namespace_name, const char *new_namespace_name)
 This function renames a namespace. 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

gboolean gnc_commodity_get_auto_quote_control_flag (const gnc_commodity *cm)
 
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_auto_quote_control_flag (gnc_commodity *cm, const gboolean flag)
 
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 987 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 1502 of file gnc-commodity.cpp.

1503 {
1504  if (a == b) return 0;
1505  if (a && !b) return 1;
1506  if (b && !a) return -1;
1507  if (auto rv = g_strcmp0 (gnc_commodity_get_unique_name (a), gnc_commodity_get_unique_name (b)))
1508  return rv;
1509  return qof_instance_guid_compare(a, b);
1510 }
gint qof_instance_guid_compare(gconstpointer ptr1, gconstpointer ptr2)
Compare the GncGUID values of two instances.
const char * gnc_commodity_get_unique_name(const gnc_commodity *cm)
Retrieve the &#39;unique&#39; name for the specified commodity.

◆ 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 1437 of file gnc-commodity.cpp.

1438 {
1439  gnc_commodityPrivate* priv;
1440 
1441  ENTER("(cm=%p)", cm);
1442 
1443  if (!cm)
1444  {
1445  LEAVE("");
1446  return;
1447  }
1448 
1449  priv = GET_PRIVATE(cm);
1450 
1451  if (priv->usage_count == 0)
1452  {
1453  PWARN("usage_count already zero");
1454  LEAVE("");
1455  return;
1456  }
1457 
1458  priv->usage_count--;
1459  if ((priv->usage_count == 0) && priv->quote_flag
1460  && gnc_commodity_get_auto_quote_control_flag(cm)
1461  && gnc_commodity_is_iso(cm))
1462  {
1463  /* if this is a currency with auto quote control enabled and no more
1464  * accounts reference this currency, disable quote retrieval */
1465  gnc_commodity_set_quote_flag(cm, FALSE);
1466  }
1467  LEAVE("(usage_count=%d)", priv->usage_count);
1468 }
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 868 of file gnc-commodity.cpp.

869 {
870  gnc_commodity_begin_edit(cm);
871  qof_instance_set_destroying(cm, TRUE);
872  gnc_commodity_commit_edit(cm);
873 }

◆ 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 1497 of file gnc-commodity.cpp.

1498 {
1499  return gnc_commodity_compare(a, b) == 0;
1500 }
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 1480 of file gnc-commodity.cpp.

1481 {
1482  gnc_commodityPrivate* priv_a;
1483  gnc_commodityPrivate* priv_b;
1484 
1485  if (a == b) return TRUE;
1486  if (!a || !b) return FALSE;
1487 
1488  priv_a = GET_PRIVATE(a);
1489  priv_b = GET_PRIVATE(b);
1490  if (priv_a->name_space != priv_b->name_space) return FALSE;
1491  if (g_strcmp0(priv_a->mnemonic, priv_b->mnemonic) != 0) return FALSE;
1492 
1493  return TRUE;
1494 }

◆ 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 993 of file gnc-commodity.cpp.

994 {
995  if (!cm) return nullptr;
996  return GET_PRIVATE(cm)->cusip;
997 }

◆ 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 1085 of file gnc-commodity.cpp.

1086 {
1087  if (!cm) return nullptr;
1088  return GET_PRIVATE(cm)->default_symbol;
1089 }

◆ 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 1004 of file gnc-commodity.cpp.

1005 {
1006  if (!cm) return 0;
1007  return GET_PRIVATE(cm)->fraction;
1008 }

◆ 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 969 of file gnc-commodity.cpp.

970 {
971  if (!cm) return nullptr;
972  return GET_PRIVATE(cm)->fullname;
973 }

◆ 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 928 of file gnc-commodity.cpp.

929 {
930  if (!cm) return nullptr;
931  return GET_PRIVATE(cm)->mnemonic;
932 }

◆ 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 951 of file gnc-commodity.cpp.

952 {
953  if (!cm) return nullptr;
954  return gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->name_space);
955 }
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 958 of file gnc-commodity.cpp.

959 {
960  if (!cm) return nullptr;
961  return GET_PRIVATE(cm)->name_space;
962 }

◆ 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 1095 of file gnc-commodity.cpp.

1096 {
1097  const char *nice_symbol;
1098  struct lconv *lc;
1099  if (!cm) return nullptr;
1100 
1101  nice_symbol = gnc_commodity_get_user_symbol(cm);
1102  if (nice_symbol && *nice_symbol)
1103  return nice_symbol;
1104 
1105  lc = gnc_localeconv();
1106  nice_symbol = lc->currency_symbol;
1107  if (!g_strcmp0(gnc_commodity_get_mnemonic(cm), lc->int_curr_symbol))
1108  return nice_symbol;
1109 
1110  nice_symbol = gnc_commodity_get_default_symbol(cm);
1111  if (nice_symbol && *nice_symbol)
1112  return nice_symbol;
1113 
1114  return gnc_commodity_get_mnemonic(cm);
1115 }
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 939 of file gnc-commodity.cpp.

940 {
941  if (!cm) return nullptr;
942  return GET_PRIVATE(cm)->printname;
943 }

◆ 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 1027 of file gnc-commodity.cpp.

1028 {
1029  if (!cm) return FALSE;
1030  return (GET_PRIVATE(cm)->quote_flag);
1031 }

◆ 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 1038 of file gnc-commodity.cpp.

1039 {
1040  gnc_commodityPrivate* priv;
1041 
1042  if (!cm) return nullptr;
1043  priv = GET_PRIVATE(cm);
1044  if (!priv->quote_source && gnc_commodity_is_iso(cm))
1045  return &currency_quote_sources.front();
1046  return priv->quote_source;
1047 }
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 1063 of file gnc-commodity.cpp.

1064 {
1065  if (!cm) return nullptr;
1066  return GET_PRIVATE(cm)->quote_tz;
1067 }

◆ 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 981 of file gnc-commodity.cpp.

982 {
983  if (!cm) return nullptr;
984  return GET_PRIVATE(cm)->unique_name;
985 }

◆ 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 1073 of file gnc-commodity.cpp.

1074 {
1075  g_return_val_if_fail (GNC_IS_COMMODITY (cm), nullptr);
1076 
1077  auto sym{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE(cm), {"user_symbol"})};
1078  return sym ? *sym : nullptr;
1079 }

◆ 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 1402 of file gnc-commodity.cpp.

1403 {
1404  gnc_commodityPrivate* priv;
1405 
1406  ENTER("(cm=%p)", cm);
1407 
1408  if (!cm)
1409  {
1410  LEAVE("");
1411  return;
1412  }
1413 
1414  priv = GET_PRIVATE(cm);
1415 
1416  if ((priv->usage_count == 0) && !priv->quote_flag
1417  && gnc_commodity_get_auto_quote_control_flag(cm)
1418  && gnc_commodity_is_iso(cm))
1419  {
1420  /* compatibility hack - Gnucash 1.8 gets currency quotes when a
1421  non-default currency is assigned to an account. */
1422  gnc_commodity_begin_edit(cm);
1423  gnc_commodity_set_quote_flag(cm, TRUE);
1425  gnc_commodity_get_default_quote_source(cm));
1426  gnc_commodity_commit_edit(cm);
1427  }
1428  priv->usage_count++;
1429  LEAVE("(usage_count=%d)", priv->usage_count);
1430 }
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 1953 of file gnc-commodity.cpp.

1954 {
1955  const char *ns_name;
1956  if (!cm) return FALSE;
1957 
1958  ns_name = gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->name_space);
1959  return (!g_strcmp0(ns_name, GNC_COMMODITY_NS_LEGACY) ||
1960  !g_strcmp0(ns_name, GNC_COMMODITY_NS_CURRENCY));
1961 }
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 1941 of file gnc-commodity.cpp.

1942 {
1943  gnc_commodityPrivate* priv;
1944 
1945  if (!cm) return FALSE;
1946 
1947  priv = GET_PRIVATE(cm);
1948  if ( !priv->name_space) return FALSE;
1949  return priv->name_space->iso4217;
1950 }

◆ 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 1541 of file gnc-commodity.cpp.

1542 {
1543  if (!name_space)
1544  return nullptr;
1545 
1546  return g_list_copy (name_space->cm_list);
1547 }

◆ 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 1531 of file gnc-commodity.cpp.

1532 {
1533  if (ns == nullptr)
1534  return nullptr;
1535  if (g_strcmp0 (ns->name, GNC_COMMODITY_NS_CURRENCY) == 0)
1536  return GNC_COMMODITY_NS_ISO_GUI;
1537  return ns->name;
1538 }

◆ 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 1523 of file gnc-commodity.cpp.

1524 {
1525  if (ns == nullptr)
1526  return nullptr;
1527  return ns->name;
1528 }

◆ 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 1550 of file gnc-commodity.cpp.

1551 {
1552  return ((g_strcmp0(name_space, GNC_COMMODITY_NS_ISO) == 0) ||
1553  (g_strcmp0(name_space, GNC_COMMODITY_NS_CURRENCY) == 0));
1554 }

◆ 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 775 of file gnc-commodity.cpp.

778 {
779  auto retval = GNC_COMMODITY(g_object_new(GNC_TYPE_COMMODITY, nullptr));
780 
781  qof_instance_init_data (&retval->inst, GNC_ID_COMMODITY, book);
782  gnc_commodity_begin_edit(retval);
783 
784  if ( name_space != nullptr )
785  {
786  /* Prevent setting anything except template in namespace template. */
787  if (g_strcmp0 (name_space, GNC_COMMODITY_NS_TEMPLATE) == 0 &&
788  g_strcmp0 (mnemonic, "template") != 0)
789  {
790  PWARN("Converting commodity %s from namespace template to "
791  "namespace User", mnemonic);
792  name_space = "User";
793  }
794  gnc_commodity_set_namespace(retval, name_space);
795  if (gnc_commodity_namespace_is_iso(name_space))
796  {
799  }
800  }
801  gnc_commodity_set_fullname(retval, fullname);
802  gnc_commodity_set_mnemonic(retval, mnemonic);
803  gnc_commodity_set_cusip(retval, cusip);
804  gnc_commodity_set_fraction(retval, fraction);
805  mark_commodity_dirty (retval);
806  gnc_commodity_commit_edit(retval);
807 
808  qof_event_gen (&retval->inst, QOF_EVENT_CREATE, nullptr);
809 
810  return retval;
811 }
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 1590 of file gnc-commodity.cpp.

1591 {
1592  gnc_commodity *twin;
1593  const char * ucom;
1594  gnc_commodity_table * comtbl;
1595 
1596  if (!from) return nullptr;
1597  comtbl = gnc_commodity_table_get_table (book);
1598  if (!comtbl) return nullptr;
1599 
1600  ucom = gnc_commodity_get_unique_name (from);
1601  twin = gnc_commodity_table_lookup_unique (comtbl, ucom);
1602  if (!twin)
1603  {
1604  twin = gnc_commodity_clone (from, book);
1605  twin = gnc_commodity_table_insert (comtbl, twin);
1606  }
1607  return twin;
1608 }
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 1197 of file gnc-commodity.cpp.

1199 {
1200  gnc_commodityPrivate* priv;
1201 
1202  if (!cm) return;
1203 
1204  priv = GET_PRIVATE(cm);
1205  if (priv->cusip == cusip) return;
1206 
1207  gnc_commodity_begin_edit(cm);
1208  CACHE_REMOVE (priv->cusip);
1209  priv->cusip = CACHE_INSERT (cusip);
1210  mark_commodity_dirty(cm);
1211  gnc_commodity_commit_edit(cm);
1212 }

◆ 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 1219 of file gnc-commodity.cpp.

1220 {
1221  if (!cm) return;
1222  gnc_commodity_begin_edit(cm);
1223  GET_PRIVATE(cm)->fraction = fraction;
1224  mark_commodity_dirty(cm);
1225  gnc_commodity_commit_edit(cm);
1226 }

◆ 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 1175 of file gnc-commodity.cpp.

1176 {
1177  gnc_commodityPrivate* priv;
1178 
1179  if (!cm) return;
1180  priv = GET_PRIVATE(cm);
1181  if (priv->fullname == fullname) return;
1182 
1183  CACHE_REMOVE (priv->fullname);
1184  priv->fullname = CACHE_INSERT (fullname);
1185 
1186  gnc_commodity_begin_edit(cm);
1187  mark_commodity_dirty(cm);
1188  reset_printname(priv);
1189  gnc_commodity_commit_edit(cm);
1190 }

◆ 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 1122 of file gnc-commodity.cpp.

1123 {
1124  gnc_commodityPrivate* priv;
1125 
1126  if (!cm) return;
1127  priv = GET_PRIVATE(cm);
1128  if (priv->mnemonic == mnemonic) return;
1129 
1130  gnc_commodity_begin_edit(cm);
1131  CACHE_REMOVE (priv->mnemonic);
1132  priv->mnemonic = CACHE_INSERT(mnemonic);
1133 
1134  mark_commodity_dirty (cm);
1135  reset_printname(priv);
1136  reset_unique_name(priv);
1137  gnc_commodity_commit_edit(cm);
1138 }

◆ 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 1145 of file gnc-commodity.cpp.

1146 {
1147  QofBook *book;
1148  gnc_commodity_table *table;
1149  gnc_commodity_namespace *nsp;
1150  gnc_commodityPrivate* priv;
1151 
1152  if (!cm) return;
1153  priv = GET_PRIVATE(cm);
1154  book = qof_instance_get_book (&cm->inst);
1156  nsp = gnc_commodity_table_add_namespace(table, name_space, book);
1157  if (priv->name_space == nsp)
1158  return;
1159 
1160  gnc_commodity_begin_edit(cm);
1161  priv->name_space = nsp;
1162  if (nsp->iso4217)
1163  priv->quote_source = gnc_quote_source_lookup_by_internal("currency");
1164  mark_commodity_dirty(cm);
1165  reset_printname(priv);
1166  reset_unique_name(priv);
1167  gnc_commodity_commit_edit(cm);
1168 }
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...
QofBook reference.
Definition: qofbook-p.hpp:46

◆ 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 1292 of file gnc-commodity.cpp.

1293 {
1294  ENTER ("(cm=%p, flag=%d)", cm, flag);
1295 
1296  if (!cm) return;
1297  gnc_commodity_begin_edit(cm);
1298  GET_PRIVATE(cm)->quote_flag = flag;
1299  mark_commodity_dirty(cm);
1300  gnc_commodity_commit_edit(cm);
1301  LEAVE(" ");
1302 }
#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 1309 of file gnc-commodity.cpp.

1310 {
1311  ENTER ("(cm=%p, src=%p(%s))", cm, src, src ? src->get_internal_name() : "unknown");
1312 
1313  if (!cm) return;
1314  gnc_commodity_begin_edit(cm);
1315  GET_PRIVATE(cm)->quote_source = src;
1316  mark_commodity_dirty(cm);
1317  gnc_commodity_commit_edit(cm);
1318  LEAVE(" ");
1319 }
#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 1326 of file gnc-commodity.cpp.

1327 {
1328  gnc_commodityPrivate* priv;
1329 
1330  if (!cm) return;
1331 
1332  ENTER ("(cm=%p, tz=%s)", cm, tz ? tz : "(null)");
1333 
1334  priv = GET_PRIVATE(cm);
1335 
1336  if (tz == priv->quote_tz)
1337  {
1338  LEAVE("Already correct TZ");
1339  return;
1340  }
1341 
1342  gnc_commodity_begin_edit(cm);
1343  CACHE_REMOVE (priv->quote_tz);
1344  priv->quote_tz = CACHE_INSERT (tz);
1345  mark_commodity_dirty(cm);
1346  gnc_commodity_commit_edit(cm);
1347  LEAVE(" ");
1348 }
#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 1355 of file gnc-commodity.cpp.

1356 {
1357  struct lconv *lc;
1358 
1359  if (!cm) return;
1360 
1361  ENTER ("(cm=%p, symbol=%s)", cm, user_symbol ? user_symbol : "(null)");
1362 
1363  lc = gnc_localeconv();
1364  if (!user_symbol || !*user_symbol)
1365  user_symbol = nullptr;
1366  else if (!g_strcmp0(lc->int_curr_symbol, gnc_commodity_get_mnemonic(cm)) &&
1367  !g_strcmp0(lc->currency_symbol, user_symbol))
1368  /* if the user gives the ISO symbol for the locale currency or the
1369  * default symbol, actually remove the user symbol */
1370  user_symbol = nullptr;
1371  else if (!g_strcmp0(user_symbol, gnc_commodity_get_default_symbol(cm)))
1372  user_symbol = nullptr;
1373 
1374  gnc_commodity_begin_edit (cm);
1375 
1376  auto val = user_symbol ? std::make_optional<const char*>(g_strdup(user_symbol)) : std::nullopt;
1377  qof_instance_set_path_kvp<const char*> (QOF_INSTANCE(cm), val, {"user_symbol"});
1378 
1379  mark_commodity_dirty(cm);
1380  gnc_commodity_commit_edit(cm);
1381 
1382  LEAVE(" ");
1383 }
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 2317 of file gnc-commodity.cpp.

2318 {
2319  QofCollection *col;
2320  gnc_commodity* c;
2321 
2322  ENTER ("table=%p", table);
2323  gnc_commodity_table_add_namespace(table, GNC_COMMODITY_NS_TEMPLATE, book);
2324  c = gnc_commodity_new(book, "template", GNC_COMMODITY_NS_TEMPLATE, "template", "template", 1);
2326 
2327 #include "iso-4217-currencies.c"
2328 
2329  /* We've just created the default namespaces and currencies. Mark
2330  * these collections as clean because there is no USER entered data
2331  * in these collections as of yet. */
2332  col = qof_book_get_collection(book, GNC_ID_COMMODITY);
2334  col = qof_book_get_collection(book, GNC_ID_COMMODITY_NAMESPACE);
2336 
2337  LEAVE ("table=%p", table);
2338  return TRUE;
2339 }
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:238
#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 2106 of file gnc-commodity.cpp.

2109 {
2110  gnc_commodity_namespace * ns = nullptr;
2111 
2112  if (!table) return nullptr;
2113 
2114  name_space = gnc_commodity_table_map_namespace(name_space);
2115  ns = gnc_commodity_table_find_namespace(table, name_space);
2116  if (!ns)
2117  {
2118  ns = static_cast<gnc_commodity_namespace*>(g_object_new(GNC_TYPE_COMMODITY_NAMESPACE, nullptr));
2119  ns->cm_table = g_hash_table_new(g_str_hash, g_str_equal);
2120  ns->name = CACHE_INSERT(static_cast<const char*>(name_space));
2121  ns->iso4217 = gnc_commodity_namespace_is_iso(name_space);
2122  qof_instance_init_data (&ns->inst, GNC_ID_COMMODITY_NAMESPACE, book);
2123  qof_event_gen (&ns->inst, QOF_EVENT_CREATE, nullptr);
2124 
2125  g_hash_table_insert(table->ns_table,
2126  (gpointer) ns->name,
2127  (gpointer) ns);
2128  table->ns_list = g_list_append(table->ns_list, ns);
2129  qof_event_gen (&ns->inst, QOF_EVENT_ADD, nullptr);
2130  }
2131  return ns;
2132 }
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 2202 of file gnc-commodity.cpp.

2204 {
2205  gnc_commodity_namespace * ns;
2206 
2207  if (!table) return;
2208 
2209  ns = gnc_commodity_table_find_namespace(table, name_space);
2210  if (!ns)
2211  return;
2212 
2213  qof_event_gen (&ns->inst, QOF_EVENT_REMOVE, nullptr);
2214  g_hash_table_remove(table->ns_table, name_space);
2215  table->ns_list = g_list_remove(table->ns_list, ns);
2216 
2217  g_list_free(ns->cm_list);
2218  ns->cm_list = nullptr;
2219 
2220  g_hash_table_foreach_remove(ns->cm_table, ns_helper, nullptr);
2221  g_hash_table_destroy(ns->cm_table);
2222  CACHE_REMOVE(ns->name);
2223 
2224  qof_event_gen (&ns->inst, QOF_EVENT_DESTROY, nullptr);
2225  /* qof_instance_release(&ns->inst); */
2226  g_object_unref(ns);
2227 }
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 2167 of file gnc-commodity.cpp.

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

◆ 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 1989 of file gnc-commodity.cpp.

1991 {
1992  gnc_commodity_namespace * ns = nullptr;
1993 
1994  if (!table)
1995  return nullptr;
1996  if (g_strcmp0(name_space, GNC_COMMODITY_NS_NONISO_GUI) == 0)
1997  return commodity_table_get_all_noncurrency_commodities(table);
1998  ns = gnc_commodity_table_find_namespace(table, name_space);
1999  if (!ns)
2000  return nullptr;
2001 
2002  return g_hash_table_values(ns->cm_table);
2003 }
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 1917 of file gnc-commodity.cpp.

1918 {
1919  if (!table)
1920  return nullptr;
1921 
1922  return g_hash_table_keys(table->ns_table);
1923 }

◆ 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 1926 of file gnc-commodity.cpp.

1927 {
1928  if (!table)
1929  return nullptr;
1930 
1931  return g_list_copy (table->ns_list);
1932 }

◆ 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 2035 of file gnc-commodity.cpp.

2036 {
2037  gnc_commodity_namespace * ns = nullptr;
2038  const char *name_space;
2039  GList * nslist, * tmp;
2040  GList * l = nullptr;
2041  regex_t pattern;
2042  const char *expression = gnc_prefs_get_namespace_regexp();
2043 
2044  ENTER("table=%p, expression=%s", table, expression);
2045  if (!table)
2046  return nullptr;
2047 
2048  if (expression && *expression)
2049  {
2050  if (regcomp(&pattern, expression, REG_EXTENDED | REG_ICASE) != 0)
2051  {
2052  LEAVE("Cannot compile regex");
2053  return nullptr;
2054  }
2055 
2057  for (tmp = nslist; tmp; tmp = tmp->next)
2058  {
2059  name_space = static_cast<const char*>(tmp->data);
2060  if (regexec(&pattern, name_space, 0, nullptr, 0) == 0)
2061  {
2062  DEBUG("Running list of %s commodities", name_space);
2063  ns = gnc_commodity_table_find_namespace(table, name_space);
2064  if (ns)
2065  {
2066  g_hash_table_foreach(ns->cm_table, &get_quotables_helper1, (gpointer) &l);
2067  }
2068  }
2069  }
2070  g_list_free(nslist);
2071  regfree(&pattern);
2072  }
2073  else
2074  {
2075  gnc_commodity_table_foreach_commodity(table, get_quotables_helper2,
2076  (gpointer) &l);
2077  }
2078  LEAVE("list head %p", l);
2079  return l;
2080 }
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 1633 of file gnc-commodity.cpp.

1634 {
1635  guint count = 0;
1636  g_return_val_if_fail(tbl, 0);
1637  g_return_val_if_fail(tbl->ns_table, 0);
1638 
1639  g_hash_table_foreach(tbl->ns_table, count_coms, (gpointer)&count);
1640 
1641  return count;
1642 }

◆ 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 1860 of file gnc-commodity.cpp.

1862 {
1863  gnc_commodity_namespace * nsp = nullptr;
1864 
1865  if (!table || !name_space)
1866  {
1867  return 0;
1868  }
1869 
1870  nsp = gnc_commodity_table_find_namespace(table, name_space);
1871  if (nsp)
1872  {
1873  return 1;
1874  }
1875  else
1876  {
1877  return 0;
1878  }
1879 }
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 1754 of file gnc-commodity.cpp.

1756 {
1757  gnc_commodity_namespace * nsp = nullptr;
1758  gnc_commodity *c;
1759  const char *ns_name;
1760  gnc_commodityPrivate* priv;
1761  QofBook *book;
1762 
1763  if (!table) return nullptr;
1764  if (!comm) return nullptr;
1765 
1766  priv = GET_PRIVATE(comm);
1767 
1768  ENTER ("(table=%p, comm=%p) %s %s", table, comm,
1769  (priv->mnemonic == nullptr ? "(null)" : priv->mnemonic),
1770  (priv->fullname == nullptr ? "(null)" : priv->fullname));
1771  ns_name = gnc_commodity_namespace_get_name(priv->name_space);
1772  c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
1773 
1774  if (c)
1775  {
1776  if (c == comm)
1777  {
1778  LEAVE("already in table");
1779  return c;
1780  }
1781 
1782  /* Backward compatibility support for currencies that have
1783  * recently changed. */
1784  if (priv->name_space->iso4217)
1785  {
1786  auto it = gnc_new_iso_codes.find (priv->mnemonic);
1787  if (it != gnc_new_iso_codes.end())
1788  gnc_commodity_set_mnemonic(comm, it->second.c_str());
1789  }
1790  gnc_commodity_copy (c, comm);
1791  gnc_commodity_destroy (comm);
1792  LEAVE("found at %p", c);
1793  return c;
1794  }
1795 
1796  /* Prevent setting anything except template in namespace template. */
1797  if (g_strcmp0 (ns_name, GNC_COMMODITY_NS_TEMPLATE) == 0 &&
1798  g_strcmp0 (priv->mnemonic, "template") != 0)
1799  {
1800  PWARN("Converting commodity %s from namespace template to "
1801  "namespace User", priv->mnemonic);
1802  gnc_commodity_set_namespace (comm, "User");
1803  ns_name = "User";
1804  mark_commodity_dirty (comm);
1805  }
1806 
1807  book = qof_instance_get_book (&comm->inst);
1808  nsp = gnc_commodity_table_add_namespace(table, ns_name, book);
1809 
1810  PINFO ("insert %p %s into nsp=%p %s", priv->mnemonic, priv->mnemonic,
1811  nsp->cm_table, nsp->name);
1812  g_hash_table_insert(nsp->cm_table,
1813  (gpointer)CACHE_INSERT(priv->mnemonic),
1814  (gpointer)comm);
1815  nsp->cm_list = g_list_append(nsp->cm_list, comm);
1816 
1817  qof_event_gen (&comm->inst, QOF_EVENT_ADD, nullptr);
1818  LEAVE ("(table=%p, comm=%p)", table, comm);
1819  return comm;
1820 }
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
QofBook reference.
Definition: qofbook-p.hpp:46
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 1570 of file gnc-commodity.cpp.

1571 {
1572  gnc_commodity_table * retval = g_new0(gnc_commodity_table, 1);
1573  retval->ns_table = g_hash_table_new(&g_str_hash, &g_str_equal);
1574  retval->ns_list = nullptr;
1575  return retval;
1576 }

◆ 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 1828 of file gnc-commodity.cpp.

1830 {
1831  gnc_commodity_namespace * nsp;
1832  gnc_commodity *c;
1833  gnc_commodityPrivate* priv;
1834  const char *ns_name;
1835 
1836  if (!table) return;
1837  if (!comm) return;
1838 
1839  priv = GET_PRIVATE(comm);
1840  ns_name = gnc_commodity_namespace_get_name(priv->name_space);
1841  c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
1842  if (c != comm) return;
1843 
1844  qof_event_gen (&comm->inst, QOF_EVENT_REMOVE, nullptr);
1845 
1846  nsp = gnc_commodity_table_find_namespace(table, ns_name);
1847  if (!nsp) return;
1848 
1849  nsp->cm_list = g_list_remove(nsp->cm_list, comm);
1850  g_hash_table_remove (nsp->cm_table, priv->mnemonic);
1851  /* XXX minor mem leak, should remove the key as well */
1852 }
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_table_rename_namespace()

bool gnc_commodity_table_rename_namespace ( const gnc_commodity_table *  table,
const char *  namespace_name,
const char *  new_namespace_name 
)

This function renames a namespace.

Parameters
tableA pointer to the commodity table
namespace_nameThe name of the namespace to rename.
new_namespace_nameThe new name for the namespace.
Returns
Return true if rename successful.

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

2138 {
2139  if (!table || !namespace_name || !new_namespace_name ||
2140  (g_strcmp0 (namespace_name, new_namespace_name) == 0) ||
2141  (g_strcmp0 (new_namespace_name, GNC_COMMODITY_NS_ISO_GUI) == 0) ||
2142  (g_strcmp0 (new_namespace_name, _(GNC_COMMODITY_NS_ISO_GUI)) == 0) ||
2143  gnc_commodity_table_find_namespace (table, new_namespace_name))
2144  return false;
2145 
2146  auto ns = gnc_commodity_table_find_namespace (table, namespace_name);
2147  if (!ns)
2148  return false;
2149 
2150  ns->name = CACHE_INSERT(static_cast<const char*>(new_namespace_name));
2151 
2152  g_hash_table_insert (table->ns_table,
2153  (gpointer) ns->name,
2154  (gpointer) ns);
2155 
2156  g_hash_table_remove (table->ns_table,
2157  (gpointer) namespace_name);
2158 
2159  CACHE_REMOVE(namespace_name);
2160 
2161  qof_instance_set_dirty (&ns->inst);
2162  qof_event_gen (&ns->inst, QOF_EVENT_MODIFY, nullptr);
2163  return true;
2164 }
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 1256 of file gnc-commodity.cpp.

1257 {
1258  gnc_commodityPrivate* priv;
1259 
1260  ENTER ("(cm=%p, flag=%d)", cm, flag);
1261 
1262  if (!cm)
1263  {
1264  LEAVE("");
1265  return;
1266  }
1267 
1268  priv = GET_PRIVATE(cm);
1269  gnc_commodity_begin_edit(cm);
1270  gnc_commodity_set_quote_flag(cm, flag);
1271  if (gnc_commodity_is_iso(cm))
1272  {
1273  /* For currencies, disable auto quote control if the quote flag is being
1274  * changed from its default value and enable it if the quote flag is being
1275  * reset to its default value. The defaults for the quote flag are
1276  * disabled if no accounts are using the currency, and true otherwise.
1277  * Thus enable auto quote control if flag is FALSE and there are not any
1278  * accounts using this currency OR flag is TRUE and there are accounts
1279  * using this currency; otherwise disable auto quote control */
1280  gnc_commodity_set_auto_quote_control_flag(cm,
1281  (!flag && (priv->usage_count == 0)) || (flag && (priv->usage_count != 0)));
1282  }
1283  gnc_commodity_commit_edit(cm);
1284  LEAVE("");
1285 }
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 2469 of file gnc-commodity.cpp.

2470 {
2471  MonetaryList *node, *next;
2472  for (node = list; node; node = next)
2473  {
2474  auto mon = static_cast<gnc_monetary*>(node->data);
2475  next = node->next;
2476  if (gnc_numeric_zero_p(mon->value))
2477  {
2478  g_free(mon);
2479  list = g_list_delete_link(list, node);
2480  }
2481  }
2482  return list;
2483 }
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 2487 of file gnc-commodity.cpp.

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

◆ 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 317 of file gnc-commodity.cpp.

318 {
319  DEBUG("Creating new source %s", (!source_name ? "(null)" : source_name));
320  /* This name can be changed if/when support for this price source is
321  * integrated into gnucash. */
322  /* This name is permanent and must be kept the same if/when support
323  * for this price source is integrated into gnucash (i.e. for a
324  * nice user name). */
325  return &new_quote_sources.emplace_back (supported, SOURCE_UNKNOWN, source_name, source_name);
326 }
#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 265 of file gnc-commodity.cpp.

266 {
267  return (!fq_version.empty());
268 }

◆ 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 278 of file gnc-commodity.cpp.

279 {
280  return fq_version.c_str();
281 }

◆ 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 388 of file gnc-commodity.cpp.

389 {
390  if (!source)
391  {
392  PWARN ("bad source");
393  return 0;
394  }
395 
396  auto& sources = get_quote_source_from_type (source->get_type());
397  auto is_source = [&source](const auto& findif_source)
398  { return &findif_source == source; };
399 
400  auto iter = std::find_if (sources.begin(), sources.end(), is_source);
401  if (iter != sources.end())
402  return std::distance (sources.begin(), iter);
403 
404  PWARN ("couldn't locate source");
405  return 0;
406 }
#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 436 of file gnc-commodity.cpp.

437 {
438  ENTER("%p", source);
439  if (!source)
440  {
441  LEAVE("bad source");
442  return nullptr;
443  }
444  LEAVE("internal name %s", source->get_internal_name());
445  return source->get_internal_name();
446 }
#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 409 of file gnc-commodity.cpp.

410 {
411  ENTER("%p", source);
412  if (!source)
413  {
414  LEAVE("bad source");
415  return FALSE;
416  }
417 
418  LEAVE("%s supported", source && source->get_supported() ? "" : "not ");
419  return source->get_supported();
420 }
#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 374 of file gnc-commodity.cpp.

375 {
376  ENTER("%p", source);
377  if (!source)
378  {
379  LEAVE("bad source");
380  return SOURCE_SINGLE;
381  }
382 
383  LEAVE("type is %d", source->get_type());
384  return source->get_type();
385 }
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 423 of file gnc-commodity.cpp.

424 {
425  ENTER("%p", source);
426  if (!source)
427  {
428  LEAVE("bad source");
429  return nullptr;
430  }
431  LEAVE("user name %s", source->get_user_name());
432  return source->get_user_name();
433 }
#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 350 of file gnc-commodity.cpp.

351 {
352  if (!name || !*name)
353  return nullptr;
354 
355  for (const auto& [_, sources] : quote_sources_map)
356  {
357  auto source_it = std::find_if (sources.begin(), sources.end(),
358  [name] (const auto& qs)
359  { return (g_strcmp0(name, qs.get_internal_name()) == 0); });
360  if (source_it != sources.end())
361  return &(*source_it);
362  }
363 
364  DEBUG("gnc_quote_source_lookup_by_internal: Unknown source %s", name);
365  return nullptr;
366 }
#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 334 of file gnc-commodity.cpp.

335 {
336  ENTER("type/index is %d/%d", type, index);
337  auto& sources = get_quote_source_from_type (type);
338  if ((size_t) index < sources.size())
339  {
340  auto it = std::next(sources.begin(), index);
341  LEAVE("found %s", it->get_user_name());
342  return &*it;
343  }
344 
345  LEAVE("not found");
346  return nullptr;
347 }
#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 301 of file gnc-commodity.cpp.

302 {
303  return get_quote_source_from_type(type).size();
304 }

◆ 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 456 of file gnc-commodity.cpp.

458 {
459  ENTER(" ");
460 
461  if (sources_list.empty())
462  return;
463 
464  if (version_string)
465  fq_version = version_string;
466  else
467  fq_version.clear();
468 
469  for (const auto& source_name_str : sources_list)
470  {
471  auto source_name = source_name_str.c_str();
472  auto source = gnc_quote_source_lookup_by_internal(source_name);
473 
474  if (source)
475  {
476  DEBUG("Found source %s: %s", source_name, source->get_user_name());
477  source->set_supported (true);
478  continue;
479  }
480 
481  gnc_quote_source_add_new(source_name, TRUE);
482  }
483  LEAVE(" ");
484 }
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