mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
New Split properties sx-account, sx-credit-formula, sx-debit-formula
This commit is contained in:
parent
dc8e9c0b00
commit
48df2d3569
@ -375,9 +375,9 @@ gnc_sx_get_sxes_referencing_account(QofBook *book, Account *acct)
|
|||||||
for (; splits != NULL; splits = splits->next)
|
for (; splits != NULL; splits = splits->next)
|
||||||
{
|
{
|
||||||
Split *s = (Split*)splits->data;
|
Split *s = (Split*)splits->data;
|
||||||
KvpFrame *frame = kvp_frame_get_frame(xaccSplitGetSlots(s), GNC_SX_ID);
|
GncGUID *guid;
|
||||||
GncGUID *sx_split_acct_guid = kvp_frame_get_guid(frame, GNC_SX_ACCOUNT);
|
qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL);
|
||||||
if (guid_equal(acct_guid, sx_split_acct_guid))
|
if (guid_equal(acct_guid, guid))
|
||||||
{
|
{
|
||||||
rtn = g_list_append(rtn, sx);
|
rtn = g_list_append(rtn, sx);
|
||||||
}
|
}
|
||||||
|
@ -1041,8 +1041,8 @@ pack_split_info (TTSplitInfo *s_info, Account *parent_acct,
|
|||||||
Transaction *parent_trans, QofBook *book)
|
Transaction *parent_trans, QofBook *book)
|
||||||
{
|
{
|
||||||
Split *split;
|
Split *split;
|
||||||
KvpFrame *split_frame;
|
const gchar *credit_formula;
|
||||||
KvpValue *tmp_value;
|
const gchar *debit_formula;
|
||||||
const GncGUID *acc_guid;
|
const GncGUID *acc_guid;
|
||||||
|
|
||||||
split = xaccMallocSplit(book);
|
split = xaccMallocSplit(book);
|
||||||
@ -1058,40 +1058,14 @@ pack_split_info (TTSplitInfo *s_info, Account *parent_acct,
|
|||||||
xaccAccountInsertSplit(parent_acct,
|
xaccAccountInsertSplit(parent_acct,
|
||||||
split);
|
split);
|
||||||
|
|
||||||
split_frame = xaccSplitGetSlots(split);
|
credit_formula = gnc_ttsplitinfo_get_credit_formula(s_info);
|
||||||
|
debit_formula = gnc_ttsplitinfo_get_debit_formula(s_info);
|
||||||
tmp_value
|
|
||||||
= kvp_value_new_string(gnc_ttsplitinfo_get_credit_formula(s_info));
|
|
||||||
|
|
||||||
kvp_frame_set_slot_path(split_frame,
|
|
||||||
tmp_value,
|
|
||||||
GNC_SX_ID,
|
|
||||||
GNC_SX_CREDIT_FORMULA,
|
|
||||||
NULL);
|
|
||||||
kvp_value_delete(tmp_value);
|
|
||||||
|
|
||||||
tmp_value
|
|
||||||
= kvp_value_new_string(gnc_ttsplitinfo_get_debit_formula(s_info));
|
|
||||||
|
|
||||||
kvp_frame_set_slot_path(split_frame,
|
|
||||||
tmp_value,
|
|
||||||
GNC_SX_ID,
|
|
||||||
GNC_SX_DEBIT_FORMULA,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
kvp_value_delete(tmp_value);
|
|
||||||
|
|
||||||
acc_guid = qof_entity_get_guid(QOF_INSTANCE(gnc_ttsplitinfo_get_account(s_info)));
|
acc_guid = qof_entity_get_guid(QOF_INSTANCE(gnc_ttsplitinfo_get_account(s_info)));
|
||||||
|
qof_instance_set (QOF_INSTANCE (split),
|
||||||
tmp_value = kvp_value_new_guid(acc_guid);
|
"sx-credit-formula", credit_formula,
|
||||||
|
"sx-debit-formula", debit_formula,
|
||||||
kvp_frame_set_slot_path(split_frame,
|
"sx-account", acc_guid,
|
||||||
tmp_value,
|
NULL);
|
||||||
GNC_SX_ID,
|
|
||||||
GNC_SX_ACCOUNT,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
kvp_value_delete(tmp_value);
|
|
||||||
|
|
||||||
return split;
|
return split;
|
||||||
}
|
}
|
||||||
|
@ -305,9 +305,6 @@ GList *gnc_sx_get_defer_instances( SchedXaction *sx );
|
|||||||
|
|
||||||
/* #defines for KvpFrame strings and QOF */
|
/* #defines for KvpFrame strings and QOF */
|
||||||
#define GNC_SX_ID "sched-xaction"
|
#define GNC_SX_ID "sched-xaction"
|
||||||
#define GNC_SX_ACCOUNT "account"
|
|
||||||
#define GNC_SX_CREDIT_FORMULA "credit-formula"
|
|
||||||
#define GNC_SX_DEBIT_FORMULA "debit-formula"
|
|
||||||
#define GNC_SX_CREDIT_NUMERIC "credit-numeric"
|
#define GNC_SX_CREDIT_NUMERIC "credit-numeric"
|
||||||
#define GNC_SX_DEBIT_NUMERIC "debit-numeric"
|
#define GNC_SX_DEBIT_NUMERIC "debit-numeric"
|
||||||
#define GNC_SX_SHARES "shares"
|
#define GNC_SX_SHARES "shares"
|
||||||
|
@ -61,6 +61,12 @@ const char *void_former_val_str = "void-former-value";
|
|||||||
/* This static indicates the debugging module that this .o belongs to. */
|
/* This static indicates the debugging module that this .o belongs to. */
|
||||||
static QofLogModule log_module = GNC_MOD_ENGINE;
|
static QofLogModule log_module = GNC_MOD_ENGINE;
|
||||||
|
|
||||||
|
/* KVP key values used for SX info stored Split's slots. */
|
||||||
|
#define GNC_SX_ID "sched-xaction"
|
||||||
|
#define GNC_SX_ACCOUNT "account"
|
||||||
|
#define GNC_SX_CREDIT_FORMULA "credit-formula"
|
||||||
|
#define GNC_SX_DEBIT_FORMULA "debit-formula"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
@ -71,7 +77,10 @@ enum
|
|||||||
PROP_RECONCILE_DATE,
|
PROP_RECONCILE_DATE,
|
||||||
PROP_TX,
|
PROP_TX,
|
||||||
PROP_ACCOUNT,
|
PROP_ACCOUNT,
|
||||||
PROP_LOT
|
PROP_SX_CREDIT_FORMULA,
|
||||||
|
PROP_SX_DEBIT_FORMULA,
|
||||||
|
PROP_SX_ACCOUNT,
|
||||||
|
PROP_LOT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* GObject Initialization */
|
/* GObject Initialization */
|
||||||
@ -127,6 +136,7 @@ gnc_split_get_property(GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
Split *split;
|
Split *split;
|
||||||
|
gchar *key;
|
||||||
|
|
||||||
g_return_if_fail(GNC_IS_SPLIT(object));
|
g_return_if_fail(GNC_IS_SPLIT(object));
|
||||||
|
|
||||||
@ -157,6 +167,18 @@ gnc_split_get_property(GObject *object,
|
|||||||
case PROP_LOT:
|
case PROP_LOT:
|
||||||
g_value_take_object(value, split->lot);
|
g_value_take_object(value, split->lot);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SX_CREDIT_FORMULA:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_CREDIT_FORMULA;
|
||||||
|
qof_instance_get_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
|
case PROP_SX_DEBIT_FORMULA:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_DEBIT_FORMULA;
|
||||||
|
qof_instance_get_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
|
case PROP_SX_ACCOUNT:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_ACCOUNT;
|
||||||
|
qof_instance_get_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -171,6 +193,7 @@ gnc_split_set_property(GObject *object,
|
|||||||
{
|
{
|
||||||
Split *split;
|
Split *split;
|
||||||
gnc_numeric* number;
|
gnc_numeric* number;
|
||||||
|
gchar *key;
|
||||||
|
|
||||||
g_return_if_fail(GNC_IS_SPLIT(object));
|
g_return_if_fail(GNC_IS_SPLIT(object));
|
||||||
|
|
||||||
@ -203,7 +226,19 @@ gnc_split_set_property(GObject *object,
|
|||||||
case PROP_LOT:
|
case PROP_LOT:
|
||||||
xaccSplitSetLot(split, g_value_get_object(value));
|
xaccSplitSetLot(split, g_value_get_object(value));
|
||||||
break;
|
break;
|
||||||
default:
|
case PROP_SX_CREDIT_FORMULA:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_CREDIT_FORMULA;
|
||||||
|
qof_instance_set_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
|
case PROP_SX_DEBIT_FORMULA:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_DEBIT_FORMULA;
|
||||||
|
qof_instance_set_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
|
case PROP_SX_ACCOUNT:
|
||||||
|
key = GNC_SX_ID "/" GNC_SX_ACCOUNT;
|
||||||
|
qof_instance_set_kvp (QOF_INSTANCE (split), key, value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -300,6 +335,37 @@ gnc_split_class_init(SplitClass* klass)
|
|||||||
"The lot that this split belongs to.",
|
"The lot that this split belongs to.",
|
||||||
GNC_TYPE_LOT,
|
GNC_TYPE_LOT,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property
|
||||||
|
(gobject_class,
|
||||||
|
PROP_MEMO,
|
||||||
|
g_param_spec_string("sx-debit-formula",
|
||||||
|
"Schedule Transaction Debit Formula",
|
||||||
|
"The formula used to calculate the actual debit "
|
||||||
|
"amount when a real split is generated from this "
|
||||||
|
"SX split.",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property
|
||||||
|
(gobject_class,
|
||||||
|
PROP_MEMO,
|
||||||
|
g_param_spec_string("sx-credit-formula",
|
||||||
|
"Schedule Transaction Credit Formula",
|
||||||
|
"The formula used to calculate the actual credit "
|
||||||
|
"amount when a real split is generated from this "
|
||||||
|
"SX split.",
|
||||||
|
NULL,
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property
|
||||||
|
(gobject_class,
|
||||||
|
PROP_SX_ACCOUNT,
|
||||||
|
g_param_spec_boxed("sx-account",
|
||||||
|
"Scheduled Transaction Account",
|
||||||
|
"The target account for a scheduled transaction split.",
|
||||||
|
GNC_TYPE_GUID,
|
||||||
|
G_PARAM_READWRITE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
|
@ -47,13 +47,14 @@ typedef struct
|
|||||||
{
|
{
|
||||||
Account *acct;
|
Account *acct;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
|
Split *split;
|
||||||
GNCLot *lot;
|
GNCLot *lot;
|
||||||
GncCustomer *cust;
|
GncCustomer *cust;
|
||||||
GncEmployee *emp;
|
GncEmployee *emp;
|
||||||
GncJob *job;
|
GncJob *job;
|
||||||
GncVendor *vend;
|
GncVendor *vend;
|
||||||
};
|
};
|
||||||
GSList *split;
|
GSList *hdlrs;
|
||||||
} Fixture;
|
} Fixture;
|
||||||
|
|
||||||
/* Prototype to shut clang up */
|
/* Prototype to shut clang up */
|
||||||
@ -78,6 +79,13 @@ setup_trans (Fixture *fixture, gconstpointer pData)
|
|||||||
fixture->trans = xaccMallocTransaction (book);
|
fixture->trans = xaccMallocTransaction (book);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setup_split (Fixture *fixture, gconstpointer pData)
|
||||||
|
{
|
||||||
|
QofBook *book = qof_book_new ();
|
||||||
|
fixture->split = xaccMallocSplit (book);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setup_lot (Fixture *fixture, gconstpointer pData)
|
setup_lot (Fixture *fixture, gconstpointer pData)
|
||||||
{
|
{
|
||||||
@ -138,6 +146,39 @@ test_trans_kvp_properties (Fixture *fixture, gconstpointer pData)
|
|||||||
guid_free (guid_r);
|
guid_free (guid_r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_split_kvp_properties (Fixture *fixture, gconstpointer pData)
|
||||||
|
{
|
||||||
|
gchar *debit_formula = "e^xdydx";
|
||||||
|
gchar *credit_formula = "seccostansin";
|
||||||
|
gchar *debit_formula_r, *credit_formula_r;
|
||||||
|
GncGUID *sx_account = guid_malloc ();
|
||||||
|
GncGUID *sx_account_r;
|
||||||
|
|
||||||
|
qof_instance_set (QOF_INSTANCE (fixture->split),
|
||||||
|
"sx-debit-formula", debit_formula,
|
||||||
|
"sx-credit-formula", credit_formula,
|
||||||
|
"sx-account", sx_account,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
|
||||||
|
qof_instance_mark_clean (QOF_INSTANCE (fixture->split));
|
||||||
|
|
||||||
|
qof_instance_get (QOF_INSTANCE (fixture->split),
|
||||||
|
"sx-debit-formula", &debit_formula_r,
|
||||||
|
"sx-credit-formula", &credit_formula_r,
|
||||||
|
"sx-account", &sx_account_r,
|
||||||
|
NULL);
|
||||||
|
g_assert_cmpstr (debit_formula, ==, debit_formula_r);
|
||||||
|
g_assert_cmpstr (credit_formula, ==, credit_formula_r);
|
||||||
|
g_assert (guid_equal (sx_account, sx_account_r));
|
||||||
|
g_assert (!qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
|
||||||
|
g_free (debit_formula_r);
|
||||||
|
g_free (credit_formula_r);
|
||||||
|
guid_free (sx_account);
|
||||||
|
guid_free (sx_account_r);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_lot_kvp_properties (Fixture *fixture, gconstpointer pData)
|
test_lot_kvp_properties (Fixture *fixture, gconstpointer pData)
|
||||||
{
|
{
|
||||||
@ -176,5 +217,6 @@ void test_suite_engine_kvp_properties (void)
|
|||||||
{
|
{
|
||||||
GNC_TEST_ADD (suitename, "Account", Fixture, NULL, setup_account, test_account_kvp_properties, teardown);
|
GNC_TEST_ADD (suitename, "Account", Fixture, NULL, setup_account, test_account_kvp_properties, teardown);
|
||||||
GNC_TEST_ADD (suitename, "Transaction", Fixture, NULL, setup_trans, test_trans_kvp_properties, teardown);
|
GNC_TEST_ADD (suitename, "Transaction", Fixture, NULL, setup_trans, test_trans_kvp_properties, teardown);
|
||||||
|
GNC_TEST_ADD (suitename, "Split", Fixture, NULL, setup_split, test_split_kvp_properties, teardown);
|
||||||
GNC_TEST_ADD (suitename, "Lot", Fixture, NULL, setup_lot, test_lot_kvp_properties, teardown);
|
GNC_TEST_ADD (suitename, "Lot", Fixture, NULL, setup_lot, test_lot_kvp_properties, teardown);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user