mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-29 04:04:07 -06:00
270 lines
11 KiB
C
270 lines
11 KiB
C
/********************************************************************
|
|
* gnc-engine.h -- top-level include file for Gnucash Engine *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public License as *
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
* the License, or (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License*
|
|
* along with this program; if not, contact: *
|
|
* *
|
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
|
* *
|
|
********************************************************************/
|
|
/** @addtogroup Engine GnuCash Engine: Core, Non-GUI Accounting Functions
|
|
The GnuCash Engine provides a set of objects and classes that
|
|
encapsulate typical financial accounting concepts. The GnuCash
|
|
GUI is expected to manipulate these objects through the provided
|
|
engine API.
|
|
@{ */
|
|
/** @file gnc-engine.h
|
|
@brief All type declarations for the whole Gnucash engine
|
|
@author Copyright (C) 1997 Robin D. Clark
|
|
@author Copyright (C) 2000 Bill Gribble <grib@billgribble.com>
|
|
@author Copyright (C) 2000 Dave Peticolas <peticola@cs.ucdavis.edu>
|
|
@author Copyright (C) 1997-2001 Linas Vepstas <linas@linas.org>
|
|
*/
|
|
|
|
#ifndef GNC_ENGINE_H
|
|
#define GNC_ENGINE_H
|
|
|
|
#include <glib.h>
|
|
|
|
#include "qof.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \name QofLogModule identifiers */
|
|
// @{
|
|
#define GNC_MOD_ROOT "gnc"
|
|
#define GNC_MOD_ENGINE "gnc.engine"
|
|
#define GNC_MOD_ACCOUNT "gnc.account"
|
|
#define GNC_MOD_SX "gnc.engine.sx"
|
|
#define GNC_MOD_QUERY "gnc.query"
|
|
#define GNC_MOD_SCRUB "gnc.scrub"
|
|
#define GNC_MOD_LOT "gnc.lots"
|
|
#define GNC_MOD_COMMODITY "gnc.commodity"
|
|
#define GNC_MOD_BACKEND "gnc.backend"
|
|
#define GNC_MOD_PRICE "gnc.pricedb"
|
|
#define GNC_MOD_BUSINESS "gnc.business"
|
|
#define GNC_MOD_IO "gnc.io"
|
|
#define GNC_MOD_BOOK "gnc.book-period"
|
|
#define GNC_MOD_GUI "gnc.gui"
|
|
#define GNC_MOD_GUI_SX "gnc.gui.sx"
|
|
#define GNC_MOD_GUILE "gnc.guile"
|
|
#define GNC_MOD_LEDGER "gnc.ledger"
|
|
#define GNC_MOD_REGISTER "gnc.register"
|
|
#define GNC_MOD_HTML "gnc.html"
|
|
#define GNC_MOD_PREFS "gnc.pref"
|
|
#define GNC_MOD_IMPORT "gnc.import"
|
|
#define GNC_MOD_ASSISTANT "gnc.assistant"
|
|
#define GNC_MOD_BUDGET "gnc.budget"
|
|
//@}
|
|
|
|
/** @brief IDENTIFIERS
|
|
* GncGUID Identifiers can be used to reference Accounts, Transactions,
|
|
* Splits and other objects. These Gnucash types are referred to as Gnucash
|
|
* entities. GncGUID Identifiers are globally-unique and permanent, i.e., once
|
|
* an entity has been assigned an identifier, it retains that same
|
|
* identifier for its lifetime.
|
|
* -
|
|
* Identifiers are 'typed' with strings. The ids used in gnucash are
|
|
* defined below. An id with type GNC_ID_NONE does not refer to any
|
|
* entity, although that may change as new ids are created. An id with
|
|
* type GNC_ID_NULL does not refer to any entity, and will never refer
|
|
* to any entity. An identifier with any other type may refer to an
|
|
* actual entity, but that is not guaranteed. If an id does refer to
|
|
* an entity, the type of the entity will match the type of the
|
|
* identifier.
|
|
*/
|
|
|
|
#define GNC_ID_NONE QOF_ID_NONE
|
|
#define GNC_ID_BOOK QOF_ID_BOOK
|
|
#define GNC_ID_SESSION QOF_ID_SESSION
|
|
#define GNC_ID_NULL QOF_ID_NULL
|
|
|
|
#define GNC_ID_ACCOUNT "Account"
|
|
#define GNC_ID_COMMODITY "Commodity"
|
|
#define GNC_ID_COMMODITY_NAMESPACE "CommodityNamespace"
|
|
#define GNC_ID_COMMODITY_TABLE "CommodityTable"
|
|
#define GNC_ID_LOT "Lot"
|
|
#define GNC_ID_PERIOD "Period"
|
|
#define GNC_ID_PRICE "Price"
|
|
#define GNC_ID_PRICEDB "PriceDB"
|
|
#define GNC_ID_SPLIT "Split"
|
|
#define GNC_ID_BUDGET "Budget"
|
|
#define GNC_ID_SCHEDXACTION "SchedXaction"
|
|
#define GNC_ID_SXES "SchedXactions"
|
|
#define GNC_ID_SXTG "SXTGroup"
|
|
#define GNC_ID_SXTT "SXTTrans"
|
|
#define GNC_ID_TRANS "Trans"
|
|
|
|
/* TYPES **********************************************************/
|
|
|
|
/* CAS: ISTM, it would make more sense to put the typedefs in their
|
|
corresponding header files, (e.g. Account.h), and to #include all
|
|
the engine API header files right here. After all, when I jump to
|
|
the definition "Account", I want to end up in Account.h, not this
|
|
file, like I do now.
|
|
|
|
Also, as it is now, if I want to use the engine api, I need to
|
|
include this header, plus all the other engine headers for the
|
|
types whose functions I call, so this header is providing almost no
|
|
benefit of aggregation. But, if it included all the headers I
|
|
could just include this file. Or would that cause a massive
|
|
recompile every time one engine header changed?
|
|
Even if including all the headers here doesn't make sense, I think
|
|
distributing the stuff in the "Types" section does.
|
|
*/
|
|
|
|
|
|
/** @brief Account in Gnucash.
|
|
* This is the typename for an account. The actual structure is
|
|
* defined in the private header AccountP.hpp, but no one outside the
|
|
* engine should include that file. Instead, access that data only
|
|
* through the functions in Account.h .*/
|
|
typedef struct account_s Account;
|
|
|
|
/** @brief Split in Gnucash.
|
|
* A "split" is more commonly referred to as a "entry" in a
|
|
* "transaction". Each split belongs to one Account and one
|
|
* Transaction. The split is one out of several parts a Transaction is
|
|
* divided into.
|
|
*
|
|
* This is the typename for a split. The actual structure is defined
|
|
* in the private header TransactionP.hpp, but no one outside the engine
|
|
* should include that file. Instead, access that data only through
|
|
* the functions in Transaction.h .*/
|
|
typedef struct split_s Split;
|
|
|
|
/** @brief Transaction in Gnucash.
|
|
* A Transaction is a piece of business done; the transfer of money
|
|
* from one account to one or more other accounts. Each Transaction is
|
|
* divided into one or more Splits (usually two).
|
|
*
|
|
* This is the typename for a transaction. The actual structure is
|
|
* defined in the private header TransactionP.hpp, but no one outside
|
|
* the engine should include that file. Instead, access that data only
|
|
* through the functions in Transaction.h .*/
|
|
typedef struct transaction_s Transaction;
|
|
|
|
/** @brief An article that is bought and sold.
|
|
* A Commodity is the most general term of what an account keeps track
|
|
* of. Usually this is a monetary currency, but it can also be a stock
|
|
* share or even a precious metal. Every account keeps track of
|
|
* exactly one gnc_commodity.
|
|
*
|
|
* (Up to version 1.6.x, we used to have currencies and
|
|
* securities. Now these concepts have been merged into this
|
|
* gnc_commodity. See the comments at xaccAccountSetCommodity() for
|
|
* more about that.)
|
|
*
|
|
* This is the typename for a gnc_commodity. The actual structure is
|
|
* defined in a private source file. For accessing that data, only use
|
|
* the functions in gnc-commodity.h .*/
|
|
typedef struct gnc_commodity_s gnc_commodity;
|
|
|
|
/** @brief A gnc_commodity_namespace is an collection of commodities. */
|
|
typedef struct gnc_commodity_namespace_s gnc_commodity_namespace;
|
|
|
|
/** @brief A gnc_commodity_table is a database of commodity info. */
|
|
typedef struct gnc_commodity_table_s gnc_commodity_table;
|
|
|
|
/** @brief Identifies that something sold at one time was bought at another.
|
|
* A GNCLot provides a way of tracking physical items as they are
|
|
* bought and sold in different transactions. By identifying
|
|
* the individual, underlying physical objects, it provides the
|
|
* needed framework for implementing depreciation, capital gains,
|
|
* inventory control and invoices.
|
|
*
|
|
* See the file src/doc/lots.txt for implementation overview.
|
|
*/
|
|
typedef struct gnc_lot_s GNCLot;
|
|
|
|
/** @brief Price of commodity on a given date.
|
|
* A GNCPrice encapsulates price information: the cost of a commodity
|
|
* expressed as a currency, on a given date. It also holds info about
|
|
* the provenance of the price: where it came from, its general validity.
|
|
*/
|
|
typedef struct gnc_price_s GNCPrice;
|
|
typedef struct gnc_quote_source_s gnc_quote_source;
|
|
|
|
/** GList of Account */
|
|
typedef GList AccountList;
|
|
/** GList of GNCLots */
|
|
typedef GList LotList;
|
|
/** GList of Split */
|
|
typedef GList SplitList;
|
|
/** GList of Transaction */
|
|
typedef GList TransList;
|
|
/** GList of GUIDs of a Account */
|
|
typedef GList AccountGUIDList;
|
|
/** GList of GUIDs of a QofBook */
|
|
typedef GList BookGUIDList;
|
|
|
|
typedef void (*EngineCommitErrorCallback)( gpointer data, QofBackendError errcode );
|
|
|
|
typedef gint (*SplitCallback)(Split *s, gpointer data);
|
|
typedef gint (*TransactionCallback)(Transaction *t, void *data);
|
|
|
|
/** Function type for init hooks in the engine. */
|
|
typedef void (* gnc_engine_init_hook_t)(int, char **);
|
|
|
|
|
|
/** PROTOTYPES ******************************************************/
|
|
|
|
/** gnc_engine_init should be called before gnc engine
|
|
* functions can be used. */
|
|
void gnc_engine_init(int argc, char ** argv);
|
|
|
|
/** This is the statically linked-in version of gnc_engine_init. It is
|
|
* identical to that function except that it doesn't load any backend library.
|
|
*/
|
|
void gnc_engine_init_static(int argc, char ** argv);
|
|
|
|
/** Called to shutdown the engine. */
|
|
void gnc_engine_shutdown (void);
|
|
|
|
/** check the engine is fully initialized */
|
|
gboolean gnc_engine_is_initialized(void);
|
|
|
|
/** enable default log modules */
|
|
void gnc_log_default(void);
|
|
|
|
/** Pass a function pointer to gnc_engine_add_init_hook and
|
|
* it will be called during the evaluation of gnc_engine_init */
|
|
void gnc_engine_add_init_hook(gnc_engine_init_hook_t hook);
|
|
|
|
/** Set a callback function to be called in case an engine commit
|
|
* fails */
|
|
void gnc_engine_add_commit_error_callback( EngineCommitErrorCallback cb, gpointer data );
|
|
|
|
void gnc_engine_signal_commit_error( QofBackendError errcode );
|
|
|
|
/** STRING CONSTANTS **********************************************
|
|
* Used to declare constant KVP keys used in more than one class
|
|
*/
|
|
#define GNC_INVOICE_ID "gncInvoice"
|
|
#define GNC_INVOICE_GUID "invoice-guid"
|
|
#define GNC_OWNER_ID "gncOwner"
|
|
#define GNC_OWNER_TYPE "owner-type"
|
|
#define GNC_OWNER_GUID "owner-guid"
|
|
#define GNC_SX_ID "sched-xaction"
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif
|
|
/** @} */
|