GnuCash c935c2f+
Loading...
Searching...
No Matches
Transaction.h
Go to the documentation of this file.
1/********************************************************************\
2 * This program is free software; you can redistribute it and/or *
3 * modify it under the terms of the GNU General Public License as *
4 * published by the Free Software Foundation; either version 2 of *
5 * the License, or (at your option) any later version. *
6 * *
7 * This program is distributed in the hope that it will be useful, *
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
10 * GNU General Public License for more details. *
11 * *
12 * You should have received a copy of the GNU General Public License*
13 * along with this program; if not, contact: *
14 * *
15 * Free Software Foundation Voice: +1-617-542-5942 *
16 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
17 * Boston, MA 02110-1301, USA gnu@gnu.org *
18 * *
19\********************************************************************/
86#ifndef XACC_TRANSACTION_H
87#define XACC_TRANSACTION_H
88
89typedef struct _TransactionClass TransactionClass;
90
91#include <time.h>
92
93#include "gnc-commodity.h"
94#include "gnc-engine.h"
95#include "gnc-pricedb.h"
96#include "Split.h"
97
98#ifdef __cplusplus
99extern "C" {
100#endif
101
102/* --- type macros --- */
103#define GNC_TYPE_TRANSACTION (gnc_transaction_get_type ())
104#define GNC_TRANSACTION(o) \
105 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TRANSACTION, Transaction))
106#define GNC_TRANSACTION_CLASS(k) \
107 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TRANSACTION, TransactionClass))
108#define GNC_IS_TRANSACTION(o) \
109 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TRANSACTION))
110#define GNC_IS_TRANSACTION_CLASS(k) \
111 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TRANSACTION))
112#define GNC_TRANSACTION_GET_CLASS(o) \
113 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TRANSACTION, TransactionClass))
114GType gnc_transaction_get_type(void);
115
116
117/* FIXME: These macros are not consistent with the type name */
118#define GNC_IS_TRANS(obj) GNC_IS_TRANSACTION(obj)
119#define GNC_TRANS(obj) GNC_TRANSACTION(obj)
120
124#define TXN_TYPE_UNCACHED '?'
125#define TXN_TYPE_NONE '\0'
126#define TXN_TYPE_INVOICE 'I'
127#define TXN_TYPE_PAYMENT 'P'
128#define TXN_TYPE_LINK 'L'
131/* --------------------------------------------------------------- */
132/* Transactions */
133
141Transaction * xaccMallocTransaction (QofBook *book);
142
157void xaccTransDestroy (Transaction *trans);
158
163Transaction * xaccTransClone (const Transaction *t);
164
169Transaction * xaccTransCloneNoKvp (const Transaction *t);
170
194gboolean xaccTransEqual(const Transaction *ta,
195 const Transaction *tb,
196 gboolean check_guids,
197 gboolean check_splits,
198 gboolean check_balances,
199 gboolean assume_ordered);
200
204void xaccTransBeginEdit (Transaction *trans);
205
211void xaccTransCommitEdit (Transaction *trans);
212
218void xaccTransRollbackEdit (Transaction *trans);
219
226gboolean xaccTransIsOpen (const Transaction *trans);
227
231/*@ dependent @*//*@ null @*/
232Transaction * xaccTransLookup (const GncGUID *guid, QofBook *book);
233#define xaccTransLookupDirect(g,b) xaccTransLookup(&(g),b)
234
235/*################## Added for Reg2 #################*/
236
241Transaction * xaccTransCopyToClipBoard(const Transaction *from_trans);
242
246void xaccTransCopyOnto(const Transaction *from_trans, Transaction *to_trans);
247
265void xaccTransCopyFromClipBoard(const Transaction *from_trans, Transaction *to_trans,
266 const Account *from_acc, Account *to_acc, gboolean no_date);
267
268/*################## Added for Reg2 #################*/
269
270
271Split * xaccTransFindSplitByAccount(const Transaction *trans,
272 const Account *acc);
273
281void xaccTransScrubGains (Transaction *trans, Account *gain_acc);
282
283
289
299gboolean xaccTransUseTradingAccounts(const Transaction *trans);
300
304void xaccTransSortSplits (Transaction *trans);
305
312void xaccTransSetTxnType (Transaction *trans, char type);
313
320char xaccTransGetTxnType (Transaction *trans);
321
327void xaccTransSetNum (Transaction *trans, const char *num);
328
330void xaccTransSetDescription (Transaction *trans, const char *desc);
331
333void xaccTransSetDocLink (Transaction *trans, const char *doclink);
334
338void xaccTransSetNotes (Transaction *trans, const char *notes);
339
345const char * xaccTransGetNum (const Transaction *trans);
347const char * xaccTransGetDescription (const Transaction *trans);
349const char * xaccTransGetDocLink(const Transaction *trans);
353const char * xaccTransGetNotes (const Transaction *trans);
354
356void xaccTransSetIsClosingTxn (Transaction *trans, gboolean is_closing);
357
359gboolean xaccTransGetIsClosingTxn (const Transaction *trans);
360
371void xaccTransClearSplits(Transaction* trans);
372
380#define xaccTransAppendSplit(t, s) xaccSplitSetParent((s), (t))
381
391Split* xaccTransGetSplit (const Transaction *trans, int i);
392
394int xaccTransGetSplitIndex(const Transaction *trans, const Split *split);
395
401/*@ dependent @*/
402SplitList * xaccTransGetSplitList (const Transaction *trans);
403
409SplitList * xaccTransGetPaymentAcctSplitList (const Transaction *trans);
410
416SplitList * xaccTransGetAPARAcctSplitList (const Transaction *trans, gboolean strict);
417
418
419gboolean xaccTransStillHasSplit(const Transaction *trans, const Split *s);
420
427Split * xaccTransGetFirstPaymentAcctSplit (const Transaction *trans);
428
435Split * xaccTransGetFirstAPARAcctSplit (const Transaction *trans, gboolean strict);
436
442void xaccTransSetReadOnly (Transaction *trans, const char *reason);
443void xaccTransClearReadOnly (Transaction *trans);
444
447const char * xaccTransGetReadOnly (Transaction *trans);
448
452gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans);
453
455int xaccTransCountSplits (const Transaction *trans);
456
458gboolean xaccTransHasReconciledSplits (const Transaction *trans);
460gboolean xaccTransHasReconciledSplitsByAccount (const Transaction *trans,
461 const Account *account);
462
464gboolean xaccTransHasSplitsInState (const Transaction *trans, const char state);
466gboolean xaccTransHasSplitsInStateByAccount (const Transaction *trans,
467 const char state,
468 const Account *account);
469
470
478/*@ dependent @*/
479gnc_commodity * xaccTransGetCurrency (const Transaction *trans);
480
482void xaccTransSetCurrency (Transaction *trans, gnc_commodity *curr);
483
499gnc_numeric xaccTransGetImbalanceValue (const Transaction * trans);
500
507MonetaryList *xaccTransGetImbalance (const Transaction * trans);
508
511gboolean xaccTransIsBalanced(const Transaction * trans);
512
519gnc_numeric xaccTransGetAccountValue (const Transaction *trans,
520 const Account *account);
521
523gnc_numeric xaccTransGetAccountAmount (const Transaction *trans,
524 const Account *account);
525
526/* Compute the conversion rate for the transaction to this account.
527 * Any "split value" (which is in the transaction currency),
528 * multiplied by this conversion rate, will give you the value you
529 * should display for this account.
530 *
531 * If 'acc' is NULL, return unity.
532 */
533gnc_numeric xaccTransGetAccountConvRate(const Transaction *txn, const Account *acc);
534
537gnc_numeric xaccTransGetAccountBalance (const Transaction *trans,
538 const Account *account);
539
558int xaccTransOrder (const Transaction *ta, const Transaction *tb);
559
560
580int xaccTransOrder_num_action (const Transaction *ta, const char *actna,
581 const Transaction *tb, const char *actnb);
582
599void xaccTransSetDate (Transaction *trans,
600 int day, int mon, int year);
601
609void xaccTransSetDatePostedGDate (Transaction *trans, GDate date);
610
620void xaccTransSetDatePostedSecs (Transaction *trans, time64 time);
621
631void xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time);
632
635void xaccTransSetDateEnteredSecs (Transaction *trans, time64 time);
636
638void xaccTransSetDateDue (Transaction * trans, time64 time);
639
644time64 xaccTransGetDate (const Transaction *trans);
649time64 xaccTransRetDatePosted (const Transaction *trans);
652GDate xaccTransGetDatePostedGDate (const Transaction *trans);
653
654/*################## Added for Reg2 #################*/
657time64 xaccTransGetDateEntered (const Transaction *trans);
658/*################## Added for Reg2 #################*/
661time64 xaccTransRetDateEntered (const Transaction *trans);
662
664time64 xaccTransRetDateDue (const Transaction *trans);
669/********************************************************************\
670 * Miscellaneous utility routines.
671\********************************************************************/
672
673
686void xaccTransVoid(Transaction *transaction,
687 const char *reason);
688
696void xaccTransUnvoid(Transaction *transaction);
697
709Transaction * xaccTransReverse(Transaction *transaction);
710
718Transaction * xaccTransGetReversedBy(const Transaction *trans);
719
727gboolean xaccTransGetVoidStatus(const Transaction *transaction);
728
736const char *xaccTransGetVoidReason(const Transaction *transaction);
737
745time64 xaccTransGetVoidTime(const Transaction *tr);
751#define TRANS_KVP "kvp"
752#define TRANS_NUM "num"
753#define TRANS_DESCRIPTION "desc"
754#define TRANS_DATE_ENTERED "date-entered"
755#define TRANS_DATE_POSTED "date-posted"
756#define TRANS_DATE_DUE "date-due"
757#define TRANS_IMBALANCE "trans-imbalance"
758#define TRANS_IS_BALANCED "trans-balanced?"
759#define TRANS_IS_CLOSING "trans-is-closing?"
760#define TRANS_NOTES "notes"
761#define TRANS_DOCLINK "doclink"
762#define TRANS_TYPE "type"
763#define TRANS_VOID_STATUS "void-p"
764#define TRANS_VOID_REASON "void-reason"
765#define TRANS_VOID_TIME "void-time"
766#define TRANS_SPLITLIST "split-list" /* for guid_match_all */
769#ifdef DUMP_FUNCTIONS
770void xaccTransDump (const Transaction *trans, const char *tag);
771#endif
772
779void xaccTransRecordPrice (Transaction *trans, PriceSource source);
780
781
782#define RECONCILED_MATCH_TYPE "reconciled-match"
783
785#define xaccTransGetBook(X) qof_instance_get_book (QOF_INSTANCE(X))
787#define xaccTransGetGUID(X) qof_entity_get_guid(QOF_INSTANCE(X))
788
789#ifdef __cplusplus
790} /* extern "C" */
791#endif
792
793#endif /* XACC_TRANSACTION_H */
API for Transactions and Splits (journal entries)
Commodity handling public routines.
All type declarations for the whole Gnucash engine.
a simple price database for gnucash
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition gnc-date.h:87
gboolean xaccTransHasSplitsInStateByAccount(const Transaction *trans, const char state, const Account *account)
FIXME: document me.
void xaccTransSetDate(Transaction *trans, int day, int mon, int year)
The xaccTransSetDate() method does the same thing as xaccTransSetDate[Posted]Secs(),...
gboolean xaccTransGetIsClosingTxn(const Transaction *trans)
Returns whether this transaction is a "closing transaction".
Transaction * xaccTransReverse(Transaction *transaction)
xaccTransReverse creates a Transaction that reverses the given transaction by inverting all the numer...
gboolean xaccTransHasSplitsInState(const Transaction *trans, const char state)
FIXME: document me.
SplitList * xaccTransGetPaymentAcctSplitList(const Transaction *trans)
The xaccTransGetPaymentAcctSplitList() method returns a GList of the splits in a transaction that bel...
const char * xaccTransGetVoidReason(const Transaction *transaction)
Returns the user supplied textual reason why a transaction was voided.
guint gnc_book_count_transactions(QofBook *book)
int xaccTransOrder(const Transaction *ta, const Transaction *tb)
The xaccTransOrder(ta,tb) method is useful for sorting.
Transaction * xaccTransCopyToClipBoard(const Transaction *from_trans)
Copy a transaction to the 'clipboard' transaction using dupe_transaction.
void xaccTransSetDescription(Transaction *trans, const char *desc)
Sets the transaction Description.
time64 xaccTransRetDateEntered(const Transaction *trans)
Retrieve the date of when the transaction was entered.
Transaction * xaccTransGetReversedBy(const Transaction *trans)
Returns the transaction that reversed the given transaction.
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
Returns the valuation commodity of this transaction.
void xaccTransSetIsClosingTxn(Transaction *trans, gboolean is_closing)
Sets whether or not this transaction is a "closing transaction".
gboolean xaccTransGetVoidStatus(const Transaction *transaction)
Retrieve information on whether or not a transaction has been voided.
char xaccTransGetTxnType(Transaction *trans)
Returns the Transaction Type: note this type will be derived from the transaction splits,...
void xaccTransDestroy(Transaction *trans)
Destroys a transaction.
void xaccTransSetDatePostedGDate(Transaction *trans, GDate date)
This method modifies posted date of the transaction, specified by a GDate.
gboolean xaccTransHasReconciledSplitsByAccount(const Transaction *trans, const Account *account)
FIXME: document me.
void xaccTransSetNum(Transaction *trans, const char *num)
Sets the transaction Number (or ID) field; rather than use this function directly,...
const char * xaccTransGetDocLink(const Transaction *trans)
Gets the transaction Document Link.
GDate xaccTransGetDatePostedGDate(const Transaction *trans)
Retrieve the posted date of the transaction.
void xaccTransSetTxnType(Transaction *trans, char type)
Set the Transaction Type: note the type will be saved into the Transaction kvp property as a backward...
void xaccTransCommitEdit(Transaction *trans)
The xaccTransCommitEdit() method indicates that the changes to the transaction and its splits are com...
const char * xaccTransGetDescription(const Transaction *trans)
Gets the transaction Description.
MonetaryList * xaccTransGetImbalance(const Transaction *trans)
The xaccTransGetImbalance method returns a list giving the value of the transaction in each currency ...
Split * xaccTransGetFirstPaymentAcctSplit(const Transaction *trans)
The xaccTransGetFirstPaymentAcctSplit() method returns a pointer to the first split in this transacti...
void xaccTransCopyFromClipBoard(const Transaction *from_trans, Transaction *to_trans, const Account *from_acc, Account *to_acc, gboolean no_date)
This function explicitly must robustly handle some unusual input.
void xaccTransClearSplits(Transaction *trans)
Remove all splits from the transaction.
gboolean xaccTransIsOpen(const Transaction *trans)
The xaccTransIsOpen() method returns TRUE if the transaction is open for editing.
gboolean xaccTransIsBalanced(const Transaction *trans)
Returns true if the transaction is balanced according to the rules currently in effect.
Transaction * xaccTransLookup(const GncGUID *guid, QofBook *book)
The xaccTransLookup() subroutine will return the transaction associated with the given id,...
int xaccTransGetSplitIndex(const Transaction *trans, const Split *split)
Inverse of xaccTransGetSplit()
gboolean xaccTransHasReconciledSplits(const Transaction *trans)
FIXME: document me.
Split * xaccTransGetSplit(const Transaction *trans, int i)
Return a pointer to the indexed split in this transaction's split list.
time64 xaccTransRetDatePosted(const Transaction *trans)
Retrieve the posted date of the transaction.
time64 xaccTransGetVoidTime(const Transaction *tr)
Returns the time that a transaction was voided.
void xaccTransSetDateEnteredSecs(Transaction *trans, time64 time)
Modify the date of when the transaction was entered.
const char * xaccTransGetNotes(const Transaction *trans)
Gets the transaction Notes.
time64 xaccTransGetDateEntered(const Transaction *trans)
Retrieve the date of when the transaction was entered.
void xaccTransUnvoid(Transaction *transaction)
xaccTransUnvoid restores a voided transaction to its original state.
void xaccTransCopyOnto(const Transaction *from_trans, Transaction *to_trans)
Copy a transaction to another using the function below without changing any account information.
int xaccTransOrder_num_action(const Transaction *ta, const char *actna, const Transaction *tb, const char *actnb)
The xaccTransOrder_num_action(ta,actna,tb,actnb) method is useful for sorting.
Transaction * xaccTransClone(const Transaction *t)
The xaccTransClone() method will create a complete copy of an existing transaction.
void xaccTransSetDatePostedSecs(Transaction *trans, time64 time)
The xaccTransSetDatePostedSecs() method will modify the posted date of the transaction,...
void xaccTransSetDocLink(Transaction *trans, const char *doclink)
Sets the transaction Document Link.
gnc_numeric xaccTransGetAccountValue(const Transaction *trans, const Account *account)
The xaccTransGetAccountValue() method returns the total value applied to a particular account.
Transaction * xaccMallocTransaction(QofBook *book)
The xaccMallocTransaction() will malloc memory and initialize it.
void xaccTransSetDatePostedSecsNormalized(Transaction *trans, time64 time)
This function sets the posted date of the transaction, specified by a time64 (see ctime(3)).
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
Set the commodity of this transaction.
void xaccTransScrubGains(Transaction *trans, Account *gain_acc)
The xaccTransScrubGains() routine performs a number of cleanup functions on the indicated transaction...
gnc_numeric xaccTransGetAccountAmount(const Transaction *trans, const Account *account)
Same as xaccTransGetAccountValue, but uses the Account's commodity.
void xaccTransSortSplits(Transaction *trans)
Sorts the splits in a transaction, putting the debits first, followed by the credits.
SplitList * xaccTransGetSplitList(const Transaction *trans)
The xaccTransGetSplitList() method returns a GList of the splits in a transaction.
const char * xaccTransGetNum(const Transaction *trans)
Gets the transaction Number (or ID) field; rather than use this function directly,...
void xaccTransVoid(Transaction *transaction, const char *reason)
xaccTransVoid voids a transaction.
gboolean xaccTransUseTradingAccounts(const Transaction *trans)
Determine whether this transaction should use commodity trading accounts.
int xaccTransCountSplits(const Transaction *trans)
Returns the number of splits in this transaction.
Transaction * xaccTransCloneNoKvp(const Transaction *t)
The xaccTransCloneNoKvp() method will create a complete copy of an existing transaction except that t...
time64 xaccTransRetDateDue(const Transaction *trans)
Dates and txn-type for A/R and A/P "invoice" postings.
void xaccTransRollbackEdit(Transaction *trans)
The xaccTransRollbackEdit() routine rejects all edits made, and sets the transaction back to where it...
void xaccTransRecordPrice(Transaction *trans, PriceSource source)
The xaccTransRecordPrice() method iterates through the splits and and record the non-currency equival...
void xaccTransSetReadOnly(Transaction *trans, const char *reason)
Set the transaction to be ReadOnly by setting a non-NULL value as "reason".
Split * xaccTransGetFirstAPARAcctSplit(const Transaction *trans, gboolean strict)
The xaccTransGetFirstPaymentAcctSplit() method returns a pointer to the first split in this transacti...
void xaccTransSetDateDue(Transaction *trans, time64 time)
Dates and txn-type for A/R and A/P "invoice" postings.
gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans)
Returns TRUE if this Transaction is read-only because its posted-date is older than the "auto-readonl...
GList SplitList
GList of Split.
Definition gnc-engine.h:207
void xaccTransBeginEdit(Transaction *trans)
The xaccTransBeginEdit() method must be called before any changes are made to a transaction or any of...
void xaccTransSetNotes(Transaction *trans, const char *notes)
Sets the transaction Notes.
SplitList * xaccTransGetAPARAcctSplitList(const Transaction *trans, gboolean strict)
The xaccTransGetAPARSplitList() method returns a GList of the splits in a transaction that belong to ...
const char * xaccTransGetReadOnly(Transaction *trans)
Returns a non-NULL value if this Transaction was marked as read-only with some specific "reason" text...
gnc_numeric xaccTransGetAccountBalance(const Transaction *trans, const Account *account)
Get the account balance for the specified account after the last split in the specified transaction.
gnc_numeric xaccTransGetImbalanceValue(const Transaction *trans)
The xaccTransGetImbalanceValue() method returns the total value of the transaction.
time64 xaccTransGetDate(const Transaction *trans)
Retrieve the posted date of the transaction.
gboolean xaccTransEqual(const Transaction *ta, const Transaction *tb, gboolean check_guids, gboolean check_splits, gboolean check_balances, gboolean assume_ordered)
Equality.
PriceSource
Price source enum.
STRUCTS.
The type used to store guids in C.
Definition guid.h:75
QofBook reference.
Definition qofbook-p.hpp:47