From e5e386d6b14dc7bf9366045c45094760a2753a67 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Mon, 21 Oct 2013 13:10:14 -0700 Subject: [PATCH] Add kvp properties sx-credit-numeric, sx-debit-numeric, ax-shares, and online-id to Split. --- src/engine/Split.c | 91 +++++++++++++++++++- src/engine/test/test-engine-kvp-properties.c | 24 +++++- 2 files changed, 110 insertions(+), 5 deletions(-) diff --git a/src/engine/Split.c b/src/engine/Split.c index 47d2d20f65..9107e7aa77 100644 --- a/src/engine/Split.c +++ b/src/engine/Split.c @@ -66,6 +66,9 @@ static QofLogModule log_module = GNC_MOD_ENGINE; #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_DEBIT_NUMERIC "debit-numeric" +#define GNC_SX_SHARES "shares" enum { @@ -77,10 +80,14 @@ enum PROP_RECONCILE_DATE, PROP_TX, PROP_ACCOUNT, - PROP_SX_CREDIT_FORMULA, - PROP_SX_DEBIT_FORMULA, PROP_SX_ACCOUNT, + PROP_SX_CREDIT_FORMULA, + PROP_SX_CREDIT_NUMERIC, + PROP_SX_DEBIT_FORMULA, + PROP_SX_DEBIT_NUMERIC, + PROP_SX_SHARES, PROP_LOT, + PROP_ONLINE_ACCOUNT, }; /* GObject Initialization */ @@ -171,14 +178,30 @@ gnc_split_get_property(GObject *object, key = GNC_SX_ID "/" GNC_SX_CREDIT_FORMULA; qof_instance_get_kvp (QOF_INSTANCE (split), key, value); break; + case PROP_SX_CREDIT_NUMERIC: + key = GNC_SX_ID "/" GNC_SX_CREDIT_NUMERIC; + 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_DEBIT_NUMERIC: + key = GNC_SX_ID "/" GNC_SX_DEBIT_NUMERIC; + 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; + case PROP_SX_SHARES: + key = GNC_SX_ID "/" GNC_SX_SHARES; + qof_instance_get_kvp (QOF_INSTANCE (split), key, value); + break; + case PROP_ONLINE_ACCOUNT: + key = "online_id"; + qof_instance_get_kvp (QOF_INSTANCE (split), key, value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -230,14 +253,30 @@ gnc_split_set_property(GObject *object, key = GNC_SX_ID "/" GNC_SX_CREDIT_FORMULA; qof_instance_set_kvp (QOF_INSTANCE (split), key, value); break; + case PROP_SX_CREDIT_NUMERIC: + key = GNC_SX_ID "/" GNC_SX_CREDIT_NUMERIC; + 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_DEBIT_NUMERIC: + key = GNC_SX_ID "/" GNC_SX_DEBIT_NUMERIC; + 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; + case PROP_SX_SHARES: + key = GNC_SX_ID "/" GNC_SX_SHARES; + qof_instance_set_kvp (QOF_INSTANCE (split), key, value); + break; + case PROP_ONLINE_ACCOUNT: + key = "online_id"; + qof_instance_set_kvp (QOF_INSTANCE (split), key, value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -338,7 +377,7 @@ gnc_split_class_init(SplitClass* klass) g_object_class_install_property (gobject_class, - PROP_MEMO, + PROP_SX_DEBIT_FORMULA, g_param_spec_string("sx-debit-formula", "Schedule Transaction Debit Formula", "The formula used to calculate the actual debit " @@ -349,7 +388,17 @@ gnc_split_class_init(SplitClass* klass) g_object_class_install_property (gobject_class, - PROP_MEMO, + PROP_SX_DEBIT_NUMERIC, + g_param_spec_boxed("sx-debit-numeric", + "Scheduled Transaction Debit Numeric", + "Numeric value to plug into the Debit Formula when a " + "real split is generated from this SX split.", + GNC_TYPE_NUMERIC, + G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_SX_CREDIT_FORMULA, g_param_spec_string("sx-credit-formula", "Schedule Transaction Credit Formula", "The formula used to calculate the actual credit " @@ -359,6 +408,30 @@ gnc_split_class_init(SplitClass* klass) G_PARAM_READWRITE)); g_object_class_install_property + (gobject_class, + PROP_SX_CREDIT_NUMERIC, + g_param_spec_boxed("sx-credit-numeric", + "Scheduled Transaction Credit Numeric", + "Numeric value to plug into the Credit Formula when a " + "real split is generated from this SX split.", + GNC_TYPE_NUMERIC, + G_PARAM_READWRITE)); +/* FIXME: PROP_SX_SHARES should be stored as a gnc_numeric, but the function + * which uses it, gnc_template_register_save_shares_cell, stores a + * phony string. This is maintained until backwards compatibility can + * be established. + */ + g_object_class_install_property + (gobject_class, + PROP_SX_SHARES, + g_param_spec_string("sx-shares", + "Scheduled Transaction Shares", + "Numeric value of shares to insert in a new split when " + "it's 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", @@ -366,6 +439,16 @@ gnc_split_class_init(SplitClass* klass) "The target account for a scheduled transaction split.", GNC_TYPE_GUID, G_PARAM_READWRITE)); + + g_object_class_install_property + (gobject_class, + PROP_ONLINE_ACCOUNT, + g_param_spec_string ("online-id", + "Online Account ID", + "The online account which corresponds to this " + "account for OFX/HCBI import", + NULL, + G_PARAM_READWRITE)); } /********************************************************************\ diff --git a/src/engine/test/test-engine-kvp-properties.c b/src/engine/test/test-engine-kvp-properties.c index 509bafc780..861531ffbd 100644 --- a/src/engine/test/test-engine-kvp-properties.c +++ b/src/engine/test/test-engine-kvp-properties.c @@ -151,14 +151,24 @@ test_split_kvp_properties (Fixture *fixture, gconstpointer pData) { gchar *debit_formula = "e^xdydx"; gchar *credit_formula = "seccostansin"; - gchar *debit_formula_r, *credit_formula_r; + gchar *sx_shares = "43"; + gchar *online_id = "my_online_id"; + gchar *debit_formula_r, *credit_formula_r, *sx_shares_r; + gchar *online_id_r; GncGUID *sx_account = guid_malloc (); GncGUID *sx_account_r; + gnc_numeric debit_numeric = gnc_numeric_create (123, 456); + gnc_numeric credit_numeric = gnc_numeric_create (789, 456); + gnc_numeric *debit_numeric_r, *credit_numeric_r; qof_instance_set (QOF_INSTANCE (fixture->split), "sx-debit-formula", debit_formula, + "sx-debit-numeric", &debit_numeric, "sx-credit-formula", credit_formula, + "sx-credit-numeric", &credit_numeric, "sx-account", sx_account, + "sx-shares", sx_shares, + "online-id", online_id, NULL); g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split))); @@ -166,15 +176,27 @@ test_split_kvp_properties (Fixture *fixture, gconstpointer pData) qof_instance_get (QOF_INSTANCE (fixture->split), "sx-debit-formula", &debit_formula_r, + "sx-debit-numeric", &debit_numeric_r, "sx-credit-formula", &credit_formula_r, + "sx-credit-numeric", &credit_numeric_r, "sx-account", &sx_account_r, + "sx-shares", &sx_shares_r, + "online-id", &online_id_r, NULL); g_assert_cmpstr (debit_formula, ==, debit_formula_r); + g_assert (gnc_numeric_equal (debit_numeric, *debit_numeric_r)); g_assert_cmpstr (credit_formula, ==, credit_formula_r); + g_assert (gnc_numeric_equal (credit_numeric, *credit_numeric_r)); g_assert (guid_equal (sx_account, sx_account_r)); + g_assert_cmpstr (sx_shares, ==, sx_shares_r); + g_assert_cmpstr (online_id, ==, online_id_r); g_assert (!qof_instance_is_dirty (QOF_INSTANCE (fixture->split))); g_free (debit_formula_r); + g_free (debit_numeric_r); g_free (credit_formula_r); + g_free (credit_numeric_r); + g_free (sx_shares_r); + g_free (online_id_r); guid_free (sx_account); guid_free (sx_account_r); }