Skip to content

Commit ab04715

Browse files
[Transaction.cpp] use qof_instance kvp API for Time64, with bugfix
fixes bug whereby xaccTransRetDateDue returns 0 if the kvp time64 stored is 0.
1 parent 985f591 commit ab04715

File tree

3 files changed

+6
-18
lines changed

3 files changed

+6
-18
lines changed

libgnucash/engine/Transaction.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,14 +1988,10 @@ xaccTransSetDate (Transaction *trans, int day, int mon, int year)
19881988
void
19891989
xaccTransSetDateDue (Transaction * trans, time64 time)
19901990
{
1991-
GValue v = G_VALUE_INIT;
19921991
if (!trans) return;
1993-
g_value_init (&v, GNC_TYPE_TIME64);
1994-
g_value_set_static_boxed (&v, &time);
19951992
xaccTransBeginEdit(trans);
1996-
qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_DATE_DUE_KVP);
1993+
qof_instance_set_path_kvp<Time64> (QOF_INSTANCE (trans), Time64{time}, {TRANS_DATE_DUE_KVP});
19971994
qof_instance_set_dirty(QOF_INSTANCE(trans));
1998-
g_value_unset (&v);
19991995
xaccTransCommitEdit(trans);
20001996
}
20011997

@@ -2339,18 +2335,9 @@ xaccTransRetDateEntered (const Transaction *trans)
23392335
time64
23402336
xaccTransRetDateDue(const Transaction *trans)
23412337
{
2342-
time64 ret = 0;
2343-
GValue v = G_VALUE_INIT;
23442338
if (!trans) return 0;
2345-
qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_DATE_DUE_KVP);
2346-
if (G_VALUE_HOLDS_BOXED (&v))
2347-
{
2348-
ret = ((Time64*)g_value_get_boxed (&v))->t;
2349-
g_value_unset (&v);
2350-
}
2351-
if (!ret)
2352-
return xaccTransRetDatePosted (trans);
2353-
return ret;
2339+
auto res = qof_instance_get_path_kvp<Time64> (QOF_INSTANCE (trans), {TRANS_DATE_DUE_KVP});
2340+
return res ? res->t : xaccTransRetDatePosted (trans);
23542341
}
23552342

23562343
char

libgnucash/engine/qofinstance.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,11 +1080,13 @@ qof_instance_set_path_kvp (QofInstance* inst, std::optional<T> value, const Path
10801080
qof_instance_set_dirty (inst);
10811081
}
10821082

1083+
template std::optional<Time64> qof_instance_get_path_kvp <Time64> (QofInstance*, const Path&);
10831084
template std::optional<const char*> qof_instance_get_path_kvp <const char*> (QofInstance*, const Path&);
10841085
template std::optional<gnc_numeric> qof_instance_get_path_kvp <gnc_numeric> (QofInstance*, const Path&);
10851086
template std::optional<GncGUID*> qof_instance_get_path_kvp <GncGUID*> (QofInstance*, const Path&);
10861087
template std::optional<int64_t> qof_instance_get_path_kvp <int64_t> (QofInstance*, const Path&);
10871088

1089+
template void qof_instance_set_path_kvp <Time64> (QofInstance*, std::optional<Time64>, const Path& path);
10881090
template void qof_instance_set_path_kvp <const char*> (QofInstance*, std::optional<const char*>, const Path& path);
10891091
template void qof_instance_set_path_kvp <gnc_numeric> (QofInstance*, std::optional<gnc_numeric>, const Path& path);
10901092
template void qof_instance_set_path_kvp <GncGUID*> (QofInstance*, std::optional<GncGUID*>, const Path& path);

libgnucash/engine/test/utest-Transaction.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1833,8 +1833,7 @@ test_xaccTransGetDateDue (Fixture *fixture, gconstpointer pData)
18331833

18341834
xaccTransSetDateDue (txn, 0);
18351835
g_assert_cmpint (frame->get_slot({TRANS_DATE_DUE_KVP})->get_ptr<Time64>()->t, ==, 0);
1836-
// the next line is arguably buggy; shouldn't it return 0 as per kvp value?
1837-
g_assert_cmpint (xaccTransRetDateDue(txn), ==, xaccTransRetDatePosted(txn));
1836+
g_assert_cmpint (xaccTransRetDateDue(txn), ==, 0);
18381837
}
18391838

18401839
/* xaccTransGetReadOnly C: 7 in 5 Local: 1:0:0

0 commit comments

Comments
 (0)