gnucash/libgnucash/engine/AccountP.hpp

168 lines
6.2 KiB
C++

/********************************************************************\
* AccountP.hpp -- Account engine-private data structure *
* Copyright (C) 1997 Robin D. Clark *
* Copyright (C) 1997-2002, Linas Vepstas <linas@linas.org> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License*
* along with this program; if not, contact: *
* *
* Free Software Foundation Voice: +1-617-542-5942 *
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
* Boston, MA 02110-1301, USA gnu@gnu.org *
* *
\********************************************************************/
/** @file AccountP.hpp
*
* This is the *private* header for the account structure.
* No one outside of the engine should ever include this file.
*
* This header includes prototypes for "dangerous" functions.
* Invoking any of these functions potentially leave the account
* in an inconsistent state. If they are not used in the proper
* setting, they can leave the account structures in an inconsistent
* state. Thus, these methods should never be used outside of
* the engine, which is why they are "hidden" here.
*
*/
#ifndef XACC_ACCOUNT_P_H
#define XACC_ACCOUNT_P_H
#include <vector>
#include <optional>
#include "Account.h"
#define GNC_ID_ROOT_ACCOUNT "RootAccount"
/** STRUCTS *********************************************************/
/** This is the data that describes an account.
*
* This is the *private* header for the account structure.
* No one outside of the engine should ever include this file.
*/
/** \struct Account */
typedef struct AccountPrivate
{
/* The accountName is an arbitrary string assigned by the user.
* It is intended to be a short, 5 to 30 character long string that
* is displayed by the GUI as the account mnemonic.
*/
const char *accountName;
/* The accountCode is an arbitrary string assigned by the user.
* It is intended to be reporting code that is a synonym for the
* accountName. Typically, it will be a numeric value that follows
* the numbering assignments commonly used by accountants, such
* as 100, 200 or 600 for top-level accounts, and 101, 102.. etc.
* for detail accounts.
*/
const char *accountCode;
/* The description is an arbitrary string assigned by the user.
* It is intended to be a longer, 1-5 sentence description of what
* this account is all about.
*/
const char *description;
/* The type field is the account type, picked from the enumerated
* list that includes ACCT_TYPE_BANK, ACCT_TYPE_STOCK,
* ACCT_TYPE_CREDIT, ACCT_TYPE_INCOME, etc. Its intended use is to
* be a hint to the GUI as to how to display and format the
* transaction data.
*/
GNCAccountType type;
/*
* The commodity field denotes the kind of 'stuff' stored
* in this account. The 'amount' field of a split indicates
* how much of the 'stuff' there is.
*/
gnc_commodity * commodity;
int commodity_scu;
gboolean non_standard_scu;
/* The parent and children pointers are used to implement an account
* hierarchy, of accounts that have sub-accounts ("detail accounts").
*/
Account *parent; /* back-pointer to parent */
std::vector<Account*> children; /* list of sub-accounts */
/* protected data - should only be set by backends */
gnc_numeric starting_balance;
gnc_numeric starting_noclosing_balance;
gnc_numeric starting_cleared_balance;
gnc_numeric starting_reconciled_balance;
/* cached parameters */
gnc_numeric balance;
gnc_numeric noclosing_balance;
gnc_numeric cleared_balance;
gnc_numeric reconciled_balance;
gboolean balance_dirty; /* balances in splits incorrect */
std::vector<Split*> splits; /* list of split pointers */
GHashTable* splits_hash;
gboolean sort_dirty; /* sort order of splits is bad */
LotList *lots; /* list of lot pointers */
GNCPolicy *policy; /* Cached pointer to policy method */
char *notes;
char *color;
char *tax_us_code;
char *tax_us_pns;
char *last_num;
char *sort_order;
char *filter;
/* The "mark" flag can be used by the user to mark this account
* in any way desired. Handy for specialty traversals of the
* account tree. */
short mark;
gboolean defer_bal_computation;
} AccountPrivate;
struct account_s
{
QofInstance inst;
};
/* Set the account's GncGUID. This should only be done when reading
* an account from a datafile, or some other external source. Never
* call this on an existing account! */
void xaccAccountSetGUID (Account *account, const GncGUID *guid);
/* Register Accounts with the engine */
gboolean xaccAccountRegister (void);
/* Structure for accessing static functions for testing */
typedef struct
{
AccountPrivate *(*get_private) (Account *acc);
Account *(*coll_get_root_account) (QofCollection *col);
void (*xaccFreeAccountChildren) (Account *acc);
void (*xaccFreeAccount) (Account *acc);
void (*qofAccountSetParent) (Account *acc, QofInstance *parent);
Account *(*gnc_account_lookup_by_full_name_helper) (const Account *acc,
gchar **names);
} AccountTestFunctions;
AccountTestFunctions* _utest_account_fill_functions(void);
#endif /* XACC_ACCOUNT_P_H */