GnuCash  5.6-150-g038405b370+
AccountP.hpp
Go to the documentation of this file.
1 /********************************************************************\
2  * AccountP.hpp -- Account engine-private data structure *
3  * Copyright (C) 1997 Robin D. Clark *
4  * Copyright (C) 1997-2002, Linas Vepstas <linas@linas.org> *
5  * *
6  * This program is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU General Public License as *
8  * published by the Free Software Foundation; either version 2 of *
9  * the License, or (at your option) any later version. *
10  * *
11  * This program is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU General Public License*
17  * along with this program; if not, contact: *
18  * *
19  * Free Software Foundation Voice: +1-617-542-5942 *
20  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
21  * Boston, MA 02110-1301, USA gnu@gnu.org *
22  * *
23 \********************************************************************/
24 
39 #ifndef XACC_ACCOUNT_P_H
40 #define XACC_ACCOUNT_P_H
41 
42 #include <vector>
43 #include <optional>
44 
45 #include "Account.h"
46 
47 #define GNC_ID_ROOT_ACCOUNT "RootAccount"
48 
58 typedef struct AccountPrivate
59 {
60  /* The accountName is an arbitrary string assigned by the user.
61  * It is intended to be a short, 5 to 30 character long string that
62  * is displayed by the GUI as the account mnemonic.
63  */
64  const char *accountName;
65 
66  /* The accountCode is an arbitrary string assigned by the user.
67  * It is intended to be reporting code that is a synonym for the
68  * accountName. Typically, it will be a numeric value that follows
69  * the numbering assignments commonly used by accountants, such
70  * as 100, 200 or 600 for top-level accounts, and 101, 102.. etc.
71  * for detail accounts.
72  */
73  const char *accountCode;
74 
75  /* The description is an arbitrary string assigned by the user.
76  * It is intended to be a longer, 1-5 sentence description of what
77  * this account is all about.
78  */
79  const char *description;
80 
81  /* The type field is the account type, picked from the enumerated
82  * list that includes ACCT_TYPE_BANK, ACCT_TYPE_STOCK,
83  * ACCT_TYPE_CREDIT, ACCT_TYPE_INCOME, etc. Its intended use is to
84  * be a hint to the GUI as to how to display and format the
85  * transaction data.
86  */
87  GNCAccountType type;
88 
89  /*
90  * The commodity field denotes the kind of 'stuff' stored
91  * in this account. The 'amount' field of a split indicates
92  * how much of the 'stuff' there is.
93  */
94  gnc_commodity * commodity;
95  int commodity_scu;
96  gboolean non_standard_scu;
97 
98  /* The parent and children pointers are used to implement an account
99  * hierarchy, of accounts that have sub-accounts ("detail accounts").
100  */
101  Account *parent; /* back-pointer to parent */
102  std::vector<Account*> children; /* list of sub-accounts */
103 
104  /* protected data - should only be set by backends */
105  gnc_numeric starting_balance;
106  gnc_numeric starting_noclosing_balance;
107  gnc_numeric starting_cleared_balance;
108  gnc_numeric starting_reconciled_balance;
109 
110  /* cached parameters */
111  gnc_numeric balance;
112  gnc_numeric noclosing_balance;
113  gnc_numeric cleared_balance;
114  gnc_numeric reconciled_balance;
115 
116  gboolean balance_dirty; /* balances in splits incorrect */
117 
118  std::vector<Split*> splits; /* list of split pointers */
119  GHashTable* splits_hash;
120  gboolean sort_dirty; /* sort order of splits is bad */
121 
122  LotList *lots; /* list of lot pointers */
123  GNCPolicy *policy; /* Cached pointer to policy method */
124 
125  char *notes;
126  char *color;
127  char *tax_us_code;
128  char *tax_us_pns;
129  char *last_num;
130  char *sort_order;
131  char *filter;
132 
133  /* The "mark" flag can be used by the user to mark this account
134  * in any way desired. Handy for specialty traversals of the
135  * account tree. */
136  short mark;
137  gboolean defer_bal_computation;
139 
140 struct account_s
141 {
142  QofInstance inst;
143 };
144 
145 /* Set the account's GncGUID. This should only be done when reading
146  * an account from a datafile, or some other external source. Never
147  * call this on an existing account! */
148 void xaccAccountSetGUID (Account *account, const GncGUID *guid);
149 
150 /* Register Accounts with the engine */
151 gboolean xaccAccountRegister (void);
152 
153 /* Structure for accessing static functions for testing */
154 typedef struct
155 {
156  AccountPrivate *(*get_private) (Account *acc);
157  Account *(*coll_get_root_account) (QofCollection *col);
158  void (*xaccFreeAccountChildren) (Account *acc);
159  void (*xaccFreeAccount) (Account *acc);
160  void (*qofAccountSetParent) (Account *acc, QofInstance *parent);
161  Account *(*gnc_account_lookup_by_full_name_helper) (const Account *acc,
162  gchar **names);
164 
165 AccountTestFunctions* _utest_account_fill_functions(void);
166 
167 #endif /* XACC_ACCOUNT_P_H */
GList LotList
GList of GNCLots.
Definition: gnc-engine.h:205
STRUCTS.
Account handling public routines.
GNCAccountType
The account types are used to determine how the transaction data in the account is displayed...
Definition: Account.h:101
Account in Gnucash.
Definition: AccountP.hpp:140
The type used to store guids in C.
Definition: guid.h:75