/* Is current split a security account */ static gboolean gtu_sr_use_security (GncTreeViewSplitReg *view) { RowDepth depth; Account *account = NULL; Split *split; split = gnc_tree_view_split_reg_get_current_split (view); depth = gnc_tree_view_reg_get_selected_row_depth (view); if (!split) return TRUE; if (depth != SPLIT3) return TRUE; if (!account) account = xaccSplitGetAccount (split); if (!account) return TRUE; if (xaccTransUseTradingAccounts (xaccSplitGetParent (split))) { if (!gnc_commodity_is_iso (xaccAccountGetCommodity (account))) return TRUE; } return xaccAccountIsPriced (account); }
/* Sort changed callback */ static void gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data) { GNCSplitReg2 *gsr = user_data; GncTreeViewSplitReg *view; GncTreeModelSplitReg *model; GtkSortType type; gint sortcol; gint sort_depth; const gchar *state_section; GKeyFile *state_file = gnc_state_get_current(); gtk_tree_sortable_get_sort_column_id (sortable, &sortcol, &type); ENTER("sortcol is %d", sortcol); view = gnc_ledger_display2_get_split_view_register (gsr->ledger); model = gnc_ledger_display2_get_split_model_register (gsr->ledger); sort_depth = gnc_tree_view_reg_get_selected_row_depth (view); if (sort_depth != 0) model->sort_depth = sort_depth; model->sort_col = sortcol; model->sort_direction = type; /* Save the sort depth state */ state_section = gnc_tree_view_get_state_section (GNC_TREE_VIEW (view)); g_key_file_set_integer (state_file, state_section, "sort_depth", model->sort_depth); LEAVE("m_sort_col %d, m_sort_direction is %d m_sort_depth is %d", model->sort_col, model->sort_direction, model->sort_depth); if (sortcol != -1) gnc_ledger_display2_refresh (gsr->ledger); }
gboolean gnc_tree_util_split_reg_get_debcred_entry (GncTreeViewSplitReg *view, Transaction *trans, Split *split, gboolean is_blank, gnc_numeric *ret_num, GNCPrintAmountInfo *ret_print_info) { GncTreeModelSplitReg *model; gnc_commodity *currency; model = gnc_tree_view_split_reg_get_model_from_view (view); currency = xaccTransGetCurrency (trans); if (!currency) currency = gnc_default_currency (); if (is_blank) { gnc_numeric imbalance; Account *acc; imbalance = xaccTransGetImbalanceValue (trans); if (gnc_numeric_zero_p (imbalance)) return FALSE; if (xaccTransUseTradingAccounts (trans)) { MonetaryList *imbal_list; gnc_monetary *imbal_mon; imbal_list = xaccTransGetImbalance (trans); if (!imbal_list) { /* No commodity imbalance, there shouldn't be a value imablance. */ return FALSE; } if (imbal_list->next) { /* Multiple currency imbalance. */ gnc_monetary_list_free (imbal_list); return FALSE; } imbal_mon = imbal_list->data; if (!gnc_commodity_equal (gnc_monetary_commodity (*imbal_mon), currency)) { /* Imbalance is in wrong currency */ gnc_monetary_list_free (imbal_list); return FALSE; } if (!gnc_numeric_equal (gnc_monetary_value (*imbal_mon), imbalance)) { /* Value and commodity imbalances differ */ gnc_monetary_list_free (imbal_list); return FALSE; } /* Done with the imbalance list */ gnc_monetary_list_free (imbal_list); } imbalance = gnc_numeric_neg (imbalance); acc = gnc_tree_model_split_reg_get_anchor (model); if (gnc_tree_util_split_reg_needs_conv_rate (view, trans, acc)) { imbalance = gnc_numeric_mul (imbalance, xaccTransGetAccountConvRate (trans, acc), gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND_HALF_UP); } else { imbalance = gnc_numeric_convert (imbalance, gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND_HALF_UP); } *ret_num = imbalance; *ret_print_info = gnc_account_print_info (acc, FALSE); return TRUE; } { gnc_numeric amount; gnc_commodity *split_commodity; GNCPrintAmountInfo print_info; Account *account; gnc_commodity *commodity; account = gnc_tree_model_split_reg_get_anchor (model); commodity = xaccAccountGetCommodity (account); split_commodity = xaccAccountGetCommodity (xaccSplitGetAccount (split)); if (xaccTransUseTradingAccounts (trans)) { gboolean use_symbol, is_current = FALSE; Split *current_split = gnc_tree_view_split_reg_get_current_split (view); RowDepth depth = gnc_tree_view_reg_get_selected_row_depth (view); if ((split == current_split) && (depth == SPLIT3)) is_current = TRUE; if (model->type == STOCK_REGISTER2 || model->type == CURRENCY_REGISTER2 || model->type == PORTFOLIO_LEDGER2) { gnc_commodity *amount_commodity; /* security register. If this split has price and shares columns, use the value, otherwise use the amount. */ if (gtu_sr_use_security (view)) { amount = xaccSplitGetValue (split); amount_commodity = currency; } else { amount = xaccSplitGetAmount (split); amount_commodity = split_commodity; } /* Show the currency if it is not the default currency */ if (is_current || gnc_commodity_equiv (amount_commodity, gnc_default_currency ())) use_symbol = FALSE; else use_symbol = TRUE; print_info = gnc_commodity_print_info (amount_commodity, use_symbol); } else { /* non-security register, always use the split amount. */ amount = xaccSplitGetAmount (split); if (is_current || gnc_commodity_equiv (split_commodity, commodity)) use_symbol = FALSE; else use_symbol = TRUE; print_info = gnc_commodity_print_info (split_commodity, use_symbol); } } else { /* If this account is not a stock/mutual/currency account, and * currency != the account commodity, then use the SplitAmount * instead of the SplitValue. */ switch (model->type) { case STOCK_REGISTER2: case CURRENCY_REGISTER2: case PORTFOLIO_LEDGER2: amount = xaccSplitGetValue (split); print_info = gnc_commodity_print_info (currency, FALSE); break; default: if (commodity && !gnc_commodity_equal (commodity, currency)) /* Convert this to the "local" value */ amount = xaccSplitConvertAmount (split, account); else amount = xaccSplitGetValue (split); print_info = gnc_account_print_info (account, FALSE); break; } } if (gnc_numeric_zero_p (amount)) return FALSE; *ret_num = amount; *ret_print_info = print_info; return TRUE; } }