mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-26 02:40:43 -06:00
Book-Currency Feature step 5
Save a default gain/loss account in a book KVP and clean up some other book-currency items. The changes made are: app-utils/gnc-ui-util.c & h - define new functions: gnc_book_get_book_currency_name, gnc_book_get_default_gain_loss_acct; reflect changed function names: qof_book_get_book_currency_name, gnc_valid_policy_name app-utils/options.scm - reflect changed function name: gnc-valid-policy-name app-utils/test/test-gnc-ui-util.c - include tests for gnc_book_get_default_gain_loss_acct; reflect changed function name: gnc_book_get_book_currency_name engine/policy-p.h - add policy name, description and hint to policy structure engine/policy.c & h - simplify gnc_get_valid_policy_list & define new functions: gnc_valid_policy, PolicyGetName, PolicyGetDescription, PolicyGetHint, xaccGetLIFOPolicy gnome-utils/dialog-options.c - conform to changes to gnc_get_valid_policy_list and use new function gnc_cost_policy_select_new gnome-utils/dialog-utils.c & h - define new function: gnc_cost_policy_select_new libqof/qof/qofbook.cpp & h - define new property: PROP_OPT_DEFAULT_GAINS_ACCOUNT_GUID and new function: qof_book_get_default_gain_loss_acct_guid changed function name: qof_book_get_book_currency_name libqof/qof/qofbookslots.h - define new option: OPTION_NAME_DEFAULT_GAINS_LOSS_ACCT_GUID libqof/qof/test/test-qofbook.c - reflect changed function names: qof_book_get_book_currency_name, gnc_valid_policy_name; add test for qof_book_get_default_gain_loss_acct_guid
This commit is contained in:
parent
2bbc1a193d
commit
3ded9f9b56
@ -295,7 +295,7 @@ gnc_book_use_book_currency (QofBook *book)
|
||||
if (!book) return FALSE;
|
||||
|
||||
policy = qof_book_get_default_gains_policy (book);
|
||||
currency = qof_book_get_book_currency (book);
|
||||
currency = qof_book_get_book_currency_name (book);
|
||||
|
||||
/* If either a default gain/loss policy or a book-currency does not exist,
|
||||
book-currency accounting method not valid */
|
||||
@ -303,11 +303,11 @@ gnc_book_use_book_currency (QofBook *book)
|
||||
return FALSE;
|
||||
|
||||
/* If both exist, both must be valid */
|
||||
if (!gnc_valid_policy (policy) || !gnc_commodity_table_lookup
|
||||
(gnc_commodity_table_get_table
|
||||
(gnc_get_current_book()),
|
||||
GNC_COMMODITY_NS_CURRENCY,
|
||||
currency))
|
||||
if (!gnc_valid_policy_name (policy) || !gnc_commodity_table_lookup
|
||||
(gnc_commodity_table_get_table
|
||||
(gnc_get_current_book()),
|
||||
GNC_COMMODITY_NS_CURRENCY,
|
||||
currency))
|
||||
return FALSE;
|
||||
|
||||
/* If both exist and are valid, there must be no trading accounts flag */
|
||||
@ -322,12 +322,30 @@ gnc_book_use_book_currency (QofBook *book)
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
const gchar *
|
||||
gnc_book_get_book_currency_name (QofBook *book)
|
||||
{
|
||||
if (!book) return NULL;
|
||||
|
||||
if (gnc_book_use_book_currency (book))
|
||||
return qof_book_get_book_currency_name (book);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Returns pointer to Book Currency for book or NULL; determines
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
gnc_commodity *
|
||||
gnc_book_get_book_currency (QofBook *book)
|
||||
{
|
||||
if (!book) return NULL;
|
||||
|
||||
if (gnc_book_use_book_currency (book))
|
||||
return qof_book_get_book_currency (book);
|
||||
return gnc_commodity_table_lookup
|
||||
(gnc_commodity_table_get_table(book),
|
||||
GNC_COMMODITY_NS_CURRENCY,
|
||||
qof_book_get_book_currency_name (book));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -347,6 +365,24 @@ gnc_book_get_default_gains_policy (QofBook *book)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Returns pointer to default gain/loss account for book or NULL; determines
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
Account *
|
||||
gnc_book_get_default_gain_loss_acct (QofBook *book)
|
||||
{
|
||||
Account *gains_account = NULL;
|
||||
|
||||
if (!book) return NULL;
|
||||
|
||||
if (gnc_book_use_book_currency (book))
|
||||
gains_account = xaccAccountLookup
|
||||
(qof_book_get_default_gain_loss_acct_guid (book), book);
|
||||
|
||||
return gains_account;
|
||||
}
|
||||
|
||||
Account *
|
||||
gnc_get_current_root_account (void)
|
||||
{
|
||||
@ -995,6 +1031,9 @@ gnc_default_currency_common (gchar *requested_currency,
|
||||
GNC_COMMODITY_NS_CURRENCY,
|
||||
requested_currency);
|
||||
|
||||
if (gnc_book_use_book_currency (gnc_get_current_book ()))
|
||||
return gnc_book_get_book_currency (gnc_get_current_book ());
|
||||
|
||||
if (gnc_prefs_get_bool (section, GNC_PREF_CURRENCY_CHOICE_OTHER))
|
||||
{
|
||||
mnemonic = gnc_prefs_get_string(section, GNC_PREF_CURRENCY_OTHER);
|
||||
|
@ -94,7 +94,13 @@ gboolean gnc_book_use_book_currency (QofBook *book);
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
const gchar * gnc_book_get_book_currency (QofBook *book);
|
||||
const gchar * gnc_book_get_book_currency_name (QofBook *book);
|
||||
|
||||
/** Returns pointer to Book Currency for book or NULL; determines
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
gnc_commodity * gnc_book_get_book_currency (QofBook *book);
|
||||
|
||||
/** Returns pointer to default gain/loss policy for book or NULL; determines
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
@ -102,6 +108,12 @@ const gchar * gnc_book_get_book_currency (QofBook *book);
|
||||
* method to apply. */
|
||||
const gchar * gnc_book_get_default_gains_policy (QofBook *book);
|
||||
|
||||
/** Returns pointer to default gain/loss account for book or NULL; determines
|
||||
* that both book-currency and default gain/loss policy KVPs exist and that
|
||||
* both are valid, a requirement for the 'book-currency' currency accounting
|
||||
* method to apply. */
|
||||
Account * gnc_book_get_default_gain_loss_acct (QofBook *book);
|
||||
|
||||
Account * gnc_get_current_root_account (void);
|
||||
gnc_commodity_table * gnc_get_current_commodities (void);
|
||||
|
||||
|
@ -1441,7 +1441,7 @@
|
||||
(currency?
|
||||
book-currency-option-path-kvp?))
|
||||
(if gains-policy-option-path-kvp?
|
||||
(gnc-valid-policy
|
||||
(gnc-valid-policy-name
|
||||
gains-policy-option-path-kvp?)))
|
||||
(begin
|
||||
(set! book-currency
|
||||
@ -1464,7 +1464,7 @@
|
||||
(if (legal-val (car x) ok-radiobutton-values)
|
||||
(if (eq? 'book-currency (car x))
|
||||
(if (currency? (currency->scm (cadr x)))
|
||||
(if (gnc-valid-policy (symbol->string (caddr x)))
|
||||
(if (gnc-valid-policy-name (symbol->string (caddr x)))
|
||||
(list #t x)
|
||||
(list #f "cap-gains-policy-option: illegal value"))
|
||||
(list #f "currency-option: illegal value"))
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <glib.h>
|
||||
#include <unittest-support.h>
|
||||
#include <qof.h>
|
||||
/*#include <qofbookslots.h> */
|
||||
#include "test-engine-stuff.h"
|
||||
|
||||
#include "../gnc-ui-util.h"
|
||||
|
||||
@ -64,12 +64,15 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
{
|
||||
const gchar *cur;
|
||||
const gchar *pol;
|
||||
Account *acct, *acc;
|
||||
|
||||
g_test_message( "Testing with no currency accounting method selected" );
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
|
||||
g_test_message( "Testing with trading accounts set to true - t" );
|
||||
@ -77,17 +80,19 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"trading-accts", "t",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with valid book-currency but default-gains-policy set to nonsense" );
|
||||
g_test_message( "Testing with valid book-currency but default-gains-policy set to nonsense and default-gain-loss-account-guid set to random valid acct" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "USD",
|
||||
@ -95,17 +100,23 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "random",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with valid default-gains-policy but book-currency set to nonsense" );
|
||||
g_test_message( "Testing with valid default-gains-policy but book-currency set to nonsense and default-gain-loss-account-guid set to random valid acct" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "myMoney",
|
||||
@ -113,17 +124,23 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency and default-gains-policy set to nonsense" );
|
||||
g_test_message( "Testing with book-currency and default-gains-policy set to nonsense and default-gain-loss-account-guid set to random valid acct" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "myMoney",
|
||||
@ -131,47 +148,65 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "random",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency set and no default-gains-policy" );
|
||||
g_test_message( "Testing with book-currency set and no default-gains-policy and default-gain-loss-account-guid set to random valid acct" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "USD",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with default-gains-policy set and no book-currency" );
|
||||
g_test_message( "Testing with default-gains-policy set and no book-currency and default-gain-loss-account-guid set to random valid acct" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency and default-gains-policy set to valid values and with trading accounts set to true - t" );
|
||||
g_test_message( "Testing with book-currency, default-gains-policy and default-gain-loss-account-guid set to valid values and with trading accounts set to true - t" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"trading-accts", "t",
|
||||
@ -182,17 +217,23 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert (acct == NULL );
|
||||
g_assert( !gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency and default-gains-policy set to valid values and no trading accounts flag" );
|
||||
g_test_message( "Testing with book-currency, default-gains-policy and default-gain-loss-account-guid set to valid values and no trading accounts flag" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "USD",
|
||||
@ -200,10 +241,16 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency( fixture-> book );
|
||||
acc = get_random_account( fixture-> book );
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", qof_entity_get_guid(QOF_INSTANCE(acc)),
|
||||
NULL);
|
||||
cur = gnc_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , "USD" );
|
||||
pol = gnc_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , "fifo" );
|
||||
acct = gnc_book_get_default_gain_loss_acct ( fixture-> book );
|
||||
g_assert ( xaccAccountEqual(acct, acc, TRUE) );
|
||||
g_assert( gnc_book_use_book_currency ( fixture-> book ));
|
||||
qof_book_commit_edit (fixture->book);
|
||||
}
|
||||
|
@ -63,6 +63,9 @@
|
||||
|
||||
struct gncpolicy_s
|
||||
{
|
||||
char *name;
|
||||
char *description;
|
||||
char *hint;
|
||||
GNCLot * (*PolicyGetLot) (GNCPolicy *, Split *split);
|
||||
Split * (*PolicyGetSplit) (GNCPolicy *, GNCLot *lot);
|
||||
void (*PolicyGetLotOpening) (GNCPolicy *, GNCLot *lot,
|
||||
|
@ -67,38 +67,22 @@ GList *
|
||||
gnc_get_valid_policy_list (void)
|
||||
{
|
||||
GList *return_list = NULL;
|
||||
GList *policy_list1 = NULL;
|
||||
GList *policy_list2 = NULL;
|
||||
GList *policy_list3 = NULL;
|
||||
GList *policy_list4 = NULL;
|
||||
|
||||
policy_list1 = g_list_prepend (policy_list1, MANUAL_POLICY_HINT);
|
||||
policy_list1 = g_list_prepend (policy_list1, MANUAL_POLICY_DESC);
|
||||
policy_list1 = g_list_prepend (policy_list1, MANUAL_POLICY);
|
||||
return_list = g_list_prepend (return_list, policy_list1);
|
||||
policy_list2 = g_list_prepend (policy_list2, AVERAGE_POLICY_HINT);
|
||||
policy_list2 = g_list_prepend (policy_list2, AVERAGE_POLICY_DESC);
|
||||
policy_list2 = g_list_prepend (policy_list2, AVERAGE_POLICY);
|
||||
return_list = g_list_prepend (return_list, policy_list2);
|
||||
policy_list3 = g_list_prepend (policy_list3, LIFO_POLICY_HINT);
|
||||
policy_list3 = g_list_prepend (policy_list3, LIFO_POLICY_DESC);
|
||||
policy_list3 = g_list_prepend (policy_list3, LIFO_POLICY);
|
||||
return_list = g_list_prepend (return_list, policy_list3);
|
||||
policy_list4 = g_list_prepend (policy_list4, FIFO_POLICY_HINT);
|
||||
policy_list4 = g_list_prepend (policy_list4, FIFO_POLICY_DESC);
|
||||
policy_list4 = g_list_prepend (policy_list4, FIFO_POLICY);
|
||||
return_list = g_list_prepend (return_list, policy_list4);
|
||||
/* return_list = g_list_prepend (return_list, xaccGetManualPolicy());
|
||||
return_list = g_list_prepend (return_list, xaccGetAveragePolicy()); */
|
||||
return_list = g_list_prepend (return_list, xaccGetLIFOPolicy());
|
||||
return_list = g_list_prepend (return_list, xaccGetFIFOPolicy());
|
||||
|
||||
return return_list;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_valid_policy (const gchar *name)
|
||||
gnc_valid_policy_name (const gchar *policy_name)
|
||||
{
|
||||
GList *list_of_policies = NULL;
|
||||
gboolean ret_val = FALSE;
|
||||
|
||||
if (!name)
|
||||
if (!policy_name)
|
||||
return ret_val;
|
||||
|
||||
list_of_policies = gnc_get_valid_policy_list();
|
||||
@ -111,13 +95,12 @@ gnc_valid_policy (const gchar *name)
|
||||
GList *l = NULL;
|
||||
for (l = list_of_policies; l != NULL; l = l->next)
|
||||
{
|
||||
GList *policy_list = l->data;
|
||||
if (g_strcmp0(policy_list->data, name) == 0)
|
||||
GNCPolicy *list_pcy = l->data;
|
||||
if (g_strcmp0(PolicyGetName (list_pcy), policy_name) == 0)
|
||||
ret_val = TRUE;
|
||||
g_list_free(policy_list);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
return ret_val;
|
||||
return ret_val;
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,6 +191,26 @@ donext:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
PolicyGetName (const GNCPolicy *pcy)
|
||||
{
|
||||
if(!pcy) return NULL;
|
||||
return pcy->name;
|
||||
}
|
||||
|
||||
const char *
|
||||
PolicyGetDescription (const GNCPolicy *pcy)
|
||||
{
|
||||
if(!pcy) return NULL;
|
||||
return pcy->description;
|
||||
}
|
||||
const char *
|
||||
PolicyGetHint (const GNCPolicy *pcy)
|
||||
{
|
||||
if(!pcy) return NULL;
|
||||
return pcy->hint;
|
||||
}
|
||||
|
||||
/* ============================================================== */
|
||||
|
||||
static GNCLot *
|
||||
@ -246,11 +249,6 @@ FIFOPolicyIsOpeningSplit (GNCPolicy *pcy, GNCLot *lot, Split *split)
|
||||
return (split == opening_split);
|
||||
}
|
||||
|
||||
/* ============================================================== */
|
||||
/* Define a single, static policy, since we have no per-object data.
|
||||
* I suppose this could change, but we don't need any better at the
|
||||
* moment ... */
|
||||
|
||||
GNCPolicy *
|
||||
xaccGetFIFOPolicy (void)
|
||||
{
|
||||
@ -259,6 +257,9 @@ xaccGetFIFOPolicy (void)
|
||||
if (!pcy)
|
||||
{
|
||||
pcy = g_new (GNCPolicy, 1);
|
||||
pcy->name = FIFO_POLICY;
|
||||
pcy->description = FIFO_POLICY_DESC;
|
||||
pcy->hint = FIFO_POLICY_HINT;
|
||||
pcy->PolicyGetLot = FIFOPolicyGetLot;
|
||||
pcy->PolicyGetSplit = FIFOPolicyGetSplit;
|
||||
pcy->PolicyGetLotOpening = FIFOPolicyGetLotOpening;
|
||||
@ -267,12 +268,7 @@ xaccGetFIFOPolicy (void)
|
||||
return pcy;
|
||||
}
|
||||
|
||||
/* ============================================================== */
|
||||
/* Stab at implementing the LIFO policy. This is untested.
|
||||
* I'm not sure I got it right.
|
||||
*/
|
||||
|
||||
G_GNUC_UNUSED static GNCLot *
|
||||
static GNCLot *
|
||||
LIFOPolicyGetLot (GNCPolicy *pcy, Split *split)
|
||||
{
|
||||
if (!split) return NULL;
|
||||
@ -280,14 +276,14 @@ LIFOPolicyGetLot (GNCPolicy *pcy, Split *split)
|
||||
split->parent->common_currency);
|
||||
}
|
||||
|
||||
G_GNUC_UNUSED static Split *
|
||||
static Split *
|
||||
LIFOPolicyGetSplit (GNCPolicy *pcy, GNCLot *lot)
|
||||
{
|
||||
return DirectionPolicyGetSplit (pcy, lot, 1);
|
||||
}
|
||||
|
||||
/* This routine is actually identical to FIFO... */
|
||||
G_GNUC_UNUSED static void
|
||||
static void
|
||||
LIFOPolicyGetLotOpening (GNCPolicy *pcy,
|
||||
GNCLot *lot,
|
||||
gnc_numeric *ret_amount, gnc_numeric *ret_value,
|
||||
@ -302,7 +298,7 @@ LIFOPolicyGetLotOpening (GNCPolicy *pcy,
|
||||
}
|
||||
|
||||
/* This routine is actually identical to FIFO... */
|
||||
G_GNUC_UNUSED static gboolean
|
||||
static gboolean
|
||||
LIFOPolicyIsOpeningSplit (GNCPolicy *pcy, GNCLot *lot, Split *split)
|
||||
{
|
||||
Split *opening_split;
|
||||
@ -310,4 +306,23 @@ LIFOPolicyIsOpeningSplit (GNCPolicy *pcy, GNCLot *lot, Split *split)
|
||||
return (split == opening_split);
|
||||
}
|
||||
|
||||
GNCPolicy *
|
||||
xaccGetLIFOPolicy (void)
|
||||
{
|
||||
static GNCPolicy *pcy = NULL;
|
||||
|
||||
if (!pcy)
|
||||
{
|
||||
pcy = g_new (GNCPolicy, 1);
|
||||
pcy->name = LIFO_POLICY;
|
||||
pcy->description = LIFO_POLICY_DESC;
|
||||
pcy->hint = LIFO_POLICY_HINT;
|
||||
pcy->PolicyGetLot = LIFOPolicyGetLot;
|
||||
pcy->PolicyGetSplit = LIFOPolicyGetSplit;
|
||||
pcy->PolicyGetLotOpening = LIFOPolicyGetLotOpening;
|
||||
pcy->PolicyIsOpeningSplit = LIFOPolicyIsOpeningSplit;
|
||||
}
|
||||
return pcy;
|
||||
}
|
||||
|
||||
/* =========================== END OF FILE ======================= */
|
||||
|
@ -40,21 +40,22 @@
|
||||
typedef struct gncpolicy_s GNCPolicy;
|
||||
|
||||
/** Valid Policy List
|
||||
* Provides a glist of glists for implemented policies. For each implemented
|
||||
* policy, this glist contains: name, description, hint, as follows:
|
||||
* glist(
|
||||
* glist("fifo", "First In First Out", "Use oldest lots first.")
|
||||
* glist("lifo", "Last In First Out", "Use newest lots first.")
|
||||
* etc.
|
||||
* )
|
||||
* Both levels of lists must be freed with g_list_free().
|
||||
* Provides a glist of implemented policies.
|
||||
*
|
||||
* List must be freed with g_list_free().
|
||||
*/
|
||||
GList * gnc_get_valid_policy_list (void);
|
||||
|
||||
/** Valid Policy
|
||||
/** Valid Policy Name
|
||||
* Uses the Valid Policy List to determine if a policy name is valid.
|
||||
*/
|
||||
gboolean gnc_valid_policy (const gchar *name);
|
||||
gboolean gnc_valid_policy_name (const gchar *policy_name);
|
||||
|
||||
const char *PolicyGetName (const GNCPolicy *pcy);
|
||||
|
||||
const char *PolicyGetDescription (const GNCPolicy *pcy);
|
||||
|
||||
const char *PolicyGetHint (const GNCPolicy *pcy);
|
||||
|
||||
/** First-in, First-out Policy
|
||||
* This policy will create FIFO Lots. FIFO Lots have the following
|
||||
@ -64,10 +65,24 @@ gboolean gnc_valid_policy (const gchar *name);
|
||||
* -- Splits are added to the lot in date order, with earliest splits
|
||||
* added first.
|
||||
* -- All splits in the lot share the same transaction currency as
|
||||
* the split that opened the lot.
|
||||
* the split that opened the lot (if book-currency book option
|
||||
* selected, this will always be book currency).
|
||||
*/
|
||||
GNCPolicy *xaccGetFIFOPolicy (void);
|
||||
|
||||
/** Last-in, Last-out Policy
|
||||
* This policy will create LIFO Lots. LIFO Lots have the following
|
||||
* properties:
|
||||
* -- The lot is started with the latest posted split that isn't
|
||||
* a part of another lot already.
|
||||
* -- Splits are added to the lot in date order, with latest splits
|
||||
* added first.
|
||||
* -- All splits in the lot share the same transaction currency as
|
||||
* the split that opened the lot (if book-currency book option
|
||||
* selected, this will always be book currency).
|
||||
*/
|
||||
GNCPolicy *xaccGetLIFOPolicy (void);
|
||||
|
||||
#endif /* XACC_POLICY_H */
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
@ -571,8 +571,8 @@ gnc_option_currency_accounting_set_sensitivity(GNCOption *option,
|
||||
for (l = list_of_policies; l != NULL; l = l->next)
|
||||
{
|
||||
/* First item in policy_list is internal name of policy */
|
||||
GList *policy_list = l->data;
|
||||
if (g_strcmp0(policy_list->data,
|
||||
GNCPolicy *pcy = l->data;
|
||||
if (g_strcmp0(PolicyGetName (pcy),
|
||||
gnc_scm_symbol_to_locale_string(list_symbol))
|
||||
== 0)
|
||||
{
|
||||
@ -581,7 +581,6 @@ gnc_option_currency_accounting_set_sensitivity(GNCOption *option,
|
||||
GNC_COMBOTT(default_cost_policy_widget), i);
|
||||
}
|
||||
i++;
|
||||
g_list_free(policy_list);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
}
|
||||
@ -869,17 +868,12 @@ gnc_option_create_currency_accounting_widget (char *name, GNCOption *option)
|
||||
GtkWidget *frame = NULL, *vbox1 = NULL;
|
||||
GtkWidget *widget = NULL;
|
||||
int num_values;
|
||||
GList *list_of_policies = NULL;
|
||||
int i;
|
||||
|
||||
num_values = gnc_option_num_permissible_values(option);
|
||||
|
||||
g_return_val_if_fail(num_values == 3, NULL);
|
||||
|
||||
list_of_policies = gnc_get_valid_policy_list();
|
||||
|
||||
g_return_val_if_fail(g_list_length (list_of_policies) >= 0, NULL);
|
||||
|
||||
/* Create our button frame */
|
||||
frame = gtk_frame_new (name);
|
||||
|
||||
@ -915,7 +909,7 @@ gnc_option_create_currency_accounting_widget (char *name, GNCOption *option)
|
||||
{
|
||||
GtkWidget *widget_label;
|
||||
GtkWidget *book_currency_widget = NULL,
|
||||
*default_cost_policy_widget = NULL;
|
||||
*default_cost_policy_widget = gnc_cost_policy_select_new();
|
||||
|
||||
g_signal_connect(G_OBJECT(widget),
|
||||
"toggled",
|
||||
@ -934,46 +928,8 @@ gnc_option_create_currency_accounting_widget (char *name, GNCOption *option)
|
||||
gtk_box_pack_start (GTK_BOX (vbox2),
|
||||
book_currency_widget, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
|
||||
if (list_of_policies)
|
||||
if (default_cost_policy_widget)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
char *itemstring;
|
||||
char *description;
|
||||
GList *l = NULL;
|
||||
|
||||
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
|
||||
/* Add values to the list store, entry and tooltip */
|
||||
for (l = list_of_policies; l != NULL; l = l->next)
|
||||
{
|
||||
GList *policy_list = l->data;
|
||||
/* First item in policy_list is internal name of policy */
|
||||
policy_list = policy_list->next;
|
||||
/* Second item in policy_list is policy description */
|
||||
itemstring = policy_list->data;
|
||||
policy_list = policy_list->next;
|
||||
/* Third item in policy_list is policy hint */
|
||||
description = policy_list->data;
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set
|
||||
(store,
|
||||
&iter,
|
||||
0,
|
||||
(itemstring && *itemstring) ? _(itemstring) : "",
|
||||
1,
|
||||
(description && *description) ? _(description) : "",
|
||||
-1);
|
||||
g_list_free(policy_list);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
/* Create the new Combo with tooltip and add the store */
|
||||
default_cost_policy_widget = GTK_WIDGET(gnc_combott_new());
|
||||
g_object_set( G_OBJECT( default_cost_policy_widget ),
|
||||
"model",
|
||||
GTK_TREE_MODEL(store),
|
||||
NULL );
|
||||
g_object_unref(store);
|
||||
|
||||
g_signal_connect(G_OBJECT(default_cost_policy_widget), "changed",
|
||||
G_CALLBACK(gnc_option_multichoice_cb), option);
|
||||
}
|
||||
@ -3089,8 +3045,9 @@ gnc_option_set_ui_value_currency_accounting (GNCOption *option,
|
||||
{
|
||||
/* First item in policy_list is internal name of
|
||||
policy */
|
||||
GList *policy_list = l->data;
|
||||
if (g_strcmp0(policy_list->data,
|
||||
GNCPolicy *pcy = l->data;
|
||||
|
||||
if (g_strcmp0(PolicyGetName (pcy),
|
||||
gnc_scm_symbol_to_locale_string(list_symbol))
|
||||
== 0)
|
||||
{
|
||||
@ -3101,7 +3058,6 @@ gnc_option_set_ui_value_currency_accounting (GNCOption *option,
|
||||
i);
|
||||
}
|
||||
i++;
|
||||
g_list_free(policy_list);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
}
|
||||
@ -3470,11 +3426,10 @@ gnc_option_get_ui_value_currency_accounting (GNCOption *option, GtkWidget *widge
|
||||
gint i = 0;
|
||||
for (l = list_of_policies; l != NULL; l = l->next)
|
||||
{
|
||||
GList *policy_list = l->data;
|
||||
GNCPolicy *pcy = l->data;
|
||||
if(i == policy_index)
|
||||
str = policy_list->data;
|
||||
str = PolicyGetName (pcy);
|
||||
i++;
|
||||
g_list_free(policy_list);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
}
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "gnc-euro.h"
|
||||
#include "gnc-ui-util.h"
|
||||
#include "gnc-prefs.h"
|
||||
#include "gnc-combott.h"
|
||||
#include "guile-util.h"
|
||||
#include "gnc-main-window.h"
|
||||
#include <gnc-gdate-utils.h>
|
||||
@ -580,8 +581,8 @@ gnc_dialog_run (GtkDialog *dialog, const gchar *pref_name)
|
||||
|
||||
/* If this is a new book, this function can be used to display book options
|
||||
* dialog so user can specify options, before any transactions can be
|
||||
* imported/entered, since they can affect how transactions are created
|
||||
* Note: This dialog is modal! */
|
||||
* imported/entered, since the book options can affect how transactions are
|
||||
* created. Note: This dialog is modal! */
|
||||
gboolean
|
||||
gnc_new_book_option_display (GtkWidget *parent)
|
||||
{
|
||||
@ -603,3 +604,52 @@ gnc_new_book_option_display (GtkWidget *parent)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* This function returns a widget for selecting a cost policy
|
||||
*/
|
||||
GtkWidget *
|
||||
gnc_cost_policy_select_new (void)
|
||||
{
|
||||
GtkWidget *cost_policy_widget = NULL;
|
||||
GList *list_of_policies = NULL;
|
||||
|
||||
list_of_policies = gnc_get_valid_policy_list();
|
||||
|
||||
g_return_val_if_fail(g_list_length (list_of_policies) >= 0, NULL);
|
||||
if (list_of_policies)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
const char *description;
|
||||
const char *hintstring;
|
||||
GList *l = NULL;
|
||||
|
||||
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
|
||||
/* Add values to the list store, entry and tooltip */
|
||||
for (l = list_of_policies; l != NULL; l = l->next)
|
||||
{
|
||||
GNCPolicy *pcy = l->data;
|
||||
description = PolicyGetDescription(pcy);
|
||||
hintstring = PolicyGetHint(pcy);
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set
|
||||
(store,
|
||||
&iter,
|
||||
0,
|
||||
(description && *description) ? _(description) : "",
|
||||
1,
|
||||
(hintstring && *hintstring) ? _(hintstring) : "",
|
||||
-1);
|
||||
}
|
||||
g_list_free(list_of_policies);
|
||||
/* Create the new Combo with tooltip and add the store */
|
||||
cost_policy_widget = GTK_WIDGET(gnc_combott_new());
|
||||
g_object_set( G_OBJECT( cost_policy_widget ),
|
||||
"model",
|
||||
GTK_TREE_MODEL(store),
|
||||
NULL );
|
||||
g_object_unref(store);
|
||||
}
|
||||
return cost_policy_widget;
|
||||
}
|
||||
|
||||
|
@ -101,8 +101,13 @@ gnc_dialog_run(GtkDialog *dialog, const gchar *pref_key);
|
||||
|
||||
/* If this is a new book, this function can be used to display book options
|
||||
* dialog so user can specify options, before any transactions can be
|
||||
* imported/entered, since they can affect how transactions are created
|
||||
* Note: This dialog is modal! */
|
||||
* imported/entered, since the book options can affect how transactions are
|
||||
* created. Note: This dialog is modal! */
|
||||
gboolean gnc_new_book_option_display (GtkWidget *parent);
|
||||
|
||||
/** This function returns a widget for selecting a cost policy
|
||||
*/
|
||||
GtkWidget *
|
||||
gnc_cost_policy_select_new (void);
|
||||
|
||||
#endif /* DIALOG_UTILS_H */
|
||||
|
@ -69,17 +69,22 @@ enum
|
||||
PROP_0,
|
||||
// PROP_ROOT_ACCOUNT, /* Table */
|
||||
// PROP_ROOT_TEMPLATE, /* Table */
|
||||
/* keep trading accounts property, while adding book-currency and default
|
||||
gains properties, so that files prior to 2.7 can be read/processed; GUI
|
||||
changed to use all three properties as of 2.7. Trading accounts, on the
|
||||
one hand, and book-currency plus default-gains-policy, on the other,
|
||||
are mutually exclusive */
|
||||
/* keep trading accounts property, while adding book-currency, default gains
|
||||
policy and default gains account properties, so that files prior to 2.7 can
|
||||
be read/processed; GUI changed to use all four properties as of 2.7.
|
||||
Trading accounts, on the one hand, and book-currency plus default-gains-
|
||||
policy, and optionally, default gains account, on the other, are mutually
|
||||
exclusive */
|
||||
PROP_OPT_TRADING_ACCOUNTS, /* KVP */
|
||||
/* Book currency and default gains properties only apply if currency
|
||||
/* Book currency and default gains policy properties only apply if currency
|
||||
accounting method selected in GUI is 'book-currency'; both required and
|
||||
both are exclusive with trading accounts */
|
||||
PROP_OPT_BOOK_CURRENCY, /* KVP */
|
||||
PROP_OPT_DEFAULT_GAINS_POLICY, /* KVP */
|
||||
/* Default gains account property only applies if currency accounting method
|
||||
selected in GUI is 'book-currency'; its use is optional but exclusive with
|
||||
trading accounts */
|
||||
PROP_OPT_DEFAULT_GAINS_ACCOUNT_GUID, /* KVP */
|
||||
PROP_OPT_AUTO_READONLY_DAYS,/* KVP */
|
||||
PROP_OPT_NUM_FIELD_SOURCE, /* KVP */
|
||||
PROP_OPT_DEFAULT_BUDGET, /* KVP */
|
||||
@ -158,6 +163,13 @@ qof_book_get_property (GObject* object,
|
||||
qof_instance_get_kvp (QOF_INSTANCE (book), key, value);
|
||||
g_free (key);
|
||||
break;
|
||||
case PROP_OPT_DEFAULT_GAINS_ACCOUNT_GUID:
|
||||
key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH,
|
||||
OPTION_SECTION_ACCOUNTS,
|
||||
OPTION_NAME_DEFAULT_GAINS_LOSS_ACCT_GUID);
|
||||
qof_instance_get_kvp (QOF_INSTANCE (book), key, value);
|
||||
g_free (key);
|
||||
break;
|
||||
case PROP_OPT_AUTO_READONLY_DAYS:
|
||||
key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH,
|
||||
OPTION_SECTION_ACCOUNTS,
|
||||
@ -229,6 +241,13 @@ qof_book_set_property (GObject *object,
|
||||
qof_instance_set_kvp (QOF_INSTANCE (book), key, value);
|
||||
g_free (key);
|
||||
break;
|
||||
case PROP_OPT_DEFAULT_GAINS_ACCOUNT_GUID:
|
||||
key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH,
|
||||
OPTION_SECTION_ACCOUNTS,
|
||||
OPTION_NAME_DEFAULT_GAINS_LOSS_ACCT_GUID);
|
||||
qof_instance_set_kvp (QOF_INSTANCE (book), key, value);
|
||||
g_free (key);
|
||||
break;
|
||||
case PROP_OPT_AUTO_READONLY_DAYS:
|
||||
key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH,
|
||||
OPTION_SECTION_ACCOUNTS,
|
||||
@ -307,6 +326,18 @@ qof_book_class_init (QofBookClass *klass)
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_OPT_DEFAULT_GAINS_ACCOUNT_GUID,
|
||||
g_param_spec_boxed("default-gain-loss-account-guid",
|
||||
"Select Default Gain/Loss Account",
|
||||
"The default account to be used for calculated gains/losses on "
|
||||
"dispositions of currencies/commodities other than "
|
||||
"'book-currency' when 'book-currency' currency accounting "
|
||||
"method selected; requires valid book-currency.",
|
||||
GNC_TYPE_GUID,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property
|
||||
(gobject_class,
|
||||
PROP_OPT_NUM_FIELD_SOURCE,
|
||||
@ -951,35 +982,15 @@ qof_book_normalize_counter_format_internal(const gchar *p,
|
||||
* KVP, or NULL; does not validate contents nor determine if there is a valid
|
||||
* default gain/loss policy, both of which are required, for the
|
||||
* 'book-currency' currency accounting method to apply. Use instead
|
||||
* 'gnc_book_get_book_currency' which does these validations. */
|
||||
* 'gnc_book_get_book_currency_name' which does these validations. */
|
||||
const gchar *
|
||||
qof_book_get_book_currency (QofBook *book)
|
||||
qof_book_get_book_currency_name (QofBook *book)
|
||||
{
|
||||
KvpFrame *kvp;
|
||||
KvpValue *value;
|
||||
|
||||
if (!book)
|
||||
{
|
||||
PWARN ("No book!!!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Get the KVP from the current book */
|
||||
kvp = qof_instance_get_slots (QOF_INSTANCE (book));
|
||||
|
||||
if (!kvp)
|
||||
{
|
||||
PWARN ("Book has no KVP_Frame");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* See if there is a book currency. */
|
||||
value = kvp->get_slot({KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS,
|
||||
OPTION_NAME_BOOK_CURRENCY});
|
||||
if (!value) /* No book-currency */
|
||||
return nullptr;
|
||||
|
||||
return value->get<const char*>();
|
||||
const gchar *opt = NULL;
|
||||
qof_instance_get (QOF_INSTANCE (book),
|
||||
"book-currency", &opt,
|
||||
NULL);
|
||||
return opt;
|
||||
}
|
||||
|
||||
/** Returns pointer to default gain/loss policy for book, if one exists in the
|
||||
@ -990,35 +1001,28 @@ qof_book_get_book_currency (QofBook *book)
|
||||
const gchar *
|
||||
qof_book_get_default_gains_policy (QofBook *book)
|
||||
{
|
||||
KvpFrame *kvp;
|
||||
KvpValue *value;
|
||||
|
||||
if (!book)
|
||||
{
|
||||
PWARN ("No book!!!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Get the KVP from the current book */
|
||||
kvp = qof_instance_get_slots (QOF_INSTANCE (book));
|
||||
|
||||
if (!kvp)
|
||||
{
|
||||
PWARN ("Book has no KVP_Frame");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* See if there is a default gain/loss policy */
|
||||
value = kvp->get_slot({KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS,
|
||||
OPTION_NAME_DEFAULT_GAINS_POLICY});
|
||||
if (!value)
|
||||
/* No default gain/loss policy, therefore not valid book-currency
|
||||
accounting method */
|
||||
return nullptr;
|
||||
|
||||
return g_strdup(value->get<const char*>());
|
||||
const gchar *opt = NULL;
|
||||
qof_instance_get (QOF_INSTANCE (book),
|
||||
"default-gains-policy", &opt,
|
||||
NULL);
|
||||
return opt;
|
||||
}
|
||||
|
||||
/** Returns pointer to default gain/loss account GUID for book, if one exists in
|
||||
* the KVP, or NULL; does not validate contents nor determine if there is a
|
||||
* valid book-currency, both of which are required, for the 'book-currency'
|
||||
* currency accounting method to apply. Use instead
|
||||
* 'gnc_book_get_default_gain_loss_acct' which does these validations. */
|
||||
const GncGUID *
|
||||
qof_book_get_default_gain_loss_acct_guid (QofBook *book)
|
||||
{
|
||||
GncGUID *guid = NULL;
|
||||
qof_instance_get (QOF_INSTANCE (book),
|
||||
"default-gain-loss-account-guid", &guid,
|
||||
NULL);
|
||||
return guid;
|
||||
|
||||
}
|
||||
|
||||
/* Determine whether this book uses trading accounts */
|
||||
gboolean
|
||||
|
@ -253,8 +253,8 @@ gboolean qof_book_use_trading_accounts (const QofBook *book);
|
||||
* KVP, or NULL; does not validate contents nor determine if there is a valid
|
||||
* default gain/loss policy, both of which are required, for the
|
||||
* 'book-currency' currency accounting method to apply. Use instead
|
||||
* 'gnc_book_get_book_currency' which does these validations. */
|
||||
const gchar * qof_book_get_book_currency (QofBook *book);
|
||||
* 'gnc_book_get_book_currency_name' which does these validations. */
|
||||
const gchar * qof_book_get_book_currency_name (QofBook *book);
|
||||
|
||||
/** Returns pointer to default gain/loss policy for book, if one exists in the
|
||||
* KVP, or NULL; does not validate contents nor determine if there is a valid
|
||||
@ -263,6 +263,13 @@ const gchar * qof_book_get_book_currency (QofBook *book);
|
||||
* 'gnc_book_get_default_gains_policy' which does these validations. */
|
||||
const gchar * qof_book_get_default_gains_policy (QofBook *book);
|
||||
|
||||
/** Returns pointer to default gain/loss account GUID for book, if one exists in
|
||||
* the KVP, or NULL; does not validate contents nor determine if there is a
|
||||
* valid book-currency, both of which are required, for the 'book-currency'
|
||||
* currency accounting method to apply. Use instead
|
||||
* 'gnc_book_get_default_gain_loss_acct' which does these validations. */
|
||||
const GncGUID * qof_book_get_default_gain_loss_acct_guid (QofBook *book);
|
||||
|
||||
/** Returns TRUE if the auto-read-only feature should be used, otherwise
|
||||
* FALSE. This is just a wrapper on qof_book_get_num_days_autoreadonly() == 0. */
|
||||
gboolean qof_book_uses_autoreadonly (const QofBook *book);
|
||||
|
@ -67,6 +67,7 @@
|
||||
#define OPTION_NAME_CURRENCY_ACCOUNTING N_("Currency Accounting")
|
||||
#define OPTION_NAME_BOOK_CURRENCY N_("Book Currency")
|
||||
#define OPTION_NAME_DEFAULT_GAINS_POLICY N_("Default Gains Policy")
|
||||
#define OPTION_NAME_DEFAULT_GAINS_LOSS_ACCT_GUID N_("Default Gain or Loss Account")
|
||||
#define OPTION_NAME_AUTO_READONLY_DAYS N_("Day Threshold for Read-Only Transactions (red line)")
|
||||
#define OPTION_NAME_NUM_FIELD_SOURCE N_("Use Split Action Field for Number")
|
||||
|
||||
@ -82,6 +83,7 @@
|
||||
* OPTION-NAME-CURRENCY-ACCOUNTING
|
||||
* OPTION-NAME-BOOK-CURRENCY
|
||||
* OPTION_NAME_DEFAULT_GAINS_POLICY
|
||||
* OPTION_NAME_DEFAULT_GAINS_LOSS_ACCT_GUID
|
||||
* OPTION-NAME-AUTO-READONLY-DAYS
|
||||
* OPTION-NAME_NUM-FIELD-SOURCE
|
||||
* OPTION-SECTION-BUDGETING
|
||||
|
@ -460,35 +460,43 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
{
|
||||
const gchar *cur;
|
||||
const gchar *pol;
|
||||
GncGUID *acct;
|
||||
const GncGUID *acct2;
|
||||
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert (acct2 == NULL );
|
||||
|
||||
g_test_message( "Testing with existing trading accounts set to true - t" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"trading-accts", "t",
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert (acct2 == NULL );
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency set and no default-gains-policy" );
|
||||
g_test_message( "Testing with book-currency set and no default-gains-policy or account" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "USD",
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , "USD" );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , NULL );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert (acct2 == NULL );
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
@ -499,10 +507,12 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , NULL );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , "fifo" );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert (acct2 == NULL );
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
@ -516,16 +526,18 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "random",
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , "myMoney" );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , "random" );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert (acct2 == NULL );
|
||||
qof_book_commit_edit (fixture->book);
|
||||
|
||||
qof_book_destroy( fixture->book );
|
||||
fixture->book = qof_book_new();
|
||||
|
||||
g_test_message( "Testing with book-currency and default-gains-policy set to valid values" );
|
||||
g_test_message( "Testing with book-currency, default-gains-policy and default-gains-account set to valid values" );
|
||||
qof_book_begin_edit (fixture->book);
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"book-currency", "USD",
|
||||
@ -533,10 +545,18 @@ test_book_use_book_currency( Fixture *fixture, gconstpointer pData )
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gains-policy", "fifo",
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency( fixture-> book );
|
||||
acct = guid_new();
|
||||
qof_instance_set (QOF_INSTANCE (fixture->book),
|
||||
"default-gain-loss-account-guid", acct,
|
||||
NULL);
|
||||
cur = qof_book_get_book_currency_name( fixture-> book );
|
||||
g_assert_cmpstr( cur, == , "USD" );
|
||||
pol = qof_book_get_default_gains_policy( fixture-> book );
|
||||
g_assert_cmpstr( pol, == , "fifo" );
|
||||
acct2 = qof_book_get_default_gain_loss_acct_guid( fixture-> book );
|
||||
g_assert_cmpstr( guid_to_string (acct), == , guid_to_string (acct2) );
|
||||
g_assert (guid_equal(acct, acct2));
|
||||
guid_free (acct);
|
||||
qof_book_commit_edit (fixture->book);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user