mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
The net total of this work is (i beleive) fewer lines of code. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@9530 57a11ea4-9604-0410-9ed3-97b8803252fd
211 lines
8.2 KiB
C
211 lines
8.2 KiB
C
/********************************************************************\
|
|
* AccountP.h -- 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 *
|
|
* 59 Temple Place - Suite 330 Fax: +1-617-542-2652 *
|
|
* Boston, MA 02111-1307, USA gnu@gnu.org *
|
|
* *
|
|
\********************************************************************/
|
|
|
|
/** @file AccountP.h
|
|
*
|
|
* 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 "config.h"
|
|
|
|
#include "Account.h"
|
|
#include "gnc-commodity.h"
|
|
#include "gnc-engine.h"
|
|
#include "gnc-numeric.h"
|
|
#include "kvp_frame.h"
|
|
#include "policy.h"
|
|
|
|
#include "qofbackend.h"
|
|
#include "qofbook.h"
|
|
#include "qofid.h"
|
|
#include "qofinstance.h"
|
|
#include "qofinstance-p.h"
|
|
|
|
|
|
/** 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_s
|
|
{
|
|
QofInstance inst;
|
|
|
|
/* The accountName is an arbitrary string assigned by the user.
|
|
* It is intended to a short, 5 to 30 character long string that
|
|
* is displayed by the GUI as the account mnemonic.
|
|
*/
|
|
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.
|
|
*/
|
|
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.
|
|
*/
|
|
char *description;
|
|
|
|
/* The type field is the account type, picked from the enumerated
|
|
* list that includes BANK, STOCK, CREDIT, 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").
|
|
*/
|
|
AccountGroup *parent; /* back-pointer to parent */
|
|
AccountGroup *children; /* pointer to sub-accounts */
|
|
|
|
/* protected data, cached parameters */
|
|
gnc_numeric starting_balance;
|
|
gnc_numeric starting_cleared_balance;
|
|
gnc_numeric starting_reconciled_balance;
|
|
|
|
gnc_numeric balance;
|
|
gnc_numeric cleared_balance;
|
|
gnc_numeric reconciled_balance;
|
|
|
|
/* version number, used for tracking multiuser updates */
|
|
gint32 version;
|
|
guint32 version_check; /* data aging timestamp */
|
|
|
|
SplitList *splits; /* list of split pointers */
|
|
LotList *lots; /* list of lot pointers */
|
|
|
|
/* Cached pointer to policy method */
|
|
GNCPolicy *policy;
|
|
|
|
gboolean balance_dirty; /* balances in splits incorrect */
|
|
gboolean sort_dirty; /* sort order of splits is bad */
|
|
|
|
/* 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;
|
|
|
|
/* -------------------------------------------------------------- */
|
|
/* Backend private expansion data */
|
|
guint32 idata; /* used by the sql backend for kvp management */
|
|
};
|
|
|
|
/* The xaccAccountRemoveSplit() routine will remove the indicated split
|
|
* from the indicated account. Note that this will leave the split
|
|
* "dangling", i.e. unassigned to any account, and therefore will put
|
|
* the engine into an inconsistent state. After removing a split,
|
|
* it should be immediately destroyed, or it should be inserted into
|
|
* an account.
|
|
*/
|
|
void xaccAccountRemoveSplit (Account *, Split *);
|
|
|
|
/* 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.
|
|
*/
|
|
void xaccAccountSortSplits (Account *acc, gboolean force);
|
|
|
|
/* The following recompute the partial balances (stored with the
|
|
* transaction) and the total balance, for this account
|
|
*/
|
|
void xaccAccountRecomputeBalance (Account *);
|
|
|
|
/* Set the account's GUID. 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 GUID *guid);
|
|
|
|
/* The xaccAccountSetStartingBalance() routine 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.
|
|
*
|
|
* This routine is in the private .h file because only backends are
|
|
* allowed to set the starting balance. This is *not* a user interface
|
|
* function.
|
|
*/
|
|
void xaccAccountSetStartingBalance(Account *account,
|
|
const gnc_numeric start_baln,
|
|
const gnc_numeric start_cleared_baln,
|
|
const gnc_numeric start_reconciled_baln);
|
|
|
|
/* The xaccFreeAccount() routine releases memory associated with the
|
|
* account. It should never be called directly from user code;
|
|
* instead, the xaccAccountDestroy() routine should be used
|
|
* (because xaccAccountDestroy() has the correct commit semantics).
|
|
*/
|
|
|
|
void xaccFreeAccount (Account *account);
|
|
|
|
/* The xaccAccountSet/GetVersion() routines set & get the version
|
|
* numbers on this account. The version number is used to manage
|
|
* multi-user updates. These routines are private because we don't
|
|
* want anyone except the backend to mess with them.
|
|
*/
|
|
void xaccAccountSetVersion (Account*, gint32);
|
|
gint32 xaccAccountGetVersion (Account*);
|
|
|
|
/* Register Accounts with the engine */
|
|
gboolean xaccAccountRegister (void);
|
|
|
|
/** killed for now, need to resurect this or something similar
|
|
* * for transactional/dirty kvp. Later. Right now a place holder
|
|
* */
|
|
#define xaccAccountSetSlots_nc(A,S) qof_instance_set_slots(QOF_INSTANCE(A),S)
|
|
|
|
#endif /* XACC_ACCOUNT_P_H */
|