[Gnucash-changes] r13916 - gnucash/trunk/src - Hide the
Transaction's management of the "reverse-by" KVP inside the engine.
Chris Shoemaker
chris at cvs.gnucash.org
Wed May 3 20:06:59 EDT 2006
Author: chris
Date: 2006-05-03 20:06:58 -0400 (Wed, 03 May 2006)
New Revision: 13916
Trac: http://svn.gnucash.org/trac/changeset/13916
Modified:
gnucash/trunk/src/engine/Transaction.c
gnucash/trunk/src/engine/Transaction.h
gnucash/trunk/src/gnome/gnc-plugin-page-register.c
gnucash/trunk/src/gnome/gnc-split-reg.c
Log:
Hide the Transaction's management of the "reverse-by" KVP inside the engine.
Add new function xaccTransGetReversedBy() to find the reversing transaction
if there is one.
This also ensures that the KVP changes are inside a Begin/Commit block.
Modified: gnucash/trunk/src/engine/Transaction.c
===================================================================
--- gnucash/trunk/src/engine/Transaction.c 2006-05-03 20:46:53 UTC (rev 13915)
+++ gnucash/trunk/src/engine/Transaction.c 2006-05-04 00:06:58 UTC (rev 13916)
@@ -169,6 +169,7 @@
#define TRANS_DATE_DUE_KVP "trans-date-due"
#define TRANS_TXN_TYPE_KVP "trans-txn-type"
#define TRANS_READ_ONLY_REASON "trans-read-only"
+#define TRANS_REVERSED_BY "reversed-by"
#define ISO_DATELENGTH 32 /* length of an iso 8601 date string. */
@@ -1797,11 +1798,14 @@
xaccTransCommitEdit(trans);
}
-void
-xaccTransReverse (Transaction *trans)
+Transaction *
+xaccTransReverse (Transaction *orig)
{
- g_return_if_fail(trans);
+ Transaction *trans;
+ kvp_value *kvp_val;
+ g_return_val_if_fail(orig, NULL);
+ trans = xaccTransClone(orig);
xaccTransBeginEdit(trans);
/* Reverse the values on each split. Clear per-split info. */
@@ -1812,9 +1816,24 @@
qof_instance_set_dirty(QOF_INSTANCE(trans));
});
+ /* Now update the original with a pointer to the new one */
+ kvp_val = kvp_value_new_guid(xaccTransGetGUID(trans));
+ kvp_frame_set_slot_nc(orig->inst.kvp_data, TRANS_REVERSED_BY, kvp_val);
+
xaccTransCommitEdit(trans);
+ return trans;
}
+Transaction *
+xaccTransGetReversedBy(const Transaction *trans)
+{
+ GUID *guid;
+
+ g_return_val_if_fail(trans, NULL);
+ guid = kvp_frame_get_guid(trans->inst.kvp_data, TRANS_REVERSED_BY);
+ return xaccTransLookup(guid, trans->inst.book);
+}
+
void
xaccTransScrubSplits (Transaction *trans)
{
Modified: gnucash/trunk/src/engine/Transaction.h
===================================================================
--- gnucash/trunk/src/engine/Transaction.h 2006-05-03 20:46:53 UTC (rev 13915)
+++ gnucash/trunk/src/engine/Transaction.h 2006-05-04 00:06:58 UTC (rev 13916)
@@ -478,17 +478,28 @@
*/
void xaccTransUnvoid(Transaction *transaction);
-/** xaccTransReverse inverts all the numerical values on the given
- * transaction. This function can be used after xaccTransClone
- * to create a transaction that cancels out the effect of an
- * earlier transaction. This will be needed by write only accounts
- * as a way to void a previous transaction (since you can't alter
- * the existing transaction).
+/** xaccTransReverse creates a Transaction that reverses the given
+ * tranaction by inverting all the numerical values in the given
+ * transaction. This function cancels out the effect of an earlier
+ * transaction. This will be needed by write only accounts as a way
+ * to void a previous transaction (since you can't alter the existing
+ * transaction).
*
- * @param transaction The transaction to reverse.
+ * @param transaction The transaction to create a reverse of.
+ *
+ * @return a new transaction which reverses the given transaction
*/
-void xaccTransReverse(Transaction *transaction);
+Transaction * xaccTransReverse(Transaction *transaction);
+/** Returns the transaction that reversed the given transaction.
+ *
+ * @param trans a Transaction that has been reversed
+ *
+ * @param the transaction that reversed the given transaction, or
+ * NULL if the given transaction has not been reversed.
+ */
+Transaction * xaccTransGetReversedBy(const Transaction *trans);
+
/** Retrieve information on whether or not a transaction has been voided.
*
* @param transaction The transaction in question.
Modified: gnucash/trunk/src/gnome/gnc-plugin-page-register.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-register.c 2006-05-03 20:46:53 UTC (rev 13915)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-register.c 2006-05-04 00:06:58 UTC (rev 13916)
@@ -2030,10 +2030,7 @@
SplitRegister *reg;
GNCSplitReg *gsr;
Transaction *trans, *new_trans;
- kvp_frame *txn_frame;
- kvp_value *kvp_val;
-
ENTER("(action %p, page %p)", action, page);
g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(page));
@@ -2044,28 +2041,19 @@
if (trans == NULL)
return;
- txn_frame = xaccTransGetSlots( trans );
- if ( txn_frame != NULL ) {
- kvp_val = kvp_frame_get_slot( txn_frame, "reversed-by" );
- if ( kvp_val ) {
- // GUID *fromSXId = kvp_value_get_guid( kvp_val );
- GtkWidget *win = GTK_WIDGET(gnc_window_get_gtk_window(GNC_WINDOW(GNC_PLUGIN_PAGE(page)->window)));
- gnc_error_dialog(win, _("A reversing entry has already been created for this transaction."));
+ if (xaccTransGetReversedBy(trans)) {
+ gnc_error_dialog(gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(page)),
+ _("A reversing entry has already been created for this transaction."));
return;
- }
}
qof_event_suspend();
- new_trans = xaccTransClone(trans);
- xaccTransReverse(new_trans);
+ new_trans = xaccTransReverse(trans);
/* Clear transaction level info */
xaccTransSetDatePostedSecs(new_trans, time(NULL));
xaccTransSetDateEnteredSecs(new_trans, time(NULL));
- /* Now update the original with a pointer to the new one */
- kvp_val = kvp_value_new_guid (xaccTransGetGUID(new_trans));
- kvp_frame_set_slot_nc(txn_frame, "reversed-by", kvp_val);
qof_event_resume();
/* Now jump to new trans */
Modified: gnucash/trunk/src/gnome/gnc-split-reg.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-split-reg.c 2006-05-03 20:46:53 UTC (rev 13915)
+++ gnucash/trunk/src/gnome/gnc-split-reg.c 2006-05-04 00:06:58 UTC (rev 13916)
@@ -899,36 +899,24 @@
{
SplitRegister *reg;
Transaction *trans, *new_trans;
- kvp_frame *txn_frame;
- kvp_value *kvp_val;
reg = gnc_ledger_display_get_split_register( gsr->ledger );
trans = gnc_split_register_get_current_trans (reg);
if (trans == NULL)
return;
- txn_frame = xaccTransGetSlots( trans );
- if ( txn_frame != NULL ) {
- kvp_val = kvp_frame_get_slot( txn_frame, "reversed-by" );
- if ( kvp_val ) {
- // GUID *fromSXId = kvp_value_get_guid( kvp_val );
+ if (xaccTransGetReversedBy(trans)) {
gnc_error_dialog(gsr->window,
- _("A reversing entry has already been created for this transaction."));
+ _("A reversing entry has already been created for this transaction."));
return;
- }
}
+
+ new_trans = xaccTransReverse(trans);
- new_trans = xaccTransClone(trans);
- xaccTransReverse(new_trans);
-
/* Clear transaction level info */
xaccTransSetDatePostedSecs(new_trans, time(NULL));
xaccTransSetDateEnteredSecs(new_trans, time(NULL));
- /* Now update the original with a pointer to the new one */
- kvp_val = kvp_value_new_guid (xaccTransGetGUID(new_trans));
- kvp_frame_set_slot_nc(txn_frame, "reversed-by", kvp_val);
-
/* Now jump to new trans */
gnc_split_reg_jump_to_split(gsr, xaccTransGetSplit(new_trans, 0));
}
More information about the gnucash-changes
mailing list