Convert all Transaction KVP operations to use qof_instance_foo_kvp.

This commit is contained in:
John Ralls 2015-05-08 13:33:40 -07:00
parent 542557724c
commit eccdfd0aa3

View File

@ -312,7 +312,6 @@ gnc_transaction_get_property(GObject* object,
GParamSpec* pspec)
{
Transaction* tx;
KvpFrame *frame;
gchar *key;
GValue *temp;
@ -361,7 +360,6 @@ gnc_transaction_set_property(GObject* object,
GParamSpec* pspec)
{
Transaction* tx;
KvpFrame *frame;
gchar *key;
g_return_if_fail(GNC_IS_TRANSACTION(object));
@ -633,7 +631,7 @@ dupe_trans (const Transaction *from)
to->inst.e_type = NULL;
qof_instance_set_guid(to, guid_null());
qof_instance_copy_book(to, from);
to->inst.kvp_data = kvp_frame_copy (from->inst.kvp_data);
qof_instance_copy_kvp (QOF_INSTANCE(to), QOF_INSTANCE(from));
return to;
}
@ -688,7 +686,7 @@ xaccTransClone (const Transaction *from)
int length = g_list_length (from->splits);
xaccTransBeginEdit (to);
to->inst.kvp_data = kvp_frame_copy (from->inst.kvp_data);
qof_instance_copy_kvp (QOF_INSTANCE (to), QOF_INSTANCE (from));
g_assert (g_list_length (to->splits) == length);
for (i = 0; i < length; ++i)
xaccSplitCopyKvp (g_list_nth_data (from->splits, i),
@ -934,13 +932,14 @@ xaccTransEqual(const Transaction *ta, const Transaction *tb,
return FALSE;
}
if (kvp_frame_compare(ta->inst.kvp_data, tb->inst.kvp_data) != 0)
if (qof_instance_compare_kvp (QOF_INSTANCE (ta), QOF_INSTANCE (tb)) != 0)
{
char *frame_a;
char *frame_b;
frame_a = kvp_frame_to_string (ta->inst.kvp_data);
frame_b = kvp_frame_to_string (tb->inst.kvp_data);
frame_a = qof_instance_kvp_as_string (QOF_INSTANCE (ta));
frame_b = qof_instance_kvp_as_string (QOF_INSTANCE (tb));
PINFO ("kvp frames differ:\n%s\n\nvs\n\n%s", frame_a, frame_b);
@ -1688,7 +1687,7 @@ xaccTransRollbackEdit (Transaction *trans)
trans->date_entered = orig->date_entered;
trans->date_posted = orig->date_posted;
SWAP(trans->common_currency, orig->common_currency);
SWAP(trans->inst.kvp_data, orig->inst.kvp_data);
qof_instance_swap_kvp (QOF_INSTANCE (trans), QOF_INSTANCE (orig));
/* The splits at the front of trans->splits are exactly the same
splits as in the original, but some of them may have changed, so
@ -1713,7 +1712,7 @@ xaccTransRollbackEdit (Transaction *trans)
xaccSplitRollbackEdit(s);
SWAP(s->action, so->action);
SWAP(s->memo, so->memo);
SWAP(s->inst.kvp_data, so->inst.kvp_data);
qof_instance_copy_kvp (QOF_INSTANCE (s), QOF_INSTANCE (so));
s->reconciled = so->reconciled;
s->amount = so->amount;
s->value = so->value;
@ -1924,20 +1923,15 @@ xaccTransSetDatePostedSecsNormalized (Transaction *trans, time64 time)
void
xaccTransSetDatePostedGDate (Transaction *trans, GDate date)
{
KvpValue* kvp_value;
KvpFrame* frame;
GValue v = G_VALUE_INIT;
if (!trans) return;
/* We additionally save this date into a kvp frame to ensure in
* the future a date which was set as *date* (without time) can
* clearly be distinguished from the Timespec. */
kvp_value = kvp_value_new_gdate(date);
frame = kvp_frame_set_value_nc(trans->inst.kvp_data, TRANS_DATE_POSTED, kvp_value);
if (!frame)
{
kvp_value_delete(kvp_value);
}
g_value_init (&v, G_TYPE_DATE);
g_value_set_boxed (&v, &date);
qof_instance_set_kvp (QOF_INSTANCE(trans), TRANS_DATE_POSTED, &v);
/* mark dirty and commit handled by SetDateInternal */
xaccTransSetDateInternal(trans, &trans->date_posted,
gdate_to_timespec(date));
@ -2002,9 +1996,12 @@ xaccTransSetDate (Transaction *trans, int day, int mon, int year)
void
xaccTransSetDateDueTS (Transaction *trans, const Timespec *ts)
{
GValue v = G_VALUE_INIT;
if (!trans || !ts) return;
g_value_init (&v, GNC_TYPE_TIMESPEC);
g_value_set_boxed (&v, ts);
xaccTransBeginEdit(trans);
kvp_frame_set_timespec (trans->inst.kvp_data, TRANS_DATE_DUE_KVP, *ts);
qof_instance_set_kvp (QOF_INSTANCE (trans), TRANS_DATE_DUE_KVP, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2013,9 +2010,12 @@ void
xaccTransSetTxnType (Transaction *trans, char type)
{
char s[2] = {type, '\0'};
GValue v = G_VALUE_INIT;
g_return_if_fail(trans);
g_value_init (&v, G_TYPE_STRING);
g_value_set_string (&v, s);
xaccTransBeginEdit(trans);
kvp_frame_set_string (trans->inst.kvp_data, TRANS_TXN_TYPE_KVP, s);
qof_instance_set_kvp (QOF_INSTANCE (trans), TRANS_TXN_TYPE_KVP, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2025,8 +2025,8 @@ void xaccTransClearReadOnly (Transaction *trans)
if (trans)
{
xaccTransBeginEdit(trans);
kvp_frame_set_slot_path (trans->inst.kvp_data, NULL,
TRANS_READ_ONLY_REASON, NULL);
qof_instance_set_kvp (QOF_INSTANCE (trans),
TRANS_READ_ONLY_REASON, NULL);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2037,9 +2037,11 @@ xaccTransSetReadOnly (Transaction *trans, const char *reason)
{
if (trans && reason)
{
GValue v = G_VALUE_INIT;
g_value_init (&v, G_TYPE_STRING);
g_value_set_string (&v, reason);
xaccTransBeginEdit(trans);
kvp_frame_set_string (trans->inst.kvp_data,
TRANS_READ_ONLY_REASON, reason);
qof_instance_set_kvp (QOF_INSTANCE (trans), TRANS_READ_ONLY_REASON, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2092,10 +2094,12 @@ xaccTransSetDescription (Transaction *trans, const char *desc)
void
xaccTransSetAssociation (Transaction *trans, const char *assoc)
{
GValue v = G_VALUE_INIT;
if (!trans || !assoc) return;
g_value_init (&v, G_TYPE_STRING);
g_value_set_string (&v, assoc);
xaccTransBeginEdit(trans);
kvp_frame_set_string (trans->inst.kvp_data, assoc_uri_str, assoc);
qof_instance_set_kvp (QOF_INSTANCE (trans), assoc_uri_str, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2111,10 +2115,13 @@ qofTransSetNotes (Transaction *trans, const char *notes)
void
xaccTransSetNotes (Transaction *trans, const char *notes)
{
GValue v = G_VALUE_INIT;
if (!trans || !notes) return;
g_value_init (&v, G_TYPE_STRING);
g_value_set_string (&v, notes);
xaccTransBeginEdit(trans);
kvp_frame_set_string (trans->inst.kvp_data, trans_notes_str, notes);
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2126,9 +2133,14 @@ xaccTransSetIsClosingTxn (Transaction *trans, gboolean is_closing)
xaccTransBeginEdit(trans);
if (is_closing)
kvp_frame_set_gint64 (trans->inst.kvp_data, trans_is_closing_str, 1);
{
GValue v = G_VALUE_INIT;
g_value_init (&v, G_TYPE_INT64);
g_value_set_int64 (&v, 1);
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_is_closing_str, &v);
}
else
kvp_frame_replace_value_nc (trans->inst.kvp_data, trans_is_closing_str, NULL);
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_is_closing_str, NULL);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
}
@ -2186,23 +2198,31 @@ xaccTransGetDescription (const Transaction *trans)
const char *
xaccTransGetAssociation (const Transaction *trans)
{
return trans ?
kvp_frame_get_string (trans->inst.kvp_data, assoc_uri_str) : NULL;
GValue v = G_VALUE_INIT;
if (!trans) return NULL;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), assoc_uri_str, &v);
return g_value_get_string (&v);
}
const char *
xaccTransGetNotes (const Transaction *trans)
{
return trans ?
kvp_frame_get_string (trans->inst.kvp_data, trans_notes_str) : NULL;
GValue v = G_VALUE_INIT;
if (!trans) return NULL;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
return g_value_get_string (&v);
}
gboolean
xaccTransGetIsClosingTxn (const Transaction *trans)
{
return trans ?
kvp_frame_get_gint64 (trans->inst.kvp_data, trans_is_closing_str)
: FALSE;
GValue v = G_VALUE_INIT;
if (!trans) return FALSE;
g_value_init (&v, G_TYPE_INT64);
qof_instance_get_kvp (QOF_INSTANCE (trans), trans_is_closing_str, &v);
return g_value_get_int64 (&v);
}
/********************************************************************\
@ -2252,11 +2272,11 @@ xaccTransGetDatePostedGDate (const Transaction *trans)
/* Can we look up this value in the kvp slot? If yes, use it
* from there because it doesn't suffer from time zone
* shifts. */
const KvpValue* kvp_value =
kvp_frame_get_slot(trans->inst.kvp_data, TRANS_DATE_POSTED);
if (kvp_value)
result = kvp_value_get_gdate(kvp_value);
else
GValue v = G_VALUE_INIT;
g_value_init (&v, G_TYPE_DATE);
qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_DATE_POSTED, &v);
result = *(GDate*)g_value_get_boxed (&v);
if (! g_date_valid (&result))
result = timespec_to_gdate(xaccTransRetDatePostedTS(trans));
}
else
@ -2276,14 +2296,13 @@ xaccTransRetDateEnteredTS (const Transaction *trans)
void
xaccTransGetDateDueTS (const Transaction *trans, Timespec *ts)
{
KvpValue *value;
GValue v = G_VALUE_INIT;
if (!trans || !ts) return;
value = kvp_frame_get_slot (trans->inst.kvp_data, TRANS_DATE_DUE_KVP);
if (value)
*ts = kvp_value_get_timespec (value);
else
g_value_init (&v, GNC_TYPE_TIMESPEC);
qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_DATE_DUE_KVP, &v);
*ts = *(Timespec*)g_value_get_boxed (&v);
if (ts->tv_sec == 0)
xaccTransGetDatePostedTS (trans, ts);
}
@ -2299,9 +2318,14 @@ char
xaccTransGetTxnType (const Transaction *trans)
{
const char *s;
GValue v = G_VALUE_INIT;
if (!trans) return TXN_TYPE_NONE;
s = kvp_frame_get_string (trans->inst.kvp_data, TRANS_TXN_TYPE_KVP);
if (s) return *s;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), TRANS_TXN_TYPE_KVP, &v);
s = g_value_get_string (&v);
if (s && strlen (s) == 0)
return *s;
return TXN_TYPE_NONE;
}
@ -2312,8 +2336,16 @@ xaccTransGetReadOnly (const Transaction *trans)
/* XXX This flag should be cached in the transaction structure
* for performance reasons, since its checked every trans commit.
*/
return trans ? kvp_frame_get_string (
trans->inst.kvp_data, TRANS_READ_ONLY_REASON) : NULL;
GValue v = G_VALUE_INIT;
const char *s;
if (trans == NULL) return NULL;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE(trans), TRANS_READ_ONLY_REASON, &v);
s = g_value_get_string (&v);
if (s && strlen (s))
return s;
return NULL;
}
static gboolean
@ -2491,26 +2523,24 @@ gnc_book_count_transactions(QofBook *book)
void
xaccTransVoid(Transaction *trans, const char *reason)
{
KvpFrame *frame;
KvpValue *val;
Timespec now;
GValue v = G_VALUE_INIT;
char iso8601_str[ISO_DATELENGTH + 1] = "";
g_return_if_fail(trans && reason);
xaccTransBeginEdit(trans);
frame = trans->inst.kvp_data;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v);
val = kvp_frame_get_slot(frame, trans_notes_str);
kvp_frame_set_slot(frame, void_former_notes_str, val);
g_value_set_string (&v, _("Voided transaction"));
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
g_value_set_string (&v, reason);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_reason_str, &v);
kvp_frame_set_string(frame, trans_notes_str, _("Voided transaction"));
kvp_frame_set_string(frame, void_reason_str, reason);
now.tv_sec = gnc_time (NULL);
now.tv_nsec = 0;
gnc_timespec_to_iso8601_buff(now, iso8601_str);
kvp_frame_set_string(frame, void_time_str, iso8601_str);
gnc_timespec_to_iso8601_buff (timespec_now (), iso8601_str);
g_value_set_string (&v, iso8601_str);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_time_str, &v);
FOR_EACH_SPLIT(trans, xaccSplitVoid(s));
@ -2522,48 +2552,61 @@ xaccTransVoid(Transaction *trans, const char *reason)
gboolean
xaccTransGetVoidStatus(const Transaction *trans)
{
const char *s;
GValue v = G_VALUE_INIT;
g_return_val_if_fail(trans, FALSE);
return (kvp_frame_get_slot(trans->inst.kvp_data, void_reason_str) != NULL);
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v);
s = g_value_get_string (&v);
return s && strlen(s);
}
const char *
xaccTransGetVoidReason(const Transaction *trans)
{
g_return_val_if_fail(trans, NULL);
return kvp_frame_get_string(trans->inst.kvp_data, void_reason_str);
GValue v = G_VALUE_INIT;
g_return_val_if_fail(trans, FALSE);
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v);
return g_value_get_string (&v);
}
Timespec
xaccTransGetVoidTime(const Transaction *tr)
{
const char *val;
Timespec void_time = {0, 0};
GValue v = G_VALUE_INIT;
const char *s;
Timespec void_time = {0, 0}, *ts;
g_return_val_if_fail(tr, void_time);
val = kvp_frame_get_string(tr->inst.kvp_data, void_time_str);
return val ? gnc_iso8601_to_timespec_gmt(val) : void_time;
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (tr), void_time_str, &v);
s = g_value_get_string (&v);
if (s)
return gnc_iso8601_to_timespec_gmt (s);
return void_time;
}
void
xaccTransUnvoid (Transaction *trans)
{
KvpFrame *frame;
KvpValue *val;
GValue v = G_VALUE_INIT;
const char *s;
g_return_if_fail(trans);
frame = trans->inst.kvp_data;
val = kvp_frame_get_slot(frame, void_reason_str);
if (!val) return; /* Transaction isn't voided. Bail. */
g_value_init (&v, G_TYPE_STRING);
qof_instance_get_kvp (QOF_INSTANCE (trans), void_reason_str, &v);
s = g_value_get_string (&v);
if (s == NULL) return; /* Transaction isn't voided. Bail. */
xaccTransBeginEdit(trans);
val = kvp_frame_get_slot(frame, void_former_notes_str);
kvp_frame_set_slot(frame, trans_notes_str, val);
kvp_frame_set_slot_nc(frame, void_former_notes_str, NULL);
kvp_frame_set_slot_nc(frame, void_reason_str, NULL);
kvp_frame_set_slot_nc(frame, void_time_str, NULL);
qof_instance_get_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v);
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, NULL);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_reason_str, NULL);
qof_instance_set_kvp (QOF_INSTANCE (trans), void_time_str, NULL);
FOR_EACH_SPLIT(trans, xaccSplitUnvoid(s));
@ -2576,7 +2619,7 @@ Transaction *
xaccTransReverse (Transaction *orig)
{
Transaction *trans;
KvpValue *kvp_val;
GValue v = G_VALUE_INIT;
g_return_val_if_fail(orig, NULL);
trans = xaccTransClone(orig);
@ -2591,8 +2634,9 @@ xaccTransReverse (Transaction *orig)
});
/* 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);
g_value_init (&v, GNC_TYPE_GUID);
g_value_set_boxed (&v, xaccTransGetGUID(trans));
qof_instance_set_kvp (QOF_INSTANCE (orig), TRANS_REVERSED_BY, &v);
qof_instance_set_dirty(QOF_INSTANCE(trans));
xaccTransCommitEdit(trans);
@ -2602,11 +2646,12 @@ xaccTransReverse (Transaction *orig)
Transaction *
xaccTransGetReversedBy(const Transaction *trans)
{
GncGUID *guid;
GValue v = G_VALUE_INIT;
g_return_val_if_fail(trans, NULL);
guid = kvp_frame_get_guid(trans->inst.kvp_data, TRANS_REVERSED_BY);
return xaccTransLookup(guid, qof_instance_get_book(trans));
g_value_init (&v, GNC_TYPE_GUID);
qof_instance_get_kvp (QOF_INSTANCE(trans), TRANS_REVERSED_BY, &v);
return xaccTransLookup((GncGUID*)g_value_get_boxed (&v),
qof_instance_get_book(trans));
}
void
@ -2849,10 +2894,6 @@ gboolean xaccTransRegister (void)
TRANS_SPLITLIST, GNC_ID_SPLIT,
(QofAccessFunc)xaccTransGetSplitList, NULL
},
{
TRANS_KVP, QOF_TYPE_KVP,
(QofAccessFunc)qof_instance_get_slots, NULL
},
{
QOF_PARAM_BOOK, QOF_ID_BOOK,
(QofAccessFunc)qof_instance_get_book, NULL