static void balance_cell_data_func (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { Account *account; gnc_numeric balance; const gchar *string; GNCPrintAmountInfo print_info; hierarchy_data *data = (hierarchy_data *)user_data; gboolean allow_value; g_return_if_fail (GTK_TREE_MODEL (model)); account = gnc_tree_view_account_get_account_from_iter (model, iter); balance = get_final_balance (data->balance_hash, account); if (gnc_numeric_zero_p (balance)) { string = ""; } else { print_info = gnc_account_print_info (account, FALSE); string = xaccPrintAmount (balance, print_info); } if (xaccAccountGetType(account) == ACCT_TYPE_EQUITY || xaccAccountGetType(account) == ACCT_TYPE_TRADING) { allow_value = FALSE; string = _("zero"); } else { GncAccountMergeDisposition disp; disp = determine_merge_disposition(gnc_book_get_root_account(gnc_get_current_book()), account); if (disp == GNC_ACCOUNT_MERGE_DISPOSITION_CREATE_NEW) { allow_value = !xaccAccountGetPlaceholder(account); } else { allow_value = FALSE; string = _("existing account"); } } g_object_set (G_OBJECT (cell), "text", string, "editable", allow_value, "sensitive", allow_value, NULL); }
static void refresh_details_page (StockSplitInfo *info) { GNCPrintAmountInfo print_info; gnc_commodity *commodity, *currency; Account *account; QofBook *book; GNCPriceDB *db; GList *prices; account = info->acct; g_return_if_fail (account != NULL); print_info = gnc_account_print_info (account, FALSE); gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT (info->distribution_edit), print_info); gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (info->distribution_edit), xaccAccountGetCommoditySCU (account)); commodity = xaccAccountGetCommodity (account); book = gnc_account_get_book (account); db = gnc_pricedb_get_db(book); prices = gnc_pricedb_lookup_latest_any_currency(db, commodity); if (prices) { /* Use the first existing price */ if (gnc_commodity_equiv (commodity, gnc_price_get_currency(prices->data))) currency = gnc_price_get_commodity(prices->data); else currency = gnc_price_get_currency(prices->data); } else { /* Take a wild guess. */ currency = gnc_default_currency (); } gnc_price_list_destroy(prices); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT (info->price_currency_edit), currency); }
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; } }
static int fill_account_list (StockSplitInfo *info, Account *selected_account) { GtkTreeRowReference *reference = NULL; GtkTreeView *view; GtkListStore *list; GtkTreeIter iter; GtkTreePath *path; GList *accounts; GList *node; gint rows = 0; gchar *full_name; view = GTK_TREE_VIEW(info->account_view); list = GTK_LIST_STORE(gtk_tree_view_get_model(view)); gtk_list_store_clear (list); accounts = gnc_account_get_descendants_sorted (gnc_get_current_root_account ()); for (node = accounts; node; node = node->next) { Account *account = node->data; GNCPrintAmountInfo print_info; const gnc_commodity *commodity; gnc_numeric balance; if (!xaccAccountIsPriced(account)) continue; balance = xaccAccountGetBalance (account); if (gnc_numeric_zero_p (balance)) continue; if (xaccAccountGetPlaceholder (account)) continue; commodity = xaccAccountGetCommodity (account); full_name = gnc_account_get_full_name (account); print_info = gnc_account_print_info (account, FALSE); gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, SPLIT_COL_ACCOUNT, account, SPLIT_COL_FULLNAME, full_name, SPLIT_COL_MNEMONIC, gnc_commodity_get_mnemonic(commodity), SPLIT_COL_SHARES, xaccPrintAmount(balance, print_info), -1); if (account == selected_account) { path = gtk_tree_model_get_path(GTK_TREE_MODEL(list), &iter); reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(list), path); gtk_tree_path_free(path); } g_free (full_name); rows++; } g_list_free(accounts); if (reference) { GtkTreeSelection* selection = gtk_tree_view_get_selection(view); path = gtk_tree_row_reference_get_path(reference); gtk_tree_row_reference_free(reference); if (path) { gtk_tree_selection_select_path(selection, path); gtk_tree_view_scroll_to_cell(view, path, NULL, TRUE, 0.5, 0.0); gtk_tree_path_free(path); } } return rows; }
static void gsr2_redraw_all_cb (GncTreeViewSplitReg *view, gpointer user_data) { GNCSplitReg2 *gsr = user_data; gnc_commodity * commodity; GNCPrintAmountInfo print_info; gnc_numeric amount = gnc_numeric_zero(); Account *leader; gboolean reverse; gboolean euro; if ( gsr->summarybar == NULL ) return; leader = gnc_ledger_display2_leader( gsr->ledger ); commodity = xaccAccountGetCommodity( leader ); /* no EURO converson, if account is already EURO or no EURO currency */ if (commodity != NULL) euro = (gnc_is_euro_currency( commodity ) && (strncasecmp(gnc_commodity_get_mnemonic(commodity), "EUR", 3))); else euro = FALSE; print_info = gnc_account_print_info( leader, TRUE ); reverse = gnc_reverse_balance( leader ); gsr2_update_summary_label( gsr->balance_label, xaccAccountGetPresentBalance, leader, print_info, commodity, reverse, euro ); gsr2_update_summary_label( gsr->cleared_label, xaccAccountGetClearedBalance, leader, print_info, commodity, reverse, euro ); gsr2_update_summary_label( gsr->reconciled_label, xaccAccountGetReconciledBalance, leader, print_info, commodity, reverse, euro ); gsr2_update_summary_label( gsr->future_label, xaccAccountGetBalance, leader, print_info, commodity, reverse, euro ); gsr2_update_summary_label( gsr->projectedminimum_label, xaccAccountGetProjectedMinimumBalance, leader, print_info, commodity, reverse, euro ); /* Print the summary share amount */ if (gsr->shares_label != NULL) { char string[256]; print_info = gnc_account_print_info( leader, TRUE ); amount = xaccAccountGetBalance( leader ); if ( reverse ) amount = gnc_numeric_neg( amount ); xaccSPrintAmount( string, amount, print_info ); gnc_set_label_color( gsr->shares_label, amount ); gtk_label_set_text( GTK_LABEL(gsr->shares_label), string ); } /* Print the summary share value */ if (gsr->value_label != NULL) { char string[256]; gnc_commodity *currency = gnc_default_currency (); print_info = gnc_commodity_print_info (currency, TRUE); xaccSPrintAmount (string, amount, print_info); gnc_set_label_color (gsr->value_label, amount); gtk_label_set_text (GTK_LABEL (gsr->value_label), string); } }