GnuCash  5.6-133-gc519490283+
Files | Data Structures | Macros | Typedefs | Enumerations | Functions

Splits are grouped into Accounts which are also known as "Ledgers" in accounting practice. More...

Files

file  Account.h
 Account handling public routines.
 
file  Account.hpp
 Account public routines (C++ api)
 

Data Structures

struct  AccountClass
 

Macros

#define GNC_TYPE_ACCOUNT   (gnc_account_get_type ())
 
#define GNC_ACCOUNT(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_ACCOUNT, Account))
 
#define GNC_ACCOUNT_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_ACCOUNT, AccountClass))
 
#define GNC_IS_ACCOUNT(o)   (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_ACCOUNT))
 
#define GNC_IS_ACCOUNT_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_ACCOUNT))
 
#define GNC_ACCOUNT_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_ACCOUNT, AccountClass))
 

Typedefs

typedef gnc_numeric(* xaccGetBalanceFn) (const Account *account)
 
typedef gnc_numeric(* xaccGetBalanceInCurrencyFn) (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
typedef gnc_numeric(* xaccGetBalanceAsOfDateFn) (Account *account, time64 date)
 
typedef void(* AccountCb) (Account *a, gpointer data)
 
typedef gpointer(* AccountCb2) (Account *a, gpointer data)
 
using SplitsVec = std::vector< Split * >
 

Enumerations

enum  GNCAccountType {
  ACCT_TYPE_INVALID = -1, ACCT_TYPE_NONE = -1, ACCT_TYPE_BANK = 0, ACCT_TYPE_CASH = 1,
  ACCT_TYPE_CREDIT = 3, ACCT_TYPE_ASSET = 2, ACCT_TYPE_LIABILITY = 4, ACCT_TYPE_STOCK = 5,
  ACCT_TYPE_MUTUAL = 6, ACCT_TYPE_CURRENCY = 7, ACCT_TYPE_INCOME = 8, ACCT_TYPE_EXPENSE = 9,
  ACCT_TYPE_EQUITY = 10, ACCT_TYPE_RECEIVABLE = 11, ACCT_TYPE_PAYABLE = 12, ACCT_TYPE_ROOT = 13,
  ACCT_TYPE_TRADING = 14, NUM_ACCOUNT_TYPES = 15, ACCT_TYPE_CHECKING = 15, ACCT_TYPE_SAVINGS = 16,
  ACCT_TYPE_MONEYMRKT = 17, ACCT_TYPE_CREDITLINE = 18, ACCT_TYPE_LAST
}
 The account types are used to determine how the transaction data in the account is displayed. More...
 

Functions

GType gnc_account_get_type (void)
 Returns the GType type system description of the Account class. More...
 
gboolean gnc_account_and_descendants_empty (Account *acc)
 
gchar * gnc_account_name_violations_errmsg (const gchar *separator, GList *invalid_account_names)
 Composes a translatable error message showing which account names clash with the current account separator. More...
 
GList * gnc_account_list_name_violations (QofBook *book, const gchar *separator)
 Runs through all the accounts and returns a list of account names that contain the provided separator character. More...
 
void xaccAccountSetReconcileChildrenStatus (Account *account, gboolean status)
 DOCUMENT ME!
 
gboolean xaccAccountGetReconcileChildrenStatus (const Account *account)
 DOCUMENT ME!
 
gboolean xaccAccountHasAncestor (const Account *acc, const Account *ancestor)
 Returns true if the account is 'ancestor' or has 'ancestor' as an ancestor. More...
 
const SplitsVec xaccAccountGetSplits (const Account *)
 
void gnc_account_foreach_split (const Account *, std::function< void(Split *)>, bool)
 
void gnc_account_foreach_split_until_date (const Account *acc, time64 end_date, std::function< void(Split *)> f)
 
Split * gnc_account_find_split (const Account *, std::function< bool(const Split *)>, bool)
 scans account split list (in forward or reverse order) until predicate split->bool returns true. More...
 

Account Constructors, Edit/Commit, Comparison

AccountxaccMallocAccount (QofBook *book)
 Constructor.
 
Accountgnc_account_create_root (QofBook *book)
 Create a new root level account. More...
 
AccountxaccCloneAccount (const Account *source, QofBook *book)
 The xaccCloneAccount() routine makes a simple copy of the indicated account, placing it in the indicated book. More...
 
void xaccAccountBeginEdit (Account *account)
 The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account updates. More...
 
void xaccAccountCommitEdit (Account *account)
 ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account updates. More...
 
void xaccAccountDestroy (Account *account)
 The xaccAccountDestroy() routine can be used to get rid of an account. More...
 
gboolean xaccAccountEqual (const Account *a, const Account *b, gboolean check_guids)
 Compare two accounts for equality - this is a deep compare. More...
 
int xaccAccountOrder (const Account *account_1, const Account *account_2)
 The xaccAccountOrder() subroutine defines a sorting order on accounts. More...
 

Account lookup and GncGUID routines

const gchar * gnc_get_account_separator_string (void)
 Returns the account separation character chosen by the user. More...
 
gunichar gnc_get_account_separator (void)
 
void gnc_set_account_separator (const gchar *separator)
 
Accountgnc_book_get_root_account (QofBook *book)
 
void gnc_book_set_root_account (QofBook *book, Account *root)
 
AccountxaccAccountLookup (const GncGUID *guid, QofBook *book)
 The xaccAccountLookup() subroutine will return the account associated with the given id, or NULL if there is no such account. More...
 
#define xaccAccountGetGUID(X)   qof_entity_get_guid(QOF_INSTANCE(X))
 
#define xaccAccountReturnGUID(X)   (X ? *(qof_entity_get_guid(QOF_INSTANCE(X))) : *(guid_null()))
 
#define xaccAccountLookupDirect(g, b)   xaccAccountLookup(&(g),b)
 

Account general setters/getters

QofBook * gnc_account_get_book (const Account *account)
 
void xaccAccountSetType (Account *account, GNCAccountType)
 Set the account's type.
 
void xaccAccountSetName (Account *account, const char *name)
 Set the account's name.
 
void xaccAccountSetCode (Account *account, const char *code)
 Set the account's accounting code.
 
void xaccAccountSetDescription (Account *account, const char *desc)
 Set the account's description.
 
void xaccAccountSetColor (Account *account, const char *color)
 Set the account's Color.
 
void xaccAccountSetFilter (Account *account, const char *filter)
 Set the account's Filter.
 
void xaccAccountSetSortOrder (Account *account, const char *sortorder)
 Set the account's Sort Order.
 
void xaccAccountSetSortReversed (Account *account, gboolean sortreversed)
 Set the account's Sort Order direction.
 
void xaccAccountSetNotes (Account *account, const char *notes)
 Set the account's notes.
 
void xaccAccountSetAssociatedAccount (Account *acc, const char *tag, const Account *assoc_acct)
 Set the account's associated account e.g. More...
 
void xaccAccountSetLastNum (Account *account, const char *num)
 Set the last num field of an Account.
 
void gnc_account_set_policy (Account *account, GNCPolicy *policy)
 Set the account's lot order policy.
 
GNCAccountType xaccAccountGetType (const Account *account)
 Returns the account's account type. More...
 
gboolean xaccAccountIsPriced (const Account *acc)
 Returns true if the account is a stock, mutual fund or currency, otherwise false. More...
 
void gnc_account_set_start_balance (Account *acc, const gnc_numeric start_baln)
 This function will set the starting commodity balance for this account. More...
 
void gnc_account_set_start_cleared_balance (Account *acc, const gnc_numeric start_baln)
 This function will set the starting cleared commodity balance for this account. More...
 
void gnc_account_set_start_reconciled_balance (Account *acc, const gnc_numeric start_baln)
 This function will set the starting reconciled commodity balance for this account. More...
 
void gnc_account_set_balance_dirty (Account *acc)
 Tell the account that the running balances may be incorrect and need to be recomputed. More...
 
void gnc_account_set_sort_dirty (Account *acc)
 Tell the account believes that the splits may be incorrectly sorted and need to be resorted. More...
 
void gnc_account_set_defer_bal_computation (Account *acc, gboolean defer)
 Set the defer balance flag. More...
 
gboolean gnc_account_insert_split (Account *acc, Split *s)
 Insert the given split from an account. More...
 
gboolean gnc_account_remove_split (Account *acc, Split *s)
 Remove the given split from an account. More...
 
const char * xaccAccountGetName (const Account *account)
 Get the account's name.
 
const char * xaccAccountGetCode (const Account *account)
 Get the account's accounting code.
 
const char * xaccAccountGetDescription (const Account *account)
 Get the account's description.
 
const char * xaccAccountGetColor (const Account *account)
 Get the account's color.
 
const char * xaccAccountGetFilter (const Account *account)
 Get the account's filter.
 
const char * xaccAccountGetSortOrder (const Account *account)
 Get the account's Sort Order.
 
gboolean xaccAccountGetSortReversed (const Account *account)
 Get the account's Sort Order direction.
 
const char * xaccAccountGetNotes (const Account *account)
 Get the account's notes.
 
AccountxaccAccountGetAssociatedAccount (const Account *acc, const char *tag)
 Get the account's associated account e.g. More...
 
const char * xaccAccountGetLastNum (const Account *account)
 Get the last num field of an Account.
 
GNCPolicy * gnc_account_get_policy (Account *account)
 Get the account's lot order policy.
 
gboolean gnc_account_get_defer_bal_computation (Account *acc)
 Get the account's flag for deferred balance computation.
 
void xaccAccountRecomputeBalance (Account *)
 The following recompute the partial balances (stored with the transaction) and the total balance, for this account.
 
void xaccAccountSortSplits (Account *acc, gboolean force)
 The xaccAccountSortSplits() routine will resort the account's splits if the sort is dirty. More...
 
gchar * gnc_account_get_full_name (const Account *account)
 The gnc_account_get_full_name routine returns the fully qualified name of the account using the given separator char. More...
 
AccountxaccAccountGainsAccount (Account *acc, gnc_commodity *curr)
 Retrieve the gains account used by this account for the indicated currency, creating and recording a new one if necessary. More...
 
void dxaccAccountSetPriceSrc (Account *account, const char *src)
 Set a string that identifies the Finance::Quote backend that should be used to retrieve online prices. More...
 
const char * dxaccAccountGetPriceSrc (const Account *account)
 Get a string that identifies the Finance::Quote backend that should be used to retrieve online prices. More...
 

Account Commodity setters/getters

Accounts are used to store an amount of 'something', that 'something'
is called the 'commodity'.

An account can only hold one kind of commodity. The following are used to get and set the commodity, and also to set the SCU, the 'Smallest Commodity Unit'.

Note that when we say that a 'split' holds an 'amount', that amount is denominated in the account commodity. Do not confuse 'amount' and 'value'. The 'value' of a split is the value of the amount expressed in the currency of the transaction. Thus, for example, the 'amount' may be 12 apples, where the account commodity is 'apples'. The value of these 12 apples may be 12 dollars, where the transaction currency is 'dollars'.

The SCU is the 'Smallest Commodity Unit', signifying the smallest non-zero amount that can be stored in the account. It is represented as the integer denominator of a fraction. Thus, for example, a SCU of 12 means that 1/12 of something is the smallest amount that can be stored in the account. SCU's can be any value; they do not need to be decimal. This allows the use of accounts with unusual, non-decimal commodities and currencies.

Normally, the SCU is determined by the commodity of the account. However, this default SCU can be over-ridden and set to an account-specific value. This is account-specific value is called the 'non-standard' value in the documentation below.

void xaccAccountSetCommodity (Account *account, gnc_commodity *comm)
 Set the account's commodity.
 
gnc_commodity * xaccAccountGetCommodity (const Account *account)
 Get the account's commodity.
 
gnc_commodity * gnc_account_get_currency_or_parent (const Account *account)
 Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency. More...
 
int xaccAccountGetCommoditySCU (const Account *account)
 Return the SCU for the account. More...
 
int xaccAccountGetCommoditySCUi (const Account *account)
 Return the 'internal' SCU setting. More...
 
void xaccAccountSetCommoditySCU (Account *account, int frac)
 Set the SCU for the account. More...
 
void xaccAccountSetNonStdSCU (Account *account, gboolean flag)
 Set the flag indicating that this account uses a non-standard SCU. More...
 
gboolean xaccAccountGetNonStdSCU (const Account *account)
 Return boolean, indicating whether this account uses a non-standard SCU. More...
 

Account Balance

gnc_numeric xaccAccountGetBalance (const Account *account)
 Get the current balance of the account, which may include future splits.
 
gnc_numeric xaccAccountGetClearedBalance (const Account *account)
 Get the current balance of the account, only including cleared transactions.
 
gnc_numeric xaccAccountGetReconciledBalance (const Account *account)
 Get the current balance of the account, only including reconciled transactions.
 
gnc_numeric xaccAccountGetPresentBalance (const Account *account)
 
gnc_numeric xaccAccountGetProjectedMinimumBalance (const Account *account)
 
gnc_numeric xaccAccountGetBalanceAsOfDate (Account *account, time64 date)
 Get the balance of the account at the end of the day before the date specified. More...
 
gnc_numeric xaccAccountGetReconciledBalanceAsOfDate (Account *account, time64 date)
 Get the reconciled balance of the account at the end of the day of the date specified. More...
 
gnc_numeric xaccAccountConvertBalanceToCurrency (const Account *account, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency)
 
gnc_numeric xaccAccountConvertBalanceToCurrencyAsOfDate (const Account *account, gnc_numeric balance, const gnc_commodity *balance_currency, const gnc_commodity *new_currency, time64 date)
 
gnc_numeric xaccAccountGetBalanceInCurrency (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
gnc_numeric xaccAccountGetClearedBalanceInCurrency (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
gnc_numeric xaccAccountGetReconciledBalanceInCurrency (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
gnc_numeric xaccAccountGetPresentBalanceInCurrency (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
gnc_numeric xaccAccountGetProjectedMinimumBalanceInCurrency (const Account *account, const gnc_commodity *report_commodity, gboolean include_children)
 
gnc_numeric xaccAccountGetNoclosingBalanceAsOfDateInCurrency (Account *acc, time64 date, gnc_commodity *report_commodity, gboolean include_children)
 This function gets the balance at the end of the given date, ignoring closing entries, in the desired commodity. More...
 
gnc_numeric xaccAccountGetBalanceAsOfDateInCurrency (Account *account, time64 date, gnc_commodity *report_commodity, gboolean include_children)
 This function gets the balance at the end of the given date in the desired commodity. More...
 
gnc_numeric xaccAccountGetNoclosingBalanceChangeForPeriod (Account *acc, time64 date1, time64 date2, gboolean recurse)
 
gnc_numeric xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (Account *acc, time64 date1, time64 date2, gboolean recurse)
 
gnc_numeric xaccAccountGetBalanceChangeForPeriod (Account *acc, time64 date1, time64 date2, gboolean recurse)
 

Account Children and Parents.

The set of accounts is represented as a doubly-linked tree, so that given any account, both its parent and its children can be easily found.

At the top of the tree hierarchy lies a single root node, the root account.

The account tree hierarchy is unique, in that a given account can have only one parent account.

void gnc_account_append_child (Account *new_parent, Account *child)
 This function will remove from the child account any pre-existing parent relationship, and will then add the account as a child of the new parent. More...
 
void gnc_account_remove_child (Account *parent, Account *child)
 This function will remove the specified child account from the specified parent account. More...
 
Accountgnc_account_get_parent (const Account *account)
 This routine returns a pointer to the parent of the specified account. More...
 
Accountgnc_account_get_root (Account *account)
 This routine returns the root account of the account tree that the specified account belongs to. More...
 
gboolean gnc_account_is_root (const Account *account)
 This routine indicates whether the specified account is the root node of an account tree. More...
 
GList * gnc_account_get_children (const Account *account)
 This routine returns a GList of all children accounts of the specified account. More...
 
GList * gnc_account_get_children_sorted (const Account *account)
 This routine returns a GList of all children accounts of the specified account, ordered by xaccAccountOrder(). More...
 
gint gnc_account_n_children (const Account *account)
 Return the number of children of the specified account. More...
 
gint gnc_account_child_index (const Account *parent, const Account *child)
 Return the index of the specified child within the list of the parent's children. More...
 
Accountgnc_account_nth_child (const Account *parent, gint num)
 Return the n'th child account of the specified parent account. More...
 
GList * gnc_account_get_descendants (const Account *account)
 This routine returns a flat list of all of the accounts that are descendants of the specified account. More...
 
GList * gnc_account_get_descendants_sorted (const Account *account)
 This function returns a GList containing all the descendants of the specified account, sorted at each level. More...
 
gint gnc_account_n_descendants (const Account *account)
 Return the number of descendants of the specified account. More...
 
gint gnc_account_get_current_depth (const Account *account)
 Return the number of levels of this account below the root account. More...
 
gint gnc_account_get_tree_depth (const Account *account)
 Return the number of levels of descendants accounts below the specified account. More...
 

ForEach

void gnc_account_foreach_child (const Account *account, AccountCb func, gpointer user_data)
 This method will traverse the immediate children of this accounts, calling 'func' on each account. More...
 
void gnc_account_foreach_descendant (const Account *account, AccountCb func, gpointer user_data)
 This method will traverse all children of this accounts and their descendants, calling 'func' on each account. More...
 
gpointer gnc_account_foreach_descendant_until (const Account *account, AccountCb2 func, gpointer user_data)
 This method will traverse all children of this accounts and their descendants, calling 'func' on each account. More...
 

Concatenation, Merging

void gnc_account_join_children (Account *to_parent, Account *from_parent)
 The gnc_account_join_children() subroutine will move (reparent) all child accounts from the from_parent account to the to_parent account, preserving the account hierarchy. More...
 
void gnc_account_merge_children (Account *parent)
 The gnc_account_merge_children() subroutine will go through an account, merging all child accounts that have the same name and description. More...
 

Detailed Description

Splits are grouped into Accounts which are also known as "Ledgers" in accounting practice.

Each Account consists of a list of Splits that debit that Account. To ensure consistency, if a Split points to an Account, then the Account must point to the Split, and vice-versa. A Split can belong to at most one Account. Besides merely containing a list of Splits, the Account structure also gives the Account a name, a code number, description and notes fields, a key-value frame, a pointer to the commodity that is used for all splits in this account. The commodity can be the name of anything traded and tradeable: a stock (e.g. "IBM", "McDonald's"), a currency (e.g. "USD", "GBP"), or anything added to the commodity table.

Accounts can be arranged in a hierarchical tree. By accounting convention, the value of an Account is equal to the value of all of its Splits plus the value of all of its sub-Accounts.

Macro Definition Documentation

◆ xaccAccountGetGUID

#define xaccAccountGetGUID (   X)    qof_entity_get_guid(QOF_INSTANCE(X))
Deprecated:

Definition at line 248 of file Account.h.

Enumeration Type Documentation

◆ GNCAccountType

The 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. Note that if values are added, the file IO translation routines need to be updated. Note also that GUI code depends on these numbers.

Note
IMPORTANT: If you do change the enumeration names (not the numbers), you need to update xaccAccountTypeEnumAsString — used for text file exports
Enumerator
ACCT_TYPE_INVALID 

Not a type.

ACCT_TYPE_NONE 

Not a type.

ACCT_TYPE_BANK 

The bank account type denotes a savings or checking account held at a bank.

Often interest bearing.

ACCT_TYPE_CASH 

The cash account type is used to denote a shoe-box or pillowcase stuffed with * cash.

ACCT_TYPE_CREDIT 

The Credit card account is used to denote credit (e.g.

amex) and debit (e.g. visa, mastercard) card accounts

ACCT_TYPE_ASSET 

asset (and liability) accounts indicate generic, generalized accounts that are none of the above.

ACCT_TYPE_LIABILITY 

liability (and asset) accounts indicate generic, generalized accounts that are none of the above.

ACCT_TYPE_STOCK 

Stock accounts will typically be shown in registers which show three columns: price, number of shares, and value.

ACCT_TYPE_MUTUAL 

Mutual Fund accounts will typically be shown in registers which show three columns: price, number of shares, and value.

ACCT_TYPE_CURRENCY 

The currency account type indicates that the account is a currency trading account.

In many ways, a currency trading account is like a stock * trading account. It is shown in the register with three columns: price, number of shares, and value. Note: Since version 1.7.0, this account is * no longer needed to exchange currencies between accounts, so this type is DEPRECATED.

ACCT_TYPE_INCOME 

Income accounts are used to denote income.

ACCT_TYPE_EXPENSE 

Expense accounts are used to denote expenses.

ACCT_TYPE_EQUITY 

Equity account is used to balance the balance sheet.

ACCT_TYPE_RECEIVABLE 

A/R account type.

ACCT_TYPE_PAYABLE 

A/P account type.

ACCT_TYPE_ROOT 

The hidden root account of an account tree.

ACCT_TYPE_TRADING 

Account used to record multiple commodity transactions.

This is not the same as ACCT_TYPE_CURRENCY above. Multiple commodity transactions have splits in these accounts to make the transaction balance in each commodity as well as in total value.

NUM_ACCOUNT_TYPES 

stop here; the following types just aren't ready for prime time

ACCT_TYPE_CHECKING 

bank account type – don't use this for now, see NUM_ACCOUNT_TYPES

ACCT_TYPE_SAVINGS 

bank account type – don't use this for now, see NUM_ACCOUNT_TYPES

ACCT_TYPE_MONEYMRKT 

bank account type – don't use this for now, see NUM_ACCOUNT_TYPES

ACCT_TYPE_CREDITLINE 

line of credit – don't use this for now, see NUM_ACCOUNT_TYPES

Definition at line 101 of file Account.h.

103 {
104  ACCT_TYPE_INVALID = -1,
105  ACCT_TYPE_NONE = -1,
107  ACCT_TYPE_BANK = 0,
110  ACCT_TYPE_CASH = 1,
113  ACCT_TYPE_CREDIT = 3,
116  ACCT_TYPE_ASSET = 2,
122  ACCT_TYPE_STOCK = 5,
125  ACCT_TYPE_MUTUAL = 6,
129  ACCT_TYPE_CURRENCY = 7,
140  ACCT_TYPE_INCOME = 8,
143  ACCT_TYPE_EXPENSE = 9,
146  ACCT_TYPE_EQUITY = 10,
151  ACCT_TYPE_PAYABLE = 12,
153  ACCT_TYPE_ROOT = 13,
155  ACCT_TYPE_TRADING = 14,
161  NUM_ACCOUNT_TYPES = 15,
164  /* bank account types */
165  ACCT_TYPE_CHECKING = 15,
167  ACCT_TYPE_SAVINGS = 16,
169  ACCT_TYPE_MONEYMRKT = 17,
171  ACCT_TYPE_CREDITLINE = 18,
173  ACCT_TYPE_LAST
174 #ifdef __cplusplus
175 };
176 #else
Expense accounts are used to denote expenses.
Definition: Account.h:143
Mutual Fund accounts will typically be shown in registers which show three columns: price...
Definition: Account.h:125
stop here; the following types just aren&#39;t ready for prime time
Definition: Account.h:161
The cash account type is used to denote a shoe-box or pillowcase stuffed with * cash.
Definition: Account.h:110
Account used to record multiple commodity transactions.
Definition: Account.h:155
Stock accounts will typically be shown in registers which show three columns: price, number of shares, and value.
Definition: Account.h:122
bank account type – don&#39;t use this for now, see NUM_ACCOUNT_TYPES
Definition: Account.h:165
Income accounts are used to denote income.
Definition: Account.h:140
line of credit – don&#39;t use this for now, see NUM_ACCOUNT_TYPES
Definition: Account.h:171
The bank account type denotes a savings or checking account held at a bank.
Definition: Account.h:107
A/P account type.
Definition: Account.h:151
bank account type – don&#39;t use this for now, see NUM_ACCOUNT_TYPES
Definition: Account.h:167
asset (and liability) accounts indicate generic, generalized accounts that are none of the above...
Definition: Account.h:116
The currency account type indicates that the account is a currency trading account.
Definition: Account.h:129
GNCAccountType
The account types are used to determine how the transaction data in the account is displayed...
Definition: Account.h:101
Not a type.
Definition: Account.h:104
liability (and asset) accounts indicate generic, generalized accounts that are none of the above...
Definition: Account.h:119
A/R account type.
Definition: Account.h:149
bank account type – don&#39;t use this for now, see NUM_ACCOUNT_TYPES
Definition: Account.h:169
Equity account is used to balance the balance sheet.
Definition: Account.h:146
Not a type.
Definition: Account.h:105
The hidden root account of an account tree.
Definition: Account.h:153
The Credit card account is used to denote credit (e.g.
Definition: Account.h:113

Function Documentation

◆ dxaccAccountGetPriceSrc()

const char* dxaccAccountGetPriceSrc ( const Account account)

Get a string that identifies the Finance::Quote backend that should be used to retrieve online prices.

See price-quotes.scm for more information. This function uses a static char*.

Deprecated:
Price quote information is now stored on the commodity, not the account.

Definition at line 5280 of file Account.cpp.

5281 {
5282  static char *source = nullptr;
5283  if (!acc) return nullptr;
5284 
5285  if (!xaccAccountIsPriced(acc)) return nullptr;
5286 
5287  g_free (source);
5288 
5289  GValue v = G_VALUE_INIT;
5290  auto rv = get_kvp_string_tag (acc, "old-price-source", &v);
5291  g_value_unset (&v);
5292  return rv;
5293 }
gboolean xaccAccountIsPriced(const Account *acc)
Returns true if the account is a stock, mutual fund or currency, otherwise false. ...
Definition: Account.cpp:4698

◆ dxaccAccountSetPriceSrc()

void dxaccAccountSetPriceSrc ( Account account,
const char *  src 
)

Set a string that identifies the Finance::Quote backend that should be used to retrieve online prices.

See price-quotes.scm for more information

Deprecated:
Price quote information is now stored on the commodity, not the account.

Definition at line 5268 of file Account.cpp.

5269 {
5270  if (!acc) return;
5271 
5272  if (xaccAccountIsPriced(acc))
5273  set_kvp_string_tag (acc, "old-price-source", src);
5274 }
gboolean xaccAccountIsPriced(const Account *acc)
Returns true if the account is a stock, mutual fund or currency, otherwise false. ...
Definition: Account.cpp:4698

◆ gnc_account_append_child()

void gnc_account_append_child ( Account new_parent,
Account child 
)

This function will remove from the child account any pre-existing parent relationship, and will then add the account as a child of the new parent.

The exception to this is when the old and new parent accounts are the same, in which case this function does nothing.

If the child account belongs to a different book than the specified new parent account, the child will be removed from the other book (and thus, the other book's entity tables, generating a destroy event), and will be added to the new book (generating a create event).

Parameters
new_parentThe new parent account to which the child should be attached.
childThe account to attach.

Definition at line 2804 of file Account.cpp.

2805 {
2806  AccountPrivate *ppriv, *cpriv;
2807  Account *old_parent;
2808  QofCollection *col;
2809 
2810  /* errors */
2811  g_assert(GNC_IS_ACCOUNT(new_parent));
2812  g_assert(GNC_IS_ACCOUNT(child));
2813 
2814  /* optimizations */
2815  ppriv = GET_PRIVATE(new_parent);
2816  cpriv = GET_PRIVATE(child);
2817  old_parent = cpriv->parent;
2818  if (old_parent == new_parent)
2819  return;
2820 
2821  // xaccAccountBeginEdit(new_parent);
2822  xaccAccountBeginEdit(child);
2823  if (old_parent)
2824  {
2825  gnc_account_remove_child(old_parent, child);
2826 
2827  if (!qof_instance_books_equal(old_parent, new_parent))
2828  {
2829  /* hack alert -- this implementation is not exactly correct.
2830  * If the entity tables are not identical, then the 'from' book
2831  * may have a different backend than the 'to' book. This means
2832  * that we should get the 'from' backend to destroy this account,
2833  * and the 'to' backend to save it. Right now, this is broken.
2834  *
2835  * A 'correct' implementation similar to this is in Period.c
2836  * except its for transactions ...
2837  *
2838  * Note also, we need to reparent the children to the new book as well.
2839  */
2840  PWARN ("reparenting accounts across books is not correctly supported\n");
2841 
2842  qof_event_gen (&child->inst, QOF_EVENT_DESTROY, nullptr);
2844  GNC_ID_ACCOUNT);
2845  qof_collection_insert_entity (col, &child->inst);
2846  qof_event_gen (&child->inst, QOF_EVENT_CREATE, nullptr);
2847  }
2848  }
2849  cpriv->parent = new_parent;
2850  ppriv->children = g_list_append(ppriv->children, child);
2851  qof_instance_set_dirty(&new_parent->inst);
2852  qof_instance_set_dirty(&child->inst);
2853 
2854  /* Send events data. Warning: The call to commit_edit is also going
2855  * to send a MODIFY event. If the gtktreemodelfilter code gets the
2856  * MODIFY before it gets the ADD, it gets very confused and thinks
2857  * that two nodes have been added. */
2858  qof_event_gen (&child->inst, QOF_EVENT_ADD, nullptr);
2859  // qof_event_gen (&new_parent->inst, QOF_EVENT_MODIFY, nullptr);
2860 
2861  xaccAccountCommitEdit (child);
2862  // xaccAccountCommitEdit(new_parent);
2863 }
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
STRUCTS.
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
void gnc_account_remove_child(Account *parent, Account *child)
This function will remove the specified child account from the specified parent account.
Definition: Account.cpp:2866
void qof_collection_insert_entity(QofCollection *, QofInstance *)
Take entity, remove it from whatever collection its currently in, and place it in a new collection...
Definition: qofid.cpp:95
gboolean qof_instance_books_equal(gconstpointer ptr1, gconstpointer ptr2)
See if two QofInstances share the same book.
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
QofCollection * qof_book_get_collection(const QofBook *book, QofIdType entity_type)
Return The table of entities of the given type.
Definition: qofbook.cpp:521
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 xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526

◆ gnc_account_child_index()

gint gnc_account_child_index ( const Account parent,
const Account child 
)

Return the index of the specified child within the list of the parent's children.

The first child index is 0. This function returns -1 if the parent account is NULL of if the specified child does not belong to the parent account.

Parameters
parentThe parent account to check.
childThe child account to find.
Returns
The index of the child account within the specified parent, or -1.

Definition at line 2962 of file Account.cpp.

2963 {
2964  g_return_val_if_fail(GNC_IS_ACCOUNT(parent), -1);
2965  g_return_val_if_fail(GNC_IS_ACCOUNT(child), -1);
2966  return g_list_index(GET_PRIVATE(parent)->children, child);
2967 }

◆ gnc_account_create_root()

Account* gnc_account_create_root ( QofBook *  book)

Create a new root level account.

Definition at line 1289 of file Account.cpp.

1290 {
1291  Account *root;
1292  AccountPrivate *rpriv;
1293 
1294  root = xaccMallocAccount(book);
1295  rpriv = GET_PRIVATE(root);
1296  xaccAccountBeginEdit(root);
1297  rpriv->type = ACCT_TYPE_ROOT;
1298  rpriv->accountName = qof_string_cache_replace(rpriv->accountName, "Root Account");
1299  mark_account (root);
1300  xaccAccountCommitEdit(root);
1301  gnc_book_set_root_account(book, root);
1302  return root;
1303 }
const char * qof_string_cache_replace(char const *dst, char const *src)
Same as CACHE_REPLACE below, but safe to call from C++.
STRUCTS.
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
Account * xaccMallocAccount(QofBook *book)
Constructor.
Definition: Account.cpp:1275
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526
The hidden root account of an account tree.
Definition: Account.h:153

◆ gnc_account_find_split()

Split* gnc_account_find_split ( const Account ,
std::function< bool(const Split *)>  ,
bool   
)

scans account split list (in forward or reverse order) until predicate split->bool returns true.

Maybe return the split.

Parameters
accThe account to which the split should be added.
predicateA split->bool predicate.
reverseTo scan in reverse order
Returns
Split* or nullptr if not found

Definition at line 1172 of file Account.cpp.

1174 {
1175  if (!GNC_IS_ACCOUNT (acc))
1176  return nullptr;
1177 
1178  auto splits{GET_PRIVATE(acc)->splits};
1179  if (reverse)
1180  {
1181  auto latest = std::find_if(splits.rbegin(), splits.rend(), predicate);
1182  return (latest == splits.rend()) ? nullptr : *latest;
1183  }
1184  else
1185  {
1186  auto earliest = std::find_if(splits.begin(), splits.end(), predicate);
1187  return (earliest == splits.end()) ? nullptr : *earliest;
1188  }
1189 }

◆ gnc_account_foreach_child()

void gnc_account_foreach_child ( const Account account,
AccountCb  func,
gpointer  user_data 
)

This method will traverse the immediate children of this accounts, calling 'func' on each account.

This function traverses all children nodes. To traverse only a subset of the child nodes use the gnc_account_foreach_child_until() function.

Parameters
accountA pointer to the account on whose children the function should be called.
funcA function taking two arguments, an Account and a gpointer.
user_dataThis data will be passed to each call of func.

Definition at line 3230 of file Account.cpp.

3233 {
3234  const AccountPrivate *priv;
3235  GList *node;
3236 
3237  g_return_if_fail(GNC_IS_ACCOUNT(acc));
3238  g_return_if_fail(thunk);
3239 
3240  priv = GET_PRIVATE(acc);
3241  for (node = priv->children; node; node = node->next)
3242  {
3243  thunk (static_cast<Account*>(node->data), user_data);
3244  }
3245 }

◆ gnc_account_foreach_descendant()

void gnc_account_foreach_descendant ( const Account account,
AccountCb  func,
gpointer  user_data 
)

This method will traverse all children of this accounts and their descendants, calling 'func' on each account.

This function traverses all descendant nodes. To traverse only a subset of the descendant nodes use the gnc_account_foreach_descendant_until() function.

Parameters
accountA pointer to the account on whose descendants the function should be called.
funcA function taking two arguments, an Account and a gpointer.
user_dataThis data will be passed to each call of func.

Definition at line 3248 of file Account.cpp.

3251 {
3252  account_foreach_descendant (acc, thunk, user_data, FALSE);
3253 }

◆ gnc_account_foreach_descendant_until()

gpointer gnc_account_foreach_descendant_until ( const Account account,
AccountCb2  func,
gpointer  user_data 
)

This method will traverse all children of this accounts and their descendants, calling 'func' on each account.

Traversal will stop when func returns a non-null value, and the routine will return with that value. Therefore, this function will return null if func returns null for every account. For a simpler function that always traverses all children nodes, use the gnc_account_foreach_descendant() function.

Parameters
accountA pointer to the account on whose descendants the function should be called.
funcA function taking two arguments, an Account and a gpointer.
user_dataThis data will be passed to each call of func.

Definition at line 3256 of file Account.cpp.

3259 {
3260  gpointer result {nullptr};
3261 
3262  g_return_val_if_fail (GNC_IS_ACCOUNT(acc), nullptr);
3263  g_return_val_if_fail (thunk, nullptr);
3264 
3265  auto priv{GET_PRIVATE(acc)};
3266 
3267  for (auto node = priv->children; node; node = node->next)
3268  {
3269  auto child = static_cast<Account*>(node->data);
3270  result = thunk (child, user_data);
3271  if (result) break;
3272 
3273  result = gnc_account_foreach_descendant_until (child, thunk, user_data);
3274  if (result) break;
3275  }
3276 
3277  return result;
3278 }
STRUCTS.
gpointer gnc_account_foreach_descendant_until(const Account *acc, AccountCb2 thunk, gpointer user_data)
This method will traverse all children of this accounts and their descendants, calling &#39;func&#39; on each...
Definition: Account.cpp:3256

◆ gnc_account_get_children()

GList* gnc_account_get_children ( const Account account)

This routine returns a GList of all children accounts of the specified account.

This function only returns the immediate children of the specified account. For a list of all descendant accounts, use the gnc_account_get_descendants() function.

If you are looking for the splits of this account, use xaccAccountGetSplitList() instead. This function here deals with children accounts inside the account tree.

Parameters
accountThe account whose children should be returned.
Returns
A GList of account pointers, or NULL if there are no children accounts. It is the callers responsibility to free any returned list with the g_list_free() function.

Definition at line 2933 of file Account.cpp.

2934 {
2935  g_return_val_if_fail(GNC_IS_ACCOUNT(account), nullptr);
2936  return g_list_copy(GET_PRIVATE(account)->children);
2937 }

◆ gnc_account_get_children_sorted()

GList* gnc_account_get_children_sorted ( const Account account)

This routine returns a GList of all children accounts of the specified account, ordered by xaccAccountOrder().

See also
gnc_account_get_children()

Definition at line 2940 of file Account.cpp.

2941 {
2942  AccountPrivate *priv;
2943 
2944  /* errors */
2945  g_return_val_if_fail(GNC_IS_ACCOUNT(account), nullptr);
2946 
2947  /* optimizations */
2948  priv = GET_PRIVATE(account);
2949  if (!priv->children)
2950  return nullptr;
2951  return g_list_sort(g_list_copy(priv->children), (GCompareFunc)xaccAccountOrder);
2952 }
int xaccAccountOrder(const Account *aa, const Account *ab)
The xaccAccountOrder() subroutine defines a sorting order on accounts.
Definition: Account.cpp:2375

◆ gnc_account_get_currency_or_parent()

gnc_commodity* gnc_account_get_currency_or_parent ( const Account account)

Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.

The gnc_commodity is taken either from the current account, or from the next parent account that has a gnc_commodity that is a currency. If neither this account nor any of its parent has such a commodity that is a currency, NULL is returned. In that case, you can use gnc_default_currency() but you might want to show a warning dialog first.

Definition at line 3474 of file Account.cpp.

3475 {
3476  gnc_commodity * commodity;
3477  g_return_val_if_fail (account, nullptr);
3478 
3479  commodity = xaccAccountGetCommodity (account);
3480  if (gnc_commodity_is_currency(commodity))
3481  return commodity;
3482  else
3483  {
3484  const Account *parent_account = account;
3485  /* Account commodity is not a currency, walk up the tree until
3486  * we find a parent account that is a currency account and use
3487  * it's currency.
3488  */
3489  do
3490  {
3491  parent_account = gnc_account_get_parent (parent_account);
3492  if (parent_account)
3493  {
3494  commodity = xaccAccountGetCommodity (parent_account);
3495  if (gnc_commodity_is_currency(commodity))
3496  {
3497  return commodity;
3498  //break;
3499  }
3500  }
3501  }
3502  while (parent_account);
3503  }
3504  return nullptr; // no suitable commodity found.
3505 }
Account * gnc_account_get_parent(const Account *acc)
This routine returns a pointer to the parent of the specified account.
Definition: Account.cpp:2902
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...
STRUCTS.
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account&#39;s commodity.
Definition: Account.cpp:3467

◆ gnc_account_get_current_depth()

gint gnc_account_get_current_depth ( const Account account)

Return the number of levels of this account below the root account.

Parameters
accountThe account to query.
Returns
The number of levels below the root.

Definition at line 2992 of file Account.cpp.

2993 {
2994  AccountPrivate *priv;
2995  int depth = 0;
2996 
2997  g_return_val_if_fail(GNC_IS_ACCOUNT(account), 0);
2998 
2999  priv = GET_PRIVATE(account);
3000  while (priv->parent && (priv->type != ACCT_TYPE_ROOT))
3001  {
3002  account = priv->parent;
3003  priv = GET_PRIVATE(account);
3004  depth++;
3005  }
3006 
3007  return depth;
3008 }
The hidden root account of an account tree.
Definition: Account.h:153

◆ gnc_account_get_descendants()

GList* gnc_account_get_descendants ( const Account account)

This routine returns a flat list of all of the accounts that are descendants of the specified account.

This includes not only the the children, but the children of the children, etc. For a list of only the immediate child accounts, use the gnc_account_get_children() function. Within each set of child accounts, the accounts returned by this function are unordered. For a list of descendants where each set of children is sorted via the standard account sort function, use the gnc_account_get_descendants_sorted() function.

Parameters
accountThe account whose descendants should be returned.
Returns
A GList of account pointers, or NULL if there are no descendants. It is the callers responsibility to free any returned list with the g_list_free() function.

Definition at line 3039 of file Account.cpp.

3040 {
3041  GList* list = nullptr;
3042  account_foreach_descendant (account, collect_acct, &list, FALSE);
3043  return g_list_reverse (list);
3044 }

◆ gnc_account_get_descendants_sorted()

GList* gnc_account_get_descendants_sorted ( const Account account)

This function returns a GList containing all the descendants of the specified account, sorted at each level.

This includes not only the the children, but the children of the children, etc. Within each set of child accounts, the accounts returned by this function are ordered via the standard account sort function. For a list of descendants where each set of children is unordered, use the gnc_account_get_descendants() function.

Note: Use this function where the results are intended for display to the user. If the results are internal to GnuCash or will be resorted at some later point in time you should use the gnc_account_get_descendants() function.

Parameters
accountThe account whose descendants should be returned.
Returns
A GList of account pointers, or NULL if there are no descendants. It is the callers responsibility to free any returned list with the g_list_free() function.

Definition at line 3047 of file Account.cpp.

3048 {
3049  GList* list = nullptr;
3050  account_foreach_descendant (account, collect_acct, &list, TRUE);
3051  return g_list_reverse (list);
3052 }

◆ gnc_account_get_full_name()

gchar* gnc_account_get_full_name ( const Account account)

The gnc_account_get_full_name routine returns the fully qualified name of the account using the given separator char.

The name must be g_free'd after use. The fully qualified name of an account is the concatenation of the names of the account and all its ancestor accounts starting with the topmost account and ending with the given account. Each name is separated by the given character.

Note
: WAKE UP! Unlike all other gets, the string returned by gnc_account_get_full_name() must be freed by you the user !!! hack alert – since it breaks the rule of string allocation, maybe this routine should not be in this library, but some utility library?

Definition at line 3311 of file Account.cpp.

3312 {
3313  AccountPrivate *priv;
3314  const Account *a;
3315  char *fullname;
3316  const gchar **names;
3317  int level;
3318 
3319  /* So much for hardening the API. Too many callers to this function don't
3320  * bother to check if they have a non-nullptr pointer before calling. */
3321  if (nullptr == account)
3322  return g_strdup("");
3323 
3324  /* errors */
3325  g_return_val_if_fail(GNC_IS_ACCOUNT(account), g_strdup(""));
3326 
3327  /* optimizations */
3328  priv = GET_PRIVATE(account);
3329  if (!priv->parent)
3330  return g_strdup("");
3331 
3332  /* Figure out how much space is needed by counting the nodes up to
3333  * the root. */
3334  level = 0;
3335  for (a = account; a; a = priv->parent)
3336  {
3337  priv = GET_PRIVATE(a);
3338  level++;
3339  }
3340 
3341  /* Get all the pointers in the right order. The root node "entry"
3342  * becomes the terminating nullptr pointer for the array of strings. */
3343  names = (const gchar **)g_malloc(level * sizeof(gchar *));
3344  names[--level] = nullptr;
3345  for (a = account; level > 0; a = priv->parent)
3346  {
3347  priv = GET_PRIVATE(a);
3348  names[--level] = priv->accountName;
3349  }
3350 
3351  /* Build the full name */
3352  fullname = g_strjoinv(account_separator, (gchar **)names);
3353  g_free(names);
3354 
3355  return fullname;
3356 }
STRUCTS.

◆ gnc_account_get_parent()

Account* gnc_account_get_parent ( const Account account)

This routine returns a pointer to the parent of the specified account.

If the account has no parent, i.e it is either the root node or is a disconnected account, then its parent will be NULL.

Parameters
accountA pointer to any exiting account.
Returns
A pointer to the parent account node, or NULL if there is no parent account.

Definition at line 2902 of file Account.cpp.

2903 {
2904  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), nullptr);
2905  return GET_PRIVATE(acc)->parent;
2906 }

◆ gnc_account_get_root()

Account* gnc_account_get_root ( Account account)

This routine returns the root account of the account tree that the specified account belongs to.

It is the equivalent of repeatedly calling the gnc_account_get_parent() routine until that routine returns NULL.

Parameters
accountA pointer to any existing account.
Returns
The root node of the account tree to which this account belongs. NULL if the account is not part of any account tree.

Definition at line 2909 of file Account.cpp.

2910 {
2911  AccountPrivate *priv;
2912 
2913  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), nullptr);
2914 
2915  priv = GET_PRIVATE(acc);
2916  while (priv->parent)
2917  {
2918  acc = priv->parent;
2919  priv = GET_PRIVATE(acc);
2920  }
2921 
2922  return acc;
2923 }

◆ gnc_account_get_tree_depth()

gint gnc_account_get_tree_depth ( const Account account)

Return the number of levels of descendants accounts below the specified account.

The returned number does not include the specified account itself.

Parameters
accountThe account to query.
Returns
The number of levels of descendants.

Definition at line 3011 of file Account.cpp.

3012 {
3013  AccountPrivate *priv;
3014  GList *node;
3015  gint depth = 0, child_depth;
3016 
3017  g_return_val_if_fail(GNC_IS_ACCOUNT(account), 0);
3018 
3019  priv = GET_PRIVATE(account);
3020  if (!priv->children)
3021  return 1;
3022 
3023  for (node = priv->children; node; node = g_list_next(node))
3024  {
3025  child_depth = gnc_account_get_tree_depth(static_cast<Account const *>(node->data));
3026  depth = MAX(depth, child_depth);
3027  }
3028  return depth + 1;
3029 }
gint gnc_account_get_tree_depth(const Account *account)
Return the number of levels of descendants accounts below the specified account.
Definition: Account.cpp:3011

◆ gnc_account_get_type()

GType gnc_account_get_type ( void  )

Returns the GType type system description of the Account class.

This must not be confused with the GNCAccountType as returned by xaccAccountGetType().

Definition at line 27 of file gmock-Account.cpp.

28 {
29  return gnc_mockaccount_get_type();
30 }

◆ gnc_account_insert_split()

gboolean gnc_account_insert_split ( Account acc,
Split *  s 
)

Insert the given split from an account.

Parameters
accThe account to which the split should be added.
sThe split to be added.
Returns
TRUE is the split is successfully added to the set of splits in the account. FALSE if the addition fails for any reason (including that the split is already in the account).

Definition at line 1964 of file Account.cpp.

1965 {
1966  AccountPrivate *priv;
1967 
1968  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
1969  g_return_val_if_fail(GNC_IS_SPLIT(s), FALSE);
1970 
1971  priv = GET_PRIVATE(acc);
1972  if (!g_hash_table_add (priv->splits_hash, s))
1973  return false;
1974 
1975  priv->splits.push_back (s);
1976 
1977  if (qof_instance_get_editlevel(acc) == 0)
1978  std::sort (priv->splits.begin(), priv->splits.end(), split_cmp_less);
1979  else
1980  priv->sort_dirty = true;
1981 
1982  //FIXME: find better event
1983  qof_event_gen (&acc->inst, QOF_EVENT_MODIFY, nullptr);
1984  /* Also send an event based on the account */
1985  qof_event_gen(&acc->inst, GNC_EVENT_ITEM_ADDED, s);
1986 
1987  priv->balance_dirty = TRUE;
1988 // DRH: Should the below be added? It is present in the delete path.
1989 // xaccAccountRecomputeBalance(acc);
1990  return TRUE;
1991 }
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
#define GNC_EVENT_ITEM_ADDED
These events are used when a split is added to an account.
Definition: gnc-event.h:45

◆ gnc_account_is_root()

gboolean gnc_account_is_root ( const Account account)

This routine indicates whether the specified account is the root node of an account tree.

Parameters
accountA pointer to any account.
Returns
TRUE if this account is of type ROOT. FALSE otherwise.

Definition at line 2926 of file Account.cpp.

2927 {
2928  g_return_val_if_fail(GNC_IS_ACCOUNT(account), FALSE);
2929  return (GET_PRIVATE(account)->parent == nullptr);
2930 }

◆ gnc_account_join_children()

void gnc_account_join_children ( Account to_parent,
Account from_parent 
)

The gnc_account_join_children() subroutine will move (reparent) all child accounts from the from_parent account to the to_parent account, preserving the account hierarchy.

It will also take care that the moved accounts will have the to_parent's book parent as well.

Definition at line 5390 of file Account.cpp.

5391 {
5392  AccountPrivate *from_priv;
5393  GList *children, *node;
5394 
5395  /* errors */
5396  g_return_if_fail(GNC_IS_ACCOUNT(to_parent));
5397  g_return_if_fail(GNC_IS_ACCOUNT(from_parent));
5398 
5399  /* optimizations */
5400  from_priv = GET_PRIVATE(from_parent);
5401  if (!from_priv->children)
5402  return;
5403 
5404  ENTER (" ");
5405  children = g_list_copy(from_priv->children);
5406  for (node = children; node; node = g_list_next(node))
5407  gnc_account_append_child(to_parent, static_cast <Account*> (node->data));
5408  g_list_free(children);
5409  LEAVE (" ");
5410 }
void gnc_account_append_child(Account *new_parent, Account *child)
This function will remove from the child account any pre-existing parent relationship, and will then add the account as a child of the new parent.
Definition: Account.cpp:2804
#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_account_list_name_violations()

GList* gnc_account_list_name_violations ( QofBook *  book,
const gchar *  separator 
)

Runs through all the accounts and returns a list of account names that contain the provided separator character.

This can be used to check if certain account names are invalid.

Parameters
bookPointer to the book with accounts to verify
separatorThe separator character to verify against
Returns
A GList of invalid account names. Should be freed with g_list_free_full (value, g_free) when no longer needed.

Definition at line 271 of file Account.cpp.

272 {
273  g_return_val_if_fail (separator != nullptr, nullptr);
274  if (!book) return nullptr;
275  ViolationData cb = { nullptr, separator };
276  gnc_account_foreach_descendant (gnc_book_get_root_account (book),
277  (AccountCb)check_acct_name, &cb);
278  return cb.list;
279 }
void gnc_account_foreach_descendant(const Account *acc, AccountCb thunk, gpointer user_data)
This method will traverse all children of this accounts and their descendants, calling &#39;func&#39; on each...
Definition: Account.cpp:3248

◆ gnc_account_merge_children()

void gnc_account_merge_children ( Account parent)

The gnc_account_merge_children() subroutine will go through an account, merging all child accounts that have the same name and description.

This function is useful when importing Quicken(TM) files.

Definition at line 5415 of file Account.cpp.

5416 {
5417  AccountPrivate *ppriv, *priv_a, *priv_b;
5418  GList *node_a, *node_b, *work, *worker;
5419 
5420  g_return_if_fail(GNC_IS_ACCOUNT(parent));
5421 
5422  ppriv = GET_PRIVATE(parent);
5423  for (node_a = ppriv->children; node_a; node_a = node_a->next)
5424  {
5425  Account *acc_a = static_cast <Account*> (node_a->data);
5426 
5427  priv_a = GET_PRIVATE(acc_a);
5428  for (node_b = node_a->next; node_b; node_b = g_list_next(node_b))
5429  {
5430  Account *acc_b = static_cast <Account*> (node_b->data);
5431 
5432  priv_b = GET_PRIVATE(acc_b);
5433  if (0 != null_strcmp(priv_a->accountName, priv_b->accountName))
5434  continue;
5435  if (0 != null_strcmp(priv_a->accountCode, priv_b->accountCode))
5436  continue;
5437  if (0 != null_strcmp(priv_a->description, priv_b->description))
5438  continue;
5439  if (0 != null_strcmp(xaccAccountGetColor(acc_a),
5440  xaccAccountGetColor(acc_b)))
5441  continue;
5442  if (!gnc_commodity_equiv(priv_a->commodity, priv_b->commodity))
5443  continue;
5444  if (0 != null_strcmp(xaccAccountGetNotes(acc_a),
5445  xaccAccountGetNotes(acc_b)))
5446  continue;
5447  if (priv_a->type != priv_b->type)
5448  continue;
5449 
5450  /* consolidate children */
5451  if (priv_b->children)
5452  {
5453  work = g_list_copy(priv_b->children);
5454  for (worker = work; worker; worker = g_list_next(worker))
5455  gnc_account_append_child (acc_a, (Account *)worker->data);
5456  g_list_free(work);
5457 
5458  qof_event_gen (&acc_a->inst, QOF_EVENT_MODIFY, nullptr);
5459  qof_event_gen (&acc_b->inst, QOF_EVENT_MODIFY, nullptr);
5460  }
5461 
5462  /* recurse to do the children's children */
5464 
5465  /* consolidate transactions */
5466  while (!priv_b->splits.empty())
5467  xaccSplitSetAccount (priv_b->splits.front(), acc_a);
5468 
5469  /* move back one before removal. next iteration around the loop
5470  * will get the node after node_b */
5471  node_b = g_list_previous(node_b);
5472 
5473  /* The destroy function will remove from list -- node_a is ok,
5474  * it's before node_b */
5475  xaccAccountBeginEdit (acc_b);
5476  xaccAccountDestroy (acc_b);
5477  }
5478  }
5479 }
void gnc_account_append_child(Account *new_parent, Account *child)
This function will remove from the child account any pre-existing parent relationship, and will then add the account as a child of the new parent.
Definition: Account.cpp:2804
STRUCTS.
void xaccAccountDestroy(Account *acc)
The xaccAccountDestroy() routine can be used to get rid of an account.
Definition: Account.cpp:1599
const char * xaccAccountGetColor(const Account *acc)
Get the account&#39;s color.
Definition: Account.cpp:3373
gint null_strcmp(const gchar *da, const gchar *db)
The null_strcmp compares strings a and b the same way that strcmp() does, except that either may be n...
Definition: qofutil.cpp:123
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
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
gboolean gnc_commodity_equiv(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equivalent.
void gnc_account_merge_children(Account *parent)
The gnc_account_merge_children() subroutine will go through an account, merging all child accounts th...
Definition: Account.cpp:5415
const char * xaccAccountGetNotes(const Account *acc)
Get the account&#39;s notes.
Definition: Account.cpp:3413

◆ gnc_account_n_children()

gint gnc_account_n_children ( const Account account)

Return the number of children of the specified account.

The returned number does not include the account itself.

Parameters
accountThe account to query.
Returns
The number of children of the specified account.

Definition at line 2955 of file Account.cpp.

2956 {
2957  g_return_val_if_fail(GNC_IS_ACCOUNT(account), 0);
2958  return g_list_length(GET_PRIVATE(account)->children);
2959 }

◆ gnc_account_n_descendants()

gint gnc_account_n_descendants ( const Account account)

Return the number of descendants of the specified account.

The returned number does not include the account itself.

Parameters
accountThe account to query.
Returns
The number of descendants of the specified account.

Definition at line 2984 of file Account.cpp.

2985 {
2986  int count {0};
2987  account_foreach_descendant (account, count_acct, &count, FALSE);
2988  return count;
2989 }

◆ gnc_account_name_violations_errmsg()

gchar* gnc_account_name_violations_errmsg ( const gchar *  separator,
GList *  invalid_account_names 
)

Composes a translatable error message showing which account names clash with the current account separator.

Can be called after gnc_account_list_name_violations to have a consistent error message in different parts of GnuCash

Parameters
separatorThe separator character that was verified against
invalid_account_namesA GList of invalid account names.
Returns
An error message that can be displayed to the user or logged. This message string should be freed with g_free when no longer needed.

Definition at line 233 of file Account.cpp.

234 {
235  gchar *message = nullptr;
236 
237  if ( !invalid_account_names )
238  return nullptr;
239 
240  auto account_list {gnc_g_list_stringjoin (invalid_account_names, "\n")};
241 
242  /* Translators: The first %s will be the account separator character,
243  the second %s is a list of account names.
244  The resulting string will be displayed to the user if there are
245  account names containing the separator character. */
246  message = g_strdup_printf(
247  _("The separator character \"%s\" is used in one or more account names.\n\n"
248  "This will result in unexpected behaviour. "
249  "Either change the account names or choose another separator character.\n\n"
250  "Below you will find the list of invalid account names:\n"
251  "%s"), separator, account_list );
252  g_free ( account_list );
253  return message;
254 }
gchar * gnc_g_list_stringjoin(GList *list_of_strings, const gchar *sep)
Return a string joining a GList whose elements are gchar* strings.

◆ gnc_account_nth_child()

Account* gnc_account_nth_child ( const Account parent,
gint  num 
)

Return the n'th child account of the specified parent account.

If the parent account is not specified or the child index number is invalid, this function returns NULL.

Parameters
parentThe parent account to check.
numThe index number of the child account that should be returned.
Returns
A pointer to the specified child account, or NULL

Definition at line 2970 of file Account.cpp.

2971 {
2972  g_return_val_if_fail(GNC_IS_ACCOUNT(parent), nullptr);
2973  return static_cast<Account*>(g_list_nth_data(GET_PRIVATE(parent)->children, num));
2974 }
STRUCTS.

◆ gnc_account_remove_child()

void gnc_account_remove_child ( Account parent,
Account child 
)

This function will remove the specified child account from the specified parent account.

It will NOT free the associated memory or otherwise alter the account: the account can now be reparented to a new location. Note, however, that it will mark the old parents as having been modified.

Parameters
parentThe parent account from which the child should be removed.
childThe child account to remove.

Definition at line 2866 of file Account.cpp.

2867 {
2868  AccountPrivate *ppriv, *cpriv;
2869  GncEventData ed;
2870 
2871  if (!child) return;
2872 
2873  /* Note this routine might be called on accounts which
2874  * are not yet parented. */
2875  if (!parent) return;
2876 
2877  ppriv = GET_PRIVATE(parent);
2878  cpriv = GET_PRIVATE(child);
2879 
2880  if (cpriv->parent != parent)
2881  {
2882  PERR ("account not a child of parent");
2883  return;
2884  }
2885 
2886  /* Gather event data */
2887  ed.node = parent;
2888  ed.idx = g_list_index(ppriv->children, child);
2889 
2890  ppriv->children = g_list_remove(ppriv->children, child);
2891 
2892  /* Now send the event. */
2893  qof_event_gen(&child->inst, QOF_EVENT_REMOVE, &ed);
2894 
2895  /* clear the account's parent pointer after REMOVE event generation. */
2896  cpriv->parent = nullptr;
2897 
2898  qof_event_gen (&parent->inst, QOF_EVENT_MODIFY, nullptr);
2899 }
#define PERR(format, args...)
Log a serious error.
Definition: qoflog.h:244
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_account_remove_split()

gboolean gnc_account_remove_split ( Account acc,
Split *  s 
)

Remove the given split from an account.

Parameters
accThe account from which the split should be removed.
sThe split to be removed.
Returns
TRUE is the split is successfully removed from the set of splits in the account. FALSE if the removal fails for any reason.

Definition at line 1994 of file Account.cpp.

1995 {
1996  AccountPrivate *priv;
1997 
1998  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
1999  g_return_val_if_fail(GNC_IS_SPLIT(s), FALSE);
2000 
2001  priv = GET_PRIVATE(acc);
2002 
2003  if (!g_hash_table_remove (priv->splits_hash, s))
2004  return false;
2005  auto it = std::remove (priv->splits.begin(), priv->splits.end(), s);
2006  priv->splits.erase (it, priv->splits.end());
2007  //FIXME: find better event type
2008  qof_event_gen(&acc->inst, QOF_EVENT_MODIFY, nullptr);
2009  // And send the account-based event, too
2010  qof_event_gen(&acc->inst, GNC_EVENT_ITEM_REMOVED, s);
2011 
2012  priv->balance_dirty = TRUE;
2014  return TRUE;
2015 }
void xaccAccountRecomputeBalance(Account *acc)
The following recompute the partial balances (stored with the transaction) and the total balance...
Definition: Account.cpp:2296
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_account_set_balance_dirty()

void gnc_account_set_balance_dirty ( Account acc)

Tell the account that the running balances may be incorrect and need to be recomputed.

Parameters
accSet the flag on this account.

Definition at line 1919 of file Account.cpp.

1920 {
1921  AccountPrivate *priv;
1922 
1923  g_return_if_fail(GNC_IS_ACCOUNT(acc));
1924 
1925  if (qof_instance_get_destroying(acc))
1926  return;
1927 
1928  priv = GET_PRIVATE(acc);
1929  priv->balance_dirty = TRUE;
1930 }
gboolean qof_instance_get_destroying(gconstpointer ptr)
Retrieve the flag that indicates whether or not this object is about to be destroyed.

◆ gnc_account_set_defer_bal_computation()

void gnc_account_set_defer_bal_computation ( Account acc,
gboolean  defer 
)

Set the defer balance flag.

If defer is true, the account balance is not automatically computed, which can save a lot of time if multiple operations have to be done on the same account. If defer is false, further operations on account will cause the balance to be recomputed as normal.

Parameters
accSet the flag on this account.
deferNew value for the flag.

Definition at line 1932 of file Account.cpp.

1933 {
1934  AccountPrivate *priv;
1935 
1936  g_return_if_fail (GNC_IS_ACCOUNT (acc));
1937 
1938  if (qof_instance_get_destroying (acc))
1939  return;
1940 
1941  priv = GET_PRIVATE (acc);
1942  priv->defer_bal_computation = defer;
1943 }
gboolean qof_instance_get_destroying(gconstpointer ptr)
Retrieve the flag that indicates whether or not this object is about to be destroyed.

◆ gnc_account_set_sort_dirty()

void gnc_account_set_sort_dirty ( Account acc)

Tell the account believes that the splits may be incorrectly sorted and need to be resorted.

Parameters
accSet the flag on this account.

Definition at line 1905 of file Account.cpp.

1906 {
1907  AccountPrivate *priv;
1908 
1909  g_return_if_fail(GNC_IS_ACCOUNT(acc));
1910 
1911  if (qof_instance_get_destroying(acc))
1912  return;
1913 
1914  priv = GET_PRIVATE(acc);
1915  priv->sort_dirty = TRUE;
1916 }
gboolean qof_instance_get_destroying(gconstpointer ptr)
Retrieve the flag that indicates whether or not this object is about to be destroyed.

◆ gnc_account_set_start_balance()

void gnc_account_set_start_balance ( Account acc,
const gnc_numeric  start_baln 
)

This function will set the starting commodity balance for this account.

This routine is intended for use with backends that do not return the complete list of splits for an account, but rather return a partial list. In such a case, the backend will typically return all of the splits after some certain date, and the 'starting balance' will represent the summation of the splits up to that date.

Definition at line 3510 of file Account.cpp.

3511 {
3512  AccountPrivate *priv;
3513 
3514  g_return_if_fail(GNC_IS_ACCOUNT(acc));
3515 
3516  priv = GET_PRIVATE(acc);
3517  priv->starting_balance = start_baln;
3518  priv->balance_dirty = TRUE;
3519 }

◆ gnc_account_set_start_cleared_balance()

void gnc_account_set_start_cleared_balance ( Account acc,
const gnc_numeric  start_baln 
)

This function will set the starting cleared commodity balance for this account.

This routine is intended for use with backends that do not return the complete list of splits for an account, but rather return a partial list. In such a case, the backend will typically return all of the splits after some certain date, and the 'starting balance' will represent the summation of the splits up to that date.

Definition at line 3522 of file Account.cpp.

3524 {
3525  AccountPrivate *priv;
3526 
3527  g_return_if_fail(GNC_IS_ACCOUNT(acc));
3528 
3529  priv = GET_PRIVATE(acc);
3530  priv->starting_cleared_balance = start_baln;
3531  priv->balance_dirty = TRUE;
3532 }

◆ gnc_account_set_start_reconciled_balance()

void gnc_account_set_start_reconciled_balance ( Account acc,
const gnc_numeric  start_baln 
)

This function will set the starting reconciled commodity balance for this account.

This routine is intended for use with backends that do not return the complete list of splits for an account, but rather return a partial list. In such a case, the backend will typically return all of the splits after some certain date, and the 'starting balance' will represent the summation of the splits up to that date.

Definition at line 3535 of file Account.cpp.

3537 {
3538  AccountPrivate *priv;
3539 
3540  g_return_if_fail(GNC_IS_ACCOUNT(acc));
3541 
3542  priv = GET_PRIVATE(acc);
3543  priv->starting_reconciled_balance = start_baln;
3544  priv->balance_dirty = TRUE;
3545 }

◆ gnc_get_account_separator_string()

const gchar* gnc_get_account_separator_string ( void  )

Returns the account separation character chosen by the user.

Returns
The character to use.

Definition at line 203 of file Account.cpp.

204 {
205  return account_separator;
206 }

◆ xaccAccountBeginEdit()

void xaccAccountBeginEdit ( Account account)

The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account updates.

Definition at line 1485 of file Account.cpp.

1486 {
1487  g_return_if_fail(acc);
1488  qof_begin_edit(&acc->inst);
1489 }
gboolean qof_begin_edit(QofInstance *inst)
begin_edit

◆ xaccAccountCommitEdit()

void xaccAccountCommitEdit ( Account account)

ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account updates.

Definition at line 1526 of file Account.cpp.

1527 {
1528  AccountPrivate *priv;
1529  QofBook *book;
1530 
1531  g_return_if_fail(acc);
1532  if (!qof_commit_edit(&acc->inst)) return;
1533 
1534  /* If marked for deletion, get rid of subaccounts first,
1535  * and then the splits ... */
1536  priv = GET_PRIVATE(acc);
1537  if (qof_instance_get_destroying(acc))
1538  {
1539  QofCollection *col;
1540 
1541  qof_instance_increase_editlevel(acc);
1542 
1543  /* First, recursively free children */
1544  xaccFreeAccountChildren(acc);
1545 
1546  PINFO ("freeing splits for account %p (%s)",
1547  acc, priv->accountName ? priv->accountName : "(null)");
1548 
1549  book = qof_instance_get_book(acc);
1550 
1551  /* If book is shutting down, just clear the split list. The splits
1552  themselves will be destroyed by the transaction code */
1553  if (!qof_book_shutting_down(book))
1554  {
1555  for (auto s : priv->splits)
1556  xaccSplitDestroy (s);
1557  }
1558  else
1559  {
1560  priv->splits.clear();
1561  g_hash_table_remove_all (priv->splits_hash);
1562  }
1563 
1564  /* It turns out there's a case where this assertion does not hold:
1565  When the user tries to delete an Imbalance account, while also
1566  deleting all the splits in it. The splits will just get
1567  recreated and put right back into the same account!
1568 
1569  g_assert(priv->splits == nullptr || qof_book_shutting_down(acc->inst.book));
1570  */
1571 
1572  if (!qof_book_shutting_down(book))
1573  {
1574  col = qof_book_get_collection(book, GNC_ID_TRANS);
1575  qof_collection_foreach(col, destroy_pending_splits_for_account, acc);
1576 
1577  /* the lots should be empty by now */
1578  for (auto lp = priv->lots; lp; lp = lp->next)
1579  {
1580  GNCLot *lot = static_cast<GNCLot*>(lp->data);
1581  gnc_lot_destroy (lot);
1582  }
1583  }
1584  g_list_free(priv->lots);
1585  priv->lots = nullptr;
1586 
1587  qof_instance_set_dirty(&acc->inst);
1588  qof_instance_decrease_editlevel(acc);
1589  }
1590  else
1591  {
1592  xaccAccountBringUpToDate(acc);
1593  }
1594 
1595  qof_commit_edit_part2(&acc->inst, on_err, on_done, acc_free);
1596 }
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
#define PINFO(format, args...)
Print an informational note.
Definition: qoflog.h:256
gboolean xaccSplitDestroy(Split *split)
Destructor.
Definition: Split.cpp:1504
gboolean qof_instance_get_destroying(gconstpointer ptr)
Retrieve the flag that indicates whether or not this object is about to be destroyed.
gboolean qof_commit_edit(QofInstance *inst)
commit_edit helpers
void qof_collection_foreach(const QofCollection *col, QofInstanceForeachCB cb_func, gpointer user_data)
Call the callback for each entity in the collection.
Definition: qofid.cpp:321
gboolean qof_commit_edit_part2(QofInstance *inst, void(*on_error)(QofInstance *, QofBackendError), void(*on_done)(QofInstance *), void(*on_free)(QofInstance *))
part2 – deal with the backend
QofCollection * qof_book_get_collection(const QofBook *book, QofIdType entity_type)
Return The table of entities of the given type.
Definition: qofbook.cpp:521
gboolean qof_book_shutting_down(const QofBook *book)
Is the book shutting down?
Definition: qofbook.cpp:447

◆ xaccAccountDestroy()

void xaccAccountDestroy ( Account account)

The xaccAccountDestroy() routine can be used to get rid of an account.

The account should have been opened for editing (by calling xaccAccountBeginEdit()) before calling this routine.

Definition at line 1599 of file Account.cpp.

1600 {
1601  g_return_if_fail(GNC_IS_ACCOUNT(acc));
1602 
1603  qof_instance_set_destroying(acc, TRUE);
1604 
1605  xaccAccountCommitEdit (acc);
1606 }
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526

◆ xaccAccountEqual()

gboolean xaccAccountEqual ( const Account a,
const Account b,
gboolean  check_guids 
)

Compare two accounts for equality - this is a deep compare.

Definition at line 1674 of file Account.cpp.

1675 {
1676  AccountPrivate *priv_aa, *priv_ab;
1677 
1678  if (!aa && !ab) return TRUE;
1679 
1680  g_return_val_if_fail(GNC_IS_ACCOUNT(aa), FALSE);
1681  g_return_val_if_fail(GNC_IS_ACCOUNT(ab), FALSE);
1682 
1683  priv_aa = GET_PRIVATE(aa);
1684  priv_ab = GET_PRIVATE(ab);
1685  if (priv_aa->type != priv_ab->type)
1686  {
1687  PWARN ("types differ: %d vs %d", priv_aa->type, priv_ab->type);
1688  return FALSE;
1689  }
1690 
1691  if (g_strcmp0(priv_aa->accountName, priv_ab->accountName) != 0)
1692  {
1693  PWARN ("names differ: %s vs %s", priv_aa->accountName, priv_ab->accountName);
1694  return FALSE;
1695  }
1696 
1697  if (g_strcmp0(priv_aa->accountCode, priv_ab->accountCode) != 0)
1698  {
1699  PWARN ("codes differ: %s vs %s", priv_aa->accountCode, priv_ab->accountCode);
1700  return FALSE;
1701  }
1702 
1703  if (g_strcmp0(priv_aa->description, priv_ab->description) != 0)
1704  {
1705  PWARN ("descriptions differ: %s vs %s", priv_aa->description, priv_ab->description);
1706  return FALSE;
1707  }
1708 
1709  if (!gnc_commodity_equal(priv_aa->commodity, priv_ab->commodity))
1710  {
1711  PWARN ("commodities differ");
1712  return FALSE;
1713  }
1714 
1715  if (check_guids)
1716  {
1717  if (qof_instance_guid_compare(aa, ab) != 0)
1718  {
1719  PWARN ("GUIDs differ");
1720  return FALSE;
1721  }
1722  }
1723 
1724  if (qof_instance_compare_kvp (QOF_INSTANCE (aa), QOF_INSTANCE (ab)) != 0)
1725  {
1726  char *frame_a;
1727  char *frame_b;
1728 
1729  frame_a = qof_instance_kvp_as_string (QOF_INSTANCE (aa));
1730  frame_b = qof_instance_kvp_as_string (QOF_INSTANCE (ab));
1731 
1732  PWARN ("kvp frames differ:\n%s\n\nvs\n\n%s", frame_a, frame_b);
1733 
1734  g_free (frame_a);
1735  g_free (frame_b);
1736 
1737  return FALSE;
1738  }
1739 
1740  if (!gnc_numeric_equal(priv_aa->starting_balance, priv_ab->starting_balance))
1741  {
1742  char *str_a;
1743  char *str_b;
1744 
1745  str_a = gnc_numeric_to_string(priv_aa->starting_balance);
1746  str_b = gnc_numeric_to_string(priv_ab->starting_balance);
1747 
1748  PWARN ("starting balances differ: %s vs %s", str_a, str_b);
1749 
1750  g_free (str_a);
1751  g_free (str_b);
1752 
1753  return FALSE;
1754  }
1755 
1756  if (!gnc_numeric_equal(priv_aa->starting_noclosing_balance,
1757  priv_ab->starting_noclosing_balance))
1758  {
1759  char *str_a;
1760  char *str_b;
1761 
1762  str_a = gnc_numeric_to_string(priv_aa->starting_noclosing_balance);
1763  str_b = gnc_numeric_to_string(priv_ab->starting_noclosing_balance);
1764 
1765  PWARN ("starting noclosing balances differ: %s vs %s", str_a, str_b);
1766 
1767  g_free (str_a);
1768  g_free (str_b);
1769 
1770  return FALSE;
1771  }
1772  if (!gnc_numeric_equal(priv_aa->starting_cleared_balance,
1773  priv_ab->starting_cleared_balance))
1774  {
1775  char *str_a;
1776  char *str_b;
1777 
1778  str_a = gnc_numeric_to_string(priv_aa->starting_cleared_balance);
1779  str_b = gnc_numeric_to_string(priv_ab->starting_cleared_balance);
1780 
1781  PWARN ("starting cleared balances differ: %s vs %s", str_a, str_b);
1782 
1783  g_free (str_a);
1784  g_free (str_b);
1785 
1786  return FALSE;
1787  }
1788 
1789  if (!gnc_numeric_equal(priv_aa->starting_reconciled_balance,
1790  priv_ab->starting_reconciled_balance))
1791  {
1792  char *str_a;
1793  char *str_b;
1794 
1795  str_a = gnc_numeric_to_string(priv_aa->starting_reconciled_balance);
1796  str_b = gnc_numeric_to_string(priv_ab->starting_reconciled_balance);
1797 
1798  PWARN ("starting reconciled balances differ: %s vs %s", str_a, str_b);
1799 
1800  g_free (str_a);
1801  g_free (str_b);
1802 
1803  return FALSE;
1804  }
1805 
1806  if (!gnc_numeric_equal(priv_aa->balance, priv_ab->balance))
1807  {
1808  char *str_a;
1809  char *str_b;
1810 
1811  str_a = gnc_numeric_to_string(priv_aa->balance);
1812  str_b = gnc_numeric_to_string(priv_ab->balance);
1813 
1814  PWARN ("balances differ: %s vs %s", str_a, str_b);
1815 
1816  g_free (str_a);
1817  g_free (str_b);
1818 
1819  return FALSE;
1820  }
1821 
1822  if (!gnc_numeric_equal(priv_aa->noclosing_balance, priv_ab->noclosing_balance))
1823  {
1824  char *str_a;
1825  char *str_b;
1826 
1827  str_a = gnc_numeric_to_string(priv_aa->noclosing_balance);
1828  str_b = gnc_numeric_to_string(priv_ab->noclosing_balance);
1829 
1830  PWARN ("noclosing balances differ: %s vs %s", str_a, str_b);
1831 
1832  g_free (str_a);
1833  g_free (str_b);
1834 
1835  return FALSE;
1836  }
1837  if (!gnc_numeric_equal(priv_aa->cleared_balance, priv_ab->cleared_balance))
1838  {
1839  char *str_a;
1840  char *str_b;
1841 
1842  str_a = gnc_numeric_to_string(priv_aa->cleared_balance);
1843  str_b = gnc_numeric_to_string(priv_ab->cleared_balance);
1844 
1845  PWARN ("cleared balances differ: %s vs %s", str_a, str_b);
1846 
1847  g_free (str_a);
1848  g_free (str_b);
1849 
1850  return FALSE;
1851  }
1852 
1853  if (!gnc_numeric_equal(priv_aa->reconciled_balance, priv_ab->reconciled_balance))
1854  {
1855  char *str_a;
1856  char *str_b;
1857 
1858  str_a = gnc_numeric_to_string(priv_aa->reconciled_balance);
1859  str_b = gnc_numeric_to_string(priv_ab->reconciled_balance);
1860 
1861  PWARN ("reconciled balances differ: %s vs %s", str_a, str_b);
1862 
1863  g_free (str_a);
1864  g_free (str_b);
1865 
1866  return FALSE;
1867  }
1868 
1869  /* no parent; always compare downwards. */
1870 
1871  {
1872  if (priv_aa->splits.size() != priv_ab->splits.size())
1873  {
1874  PWARN ("number of splits differs");
1875  return false;
1876  }
1877 
1878  for (auto it_a = priv_aa->splits.begin(), it_b = priv_ab->splits.begin();
1879  it_a != priv_aa->splits.end() && it_b != priv_ab->splits.end();
1880  ++it_a, ++it_b)
1881  {
1882  Split *sa = *it_a;
1883  Split *sb = *it_b;
1884 
1885  if (!xaccSplitEqual(sa, sb, check_guids, TRUE, FALSE))
1886  {
1887  PWARN ("splits differ");
1888  return false;
1889  }
1890  }
1891  }
1892 
1893  if (!xaccAcctChildrenEqual(priv_aa->children, priv_ab->children, check_guids))
1894  {
1895  PWARN ("children differ");
1896  return FALSE;
1897  }
1898 
1899  return(TRUE);
1900 }
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
Equivalence predicate: Returns TRUE (1) if a and b represent the same number.
gboolean gnc_commodity_equal(const gnc_commodity *a, const gnc_commodity *b)
This routine returns TRUE if the two commodities are equal.
gchar * gnc_numeric_to_string(gnc_numeric n)
Convert to string.
gboolean xaccSplitEqual(const Split *sa, const Split *sb, gboolean check_guids, gboolean check_balances, gboolean check_txn_splits)
Equality.
Definition: Split.cpp:801
#define PWARN(format, args...)
Log a warning.
Definition: qoflog.h:250
gint qof_instance_guid_compare(gconstpointer ptr1, gconstpointer ptr2)
Compare the GncGUID values of two instances.

◆ xaccAccountGainsAccount()

Account* xaccAccountGainsAccount ( Account acc,
gnc_commodity *  curr 
)

Retrieve the gains account used by this account for the indicated currency, creating and recording a new one if necessary.

FIXME: There is at present no interface to designate an existing account, and the new account name is hard coded to "Orphaned Gains -- CUR"

FIXME: There is no provision for creating separate accounts for anything other than currency, e.g. holding period of a security.

Definition at line 5228 of file Account.cpp.

5229 {
5230  GValue v = G_VALUE_INIT;
5231  std::vector<std::string> path {KEY_LOT_MGMT, "gains-acct",
5233  GncGUID *guid = nullptr;
5234  Account *gains_account;
5235 
5236  g_return_val_if_fail (acc != nullptr, nullptr);
5237  qof_instance_get_path_kvp (QOF_INSTANCE(acc), &v, path);
5238  if (G_VALUE_HOLDS_BOXED (&v))
5239  guid = (GncGUID*)g_value_get_boxed (&v);
5240  if (guid == nullptr) /* No gains account for this currency */
5241  {
5242  gains_account = GetOrMakeOrphanAccount (gnc_account_get_root (acc),
5243  curr);
5244  guid = (GncGUID*)qof_instance_get_guid (QOF_INSTANCE (gains_account));
5245  xaccAccountBeginEdit (acc);
5246  {
5247  GValue vr = G_VALUE_INIT;
5248  g_value_init (&vr, GNC_TYPE_GUID);
5249  g_value_set_boxed (&vr, guid);
5250  qof_instance_set_path_kvp (QOF_INSTANCE (acc), &vr, path);
5251  qof_instance_set_dirty (QOF_INSTANCE (acc));
5252  g_value_unset (&vr);
5253  }
5254  xaccAccountCommitEdit (acc);
5255  }
5256  else
5257  gains_account = xaccAccountLookup (guid,
5258  qof_instance_get_book(acc));
5259 
5260  g_value_unset (&v);
5261  return gains_account;
5262 }
const GncGUID * qof_instance_get_guid(gconstpointer inst)
Return the GncGUID of this instance.
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
STRUCTS.
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
const char * gnc_commodity_get_unique_name(const gnc_commodity *cm)
Retrieve the &#39;unique&#39; name for the specified commodity.
Account * gnc_account_get_root(Account *acc)
This routine returns the root account of the account tree that the specified account belongs to...
Definition: Account.cpp:2909
The type used to store guids in C.
Definition: guid.h:75
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)
The xaccAccountLookup() subroutine will return the account associated with the given id...
Definition: Account.cpp:2064

◆ xaccAccountGetAssociatedAccount()

Account* xaccAccountGetAssociatedAccount ( const Account acc,
const char *  tag 
)

Get the account's associated account e.g.

stock account -> dividend account

Definition at line 3423 of file Account.cpp.

3424 {
3425  g_return_val_if_fail (GNC_IS_ACCOUNT(acc), nullptr);
3426  g_return_val_if_fail (tag && *tag, nullptr);
3427 
3428  GValue v = G_VALUE_INIT;
3429  qof_instance_get_path_kvp (QOF_INSTANCE (acc), &v, { "associated-account", tag });
3430 
3431  auto guid = static_cast<GncGUID*>(G_VALUE_HOLDS_BOXED (&v) ? g_value_get_boxed(&v) : nullptr);
3432  g_value_unset (&v);
3433 
3434  if (!guid)
3435  return nullptr;
3436 
3437  auto assoc_acct = xaccAccountLookup (guid, gnc_account_get_book (acc));
3438  PINFO ("retuning %s assoc %s account = %s", xaccAccountGetName (acc), tag,
3439  xaccAccountGetName (assoc_acct));
3440  return assoc_acct;
3441 }
#define PINFO(format, args...)
Print an informational note.
Definition: qoflog.h:256
const char * xaccAccountGetName(const Account *acc)
Get the account&#39;s name.
Definition: Account.cpp:3304
The type used to store guids in C.
Definition: guid.h:75
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)
The xaccAccountLookup() subroutine will return the account associated with the given id...
Definition: Account.cpp:2064

◆ xaccAccountGetBalanceAsOfDate()

gnc_numeric xaccAccountGetBalanceAsOfDate ( Account account,
time64  date 
)

Get the balance of the account at the end of the day before the date specified.

Definition at line 3607 of file Account.cpp.

3608 {
3609  return GetBalanceAsOfDate (acc, date, xaccSplitGetBalance);
3610 }
gnc_numeric xaccSplitGetBalance(const Split *s)
Returns the running balance up to and including the indicated split.
Definition: Split.cpp:1329

◆ xaccAccountGetBalanceAsOfDateInCurrency()

gnc_numeric xaccAccountGetBalanceAsOfDateInCurrency ( Account account,
time64  date,
gnc_commodity *  report_commodity,
gboolean  include_children 
)

This function gets the balance at the end of the given date in the desired commodity.

Definition at line 3925 of file Account.cpp.

3928 {
3929  return xaccAccountGetXxxBalanceAsOfDateInCurrencyRecursive (
3930  acc, date, xaccAccountGetBalanceAsOfDate, report_commodity,
3931  include_children);
3932 }
gnc_numeric xaccAccountGetBalanceAsOfDate(Account *acc, time64 date)
Get the balance of the account at the end of the day before the date specified.
Definition: Account.cpp:3607

◆ xaccAccountGetCommoditySCU()

int xaccAccountGetCommoditySCU ( const Account account)

Return the SCU for the account.

If a non-standard SCU has been set for the account, that is returned; else the default SCU for the account commodity is returned.

Definition at line 2704 of file Account.cpp.

2705 {
2706  AccountPrivate *priv;
2707 
2708  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), 0);
2709 
2710  priv = GET_PRIVATE(acc);
2711  if (priv->non_standard_scu || !priv->commodity)
2712  return priv->commodity_scu;
2713  return gnc_commodity_get_fraction(priv->commodity);
2714 }
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.

◆ xaccAccountGetCommoditySCUi()

int xaccAccountGetCommoditySCUi ( const Account account)

Return the 'internal' SCU setting.

This returns the over-ride SCU for the account (which might not be set, and might be zero).

Definition at line 2697 of file Account.cpp.

2698 {
2699  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), 0);
2700  return GET_PRIVATE(acc)->commodity_scu;
2701 }

◆ xaccAccountGetNoclosingBalanceAsOfDateInCurrency()

gnc_numeric xaccAccountGetNoclosingBalanceAsOfDateInCurrency ( Account acc,
time64  date,
gnc_commodity *  report_commodity,
gboolean  include_children 
)

This function gets the balance at the end of the given date, ignoring closing entries, in the desired commodity.

Definition at line 3935 of file Account.cpp.

3938 {
3939  return xaccAccountGetXxxBalanceAsOfDateInCurrencyRecursive
3940  (acc, date, xaccAccountGetNoclosingBalanceAsOfDate,
3941  report_commodity, include_children);
3942 }

◆ xaccAccountGetNonStdSCU()

gboolean xaccAccountGetNonStdSCU ( const Account account)

Return boolean, indicating whether this account uses a non-standard SCU.

Definition at line 2733 of file Account.cpp.

2734 {
2735  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), 0);
2736  return GET_PRIVATE(acc)->non_standard_scu;
2737 }

◆ xaccAccountGetReconciledBalanceAsOfDate()

gnc_numeric xaccAccountGetReconciledBalanceAsOfDate ( Account account,
time64  date 
)

Get the reconciled balance of the account at the end of the day of the date specified.

Definition at line 3619 of file Account.cpp.

3620 {
3621  return GetBalanceAsOfDate (acc, date, xaccSplitGetReconciledBalance);
3622 }
gnc_numeric xaccSplitGetReconciledBalance(const Split *s)
Returns the reconciled-balance of this split.
Definition: Split.cpp:1347

◆ xaccAccountGetType()

GNCAccountType xaccAccountGetType ( const Account account)

Returns the account's account type.

This must not be confused with the GType as returned by gnc_account_get_type(), which is related to glib's type system.

Definition at line 3282 of file Account.cpp.

3283 {
3284  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), ACCT_TYPE_NONE);
3285  return GET_PRIVATE(acc)->type;
3286 }
Not a type.
Definition: Account.h:105

◆ xaccAccountHasAncestor()

gboolean xaccAccountHasAncestor ( const Account acc,
const Account ancestor 
)

Returns true if the account is 'ancestor' or has 'ancestor' as an ancestor.

An ancestor account may be the accounts parent, its parent's parent, its parent's parent's parent, etc. Returns false if either one is NULL.

Definition at line 4371 of file Account.cpp.

4372 {
4373  const Account *parent;
4374 
4375  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
4376  g_return_val_if_fail(GNC_IS_ACCOUNT(ancestor), FALSE);
4377 
4378  parent = acc;
4379  while (parent && parent != ancestor)
4380  parent = GET_PRIVATE(parent)->parent;
4381 
4382  return (parent == ancestor);
4383 }
STRUCTS.

◆ xaccAccountIsPriced()

gboolean xaccAccountIsPriced ( const Account acc)

Returns true if the account is a stock, mutual fund or currency, otherwise false.

Definition at line 4698 of file Account.cpp.

4699 {
4700  AccountPrivate *priv;
4701 
4702  g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
4703 
4704  priv = GET_PRIVATE(acc);
4705  return (priv->type == ACCT_TYPE_STOCK || priv->type == ACCT_TYPE_MUTUAL ||
4706  priv->type == ACCT_TYPE_CURRENCY);
4707 }
Mutual Fund accounts will typically be shown in registers which show three columns: price...
Definition: Account.h:125
Stock accounts will typically be shown in registers which show three columns: price, number of shares, and value.
Definition: Account.h:122
The currency account type indicates that the account is a currency trading account.
Definition: Account.h:129

◆ xaccAccountLookup()

Account* xaccAccountLookup ( const GncGUID guid,
QofBook *  book 
)

The xaccAccountLookup() subroutine will return the account associated with the given id, or NULL if there is no such account.

Definition at line 2064 of file Account.cpp.

2065 {
2066  QofCollection *col;
2067  if (!guid || !book) return nullptr;
2068  col = qof_book_get_collection (book, GNC_ID_ACCOUNT);
2069  return (Account *) qof_collection_lookup_entity (col, guid);
2070 }
QofInstance * qof_collection_lookup_entity(const QofCollection *col, const GncGUID *guid)
Find the entity going only from its guid.
Definition: qofid.cpp:212
STRUCTS.
QofCollection * qof_book_get_collection(const QofBook *book, QofIdType entity_type)
Return The table of entities of the given type.
Definition: qofbook.cpp:521

◆ xaccAccountOrder()

int xaccAccountOrder ( const Account account_1,
const Account account_2 
)

The xaccAccountOrder() subroutine defines a sorting order on accounts.

It takes pointers to two accounts, and returns an int < 0 if the first account is "less than" the second, returns an int > 0 if the first is "greater than" the second, and 0 if they are equal. To determine the sort order, first the account codes are compared, and if these are equal, then account types, then account names. If still equal, it compares GUID to ensure that there aren't any ties.

Definition at line 2375 of file Account.cpp.

2376 {
2377  AccountPrivate *priv_aa, *priv_ab;
2378  const char *da, *db;
2379  int ta, tb, result;
2380 
2381  if ( aa && !ab ) return -1;
2382  if ( !aa && ab ) return +1;
2383  if ( !aa && !ab ) return 0;
2384 
2385  priv_aa = GET_PRIVATE(aa);
2386  priv_ab = GET_PRIVATE(ab);
2387 
2388  /* sort on accountCode strings */
2389  da = priv_aa->accountCode;
2390  db = priv_ab->accountCode;
2391 
2392  /* Otherwise do a string sort */
2393  result = g_strcmp0 (da, db);
2394  if (result)
2395  return result;
2396 
2397  /* if account-type-order array not initialized, initialize it */
2398  /* this will happen at most once during program invocation */
2399  if (-1 == revorder[0])
2400  {
2401  int i;
2402  for (i = 0; i < NUM_ACCOUNT_TYPES; i++)
2403  {
2404  revorder [typeorder[i]] = i;
2405  }
2406  }
2407 
2408  /* otherwise, sort on account type */
2409  ta = priv_aa->type;
2410  tb = priv_ab->type;
2411  ta = revorder[ta];
2412  tb = revorder[tb];
2413  if (ta < tb) return -1;
2414  if (ta > tb) return +1;
2415 
2416  /* otherwise, sort on accountName strings */
2417  da = priv_aa->accountName;
2418  db = priv_ab->accountName;
2419  result = safe_utf8_collate(da, db);
2420  if (result)
2421  return result;
2422 
2423  /* guarantee a stable sort */
2424  return qof_instance_guid_compare(aa, ab);
2425 }
int safe_utf8_collate(const char *da, const char *db)
Collate two UTF-8 strings.
stop here; the following types just aren&#39;t ready for prime time
Definition: Account.h:161
gint qof_instance_guid_compare(gconstpointer ptr1, gconstpointer ptr2)
Compare the GncGUID values of two instances.

◆ xaccAccountSetAssociatedAccount()

void xaccAccountSetAssociatedAccount ( Account acc,
const char *  tag,
const Account assoc_acct 
)

Set the account's associated account e.g.

stock account -> dividend account

Definition at line 2610 of file Account.cpp.

2611 {
2612  g_return_if_fail (GNC_IS_ACCOUNT(acc));
2613  g_return_if_fail (tag && *tag);
2614 
2615  std::vector<std::string> path = { "associated-account", tag };
2616  xaccAccountBeginEdit(acc);
2617 
2618  PINFO ("setting %s assoc %s account = %s", xaccAccountGetName (acc), tag,
2619  assoc_acct ? xaccAccountGetName (assoc_acct) : nullptr);
2620 
2621  if (GNC_IS_ACCOUNT(assoc_acct))
2622  {
2623  GValue v = G_VALUE_INIT;
2624  g_value_init (&v, GNC_TYPE_GUID);
2625  g_value_set_static_boxed (&v, xaccAccountGetGUID (assoc_acct));
2626  qof_instance_set_path_kvp (QOF_INSTANCE (acc), &v, path);
2627  g_value_unset (&v);
2628  }
2629  else
2630  qof_instance_set_path_kvp (QOF_INSTANCE (acc), nullptr, path);
2631 
2632  mark_account (acc);
2633  xaccAccountCommitEdit(acc);
2634 }
#define PINFO(format, args...)
Print an informational note.
Definition: qoflog.h:256
#define xaccAccountGetGUID(X)
Definition: Account.h:248
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
const char * xaccAccountGetName(const Account *acc)
Get the account&#39;s name.
Definition: Account.cpp:3304
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526

◆ xaccAccountSetCommoditySCU()

void xaccAccountSetCommoditySCU ( Account account,
int  frac 
)

Set the SCU for the account.

Normally, this routine is not required, as the default SCU for an account is given by its commodity.

Definition at line 2681 of file Account.cpp.

2682 {
2683  AccountPrivate *priv;
2684 
2685  g_return_if_fail(GNC_IS_ACCOUNT(acc));
2686 
2687  priv = GET_PRIVATE(acc);
2688  xaccAccountBeginEdit(acc);
2689  priv->commodity_scu = scu;
2690  if (scu != gnc_commodity_get_fraction(priv->commodity))
2691  priv->non_standard_scu = TRUE;
2692  mark_account(acc);
2693  xaccAccountCommitEdit(acc);
2694 }
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526

◆ xaccAccountSetNonStdSCU()

void xaccAccountSetNonStdSCU ( Account account,
gboolean  flag 
)

Set the flag indicating that this account uses a non-standard SCU.

Definition at line 2717 of file Account.cpp.

2718 {
2719  AccountPrivate *priv;
2720 
2721  g_return_if_fail(GNC_IS_ACCOUNT(acc));
2722 
2723  priv = GET_PRIVATE(acc);
2724  if (priv->non_standard_scu == flag)
2725  return;
2726  xaccAccountBeginEdit(acc);
2727  priv->non_standard_scu = flag;
2728  mark_account (acc);
2729  xaccAccountCommitEdit(acc);
2730 }
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition: Account.cpp:1485
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
Definition: Account.cpp:1526

◆ xaccAccountSortSplits()

void xaccAccountSortSplits ( Account acc,
gboolean  force 
)

The xaccAccountSortSplits() routine will resort the account's splits if the sort is dirty.

If 'force' is true, the account is sorted even if the editlevel is not zero.

Definition at line 2018 of file Account.cpp.

2019 {
2020  AccountPrivate *priv;
2021 
2022  g_return_if_fail(GNC_IS_ACCOUNT(acc));
2023 
2024  priv = GET_PRIVATE(acc);
2025  if (!priv->sort_dirty || (!force && qof_instance_get_editlevel(acc) > 0))
2026  return;
2027  std::sort (priv->splits.begin(), priv->splits.end(), split_cmp_less);
2028  priv->sort_dirty = FALSE;
2029  priv->balance_dirty = TRUE;
2030 }

◆ xaccCloneAccount()

Account* xaccCloneAccount ( const Account source,
QofBook *  book 
)

The xaccCloneAccount() routine makes a simple copy of the indicated account, placing it in the indicated book.

It copies the account type, name, description, and the kvp values; it does not copy splits/transactions. The book should have a commodity table in it that has commodities with the same unique name as the ones being copied in the account (the commodities in the clone will be those from the book).

Definition at line 1306 of file Account.cpp.

1307 {
1308  Account *ret;
1309  AccountPrivate *from_priv, *priv;
1310 
1311  g_return_val_if_fail(GNC_IS_ACCOUNT(from), nullptr);
1312  g_return_val_if_fail(QOF_IS_BOOK(book), nullptr);
1313 
1314  ENTER (" ");
1315  ret = static_cast<Account*>(g_object_new (GNC_TYPE_ACCOUNT, nullptr));
1316  g_return_val_if_fail (ret, nullptr);
1317 
1318  from_priv = GET_PRIVATE(from);
1319  priv = GET_PRIVATE(ret);
1320  xaccInitAccount (ret, book);
1321 
1322  /* Do not Begin/CommitEdit() here; give the caller
1323  * a chance to fix things up, and let them do it.
1324  * Also let caller issue the generate_event (EVENT_CREATE) */
1325  priv->type = from_priv->type;
1326 
1327  priv->accountName = qof_string_cache_replace(priv->accountName, from_priv->accountName);
1328  priv->accountCode = qof_string_cache_replace(priv->accountCode, from_priv->accountCode);
1329  priv->description = qof_string_cache_replace(priv->description, from_priv->description);
1330 
1331  qof_instance_copy_kvp (QOF_INSTANCE (ret), QOF_INSTANCE (from));
1332 
1333  /* The new book should contain a commodity that matches
1334  * the one in the old book. Find it, use it. */
1335  priv->commodity = gnc_commodity_obtain_twin(from_priv->commodity, book);
1336  gnc_commodity_increment_usage_count(priv->commodity);
1337 
1338  priv->commodity_scu = from_priv->commodity_scu;
1339  priv->non_standard_scu = from_priv->non_standard_scu;
1340 
1341  qof_instance_set_dirty(&ret->inst);
1342  LEAVE (" ");
1343  return ret;
1344 }
const char * qof_string_cache_replace(char const *dst, char const *src)
Same as CACHE_REPLACE below, but safe to call from C++.
STRUCTS.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
void gnc_commodity_increment_usage_count(gnc_commodity *cm)
Increment a commodity&#39;s internal counter that tracks how many accounts are using that commodity...
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
gnc_commodity * gnc_commodity_obtain_twin(const gnc_commodity *from, QofBook *book)
Given the commodity &#39;findlike&#39;, this routine will find and return the equivalent commodity (commodity...