gnucash stable: [Transaction.cpp] use qof_instance kvp API for Time64, with bugfix
Christopher Lam
clam at code.gnucash.org
Wed Jul 2 20:34:52 EDT 2025
Updated via https://github.com/Gnucash/gnucash/commit/ab04715c (commit)
from https://github.com/Gnucash/gnucash/commit/985f5918 (commit)
commit ab04715c910d63e17c4711fca965915da3e7fc7c
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Sat Jun 28 17:58:40 2025 +0800
[Transaction.cpp] use qof_instance kvp API for Time64, with bugfix
fixes bug whereby xaccTransRetDateDue returns 0 if the kvp time64
stored is 0.
diff --git a/libgnucash/engine/Transaction.cpp b/libgnucash/engine/Transaction.cpp
index abd3e22b56..26d3aca870 100644
--- a/libgnucash/engine/Transaction.cpp
+++ b/libgnucash/engine/Transaction.cpp
@@ -1988,14 +1988,10 @@ xaccTransSetDate (Transaction *trans, int day, int mon, int year)
void
xaccTransSetDateDue (Transaction * trans, time64 time)
{
- GValue v = G_VALUE_INIT;
if (!trans) return;
- g_value_init (&v, GNC_TYPE_TIME64);
- g_value_set_static_boxed (&v, &time);
xaccTransBeginEdit(trans);
- qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_DATE_DUE_KVP);
+ qof_instance_set_path_kvp<Time64> (QOF_INSTANCE (trans), Time64{time}, {TRANS_DATE_DUE_KVP});
qof_instance_set_dirty(QOF_INSTANCE(trans));
- g_value_unset (&v);
xaccTransCommitEdit(trans);
}
@@ -2339,18 +2335,9 @@ xaccTransRetDateEntered (const Transaction *trans)
time64
xaccTransRetDateDue(const Transaction *trans)
{
- time64 ret = 0;
- GValue v = G_VALUE_INIT;
if (!trans) return 0;
- qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_DATE_DUE_KVP);
- if (G_VALUE_HOLDS_BOXED (&v))
- {
- ret = ((Time64*)g_value_get_boxed (&v))->t;
- g_value_unset (&v);
- }
- if (!ret)
- return xaccTransRetDatePosted (trans);
- return ret;
+ auto res = qof_instance_get_path_kvp<Time64> (QOF_INSTANCE (trans), {TRANS_DATE_DUE_KVP});
+ return res ? res->t : xaccTransRetDatePosted (trans);
}
char
diff --git a/libgnucash/engine/qofinstance.cpp b/libgnucash/engine/qofinstance.cpp
index 5e62dd2808..b78724f185 100644
--- a/libgnucash/engine/qofinstance.cpp
+++ b/libgnucash/engine/qofinstance.cpp
@@ -1080,11 +1080,13 @@ qof_instance_set_path_kvp (QofInstance* inst, std::optional<T> value, const Path
qof_instance_set_dirty (inst);
}
+template std::optional<Time64> qof_instance_get_path_kvp <Time64> (QofInstance*, const Path&);
template std::optional<const char*> qof_instance_get_path_kvp <const char*> (QofInstance*, const Path&);
template std::optional<gnc_numeric> qof_instance_get_path_kvp <gnc_numeric> (QofInstance*, const Path&);
template std::optional<GncGUID*> qof_instance_get_path_kvp <GncGUID*> (QofInstance*, const Path&);
template std::optional<int64_t> qof_instance_get_path_kvp <int64_t> (QofInstance*, const Path&);
+template void qof_instance_set_path_kvp <Time64> (QofInstance*, std::optional<Time64>, const Path& path);
template void qof_instance_set_path_kvp <const char*> (QofInstance*, std::optional<const char*>, const Path& path);
template void qof_instance_set_path_kvp <gnc_numeric> (QofInstance*, std::optional<gnc_numeric>, const Path& path);
template void qof_instance_set_path_kvp <GncGUID*> (QofInstance*, std::optional<GncGUID*>, const Path& path);
diff --git a/libgnucash/engine/test/utest-Transaction.cpp b/libgnucash/engine/test/utest-Transaction.cpp
index e85d8d853d..fe58c2cc99 100644
--- a/libgnucash/engine/test/utest-Transaction.cpp
+++ b/libgnucash/engine/test/utest-Transaction.cpp
@@ -1833,8 +1833,7 @@ test_xaccTransGetDateDue (Fixture *fixture, gconstpointer pData)
xaccTransSetDateDue (txn, 0);
g_assert_cmpint (frame->get_slot({TRANS_DATE_DUE_KVP})->get_ptr<Time64>()->t, ==, 0);
- // the next line is arguably buggy; shouldn't it return 0 as per kvp value?
- g_assert_cmpint (xaccTransRetDateDue(txn), ==, xaccTransRetDatePosted(txn));
+ g_assert_cmpint (xaccTransRetDateDue(txn), ==, 0);
}
/* xaccTransGetReadOnly C: 7 in 5 Local: 1:0:0
Summary of changes:
libgnucash/engine/Transaction.cpp | 19 +++----------------
libgnucash/engine/qofinstance.cpp | 2 ++
libgnucash/engine/test/utest-Transaction.cpp | 3 +--
3 files changed, 6 insertions(+), 18 deletions(-)
More information about the gnucash-changes
mailing list