mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
* src/engine/gnc-associate-account.c: fix some uses of glib
list routines (they always return the new head of the list). git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3748 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
f107286ac6
commit
81b13646cf
@ -33,15 +33,17 @@
|
|||||||
|
|
||||||
static short module = MOD_ENGINE;
|
static short module = MOD_ENGINE;
|
||||||
|
|
||||||
/* Maps GNCTrackingIncomeCategory to string keys. If this enum changes, update */
|
/* Maps GNCTrackingIncomeCategory to string keys. If this enum
|
||||||
|
changes, update */
|
||||||
|
|
||||||
static char * income_to_key[] = {"income-miscellaneous",
|
static char * income_to_key[] = {"income-miscellaneous",
|
||||||
"income-interest",
|
"income-interest",
|
||||||
"income-dividend"
|
"income-dividend"
|
||||||
"income-long-term-capital-gain",
|
"income-long-term-capital-gain",
|
||||||
"income-short-term-capital-gain"};
|
"income-short-term-capital-gain"};
|
||||||
|
|
||||||
/* Maps GNCTrackingExpenseCategory to string keys. If this enum changes, update */
|
/* Maps GNCTrackingExpenseCategory to string keys. If this enum
|
||||||
|
changes, update */
|
||||||
|
|
||||||
static char * expense_to_key[] = {"expense-miscellaneous",
|
static char * expense_to_key[] = {"expense-miscellaneous",
|
||||||
"expense-commission"};
|
"expense-commission"};
|
||||||
@ -50,8 +52,9 @@ static kvp_frame *
|
|||||||
get_assoc_acc_frame(kvp_frame *account_frame)
|
get_assoc_acc_frame(kvp_frame *account_frame)
|
||||||
{
|
{
|
||||||
kvp_frame *assoc_acc_frame;
|
kvp_frame *assoc_acc_frame;
|
||||||
kvp_value *assoc_acc_frame_kvpvalue = kvp_frame_get_slot(account_frame,
|
kvp_value *assoc_acc_frame_kvpvalue =
|
||||||
"associated-accounts");
|
kvp_frame_get_slot(account_frame, "associated-accounts");
|
||||||
|
|
||||||
assoc_acc_frame = kvp_value_get_frame(assoc_acc_frame_kvpvalue);
|
assoc_acc_frame = kvp_value_get_frame(assoc_acc_frame_kvpvalue);
|
||||||
if(!assoc_acc_frame)
|
if(!assoc_acc_frame)
|
||||||
{
|
{
|
||||||
@ -73,6 +76,7 @@ back_associate_expense_accounts(Account *stock_account,
|
|||||||
kvp_value *val, *stock_acc_guid_kvpval, *stock_acc_category_kvpval;
|
kvp_value *val, *stock_acc_guid_kvpval, *stock_acc_category_kvpval;
|
||||||
const GUID *stock_acc_guid;
|
const GUID *stock_acc_guid;
|
||||||
const GUID *existing_acc_guid;
|
const GUID *existing_acc_guid;
|
||||||
|
|
||||||
stock_acc_guid = xaccAccountGetGUID(stock_account);
|
stock_acc_guid = xaccAccountGetGUID(stock_account);
|
||||||
stock_acc_guid_kvpval = kvp_value_new_guid(stock_acc_guid);
|
stock_acc_guid_kvpval = kvp_value_new_guid(stock_acc_guid);
|
||||||
|
|
||||||
@ -97,7 +101,8 @@ back_associate_expense_accounts(Account *stock_account,
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
static void
|
|
||||||
|
static void
|
||||||
back_associate_income_accounts(Account *stock_account,
|
back_associate_income_accounts(Account *stock_account,
|
||||||
GList *accounts,
|
GList *accounts,
|
||||||
GNCTrackingIncomeCategory category)
|
GNCTrackingIncomeCategory category)
|
||||||
@ -106,6 +111,7 @@ back_associate_income_accounts(Account *stock_account,
|
|||||||
kvp_value *val, *stock_acc_guid_kvpval, *stock_acc_category_kvpval;
|
kvp_value *val, *stock_acc_guid_kvpval, *stock_acc_category_kvpval;
|
||||||
const GUID *stock_acc_guid;
|
const GUID *stock_acc_guid;
|
||||||
const GUID *existing_acc_guid;
|
const GUID *existing_acc_guid;
|
||||||
|
|
||||||
stock_acc_guid = xaccAccountGetGUID(stock_account);
|
stock_acc_guid = xaccAccountGetGUID(stock_account);
|
||||||
stock_acc_guid_kvpval = kvp_value_new_guid(stock_acc_guid);
|
stock_acc_guid_kvpval = kvp_value_new_guid(stock_acc_guid);
|
||||||
|
|
||||||
@ -139,12 +145,11 @@ make_kvpd_on_list(GList *account_list)
|
|||||||
GList *kvp_acc_list = NULL;
|
GList *kvp_acc_list = NULL;
|
||||||
const GUID *acc_id;
|
const GUID *acc_id;
|
||||||
|
|
||||||
for(iter = g_list_last(account_list);
|
for(iter = account_list; iter; iter = g_list_next(iter))
|
||||||
iter;
|
{
|
||||||
iter = g_list_previous(iter))
|
|
||||||
{
|
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
Account *current_account;
|
Account *current_account;
|
||||||
|
|
||||||
current_account = iter->data;
|
current_account = iter->data;
|
||||||
type = xaccAccountGetType(current_account);
|
type = xaccAccountGetType(current_account);
|
||||||
g_return_val_if_fail(type == INCOME || type == EXPENSE, NULL);
|
g_return_val_if_fail(type == INCOME || type == EXPENSE, NULL);
|
||||||
@ -154,6 +159,8 @@ make_kvpd_on_list(GList *account_list)
|
|||||||
kvp_acc_list = g_list_prepend(kvp_acc_list, guid_kvp);
|
kvp_acc_list = g_list_prepend(kvp_acc_list, guid_kvp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kvp_acc_list = g_list_reverse(kvp_acc_list);
|
||||||
|
|
||||||
retval = kvp_value_new_glist_nc(kvp_acc_list);
|
retval = kvp_value_new_glist_nc(kvp_acc_list);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -167,10 +174,11 @@ de_kvp_account_list(kvp_value *kvpd_list)
|
|||||||
GList *expense_acc_list= NULL;
|
GList *expense_acc_list= NULL;
|
||||||
for(; guid_account_list; guid_account_list=g_list_next(guid_account_list))
|
for(; guid_account_list; guid_account_list=g_list_next(guid_account_list))
|
||||||
{
|
{
|
||||||
g_list_prepend(expense_acc_list, xaccAccountLookup(guid_account_list->data));
|
g_list_prepend(expense_acc_list,
|
||||||
|
xaccAccountLookup(guid_account_list->data));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_list_reverse(expense_acc_list);
|
expense_acc_list = g_list_reverse(expense_acc_list);
|
||||||
return expense_acc_list;
|
return expense_acc_list;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -203,6 +211,7 @@ gnc_tracking_associate_income_accounts(Account *stock_account,
|
|||||||
kvp_frame *account_frame, *inc_account_frame;
|
kvp_frame *account_frame, *inc_account_frame;
|
||||||
kvp_value *kvpd_on_account_list;
|
kvp_value *kvpd_on_account_list;
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
|
|
||||||
g_return_if_fail(stock_account);
|
g_return_if_fail(stock_account);
|
||||||
type = xaccAccountGetType(stock_account);
|
type = xaccAccountGetType(stock_account);
|
||||||
g_return_if_fail(type == STOCK || type == MUTUAL);
|
g_return_if_fail(type == STOCK || type == MUTUAL);
|
||||||
@ -236,14 +245,15 @@ gnc_tracking_associate_income_accounts(Account *stock_account,
|
|||||||
* *
|
* *
|
||||||
* Returns : void *
|
* Returns : void *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
void
|
||||||
void gnc_tracking_asssociate_expense_account(Account *stock_account,
|
gnc_tracking_asssociate_expense_account(Account *stock_account,
|
||||||
GNCTrackingExpenseCategory category,
|
GNCTrackingExpenseCategory category,
|
||||||
GList *account_list)
|
GList *account_list)
|
||||||
{
|
{
|
||||||
kvp_frame *account_frame, *expense_acc_frame;
|
kvp_frame *account_frame, *expense_acc_frame;
|
||||||
kvp_value *kvpd_on_account_list;
|
kvp_value *kvpd_on_account_list;
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
|
|
||||||
g_return_if_fail(stock_account);
|
g_return_if_fail(stock_account);
|
||||||
type = xaccAccountGetType(stock_account);
|
type = xaccAccountGetType(stock_account);
|
||||||
g_return_if_fail(type == STOCK || type == MUTUAL);
|
g_return_if_fail(type == STOCK || type == MUTUAL);
|
||||||
@ -274,8 +284,9 @@ void gnc_tracking_asssociate_expense_account(Account *stock_account,
|
|||||||
* Returns : A GList of Account *'s listing the accounts *
|
* Returns : A GList of Account *'s listing the accounts *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
|
||||||
GList *gnc_tracking_find_expense_accounts(Account *stock_account,
|
GList *
|
||||||
GNCTrackingExpenseCategory category)
|
gnc_tracking_find_expense_accounts(Account *stock_account,
|
||||||
|
GNCTrackingExpenseCategory category)
|
||||||
{
|
{
|
||||||
|
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
@ -296,6 +307,7 @@ GList *gnc_tracking_find_expense_accounts(Account *stock_account,
|
|||||||
|
|
||||||
return de_kvp_account_list(kvpd_on_account_list);
|
return de_kvp_account_list(kvpd_on_account_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************\
|
/*********************************************************************\
|
||||||
* gnc_tracking_find_income_accounts *
|
* gnc_tracking_find_income_accounts *
|
||||||
* find out which accounts are associated with a particular *
|
* find out which accounts are associated with a particular *
|
||||||
@ -307,11 +319,10 @@ GList *gnc_tracking_find_expense_accounts(Account *stock_account,
|
|||||||
* *
|
* *
|
||||||
* Returns : A GList of Account *'s listing the accounts *
|
* Returns : A GList of Account *'s listing the accounts *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
GList *
|
||||||
GList *gnc_tracking_find_income_accounts(Account *stock_account,
|
gnc_tracking_find_income_accounts(Account *stock_account,
|
||||||
GNCTrackingIncomeCategory category)
|
GNCTrackingIncomeCategory category)
|
||||||
{
|
{
|
||||||
|
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
kvp_frame *account_frame, *income_acc_frame;
|
kvp_frame *account_frame, *income_acc_frame;
|
||||||
kvp_value *kvpd_on_account_list;
|
kvp_value *kvpd_on_account_list;
|
||||||
@ -340,19 +351,22 @@ GList *gnc_tracking_find_income_accounts(Account *stock_account,
|
|||||||
* Returns : A GList of Account *'s listing the accounts *
|
* Returns : A GList of Account *'s listing the accounts *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
|
||||||
GList *gnc_tracking_find_all_expense_accounts(Account *stock_account)
|
GList *
|
||||||
|
gnc_tracking_find_all_expense_accounts(Account *stock_account)
|
||||||
{
|
{
|
||||||
GList *complete_list=NULL;
|
GList *complete_list=NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < GNC_TR_EXP_N_CATEGORIES; i++)
|
for(i = 0; i < GNC_TR_EXP_N_CATEGORIES; i++)
|
||||||
{
|
{
|
||||||
g_list_concat(complete_list,
|
complete_list =
|
||||||
gnc_tracking_find_expense_accounts(stock_account,
|
g_list_concat(complete_list,
|
||||||
i));
|
gnc_tracking_find_expense_accounts(stock_account, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
return complete_list;
|
return complete_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************\
|
/*********************************************************************\
|
||||||
* gnc_tracking_find_all_income_accounts *
|
* gnc_tracking_find_all_income_accounts *
|
||||||
* find all income accounts associated with a stock account *
|
* find all income accounts associated with a stock account *
|
||||||
@ -362,9 +376,10 @@ GList *gnc_tracking_find_all_expense_accounts(Account *stock_account)
|
|||||||
* Returns : A GList of Account *'s listing the accounts *
|
* Returns : A GList of Account *'s listing the accounts *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
|
||||||
GList *gnc_tracking_find_all_income_accounts(Account *stock_account)
|
GList *
|
||||||
|
gnc_tracking_find_all_income_accounts(Account *stock_account)
|
||||||
{
|
{
|
||||||
GList *complete_list= NULL;
|
GList *complete_list= NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < GNC_TR_EXP_N_CATEGORIES; i++)
|
for(i = 0; i < GNC_TR_EXP_N_CATEGORIES; i++)
|
||||||
@ -375,6 +390,7 @@ GList *gnc_tracking_find_all_income_accounts(Account *stock_account)
|
|||||||
}
|
}
|
||||||
return complete_list;
|
return complete_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************\
|
/*********************************************************************\
|
||||||
* gnc_tracking_find_stock_account *
|
* gnc_tracking_find_stock_account *
|
||||||
* find the stock account associated with this expense/income *
|
* find the stock account associated with this expense/income *
|
||||||
@ -386,10 +402,12 @@ GList *gnc_tracking_find_all_income_accounts(Account *stock_account)
|
|||||||
* Returns : The associated stock account *
|
* Returns : The associated stock account *
|
||||||
\*********************************************************************/
|
\*********************************************************************/
|
||||||
|
|
||||||
Account *gnc_tracking_find_stock_account(Account *inc_or_expense_acc)
|
Account *
|
||||||
|
gnc_tracking_find_stock_account(Account *inc_or_expense_acc)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************\
|
/*********************************************************************\
|
||||||
* gnc_tracking_dissociate_account *
|
* gnc_tracking_dissociate_account *
|
||||||
* remove any association between this income/expense account *
|
* remove any association between this income/expense account *
|
||||||
@ -406,12 +424,14 @@ void
|
|||||||
gnc_tracking_dissociate_account(Account *inc_or_expense_account)
|
gnc_tracking_dissociate_account(Account *inc_or_expense_account)
|
||||||
{
|
{
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
kvp_frame *stock_account_kvpframe, *assoc_acc_kvpframe, *current_account_kvpframe;
|
kvp_frame *stock_account_kvpframe, *assoc_acc_kvpframe;
|
||||||
|
kvp_frame *current_account_kvpframe;
|
||||||
kvp_value *stock_account_kvpval, *acc_list_kvpval, *category_kvpval;
|
kvp_value *stock_account_kvpval, *acc_list_kvpval, *category_kvpval;
|
||||||
const GUID *stock_account_guid, *inc_or_expense_account_guid, *current_guid;
|
const GUID *stock_account_guid, *inc_or_expense_account_guid, *current_guid;
|
||||||
Account *stock_account;
|
Account *stock_account;
|
||||||
char *category_name;
|
char *category_name;
|
||||||
GList *assoc_acc_list, *assoc_acc_list_start;
|
GList *assoc_acc_list, *assoc_acc_list_start;
|
||||||
|
|
||||||
type = xaccAccountGetType(inc_or_expense_account);
|
type = xaccAccountGetType(inc_or_expense_account);
|
||||||
|
|
||||||
g_return_if_fail(type == INCOME || type == EXPENSE);
|
g_return_if_fail(type == INCOME || type == EXPENSE);
|
||||||
@ -435,31 +455,37 @@ gnc_tracking_dissociate_account(Account *inc_or_expense_account)
|
|||||||
|
|
||||||
stock_account_kvpframe = xaccAccountGetSlots(stock_account);
|
stock_account_kvpframe = xaccAccountGetSlots(stock_account);
|
||||||
|
|
||||||
g_return_if_fail(stock_account_kvpval = kvp_frame_get_slot(stock_account_kvpframe,
|
g_return_if_fail(stock_account_kvpval =
|
||||||
"associated-accounts"));
|
kvp_frame_get_slot(stock_account_kvpframe,
|
||||||
|
"associated-accounts"));
|
||||||
|
|
||||||
assoc_acc_kvpframe = kvp_value_get_frame(stock_account_kvpval);
|
assoc_acc_kvpframe = kvp_value_get_frame(stock_account_kvpval);
|
||||||
|
|
||||||
g_return_if_fail(acc_list_kvpval = kvp_frame_get_slot(assoc_acc_kvpframe,
|
g_return_if_fail(acc_list_kvpval = kvp_frame_get_slot(assoc_acc_kvpframe,
|
||||||
category_name));
|
category_name));
|
||||||
g_return_if_fail(assoc_acc_list_start = kvp_value_get_glist(acc_list_kvpval));
|
g_return_if_fail(assoc_acc_list_start =
|
||||||
|
kvp_value_get_glist(acc_list_kvpval));
|
||||||
|
|
||||||
for(assoc_acc_list = assoc_acc_list_start;assoc_acc_list;assoc_acc_list = g_list_next(assoc_acc_list))
|
for(assoc_acc_list = assoc_acc_list_start;
|
||||||
|
assoc_acc_list;
|
||||||
|
assoc_acc_list = g_list_next(assoc_acc_list))
|
||||||
{
|
{
|
||||||
g_return_if_fail(current_guid = kvp_value_get_guid(assoc_acc_list->data));
|
g_return_if_fail(current_guid = kvp_value_get_guid(assoc_acc_list->data));
|
||||||
if(guid_equal(current_guid, inc_or_expense_account_guid))
|
if(guid_equal(current_guid, inc_or_expense_account_guid))
|
||||||
{
|
{
|
||||||
assoc_acc_list_start = g_list_remove_link(assoc_acc_list_start, assoc_acc_list);
|
assoc_acc_list_start =
|
||||||
|
g_list_remove_link(assoc_acc_list_start, assoc_acc_list);
|
||||||
g_list_free_1(assoc_acc_list);
|
g_list_free_1(assoc_acc_list);
|
||||||
acc_list_kvpval = kvp_value_new_glist_nc(assoc_acc_list);
|
acc_list_kvpval = kvp_value_new_glist_nc(assoc_acc_list);
|
||||||
kvp_frame_set_slot_nc(assoc_acc_kvpframe,
|
kvp_frame_set_slot_nc(assoc_acc_kvpframe,
|
||||||
category_name,
|
category_name,
|
||||||
acc_list_kvpval);
|
acc_list_kvpval);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* should never happen */
|
/* should never happen */
|
||||||
PERR("Income/Expense account and stock account disagree on association");
|
PERR("Income/Expense account and stock account disagree on association");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================== END OF FILE ===================== */
|
/* ========================== END OF FILE ===================== */
|
||||||
|
Loading…
Reference in New Issue
Block a user