GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 [email protected] *
18  * *
19 \********************************************************************/
86 #ifndef XACC_TRANSACTION_H
87 #define XACC_TRANSACTION_H
88 
89 typedef struct _TransactionClass TransactionClass;
90 
91 #include <time.h>
92 
93 #include "gnc-commodity.h"
94 #include "gnc-engine.h"
95 #include "Split.h"
96 
97 /* --- type macros --- */
98 #define GNC_TYPE_TRANSACTION (gnc_transaction_get_type ())
99 #define GNC_TRANSACTION(o) \
100  (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_TRANSACTION, Transaction))
101 #define GNC_TRANSACTION_CLASS(k) \
102  (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_TRANSACTION, TransactionClass))
103 #define GNC_IS_TRANSACTION(o) \
104  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_TRANSACTION))
105 #define GNC_IS_TRANSACTION_CLASS(k) \
106  (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_TRANSACTION))
107 #define GNC_TRANSACTION_GET_CLASS(o) \
108  (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_TRANSACTION, TransactionClass))
109 GType gnc_transaction_get_type(void);
110 
111 
112 /* FIXME: These macros are not consistent with the type name */
113 #define GNC_IS_TRANS(obj) GNC_IS_TRANSACTION(obj)
114 #define GNC_TRANS(obj) GNC_TRANSACTION(obj)
115 
119 #define TXN_TYPE_NONE '\0'
120 #define TXN_TYPE_INVOICE 'I'
121 #define TXN_TYPE_PAYMENT 'P'
122 #define TXN_TYPE_LINK 'L'
125 /* --------------------------------------------------------------- */
126 /* Transactions */
127 
136 
151 void xaccTransDestroy (Transaction *trans);
152 
158 
164 
188 gboolean xaccTransEqual(const Transaction *ta,
189  const Transaction *tb,
190  gboolean check_guids,
191  gboolean check_splits,
192  gboolean check_balances,
193  gboolean assume_ordered);
194 
198 void xaccTransBeginEdit (Transaction *trans);
199 
205 void xaccTransCommitEdit (Transaction *trans);
206 
212 void xaccTransRollbackEdit (Transaction *trans);
213 
220 gboolean xaccTransIsOpen (const Transaction *trans);
221 
225 /*@ dependent @*//*@ null @*/
226 Transaction * xaccTransLookup (const GncGUID *guid, QofBook *book);
227 #define xaccTransLookupDirect(g,b) xaccTransLookup(&(g),b)
228 
229 /*################## Added for Reg2 #################*/
230 
236 
240 void xaccTransCopyOnto(const Transaction *from_trans, Transaction *to_trans);
241 
259 void xaccTransCopyFromClipBoard(const Transaction *from_trans, Transaction *to_trans,
260  const Account *from_acc, Account *to_acc, gboolean no_date);
261 
262 /*################## Added for Reg2 #################*/
263 
264 
265 Split * xaccTransFindSplitByAccount(const Transaction *trans,
266  const Account *acc);
267 
275 void xaccTransScrubGains (Transaction *trans, Account *gain_acc);
276 
277 
283 
293 gboolean xaccTransUseTradingAccounts(const Transaction *trans);
294 
298 void xaccTransSortSplits (Transaction *trans);
299 
303 void xaccTransSetTxnType (Transaction *trans, char type);
307 char xaccTransGetTxnType (const Transaction *trans);
308 
314 void xaccTransSetNum (Transaction *trans, const char *num);
315 
317 void xaccTransSetDescription (Transaction *trans, const char *desc);
318 
320 void xaccTransSetAssociation (Transaction *trans, const char *assoc);
321 
325 void xaccTransSetNotes (Transaction *trans, const char *notes);
326 
332 const char * xaccTransGetNum (const Transaction *trans);
334 const char * xaccTransGetDescription (const Transaction *trans);
336 const char * xaccTransGetAssociation(const Transaction *trans);
340 const char * xaccTransGetNotes (const Transaction *trans);
341 
342 
344 void xaccTransSetIsClosingTxn (Transaction *trans, gboolean is_closing);
345 
347 gboolean xaccTransGetIsClosingTxn (const Transaction *trans);
348 
349 
357 #define xaccTransAppendSplit(t, s) xaccSplitSetParent((s), (t))
358 
366 Split * xaccTransGetSplit (const Transaction *trans, int i);
367 
369 int xaccTransGetSplitIndex(const Transaction *trans, const Split *split);
370 
375 /*@ dependent @*/
377 gboolean xaccTransStillHasSplit(const Transaction *trans, const Split *s);
378 
384 void xaccTransSetReadOnly (Transaction *trans, const char *reason);
385 void xaccTransClearReadOnly (Transaction *trans);
386 
389 const char * xaccTransGetReadOnly (const Transaction *trans);
390 
394 gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans);
395 
396 /*################## Added for Reg2 #################*/
397 
399 gboolean xaccTransInFutureByPostedDate (const Transaction *trans);
400 
401 /*################## Added for Reg2 #################*/
402 
404 int xaccTransCountSplits (const Transaction *trans);
405 
407 gboolean xaccTransHasReconciledSplits (const Transaction *trans);
410  const Account *account);
411 
413 gboolean xaccTransHasSplitsInState (const Transaction *trans, const char state);
415 gboolean xaccTransHasSplitsInStateByAccount (const Transaction *trans,
416  const char state,
417  const Account *account);
418 
419 
427 /*@ dependent @*/
429 
431 void xaccTransSetCurrency (Transaction *trans, gnc_commodity *curr);
432 
449 
456 MonetaryList *xaccTransGetImbalance (const Transaction * trans);
457 
460 gboolean xaccTransIsBalanced(const Transaction * trans);
461 
469  const Account *account);
470 
473  const Account *account);
474 
475 /*################## Added for Reg2 #################*/
476 /* Gets the amt/val rate, i.e. rate from the transaction currency to
477  the 'split_com' */
478 gboolean
479 xaccTransGetRateForCommodity(const Transaction *trans,
480  const gnc_commodity *split_com,
481  const Split *split_to_exclude, gnc_numeric *rate);
482 /*################## Added for Reg2 #################*/
483 
484 /* Compute the conversion rate for the transaction to this account.
485  * Any "split value" (which is in the transaction currency),
486  * multiplied by this conversion rate, will give you the value you
487  * should display for this account.
488  *
489  * If 'acc' is NULL, return unity.
490  */
491 gnc_numeric xaccTransGetAccountConvRate(const Transaction *txn, const Account *acc);
492 
496  const Account *account);
497 
516 int xaccTransOrder (const Transaction *ta, const Transaction *tb);
517 
518 
538 int xaccTransOrder_num_action (const Transaction *ta, const char *actna,
539  const Transaction *tb, const char *actnb);
540 
557 void xaccTransSetDate (Transaction *trans,
558  int day, int mon, int year);
559 
567 void xaccTransSetDatePostedGDate (Transaction *trans, GDate date);
568 
578 void xaccTransSetDatePostedSecs (Transaction *trans, time64 time);
579 
590 
594  const Timespec *ts);
595 
602  const Timespec *ts);
603 
605 void xaccTransSetDateDueTS (Transaction *trans, const Timespec *ts);
606 
611 time64 xaccTransGetDate (const Transaction *trans);
616 void xaccTransGetDatePostedTS (const Transaction *trans, Timespec *ts);
624 GDate xaccTransGetDatePostedGDate (const Transaction *trans);
625 
626 /*################## Added for Reg2 #################*/
630 /*################## Added for Reg2 #################*/
633 void xaccTransGetDateEnteredTS (const Transaction *trans, Timespec *ts);
637 
641 void xaccTransGetDateDueTS (const Transaction *trans, Timespec *ts);
646 /********************************************************************\
647  * Miscellaneous utility routines.
648 \********************************************************************/
649 
650 
663 void xaccTransVoid(Transaction *transaction,
664  const char *reason);
665 
673 void xaccTransUnvoid(Transaction *transaction);
674 
687 
696 
704 gboolean xaccTransGetVoidStatus(const Transaction *transaction);
705 
713 const char *xaccTransGetVoidReason(const Transaction *transaction);
714 
728 #define TRANS_KVP "kvp"
729 #define TRANS_NUM "num"
730 #define TRANS_DESCRIPTION "desc"
731 #define TRANS_DATE_ENTERED "date-entered"
732 #define TRANS_DATE_POSTED "date-posted"
733 #define TRANS_DATE_DUE "date-due"
734 #define TRANS_IMBALANCE "trans-imbalance"
735 #define TRANS_IS_BALANCED "trans-balanced?"
736 #define TRANS_IS_CLOSING "trans-is-closing?"
737 #define TRANS_NOTES "notes"
738 #define TRANS_ASSOCIATION "assoc"
739 #define TRANS_TYPE "type"
740 #define TRANS_VOID_STATUS "void-p"
741 #define TRANS_VOID_REASON "void-reason"
742 #define TRANS_VOID_TIME "void-time"
743 #define TRANS_SPLITLIST "split-list" /* for guid_match_all */
744 
746 #ifdef DUMP_FUNCTIONS
747 void xaccTransDump (const Transaction *trans, const char *tag);
748 #endif
749 
750 #define RECONCILED_MATCH_TYPE "reconciled-match"
751 
753 #define xaccTransGetBook(X) qof_instance_get_book (QOF_INSTANCE(X))
754 
755 #define xaccTransGetGUID(X) qof_entity_get_guid(QOF_INSTANCE(X))
756 
757 #define xaccTransReturnGUID(X) (X ? *(qof_entity_get_guid(QOF_INSTANCE(X))) : *(guid_null()))
758 
759 #endif /* XACC_TRANSACTION_H */
760 
gboolean xaccTransHasReconciledSplits(const Transaction *trans)
Definition: Transaction.c:2433
Transaction * xaccMallocTransaction(QofBook *book)
Definition: Transaction.c:513
void xaccTransSetDatePostedSecsNormalized(Transaction *trans, time64 time)
Definition: Transaction.c:1920
char xaccTransGetTxnType(const Transaction *trans)
Definition: Transaction.c:2302
void xaccTransGetDateDueTS(const Transaction *trans, Timespec *ts)
Definition: Transaction.c:2280
gboolean xaccTransHasSplitsInStateByAccount(const Transaction *trans, const char state, const Account *account)
Definition: Transaction.c:2440
Split * xaccTransGetSplit(const Transaction *trans, int i)
Definition: Transaction.c:2144
time64 xaccTransGetDate(const Transaction *trans)
Definition: Transaction.c:2215
gboolean xaccTransUseTradingAccounts(const Transaction *trans)
Definition: Transaction.c:1015
gboolean xaccTransIsReadonlyByPostedDate(const Transaction *trans)
Definition: Transaction.c:2345
gboolean xaccTransIsOpen(const Transaction *trans)
Definition: Transaction.c:1819
gnc_numeric xaccTransGetAccountBalance(const Transaction *trans, const Account *account)
Definition: Transaction.c:1310
const char * xaccTransGetAssociation(const Transaction *trans)
Definition: Transaction.c:2190
void xaccTransSetNotes(Transaction *trans, const char *notes)
Definition: Transaction.c:2115
const char * xaccTransGetVoidReason(const Transaction *transaction)
Definition: Transaction.c:2533
void xaccTransGetDateEnteredTS(const Transaction *trans, Timespec *ts)
Definition: Transaction.c:2236
void xaccTransSetDescription(Transaction *trans, const char *desc)
Definition: Transaction.c:2085
void xaccTransSetNum(Transaction *trans, const char *num)
Definition: Transaction.c:2065
Use a 64-bit unsigned int timespec.
Definition: gnc-date.h:299
void xaccTransCopyOnto(const Transaction *from_trans, Transaction *to_trans)
Definition: Transaction.c:718
API for Transactions and Splits (journal entries)
gboolean xaccTransIsBalanced(const Transaction *trans)
Definition: Transaction.c:1124
const char * xaccTransGetNum(const Transaction *trans)
Definition: Transaction.c:2178
int xaccTransOrder_num_action(const Transaction *ta, const char *actna, const Transaction *tb, const char *actnb)
Definition: Transaction.c:1833
void xaccTransSetDatePostedGDate(Transaction *trans, GDate date)
Definition: Transaction.c:1928
void xaccTransSetDateEnteredTS(Transaction *trans, const Timespec *ts)
Definition: Transaction.c:1988
Definition: guid.h:65
gboolean xaccTransHasReconciledSplitsByAccount(const Transaction *trans, const Account *account)
Definition: Transaction.c:2404
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
Definition: Transaction.c:1354
void xaccTransDestroy(Transaction *trans)
Definition: Transaction.c:1402
const char * xaccTransGetNotes(const Transaction *trans)
Definition: Transaction.c:2197
Transaction * xaccTransLookup(const GncGUID *guid, QofBook *book)
Definition: Transaction.c:1024
void xaccTransSetIsClosingTxn(Transaction *trans, gboolean is_closing)
Definition: Transaction.c:2126
int xaccTransCountSplits(const Transaction *trans)
Definition: Transaction.c:2170
void xaccTransSetTxnType(Transaction *trans, char type)
Definition: Transaction.c:2016
GList SplitList
Definition: gnc-engine.h:203
gboolean xaccTransHasSplitsInState(const Transaction *trans, const char state)
Definition: Transaction.c:2463
void xaccTransSetAssociation(Transaction *trans, const char *assoc)
Definition: Transaction.c:2096
gboolean xaccTransEqual(const Transaction *ta, const Transaction *tb, gboolean check_guids, gboolean check_splits, gboolean check_balances, gboolean assume_ordered)
Definition: Transaction.c:857
gnc_numeric xaccTransGetImbalanceValue(const Transaction *trans)
Definition: Transaction.c:1036
void xaccTransSetReadOnly(Transaction *trans, const char *reason)
Definition: Transaction.c:2039
void xaccTransVoid(Transaction *transaction, const char *reason)
Definition: Transaction.c:2495
Transaction * xaccTransClone(const Transaction *t)
Definition: Transaction.c:679
Timespec xaccTransRetDateEnteredTS(const Transaction *trans)
Definition: Transaction.c:2273
void xaccTransCopyFromClipBoard(const Transaction *from_trans, Transaction *to_trans, const Account *from_acc, Account *to_acc, gboolean no_date)
Definition: Transaction.c:742
void xaccTransScrubGains(Transaction *trans, Account *gain_acc)
Definition: Transaction.c:2678
Transaction * xaccTransCloneNoKvp(const Transaction *t)
Definition: Transaction.c:642
gboolean xaccTransInFutureByPostedDate(const Transaction *trans)
Definition: Transaction.c:2385
Timespec xaccTransRetDateDueTS(const Transaction *trans)
Definition: Transaction.c:2294
const char * xaccTransGetDescription(const Transaction *trans)
Definition: Transaction.c:2184
void xaccTransSetDate(Transaction *trans, int day, int mon, int year)
Definition: Transaction.c:1995
void xaccTransCommitEdit(Transaction *trans)
Definition: Transaction.c:1579
void xaccTransBeginEdit(Transaction *trans)
Definition: Transaction.c:1380
const char * xaccTransGetReadOnly(const Transaction *trans)
Definition: Transaction.c:2313
int xaccTransGetSplitIndex(const Transaction *trans, const Split *split)
Definition: Transaction.c:2154
void xaccTransUnvoid(Transaction *transaction)
Definition: Transaction.c:2552
All type declarations for the whole Gnucash engine.
time64 xaccTransGetDateEntered(const Transaction *trans)
Definition: Transaction.c:2222
Transaction * xaccTransReverse(Transaction *transaction)
Definition: Transaction.c:2579
guint gnc_book_count_transactions(QofBook *book)
Definition: Transaction.c:2483
void xaccTransSetDatePostedSecs(Transaction *trans, time64 time)
Definition: Transaction.c:1911
gboolean xaccTransGetVoidStatus(const Transaction *transaction)
Definition: Transaction.c:2526
Definition: SplitP.h:71
Timespec xaccTransGetVoidTime(const Transaction *tr)
Definition: Transaction.c:2540
gboolean xaccTransGetIsClosingTxn(const Transaction *trans)
Definition: Transaction.c:2204
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
Definition: Transaction.c:1348
MonetaryList * xaccTransGetImbalance(const Transaction *trans)
Definition: Transaction.c:1052
void xaccTransSetDateDueTS(Transaction *trans, const Timespec *ts)
Definition: Transaction.c:2006
Transaction * xaccTransGetReversedBy(const Transaction *trans)
Definition: Transaction.c:2606
Timespec xaccTransRetDatePostedTS(const Transaction *trans)
Definition: Transaction.c:2243
int xaccTransOrder(const Transaction *ta, const Transaction *tb)
Definition: Transaction.c:1827
gint64 time64
Definition: gnc-date.h:83
void xaccTransSetDateEnteredSecs(Transaction *trans, time64 time)
Definition: Transaction.c:1951
void xaccTransSortSplits(Transaction *trans)
Definition: Transaction.c:564
GDate xaccTransGetDatePostedGDate(const Transaction *trans)
Definition: Transaction.c:2250
SplitList * xaccTransGetSplitList(const Transaction *trans)
Definition: Transaction.c:2164
Commodity handling public routines.
void xaccTransRollbackEdit(Transaction *trans)
Definition: Transaction.c:1661
Transaction * xaccTransCopyToClipBoard(const Transaction *from_trans)
Definition: Transaction.c:702
void xaccTransGetDatePostedTS(const Transaction *trans, Timespec *ts)
Definition: Transaction.c:2229
gnc_numeric xaccTransGetAccountAmount(const Transaction *trans, const Account *account)
Definition: Transaction.c:1186
gnc_numeric xaccTransGetAccountValue(const Transaction *trans, const Account *account)
Definition: Transaction.c:1170
void xaccTransSetDatePostedTS(Transaction *trans, const Timespec *ts)
Definition: Transaction.c:1970