GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Split.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 \********************************************************************/
34 #ifndef XACC_SPLIT_H
35 #define XACC_SPLIT_H
36 
37 typedef struct _SplitClass SplitClass;
38 
39 #include <time.h>
40 
41 #include "gnc-commodity.h"
42 #include "gnc-engine.h"
43 
44 /* --- type macros --- */
45 #define GNC_TYPE_SPLIT (gnc_split_get_type ())
46 #define GNC_SPLIT(o) \
47  (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SPLIT, Split))
48 #define GNC_SPLIT_CLASS(k) \
49  (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_SPLIT, SplitClass))
50 #define GNC_IS_SPLIT(o) \
51  (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SPLIT))
52 #define GNC_IS_SPLIT_CLASS(k) \
53  (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_SPLIT))
54 #define GNC_SPLIT_GET_CLASS(o) \
55  (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_SPLIT, SplitClass))
56 GType gnc_split_get_type(void);
57 
58 
67 #define CREC 'c'
68 #define YREC 'y'
69 #define FREC 'f'
70 #define NREC 'n'
71 #define VREC 'v'
74 /* Convert the amount/value of the Split for viewing in the account --
75  * in particular we want to convert the Split to be in to_commodity.
76  * Returns the amount.
77  */
78 gnc_numeric xaccSplitConvertAmount (const Split *split, const Account * account);
79 
80 /*-----------------------------------------------------------------------
81  * Splits
82  *-----------------------------------------------------------------------*/
83 
89 Split * xaccMallocSplit (QofBook *book);
90 
91 /* Reinit a previously malloc'd split. Split remains in the book it
92  was already in, and the QofInstance portions also remain unchanged.
93  It's basically the data elements that are reverted to default
94  values. */
95 void xaccSplitReinit(Split * split);
96 
114 gboolean xaccSplitDestroy (Split *split);
115 
116 /*################## Added for Reg2 #################*/
124 void xaccSplitCopyOnto(const Split *from_split, Split *to_split);
125 /*################## Added for Reg2 #################*/
126 
129 QofBook * xaccSplitGetBook (const Split *split);
130 
133 Account * xaccSplitGetAccount (const Split *split);
134 void xaccSplitSetAccount (Split *s, Account *acc);
135 
137 Transaction * xaccSplitGetParent (const Split *split);
138 void xaccSplitSetParent (Split *split, Transaction *trans);
139 
142 GNCLot * xaccSplitGetLot (const Split *split);
143 
145 void xaccSplitSetLot(Split* split, GNCLot* lot);
146 
151 void xaccSplitSetMemo (Split *split, const char *memo);
152 
154 const char * xaccSplitGetMemo (const Split *split);
155 
166 void xaccSplitSetAction (Split *split, const char *action);
167 
173 const char * xaccSplitGetAction (const Split *split);
182 void xaccSplitSetReconcile (Split *split, char reconciled_flag);
184 char xaccSplitGetReconcile (const Split *split);
185 
188 void xaccSplitSetDateReconciledSecs (Split *split, time64 time);
191 void xaccSplitSetDateReconciledTS (Split *split, Timespec *ts);
194 void xaccSplitGetDateReconciledTS (const Split *split,
195  Timespec *ts);
198 
199 /*################## Added for Reg2 #################*/
202 /*################## Added for Reg2 #################*/
203 
233 void xaccSplitSetAmount (Split *split, gnc_numeric amount);
234 
239 gnc_numeric xaccSplitGetAmount (const Split * split);
240 
247 void xaccSplitSetValue (Split *split, gnc_numeric value);
248 
253 gnc_numeric xaccSplitGetValue (const Split * split);
254 
261  gnc_numeric price,
262  gnc_numeric amount);
263 
268 
282 void xaccSplitSetBaseValue (Split *split, gnc_numeric value,
283  const gnc_commodity * base_currency);
284 
292  const gnc_commodity * base_currency);
293 
301 gnc_numeric xaccSplitGetBalance (const Split *split);
302 
311 
320 
344 gboolean xaccSplitEqual(const Split *sa, const Split *sb,
345  gboolean check_guids,
346  gboolean check_balances,
347  gboolean check_txn_splits);
348 
352 Split * xaccSplitLookup (const GncGUID *guid, QofBook *book);
353 #define xaccSplitLookupDirect(g,b) xaccSplitLookup(&(g),b)
354 
355 /*################## Added for Reg2 #################*/
356 /* Get a GList of unique transactions containing the given list of Splits. */
357 GList *xaccSplitListGetUniqueTransactions(const GList *splits);
358 /*################## Added for Reg2 #################*/
359 
365 Split * xaccSplitGetOtherSplit (const Split *split);
366 
375 const char *xaccSplitGetType(const Split *s);
376 
380 
393 gint xaccSplitOrder (const Split *sa, const Split *sb);
394 gint xaccSplitOrderDateOnly (const Split *sa, const Split *sb);
395 
396 
397 /*
398  * These functions compare two splits by different criteria.
399  *
400  * These functions were added because converting strings to guile
401  * for comparisons in the transaction report is terribly inefficient.
402  * More may be added here in future if it turns out that other types
403  * of comparisons also induces guile slowdowns.
404  */
405 
408 int xaccSplitCompareAccountFullNames(const Split *sa, const Split *sb);
411 int xaccSplitCompareAccountCodes(const Split *sa, const Split *sb);
415 int xaccSplitCompareOtherAccountFullNames(const Split *sa, const Split *sb);
419 int xaccSplitCompareOtherAccountCodes(const Split *sa, const Split *sb);
420 
421 
432 char * xaccSplitGetCorrAccountFullName(const Split *sa);
434 const char * xaccSplitGetCorrAccountName(const Split *sa);
436 const char * xaccSplitGetCorrAccountCode(const Split *sa);
437 
438 #ifdef DUMP_FUNCTIONS
439 void xaccSplitDump (const Split *split, const char *tag);
440 #endif
441 
452 void xaccSplitSetSharePrice (Split *split, gnc_numeric price);
453 
457 /********************************************************************\
458  * Miscellaneous utility routines.
459 \********************************************************************/
460 
461 
474 
483 
495 #define SPLIT_KVP "kvp"
496 
497 #define SPLIT_DATE_RECONCILED "date-reconciled"
498 #define SPLIT_BALANCE "balance"
499 #define SPLIT_CLEARED_BALANCE "cleared-balance"
500 #define SPLIT_RECONCILED_BALANCE "reconciled-balance"
501 #define SPLIT_MEMO "memo"
502 #define SPLIT_ACTION "action"
503 #define SPLIT_RECONCILE "reconcile-flag"
504 #define SPLIT_AMOUNT "amount"
505 #define SPLIT_SHARE_PRICE "share-price"
506 #define SPLIT_VALUE "value"
507 #define SPLIT_TYPE "type"
508 #define SPLIT_VOIDED_AMOUNT "voided-amount"
509 #define SPLIT_VOIDED_VALUE "voided-value"
510 #define SPLIT_LOT "lot"
511 #define SPLIT_TRANS "trans"
512 #define SPLIT_ACCOUNT "account"
513 #define SPLIT_ACCOUNT_GUID "account-guid"
514 /* used for SORTING ONLY */
515 #define SPLIT_ACCT_FULLNAME "acct-fullname"
516 #define SPLIT_CORR_ACCT_NAME "corr-acct-fullname"
517 #define SPLIT_CORR_ACCT_CODE "corr-acct-code"
518 
521 #define xaccSplitGetGUID(X) qof_entity_get_guid(QOF_INSTANCE(X))
522 
523 #define xaccSplitReturnGUID(X) (X ? *(qof_entity_get_guid(QOF_INSTANCE(X))) : *(guid_null()))
524 
525 #endif /* XACC_SPLIT_H */
526 
void xaccSplitSetValue(Split *split, gnc_numeric value)
Definition: Split.c:1294
gnc_numeric xaccSplitGetClearedBalance(const Split *split)
Definition: Split.c:1329
gint xaccSplitOrder(const Split *sa, const Split *sb)
Definition: Split.c:1521
void xaccSplitSetBaseValue(Split *split, gnc_numeric value, const gnc_commodity *base_currency)
Definition: Split.c:1341
void xaccSplitSetAction(Split *split, const char *action)
Definition: Split.c:1793
void xaccSplitMakeStockSplit(Split *s)
Definition: Split.c:2060
int xaccSplitCompareAccountCodes(const Split *sa, const Split *sb)
Definition: Split.c:1719
gnc_numeric xaccSplitGetReconciledBalance(const Split *split)
Definition: Split.c:1335
gboolean xaccSplitDestroy(Split *split)
Definition: Split.c:1492
Timespec xaccSplitRetDateReconciledTS(const Split *split)
Definition: Split.c:1884
void xaccSplitCopyOnto(const Split *from_split, Split *to_split)
Definition: Split.c:686
char xaccSplitGetReconcile(const Split *split)
Definition: Split.c:1980
Use a 64-bit unsigned int timespec.
Definition: gnc-date.h:299
void xaccSplitSetReconcile(Split *split, char reconciled_flag)
Definition: Split.c:1826
Transaction * xaccSplitGetParent(const Split *split)
Definition: Split.c:1903
int xaccSplitCompareOtherAccountFullNames(const Split *sa, const Split *sb)
Definition: Split.c:1733
QofBook * xaccSplitGetBook(const Split *split)
Definition: Split.c:2042
gnc_numeric xaccSplitGetBalance(const Split *split)
Definition: Split.c:1323
void xaccSplitGetDateReconciledTS(const Split *split, Timespec *ts)
Definition: Split.c:1877
Definition: guid.h:65
int xaccSplitCompareAccountFullNames(const Split *sa, const Split *sb)
Definition: Split.c:1698
gboolean xaccSplitEqual(const Split *sa, const Split *sb, gboolean check_guids, gboolean check_balances, gboolean check_txn_splits)
Definition: Split.c:815
gnc_numeric xaccSplitVoidFormerAmount(const Split *split)
Definition: Split.c:2144
Split * xaccSplitLookup(const GncGUID *guid, QofBook *book)
Definition: Split.c:1104
void xaccSplitSetAmount(Split *split, gnc_numeric amount)
Definition: Split.c:1258
gnc_numeric xaccSplitVoidFormerValue(const Split *split)
Definition: Split.c:2151
void xaccSplitSetMemo(Split *split, const char *memo)
Definition: Split.c:1774
int xaccSplitCompareOtherAccountCodes(const Split *sa, const Split *sb)
Definition: Split.c:1754
void xaccSplitSetSharePriceAndAmount(Split *split, gnc_numeric price, gnc_numeric amount)
Definition: Split.c:1196
char * xaccSplitGetCorrAccountFullName(const Split *sa)
Definition: Split.c:1664
gnc_numeric xaccSplitGetSharePrice(const Split *split)
Definition: Split.c:1999
All type declarations for the whole Gnucash engine.
gnc_numeric xaccSplitGetBaseValue(const Split *split, const gnc_commodity *base_currency)
Definition: Split.c:1396
Split * xaccMallocSplit(QofBook *book)
Definition: Split.c:582
const char * xaccSplitGetCorrAccountName(const Split *sa)
Definition: Split.c:1647
void xaccSplitSetLot(Split *split, GNCLot *lot)
Definition: Split.c:1959
void xaccSplitSetDateReconciledSecs(Split *split, time64 time)
Definition: Split.c:1852
time64 xaccSplitGetDateReconciled(const Split *split)
Definition: Split.c:1892
Definition: SplitP.h:71
gnc_numeric xaccSplitGetValue(const Split *split)
Definition: Split.c:1993
Account * xaccSplitGetAccount(const Split *split)
Definition: Split.c:968
const char * xaccSplitGetCorrAccountCode(const Split *sa)
Definition: Split.c:1680
Split * xaccSplitGetOtherSplit(const Split *split)
Definition: Split.c:2086
void xaccSplitSetDateReconciledTS(Split *split, Timespec *ts)
Definition: Split.c:1865
void xaccSplitSetSharePrice(Split *split, gnc_numeric price)
Definition: Split.c:1224
const char * xaccSplitGetMemo(const Split *split)
Definition: Split.c:1968
const char * xaccSplitGetAction(const Split *split)
Definition: Split.c:1974
gint64 time64
Definition: gnc-date.h:83
const char * xaccSplitGetType(const Split *s)
Definition: Split.c:2048
Commodity handling public routines.
GNCLot * xaccSplitGetLot(const Split *split)
Definition: Split.c:1953
gnc_numeric xaccSplitGetAmount(const Split *split)
Definition: Split.c:1987