26#include "split-register-copy-ops.h"
33 g_return_val_if_fail (fs, NULL);
39 g_return_val_if_fail (fs, NULL);
43Transaction *gnc_float_split_get_transaction (
const FloatingSplit *fs)
45 g_return_val_if_fail (fs, NULL);
46 return fs->m_transaction;
51 g_return_val_if_fail (fs, NULL);
55const char *gnc_float_split_get_action (
const FloatingSplit *fs)
57 g_return_val_if_fail (fs, NULL);
61char gnc_float_split_get_reconcile_state (
const FloatingSplit *fs)
63 g_return_val_if_fail (fs,
'\0');
64 return fs->m_reconcile_state;
69 g_return_val_if_fail (fs, G_MAXINT64);
70 return fs->m_reconcile_date;
73gnc_numeric gnc_float_split_get_amount (
const FloatingSplit *fs)
75 g_return_val_if_fail (fs, gnc_numeric_zero());
79gnc_numeric gnc_float_split_get_value (
const FloatingSplit *fs)
81 g_return_val_if_fail (fs, gnc_numeric_zero());
85gboolean gnc_float_split_get_stock_split (
const FloatingSplit *fs)
87 g_return_val_if_fail (fs, FALSE);
88 return fs->m_stock_split;
93void gnc_float_split_set_split(
FloatingSplit *fs, Split *split)
95 g_return_if_fail (fs);
101 g_return_if_fail (fs);
102 fs->m_account = account;
105void gnc_float_split_set_transaction (
FloatingSplit *fs, Transaction *transaction)
107 g_return_if_fail (fs);
108 fs->m_transaction = transaction;
111void gnc_float_split_set_memo (
FloatingSplit *fs,
const char *memo)
113 g_return_if_fail (fs);
114 CACHE_REPLACE (fs->m_memo, memo);
117void gnc_float_split_set_action (
FloatingSplit *fs,
const char *action)
119 g_return_if_fail (fs);
120 CACHE_REPLACE (fs->m_action, action);
123void gnc_float_split_set_reconcile_state (
FloatingSplit *fs,
char reconcile_state)
125 g_return_if_fail (fs);
126 fs->m_reconcile_state = reconcile_state;
131 g_return_if_fail (fs);
132 fs->m_reconcile_date = reconcile_date;
135void gnc_float_split_set_amount (
FloatingSplit *fs,
const gnc_numeric amount)
137 g_return_if_fail (fs);
138 fs->m_amount = amount;
141void gnc_float_split_set_value (
FloatingSplit *fs,
const gnc_numeric value)
143 g_return_if_fail (fs);
147void gnc_float_split_set_stock_split (
FloatingSplit *fs, gboolean stock_split)
149 g_return_if_fail (fs);
150 fs->m_stock_split = stock_split;
156 g_return_if_fail (ftsd);
158 guid_free (ftsd->m_account_guid);
159 g_free (ftsd->m_credit_numeric);
160 g_free (ftsd->m_debit_numeric);
166gnc_split_to_float_template_sx_data (Split *split)
170 const gchar *cf, *df, *shares;
171 gnc_numeric *cn, *dn;
173 g_return_val_if_fail (split, NULL);
178 ftsd->m_account_guid = guid;
181 ftsd->m_credit_formula = cf;
184 ftsd->m_credit_numeric = cn;
187 ftsd->m_debit_formula = df;
190 ftsd->m_debit_numeric = dn;
193 ftsd->m_shares = shares;
199gnc_split_set_sx_settings (Split *split,
const char *cf, gnc_numeric cn,
200 const char *df, gnc_numeric dn)
209gnc_float_template_sx_data_to_split (
const FloatingSplit *fs, Split *split)
211 g_return_if_fail (fs);
212 g_return_if_fail (split);
216 const gchar *cf =
"", *df =
"";
217 gnc_numeric cn = gnc_numeric_zero(), dn = gnc_numeric_zero();
219 if (ftsd->m_account_guid)
220 qof_instance_set (QOF_INSTANCE (split),
"sx-account", ftsd->m_account_guid, NULL);
222 if (ftsd->m_credit_formula)
223 cf = ftsd->m_credit_formula;
226 cn = *ftsd->m_credit_numeric;
228 if (ftsd->m_debit_formula)
229 df = ftsd->m_debit_formula;
232 dn = *ftsd->m_debit_numeric;
234 gnc_split_set_sx_settings (split, cf, cn, df, dn);
244FloatingSplit *gnc_split_to_float_split (Split *split, gboolean is_template)
248 g_return_val_if_fail (split, NULL);
263 fs->m_template_sx_data = gnc_split_to_float_template_sx_data (split);
265 fs->m_template_sx_data = NULL;
271register_fs_to_template_split (
const FloatingSplit *fs, Split *split)
279 gnc_numeric zero = gnc_numeric_zero ();
284 gnc_split_set_sx_settings (split,
string, abs_diff,
"", zero);
287 gnc_split_set_sx_settings (split,
"", zero,
string, abs_diff);
307 if (ftsd->m_account_guid)
311 return split_account;
323 g_return_if_fail (split);
325 Account *split_account = fs->m_account;
332 if (template_account && fs->m_template_sx_data)
334 split_account = template_account;
335 gnc_float_template_sx_data_to_split (fs, split);
337 else if (template_account && !fs->m_template_sx_data)
339 split_account = template_account;
340 register_fs_to_template_split (fs, split);
342 else if (!template_account && fs->m_template_sx_data)
344 split_account = template_fs_to_register_split (fs, split, split_account);
350 if (fs->m_stock_split)
357 xaccSplitSetAccount (split, split_account);
364 g_return_if_fail (fs);
366 CACHE_REMOVE (fs->m_memo);
367 CACHE_REMOVE (fs->m_action);
369 if (fs->m_template_sx_data)
370 gnc_float_template_sx_data_free (fs->m_template_sx_data);
376Transaction *gnc_float_txn_get_txn (
const FloatingTxn *ft)
378 g_return_val_if_fail (ft, NULL);
382gnc_commodity *gnc_float_txn_get_currency (
const FloatingTxn *ft)
384 g_return_val_if_fail (ft, NULL);
385 return ft->m_currency;
390 g_return_val_if_fail (ft, G_MAXINT64);
391 return ft->m_date_entered;
396 g_return_val_if_fail (ft, G_MAXINT64);
397 return ft->m_date_posted;
400const char *gnc_float_txn_get_num (
const FloatingTxn *ft)
402 g_return_val_if_fail (ft, NULL);
406const char *gnc_float_txn_get_description (
const FloatingTxn *ft)
408 g_return_val_if_fail (ft, NULL);
409 return ft->m_description;
412const char *gnc_float_txn_get_notes (
const FloatingTxn *ft)
414 g_return_val_if_fail (ft, NULL);
418const char *gnc_float_txn_get_doclink (
const FloatingTxn *ft)
420 g_return_val_if_fail (ft, NULL);
421 return ft->m_doclink;
426 g_return_val_if_fail (ft, NULL);
432 g_return_val_if_fail (ft, NULL);
433 g_return_val_if_fail (ft->m_splits, NULL);
434 g_return_val_if_fail (index < g_list_length (ft->m_splits) , NULL);
435 return g_list_nth_data (ft->m_splits, index);
442 g_return_val_if_fail (ft, NULL);
443 g_return_val_if_fail (ft->m_splits, NULL);
444 g_return_val_if_fail (g_list_length (ft->m_splits) == 2 , NULL);
446 if (g_list_nth_data (ft->m_splits, 0) == fs)
449 return g_list_nth_data (ft->m_splits, other);
453void gnc_float_txn_set_txn (
FloatingTxn *ft, Transaction *txn)
455 g_return_if_fail (ft);
459void gnc_float_txn_set_currency (
FloatingTxn *ft, gnc_commodity *currency)
461 g_return_if_fail (ft);
462 ft->m_currency = currency;
467 g_return_if_fail (ft);
468 ft->m_date_entered = date_entered;
473 g_return_if_fail (ft);
474 ft->m_date_posted = date_posted;
477void gnc_float_txn_set_num (
FloatingTxn *ft,
const char *num)
479 g_return_if_fail (ft);
480 CACHE_REPLACE (ft->m_num, num);
483void gnc_float_txn_set_description (
FloatingTxn *ft,
const char *description)
485 g_return_if_fail (ft);
486 CACHE_REPLACE (ft->m_description, description);
489void gnc_float_txn_set_notes (
FloatingTxn *ft,
const char *notes)
491 g_return_if_fail (ft);
492 CACHE_REPLACE (ft->m_notes, notes);
495void gnc_float_txn_set_doclink (
FloatingTxn *ft,
const char *doclink)
497 g_return_if_fail (ft);
498 CACHE_REPLACE (ft->m_doclink, doclink);
503 g_return_if_fail (ft);
504 ft->m_splits = splits;
509 g_return_if_fail (ft);
510 g_return_if_fail (fs);
511 ft->m_splits = g_list_append (ft->m_splits, fs);
516FloatingTxn *gnc_txn_to_float_txn (Transaction *txn, gboolean use_cut_semantics, gboolean is_template)
525 if (use_cut_semantics)
536 Split *split = iter->data;
537 if (split && xaccTransStillHasSplit (txn, split))
539 FloatingSplit *fs = gnc_split_to_float_split (split, is_template);
540 ft->m_splits = g_list_prepend (ft->m_splits, fs);
543 ft->m_splits = g_list_reverse (ft->m_splits);
552 gboolean ftsd_exists = FALSE;
554 g_return_val_if_fail (ft, FALSE);
556 for (iter = ft->m_splits; iter; iter = iter->next)
561 if (fs->m_template_sx_data)
568gnc_float_txn_to_template_txn (
const FloatingTxn *ft, Transaction *txn,
Account *template_account, gboolean do_commit)
572 g_return_if_fail (ft);
573 g_return_if_fail (txn);
580 if (ft->m_description)
588 if (ft->m_date_posted)
596 for (iter = ft->m_splits; iter; iter = iter->next)
604 gnc_float_split_to_split (fs, split, template_account);
606 xaccSplitSetParent (split, txn);
615void gnc_float_txn_to_txn (
const FloatingTxn *ft, Transaction *txn, gboolean do_commit)
617 gnc_float_txn_to_txn_swap_accounts (ft, txn, NULL, NULL, do_commit);
623void gnc_float_txn_to_txn_swap_accounts (
const FloatingTxn *ft, Transaction *txn,
629 g_return_if_fail (ft);
630 g_return_if_fail (txn);
637 if (ft->m_description)
645 if (ft->m_date_posted)
653 for (iter = ft->m_splits; iter; iter = iter->next)
663 old_acc = fs->m_account;
664 if (fs->m_account == acct1)
666 else if (fs->m_account == acct2)
669 new_acc = fs->m_account;
671 fs->m_account = new_acc;
673 gnc_float_split_to_split (fs, split, NULL);
674 fs->m_account = old_acc;
675 xaccSplitSetParent (split, txn);
685 g_return_if_fail (ft);
687 CACHE_REMOVE (ft->m_num);
688 CACHE_REMOVE (ft->m_description);
689 CACHE_REMOVE (ft->m_notes);
690 CACHE_REMOVE (ft->m_doclink);
691 g_list_free_full (ft->m_splits, (GDestroyNotify)gnc_float_split_free);
Anchor Scheduled Transaction info in a book.
utility functions for the GnuCash UI
void xaccAccountCommitEdit(Account *acc)
ThexaccAccountCommitEdit() subroutine is the second phase of a two-phase-commit wrapper for account u...
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)
The xaccAccountLookup() subroutine will return the account associated with the given id,...
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
void xaccTransSetDescription(Transaction *trans, const char *desc)
Sets the transaction Description.
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
Returns the valuation commodity of this transaction.
void xaccTransSetNum(Transaction *trans, const char *xnum)
Sets the transaction Number (or ID) field; rather than use this function directly,...
const char * xaccTransGetDocLink(const Transaction *trans)
Gets the transaction Document Link.
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.
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.
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 xaccTransSetDatePostedSecs(Transaction *trans, time64 secs)
The xaccTransSetDatePostedSecs() method will modify the posted date of the transaction,...
void xaccTransSetDocLink(Transaction *trans, const char *doclink)
Sets the transaction Document Link.
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
Set a new currency on a transaction.
#define xaccTransGetBook(X)
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,...
GList SplitList
GList of Split.
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.
time64 xaccTransGetDate(const Transaction *trans)
Retrieve the posted date of the transaction.
int xaccSPrintAmount(char *bufp, gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
const GncGUID * qof_instance_get_guid(gconstpointer inst)
Return the GncGUID of this instance.
void qof_instance_set(QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_set Group setting multiple parameters in a single begin/commit/rollback.
void qof_instance_get(const QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_get.
gnc_numeric gnc_numeric_abs(gnc_numeric a)
Returns a newly created gnc_numeric that is the absolute value of the given gnc_numeric value.
gboolean gnc_numeric_negative_p(gnc_numeric a)
Returns 1 if a < 0, otherwise returns 0.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value.
Transaction * xaccSplitGetParent(const Split *split)
Returns the parent transaction of the split.
char xaccSplitGetReconcile(const Split *split)
Returns the value of the reconcile flag.
void xaccSplitSetMemo(Split *split, const char *memo)
The memo is an arbitrary string associated with a split.
void xaccSplitSetValue(Split *split, gnc_numeric val)
The xaccSplitSetValue() method sets the value of this split in the transaction's commodity.
Split * xaccMallocSplit(QofBook *book)
Constructor.
void xaccSplitSetAmount(Split *split, gnc_numeric amt)
The xaccSplitSetAmount() method sets the amount in the account's commodity that the split should have...
const char * xaccSplitGetAction(const Split *split)
Returns the action string.
time64 xaccSplitGetDateReconciled(const Split *split)
Retrieve the date when the Split was reconciled.
gnc_numeric xaccSplitGetValue(const Split *split)
Returns the value of this split in the transaction's commodity.
Account * xaccSplitGetAccount(const Split *split)
Returns the account of this split, which was set through xaccAccountInsertSplit().
const char * xaccSplitGetMemo(const Split *split)
Returns the memo string.
void xaccSplitSetAction(Split *split, const char *actn)
The Action is an arbitrary user-assigned string.
gboolean xaccSplitIsStockSplit(Split *s)
Returns true if the split is of type stock split.
gnc_numeric xaccSplitGetAmount(const Split *split)
Returns the amount of the split in the account's commodity.
void xaccSplitMakeStockSplit(Split *s)
Mark a split to be of type stock split - after this, you shouldn't modify the value anymore,...
The type used to store guids in C.