mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Move initializing the GValue to the correct type to qof_instance_set_kvp.
And ensure that all returns are checked to be the expected type.
This commit is contained in:
@@ -2314,12 +2314,9 @@ static const char*
|
||||
get_kvp_string_tag (const Account *acc, const char *tag)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char* s;
|
||||
if (acc == NULL || tag == NULL) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (acc), tag, &v);
|
||||
s = g_value_get_string (&v);
|
||||
return s;
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3110,13 +3107,13 @@ gnc_commodity *
|
||||
DxaccAccountGetCurrency (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
gnc_commodity_table *table;
|
||||
|
||||
if (!acc) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "old-currency", &v);
|
||||
s = g_value_get_string (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
if (!s) return NULL;
|
||||
|
||||
table = gnc_commodity_table_get_table (qof_instance_get_book(acc));
|
||||
@@ -3789,9 +3786,8 @@ xaccAccountGetTaxRelated (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_BOOLEAN);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "tax-related", &v);
|
||||
return g_value_get_boolean (&v);
|
||||
return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3814,10 +3810,8 @@ xaccAccountGetTaxUSCode (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "/tax-US/code", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE);
|
||||
return g_value_get_string (&v);
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3839,11 +3833,9 @@ xaccAccountGetTaxUSPayerNameSource (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"/tax-US/payer-name-source", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE);
|
||||
return g_value_get_string (&v);
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3863,13 +3855,12 @@ xaccAccountSetTaxUSPayerNameSource (Account *acc, const char *source)
|
||||
gint64
|
||||
xaccAccountGetTaxUSCopyNumber (const Account *acc)
|
||||
{
|
||||
gint64 copy_number;
|
||||
gint64 copy_number = 0;
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "/tax-US/copy-number", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE);
|
||||
copy_number = g_value_get_int64 (&v);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
copy_number = g_value_get_int64 (&v);
|
||||
|
||||
return (copy_number == 0) ? 1 : copy_number;
|
||||
}
|
||||
@@ -3902,10 +3893,12 @@ xaccAccountGetPlaceholder (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_BOOLEAN);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "placeholder", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE);
|
||||
return g_value_get_boolean (&v);
|
||||
if (G_VALUE_HOLDS_BOOLEAN (&v))
|
||||
return g_value_get_boolean (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return strcmp (g_value_get_string (&v), "true") == 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -3951,10 +3944,8 @@ xaccAccountGetHidden (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_BOOLEAN);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "hidden", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE);
|
||||
return g_value_get_boolean (&v);
|
||||
return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -4256,13 +4247,12 @@ xaccAccountIsPriced(const Account *acc)
|
||||
gboolean
|
||||
xaccAccountGetReconcileLastDate (const Account *acc, time64 *last_date)
|
||||
{
|
||||
gint64 date;
|
||||
gint64 date = 0;
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "reconcile-info/last-date", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE);
|
||||
date = g_value_get_int64 (&v);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
date = g_value_get_int64 (&v);
|
||||
|
||||
if (date)
|
||||
{
|
||||
@@ -4298,18 +4288,18 @@ xaccAccountGetReconcileLastInterval (const Account *acc,
|
||||
int *months, int *days)
|
||||
{
|
||||
GValue v1, v2;
|
||||
int m, d;
|
||||
int64_t m = 0, d = 0;
|
||||
|
||||
if (!acc) return FALSE;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v1, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"reconcile-info/last-interval/months", &v1);
|
||||
g_value_init (&v2, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"reconcile-info/last-interval/days", &v2);
|
||||
m = g_value_get_int64 (&v1);
|
||||
d = g_value_get_int64 (&v2);
|
||||
if (G_VALUE_HOLDS_INT64 (&v1))
|
||||
m = g_value_get_int64 (&v1);
|
||||
if (G_VALUE_HOLDS_INT64 (&v2))
|
||||
d = g_value_get_int64 (&v2);
|
||||
if (m && d)
|
||||
{
|
||||
if (months)
|
||||
@@ -4349,14 +4339,13 @@ xaccAccountSetReconcileLastInterval (Account *acc, int months, int days)
|
||||
gboolean
|
||||
xaccAccountGetReconcilePostponeDate (const Account *acc, time64 *postpone_date)
|
||||
{
|
||||
gint64 date;
|
||||
gint64 date = 0;
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"reconcile-info/postpone/date", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE);
|
||||
date = g_value_get_int64 (&v);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
date = g_value_get_int64 (&v);
|
||||
|
||||
if (date)
|
||||
{
|
||||
@@ -4392,14 +4381,13 @@ gboolean
|
||||
xaccAccountGetReconcilePostponeBalance (const Account *acc,
|
||||
gnc_numeric *balance)
|
||||
{
|
||||
gnc_numeric bal;
|
||||
gnc_numeric bal = gnc_numeric_zero ();
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"reconcile-info/postpone/balance", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&v), FALSE);
|
||||
bal = *(gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
bal = *(gnc_numeric*)g_value_get_boxed (&v);
|
||||
|
||||
if (bal.denom)
|
||||
{
|
||||
@@ -4455,11 +4443,9 @@ xaccAccountGetAutoInterestXfer (const Account *acc, gboolean default_value)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_BOOLEAN);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc),
|
||||
"reconcile-info/auto-interest-transfer", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_BOOLEAN (&v), FALSE);
|
||||
return g_value_get_boolean (&v);
|
||||
return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -4488,10 +4474,8 @@ xaccAccountGetLastNum (const Account *acc)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE);
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "last-num", &v);
|
||||
g_return_val_if_fail (G_VALUE_HOLDS_STRING (&v), FALSE);
|
||||
return g_value_get_string (&v);
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -4562,13 +4546,13 @@ xaccAccountGainsAccount (Account *acc, gnc_commodity *curr)
|
||||
GValue v = G_VALUE_INIT;
|
||||
gchar *curr_name = g_strdup_printf ("/lot-mgmt/gains-act/%s",
|
||||
gnc_commodity_get_unique_name (curr));
|
||||
GncGUID *guid;
|
||||
GncGUID *guid = NULL;
|
||||
Account *gains_account;
|
||||
|
||||
g_return_val_if_fail (acc != NULL, NULL);
|
||||
g_value_init (&v, GNC_TYPE_GUID);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), curr_name, &v);
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
if (guid == NULL) /* No gains account for this currency */
|
||||
{
|
||||
gains_account = GetOrMakeOrphanAccount (gnc_account_get_root (acc),
|
||||
@@ -4630,9 +4614,8 @@ dxaccAccountGetPriceSrc(const Account *acc)
|
||||
|
||||
if (!xaccAccountIsPriced(acc)) return NULL;
|
||||
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE(acc), "old-price-source", &v);
|
||||
return g_value_get_string (&v);
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -4661,9 +4644,8 @@ dxaccAccountGetQuoteTZ(const Account *acc)
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!acc) return NULL;
|
||||
if (!xaccAccountIsPriced(acc)) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (acc), "old-quote-tz", &v);
|
||||
return g_value_get_string (&v);
|
||||
return G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -4700,10 +4682,9 @@ xaccAccountGetReconcileChildrenStatus(const Account *acc)
|
||||
*/
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!acc) return FALSE;
|
||||
g_value_init (&v, G_TYPE_BOOLEAN);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (acc),
|
||||
"reconcile-info/include-children", &v);
|
||||
return g_value_get_int64 (&v);
|
||||
return G_VALUE_HOLDS_INT64 (&v) ? g_value_get_int64 (&v) : FALSE;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -5095,7 +5076,7 @@ gnc_imap_find_account (GncImportMatchMap *imap,
|
||||
const char *key)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
GncGUID * guid;
|
||||
GncGUID * guid = NULL;
|
||||
char *kvp_path;
|
||||
|
||||
if (!imap || !key) return NULL;
|
||||
@@ -5103,9 +5084,9 @@ gnc_imap_find_account (GncImportMatchMap *imap,
|
||||
kvp_path = g_strdup_printf (IMAP_FRAME "/%s", key);
|
||||
else
|
||||
kvp_path = g_strdup_printf (IMAP_FRAME "/%s/%s", category, key);
|
||||
g_value_init (&v, GNC_TYPE_GUID);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (imap->acc), kvp_path, &v);
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
g_free (kvp_path);
|
||||
return xaccAccountLookup (guid, imap->book);
|
||||
}
|
||||
@@ -5483,7 +5464,6 @@ gnc_imap_add_account_bayes(GncImportMatchMap *imap,
|
||||
(char*)current_token->data,
|
||||
account_fullname);
|
||||
|
||||
g_value_init (&value, G_TYPE_INT64);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (imap->acc), kvp_path, &value);
|
||||
/* if the token/account is already in the tree, read the current
|
||||
* value from the tree and use this for the basis of the value we
|
||||
|
||||
@@ -1085,7 +1085,7 @@ xaccSplitDetermineGainStatus (Split *split)
|
||||
{
|
||||
Split *other;
|
||||
GValue v = G_VALUE_INIT;
|
||||
GncGUID *guid;
|
||||
GncGUID *guid = NULL;
|
||||
|
||||
if (GAINS_STATUS_UNKNOWN != split->gains) return;
|
||||
|
||||
@@ -1097,9 +1097,9 @@ xaccSplitDetermineGainStatus (Split *split)
|
||||
return;
|
||||
}
|
||||
|
||||
g_value_init (&v, GNC_TYPE_GUID);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (split), "gains-source", &v);
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
guid = (GncGUID*)g_value_get_boxed (&v);
|
||||
if (!guid)
|
||||
{
|
||||
// CHECKME: We leave split->gains_split alone. Is that correct?
|
||||
@@ -2012,12 +2012,12 @@ const char *
|
||||
xaccSplitGetType(const Split *s)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char *split_type;
|
||||
const char *split_type = NULL;
|
||||
|
||||
if (!s) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (s), "split-type", &v);
|
||||
split_type = g_value_get_string (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
split_type = g_value_get_string (&v);
|
||||
return split_type ? split_type : "normal";
|
||||
}
|
||||
|
||||
@@ -2167,11 +2167,11 @@ gnc_numeric
|
||||
xaccSplitVoidFormerAmount(const Split *split)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
gnc_numeric *num;
|
||||
gnc_numeric *num = NULL;
|
||||
g_return_val_if_fail(split, gnc_numeric_zero());
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (split), void_former_amt_str, &v);
|
||||
num = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
num = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
return num ? *num : gnc_numeric_zero();
|
||||
}
|
||||
|
||||
@@ -2179,11 +2179,11 @@ gnc_numeric
|
||||
xaccSplitVoidFormerValue(const Split *split)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
gnc_numeric *num;
|
||||
gnc_numeric *num = NULL;
|
||||
g_return_val_if_fail(split, gnc_numeric_zero());
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (split), void_former_val_str, &v);
|
||||
num = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
num = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
return num ? *num : gnc_numeric_zero();
|
||||
}
|
||||
|
||||
|
||||
@@ -2200,9 +2200,10 @@ xaccTransGetAssociation (const Transaction *trans)
|
||||
{
|
||||
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);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return g_value_get_string (&v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
@@ -2210,9 +2211,10 @@ xaccTransGetNotes (const Transaction *trans)
|
||||
{
|
||||
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);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return g_value_get_string (&v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -2220,9 +2222,10 @@ xaccTransGetIsClosingTxn (const Transaction *trans)
|
||||
{
|
||||
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);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
return g_value_get_int64 (&v);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
@@ -2273,9 +2276,9 @@ xaccTransGetDatePostedGDate (const Transaction *trans)
|
||||
* from there because it doesn't suffer from time zone
|
||||
* shifts. */
|
||||
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_VALUE_HOLDS_BOXED (&v))
|
||||
result = *(GDate*)g_value_get_boxed (&v);
|
||||
if (! g_date_valid (&result))
|
||||
result = timespec_to_gdate(xaccTransRetDatePostedTS(trans));
|
||||
}
|
||||
@@ -2299,9 +2302,9 @@ xaccTransGetDateDueTS (const Transaction *trans, Timespec *ts)
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!trans || !ts) return;
|
||||
|
||||
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 (G_VALUE_HOLDS_BOXED (&v))
|
||||
*ts = *(Timespec*)g_value_get_boxed (&v);
|
||||
if (ts->tv_sec == 0)
|
||||
xaccTransGetDatePostedTS (trans, ts);
|
||||
}
|
||||
@@ -2317,13 +2320,13 @@ xaccTransRetDateDueTS (const Transaction *trans)
|
||||
char
|
||||
xaccTransGetTxnType (const Transaction *trans)
|
||||
{
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
GValue v = G_VALUE_INIT;
|
||||
|
||||
if (!trans) return TXN_TYPE_NONE;
|
||||
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 (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
if (s && strlen (s) == 0)
|
||||
return *s;
|
||||
|
||||
@@ -2337,11 +2340,11 @@ xaccTransGetReadOnly (const Transaction *trans)
|
||||
* for performance reasons, since its checked every trans commit.
|
||||
*/
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
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 (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
if (s && strlen (s))
|
||||
return s;
|
||||
|
||||
@@ -2529,9 +2532,11 @@ xaccTransVoid(Transaction *trans, const char *reason)
|
||||
g_return_if_fail(trans && reason);
|
||||
|
||||
xaccTransBeginEdit(trans);
|
||||
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);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
qof_instance_set_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v);
|
||||
else
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
|
||||
g_value_set_string (&v, _("Voided transaction"));
|
||||
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
|
||||
@@ -2552,13 +2557,13 @@ xaccTransVoid(Transaction *trans, const char *reason)
|
||||
gboolean
|
||||
xaccTransGetVoidStatus(const Transaction *trans)
|
||||
{
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
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);
|
||||
s = g_value_get_string (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
return s && strlen(s);
|
||||
}
|
||||
|
||||
@@ -2568,22 +2573,23 @@ xaccTransGetVoidReason(const Transaction *trans)
|
||||
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);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return g_value_get_string (&v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Timespec
|
||||
xaccTransGetVoidTime(const Transaction *tr)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
Timespec void_time = {0, 0}, *ts;
|
||||
|
||||
g_return_val_if_fail(tr, 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 (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
if (s)
|
||||
return gnc_iso8601_to_timespec_gmt (s);
|
||||
return void_time;
|
||||
@@ -2593,17 +2599,18 @@ void
|
||||
xaccTransUnvoid (Transaction *trans)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
const char *s;
|
||||
const char *s = NULL;
|
||||
g_return_if_fail(trans);
|
||||
|
||||
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 (G_VALUE_HOLDS_STRING (&v))
|
||||
s = g_value_get_string (&v);
|
||||
if (s == NULL) return; /* Transaction isn't voided. Bail. */
|
||||
xaccTransBeginEdit(trans);
|
||||
|
||||
qof_instance_get_kvp (QOF_INSTANCE (trans), void_former_notes_str, &v);
|
||||
qof_instance_set_kvp (QOF_INSTANCE (trans), trans_notes_str, &v);
|
||||
if (G_VALUE_HOLDS_STRING (&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);
|
||||
@@ -2648,10 +2655,11 @@ xaccTransGetReversedBy(const Transaction *trans)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
g_return_val_if_fail(trans, NULL);
|
||||
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));
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
return xaccTransLookup((GncGUID*)g_value_get_boxed (&v),
|
||||
qof_instance_get_book(trans));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2698,9 +2706,9 @@ xaccTransScrubGainsDate (Transaction *trans)
|
||||
xaccSplitDetermineGainStatus(s);
|
||||
|
||||
if ((GAINS_STATUS_GAINS & s->gains) &&
|
||||
s->gains_split &&
|
||||
((s->gains_split->gains & GAINS_STATUS_DATE_DIRTY) ||
|
||||
(s->gains & GAINS_STATUS_DATE_DIRTY)))
|
||||
s->gains_split &&
|
||||
((s->gains_split->gains & GAINS_STATUS_DATE_DIRTY) ||
|
||||
(s->gains & GAINS_STATUS_DATE_DIRTY)))
|
||||
{
|
||||
Transaction *source_trans = s->gains_split->parent;
|
||||
ts = source_trans->date_posted;
|
||||
@@ -2752,8 +2760,8 @@ restart:
|
||||
if ((s->gains & GAINS_STATUS_VDIRTY) ||
|
||||
(s->gains_split &&
|
||||
(s->gains_split->gains & GAINS_STATUS_VDIRTY)))
|
||||
xaccSplitComputeCapGains(s, gain_acc);
|
||||
);
|
||||
xaccSplitComputeCapGains(s, gain_acc);
|
||||
);
|
||||
|
||||
LEAVE("(trans=%p)", trans);
|
||||
}
|
||||
@@ -2825,85 +2833,85 @@ trans_is_balanced_p (const Transaction *trans)
|
||||
gboolean xaccTransRegister (void)
|
||||
{
|
||||
static QofParam params[] =
|
||||
{
|
||||
{
|
||||
TRANS_NUM, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetNum,
|
||||
(QofSetterFunc)qofTransSetNum,
|
||||
qof_string_number_compare_func
|
||||
},
|
||||
{
|
||||
TRANS_DESCRIPTION, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetDescription,
|
||||
(QofSetterFunc)qofTransSetDescription
|
||||
},
|
||||
{
|
||||
TRANS_DATE_ENTERED, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDateEnteredTS,
|
||||
(QofSetterFunc)qofTransSetDateEntered
|
||||
},
|
||||
{
|
||||
TRANS_DATE_POSTED, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDatePostedTS,
|
||||
(QofSetterFunc)qofTransSetDatePosted
|
||||
},
|
||||
{
|
||||
TRANS_DATE_DUE, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDateDueTS, NULL
|
||||
},
|
||||
{
|
||||
TRANS_IMBALANCE, QOF_TYPE_NUMERIC,
|
||||
(QofAccessFunc)xaccTransGetImbalanceValue, NULL
|
||||
},
|
||||
{
|
||||
TRANS_NOTES, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetNotes,
|
||||
(QofSetterFunc)qofTransSetNotes
|
||||
},
|
||||
{
|
||||
TRANS_ASSOCIATION, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetAssociation,
|
||||
(QofSetterFunc)xaccTransSetAssociation
|
||||
},
|
||||
{
|
||||
TRANS_IS_CLOSING, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)xaccTransGetIsClosingTxn, NULL
|
||||
},
|
||||
{
|
||||
TRANS_IS_BALANCED, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)trans_is_balanced_p, NULL
|
||||
},
|
||||
{
|
||||
TRANS_TYPE, QOF_TYPE_CHAR,
|
||||
(QofAccessFunc)xaccTransGetTxnType,
|
||||
(QofSetterFunc)xaccTransSetTxnType
|
||||
},
|
||||
{
|
||||
TRANS_VOID_STATUS, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)xaccTransGetVoidStatus, NULL
|
||||
},
|
||||
{
|
||||
TRANS_VOID_REASON, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetVoidReason, NULL
|
||||
},
|
||||
{
|
||||
TRANS_VOID_TIME, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransGetVoidTime, NULL
|
||||
},
|
||||
{
|
||||
TRANS_SPLITLIST, GNC_ID_SPLIT,
|
||||
(QofAccessFunc)xaccTransGetSplitList, NULL
|
||||
},
|
||||
{
|
||||
QOF_PARAM_BOOK, QOF_ID_BOOK,
|
||||
(QofAccessFunc)qof_instance_get_book, NULL
|
||||
},
|
||||
{
|
||||
QOF_PARAM_GUID, QOF_TYPE_GUID,
|
||||
(QofAccessFunc)qof_entity_get_guid, NULL
|
||||
},
|
||||
{ NULL },
|
||||
};
|
||||
{
|
||||
TRANS_NUM, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetNum,
|
||||
(QofSetterFunc)qofTransSetNum,
|
||||
qof_string_number_compare_func
|
||||
},
|
||||
{
|
||||
TRANS_DESCRIPTION, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetDescription,
|
||||
(QofSetterFunc)qofTransSetDescription
|
||||
},
|
||||
{
|
||||
TRANS_DATE_ENTERED, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDateEnteredTS,
|
||||
(QofSetterFunc)qofTransSetDateEntered
|
||||
},
|
||||
{
|
||||
TRANS_DATE_POSTED, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDatePostedTS,
|
||||
(QofSetterFunc)qofTransSetDatePosted
|
||||
},
|
||||
{
|
||||
TRANS_DATE_DUE, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransRetDateDueTS, NULL
|
||||
},
|
||||
{
|
||||
TRANS_IMBALANCE, QOF_TYPE_NUMERIC,
|
||||
(QofAccessFunc)xaccTransGetImbalanceValue, NULL
|
||||
},
|
||||
{
|
||||
TRANS_NOTES, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetNotes,
|
||||
(QofSetterFunc)qofTransSetNotes
|
||||
},
|
||||
{
|
||||
TRANS_ASSOCIATION, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetAssociation,
|
||||
(QofSetterFunc)xaccTransSetAssociation
|
||||
},
|
||||
{
|
||||
TRANS_IS_CLOSING, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)xaccTransGetIsClosingTxn, NULL
|
||||
},
|
||||
{
|
||||
TRANS_IS_BALANCED, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)trans_is_balanced_p, NULL
|
||||
},
|
||||
{
|
||||
TRANS_TYPE, QOF_TYPE_CHAR,
|
||||
(QofAccessFunc)xaccTransGetTxnType,
|
||||
(QofSetterFunc)xaccTransSetTxnType
|
||||
},
|
||||
{
|
||||
TRANS_VOID_STATUS, QOF_TYPE_BOOLEAN,
|
||||
(QofAccessFunc)xaccTransGetVoidStatus, NULL
|
||||
},
|
||||
{
|
||||
TRANS_VOID_REASON, QOF_TYPE_STRING,
|
||||
(QofAccessFunc)xaccTransGetVoidReason, NULL
|
||||
},
|
||||
{
|
||||
TRANS_VOID_TIME, QOF_TYPE_DATE,
|
||||
(QofAccessFunc)xaccTransGetVoidTime, NULL
|
||||
},
|
||||
{
|
||||
TRANS_SPLITLIST, GNC_ID_SPLIT,
|
||||
(QofAccessFunc)xaccTransGetSplitList, NULL
|
||||
},
|
||||
{
|
||||
QOF_PARAM_BOOK, QOF_ID_BOOK,
|
||||
(QofAccessFunc)qof_instance_get_book, NULL
|
||||
},
|
||||
{
|
||||
QOF_PARAM_GUID, QOF_TYPE_GUID,
|
||||
(QofAccessFunc)qof_entity_get_guid, NULL
|
||||
},
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
qof_class_register (GNC_ID_TRANS, (QofSortFunc)xaccTransOrder, params);
|
||||
|
||||
|
||||
@@ -554,14 +554,16 @@ gnc_budget_is_account_period_value_set(const GncBudget *budget,
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
gchar path[BUF_SIZE];
|
||||
gconstpointer ptr = NULL;
|
||||
|
||||
g_return_val_if_fail(GNC_IS_BUDGET(budget), FALSE);
|
||||
g_return_val_if_fail(account, FALSE);
|
||||
|
||||
make_period_path (account, period_num, path);
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (budget), path, &v);
|
||||
return (g_value_get_boxed (&v) != NULL);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
ptr = g_value_get_boxed (&v);
|
||||
return (ptr != NULL);
|
||||
}
|
||||
|
||||
gnc_numeric
|
||||
@@ -569,17 +571,17 @@ gnc_budget_get_account_period_value(const GncBudget *budget,
|
||||
const Account *account,
|
||||
guint period_num)
|
||||
{
|
||||
gnc_numeric *numeric;
|
||||
gnc_numeric *numeric = NULL;
|
||||
gchar path[BUF_SIZE];
|
||||
GValue v = G_VALUE_INIT;
|
||||
|
||||
g_return_val_if_fail(GNC_IS_BUDGET(budget), gnc_numeric_zero());
|
||||
g_return_val_if_fail(account, gnc_numeric_zero());
|
||||
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
make_period_path (account, period_num, path);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (budget), path, &v);
|
||||
numeric = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
numeric = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
|
||||
if (numeric)
|
||||
return *numeric;
|
||||
|
||||
@@ -436,9 +436,10 @@ gnc_lot_get_title (const GNCLot *lot)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!lot) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (lot), "/title", &v);
|
||||
return g_value_get_string (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return g_value_get_string (&v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
@@ -446,9 +447,10 @@ gnc_lot_get_notes (const GNCLot *lot)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!lot) return NULL;
|
||||
g_value_init (&v, G_TYPE_STRING);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (lot), "/notes", &v);
|
||||
return g_value_get_string (&v);
|
||||
if (G_VALUE_HOLDS_STRING (&v))
|
||||
return g_value_get_string (&v);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -454,11 +454,11 @@ const char * gncJobGetReference (const GncJob *job)
|
||||
gnc_numeric gncJobGetRate (const GncJob *job)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
gnc_numeric *rate;
|
||||
gnc_numeric *rate = NULL;
|
||||
if (!job) return gnc_numeric_zero ();
|
||||
g_value_init (&v, GNC_TYPE_NUMERIC);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (job), GNC_JOB_RATE, &v);
|
||||
rate = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (G_VALUE_HOLDS_BOXED (&v))
|
||||
rate = (gnc_numeric*)g_value_get_boxed (&v);
|
||||
if (rate)
|
||||
return *rate;
|
||||
return gnc_numeric_zero();
|
||||
|
||||
@@ -1081,8 +1081,11 @@ void
|
||||
qof_instance_get_kvp (QofInstance *inst, const gchar *key, GValue *value)
|
||||
{
|
||||
GValue *temp = kvp_frame_get_gvalue (inst->kvp_data, key);
|
||||
if (temp)
|
||||
if (G_IS_VALUE (temp))
|
||||
{
|
||||
if (G_IS_VALUE (value))
|
||||
g_value_unset (value);
|
||||
g_value_init (value, G_VALUE_TYPE (temp));
|
||||
g_value_copy (temp, value);
|
||||
gnc_gvalue_free (temp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user