33 #include <glib/gi18n.h>
35 #include "gnc-split-reg2.h"
36 #include "gnc-tree-view-split-reg.h"
37 #include "gnc-tree-control-split-reg.h"
38 #include "gnc-ledger-display2.h"
42 #include "gnome-utils/gnc-warnings.h"
43 #include "dialog-utils.h"
45 #define STATE_SECTION_REG_PREFIX "Register"
46 #define STATE_SECTION_GEN_LEDGER "General Ledger"
53 static GtkWidget* add_summary_label (GtkWidget *summarybar,
54 const char *label_str);
56 static void gnc_split_reg2_determine_read_only (
GNCSplitReg2 *gsr);
58 static void gnc_split_reg2_determine_account_pr (
GNCSplitReg2 *gsr);
66 static void gsr2_setup_status_widgets (
GNCSplitReg2 *gsr);
68 static void gsr2_update_summary_label (GtkWidget *label,
69 xaccGetBalanceFn getter,
83 static void gsr2_emit_simple_signal (
GNCSplitReg2 *gsr,
const char *sigName);
85 static void gsr2_scroll_value_changed_cb (GtkAdjustment *adj, gpointer user_data);
86 static gboolean gsr2_scroll_button_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data);
89 void gnc_split_reg2_style_ledger_cb (GtkWidget *w, gpointer data);
90 void gnc_split_reg2_style_auto_ledger_cb (GtkWidget *w, gpointer data);
91 void gnc_split_reg2_style_journal_cb (GtkWidget *w, gpointer data);
92 void gnc_split_reg2_double_line_cb (GtkWidget *w, gpointer data);
94 void gnc_split_reg2_destroy_cb (GtkWidget *widget, gpointer data);
100 static void gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data);
104 gnc_split_reg2_get_type (
void)
106 static GType gnc_split_reg2_type = 0;
108 if (!gnc_split_reg2_type)
110 GTypeInfo type_info =
115 (GClassInitFunc)gnc_split_reg2_class_init,
120 (GInstanceInitFunc)gnc_split_reg2_init,
123 gnc_split_reg2_type = g_type_register_static (GTK_TYPE_VBOX,
128 return gnc_split_reg2_type;
138 static guint gnc_split_reg2_signals[LAST_SIGNAL] = { 0 };
143 GtkObjectClass *object_class;
145 object_class = (GtkObjectClass*) klass;
147 gnc_split_reg2_signals[HELP_CHANGED] =
148 g_signal_new(
"help-changed",
149 G_TYPE_FROM_CLASS (object_class),
153 g_cclosure_marshal_VOID__VOID,
157 klass->help_changed = NULL;
169 ENTER(
"ld=%p, parent=%p, numberOfLines=%d, read_only=%s",
170 ld, parent, numberOfLines, read_only ?
"TRUE" :
"FALSE");
172 gsrToRet = g_object_new (gnc_split_reg2_get_type(), NULL);
174 gsrToRet->numRows = numberOfLines;
175 gsrToRet->read_only = read_only;
178 gsrToRet->window = GTK_WIDGET (parent);
180 gnc_split_reg2_init2 (gsrToRet);
182 LEAVE(
"%p", gsrToRet);
183 return GTK_WIDGET (gsrToRet);
190 gsr->read_only = FALSE;
192 g_signal_connect (gsr,
"destroy",
193 G_CALLBACK (gnc_split_reg2_destroy_cb), gsr );
201 gnc_split_reg2_determine_read_only (gsr);
203 gnc_split_reg2_determine_account_pr (gsr);
205 gsr2_setup_status_widgets (gsr);
208 gsr2_create_table (gsr);
209 gsr2_setup_table (gsr);
219 ENTER(
"gsr=%p", gsr);
221 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
230 GtkWidget *register_widget;
233 GtkTreeModel *s_model;
234 GtkWidget *scrolled_window;
235 GtkTreeViewColumn *col;
236 GNCLedgerDisplay2Type ledger_type;
238 gdouble num_of_trans;
240 gchar *state_section;
244 const gchar *sort_string;
246 account = gnc_ledger_display2_leader (gsr->
ledger);
249 ENTER(
"create table gsr=%p", gsr);
251 gnc_ledger_display2_set_user_data (gsr->
ledger, (gpointer)gsr);
252 gnc_ledger_display2_set_handlers (gsr->
ledger,
253 gnc_split_reg2_ld_destroy,
254 gnc_split_reg2_get_parent);
256 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
257 view = gnc_tree_view_split_reg_new_with_model (model);
258 g_object_unref (G_OBJECT (model));
261 ledger_type = gnc_ledger_display2_type (gsr->
ledger);
262 if (ledger_type == LD2_GL && model->
type == GENERAL_LEDGER2)
263 state_section = g_strdup (STATE_SECTION_GEN_LEDGER);
264 else if (ledger_type == LD2_SUBACCOUNT)
268 state_section = g_strconcat (STATE_SECTION_REG_PREFIX,
" ", guidstr,
" w/subaccounts", NULL);
274 state_section = g_strconcat (STATE_SECTION_REG_PREFIX,
" ", guidstr, NULL);
276 g_object_set (G_OBJECT (view),
"state-section", state_section,
277 "show-column-menu", FALSE, NULL);
280 hbox = gtk_hbox_new (FALSE, 0);
281 gtk_widget_show (hbox);
283 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
284 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
285 GTK_POLICY_AUTOMATIC,
286 GTK_POLICY_AUTOMATIC);
288 gtk_widget_show (scrolled_window);
290 gtk_box_pack_start (GTK_BOX (gsr), hbox, TRUE, TRUE, 0);
296 gsr->scroll_bar = gtk_vscrollbar_new (GTK_ADJUSTMENT (gsr->scroll_adj));
297 gtk_widget_show (gsr->scroll_bar);
299 gtk_box_pack_start (GTK_BOX (hbox), gsr->scroll_bar, FALSE, FALSE, 2);
300 gtk_box_pack_start (GTK_BOX (hbox), scrolled_window, TRUE, TRUE, 0);
302 gnc_ledger_display2_set_split_view_register (gsr->
ledger, view);
308 model->
sort_depth = g_key_file_get_integer (state_file, state_section,
"sort_depth", NULL);
310 s_model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
316 if (gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (s_model), &sort_col, &type))
325 if (ledger_type == LD2_GL && model->
type == GENERAL_LEDGER2)
336 g_object_set (G_OBJECT(col),
338 "sizing", GTK_TREE_VIEW_COLUMN_FIXED,
342 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), TRUE);
343 gtk_widget_show (GTK_WIDGET (view));
345 gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (view));
346 gtk_widget_show (GTK_WIDGET (gsr));
349 gnc_tree_view_split_reg_set_read_only (view, gsr->read_only);
352 gnc_ledger_display2_set_split_view_refresh (gsr->
ledger, TRUE);
355 g_signal_connect_after (model,
"refresh_status_bar",
356 G_CALLBACK (gsr2_redraw_all_cb), gsr);
359 g_signal_connect (model,
"scroll_sync",
360 G_CALLBACK (gsr2_scroll_sync_cb), gsr);
363 g_signal_connect (view,
"help_signal",
364 G_CALLBACK (gsr2_emit_help_changed), gsr);
366 gsr2_scroll_value_changed_cb (GTK_ADJUSTMENT (gsr->scroll_adj), gsr);
369 g_signal_connect (gsr->scroll_adj,
"value-changed",
370 G_CALLBACK (gsr2_scroll_value_changed_cb), gsr);
373 g_signal_connect (gsr->scroll_bar,
"button-release-event",
374 G_CALLBACK (gsr2_scroll_button_event_cb), gsr);
377 g_signal_connect (GTK_TREE_SORTABLE (s_model),
"sort-column-changed",
378 G_CALLBACK (gnc_split_reg2_sort_changed_cb), gsr);
388 gboolean use_double_line;
390 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
391 use_double_line = gnc_ledger_display2_default_double_line (gsr->
ledger);
394 gnc_tree_model_split_reg_config (model, model->
type, model->
style, use_double_line);
398 gnc_split_reg2_destroy_cb (GtkWidget *widget, gpointer data)
416 view = gnc_ledger_display2_get_split_view_register (gsr->
ledger);
418 gnc_tree_control_split_reg_jump_to (view, NULL, split, FALSE);
436 view = gnc_ledger_display2_get_split_view_register (gsr->
ledger);
438 gnc_tree_control_split_reg_jump_to (view, NULL, split, TRUE);
450 if (gsr->window == NULL)
453 gtk_window_present (GTK_WINDOW (gsr->window));
463 gsr2_update_summary_label (GtkWidget *label,
464 xaccGetBalanceFn getter,
477 amount = (*getter)( leader );
488 strcat(
string,
" / " );
490 gnc_convert_to_euro( cmdty, amount ),
491 gnc_commodity_print_info( gnc_get_euro(), TRUE ) );
494 gnc_set_label_color( label, amount );
495 gtk_label_set_text( GTK_LABEL(label),
string );
499 account_latest_price (
Account *account)
506 if (!account)
return NULL;
510 book = gnc_account_get_book (account);
517 account_latest_price_any_currency (
Account *account)
525 if (!account)
return NULL;
528 book = gnc_account_get_book (account);
532 if (!price_list)
return NULL;
554 if ( gsr->summarybar == NULL )
557 leader = gnc_ledger_display2_leader( gsr->
ledger );
562 if (commodity != NULL)
563 euro = (gnc_is_euro_currency( commodity ) &&
568 print_info = gnc_account_print_info( leader, TRUE );
569 reverse = gnc_reverse_balance( leader );
571 gsr2_update_summary_label( gsr->balance_label,
572 xaccAccountGetPresentBalance,
573 leader, print_info, commodity, reverse, euro );
574 gsr2_update_summary_label( gsr->cleared_label,
576 leader, print_info, commodity, reverse, euro );
577 gsr2_update_summary_label( gsr->reconciled_label,
579 leader, print_info, commodity, reverse, euro );
580 gsr2_update_summary_label( gsr->future_label,
582 leader, print_info, commodity, reverse, euro );
583 gsr2_update_summary_label( gsr->projectedminimum_label,
584 xaccAccountGetProjectedMinimumBalance,
585 leader, print_info, commodity, reverse, euro );
588 if (gsr->shares_label != NULL)
590 print_info = gnc_account_print_info( leader, TRUE );
598 gnc_set_label_color( gsr->shares_label, amount );
599 gtk_label_set_text( GTK_LABEL(gsr->shares_label),
string );
603 if (gsr->value_label != NULL)
610 price = account_latest_price (leader);
617 print_info = gnc_commodity_print_info (currency, TRUE);
618 amount = gnc_numeric_zero ();
622 gnc_set_label_color (gsr->value_label, amount);
623 gtk_label_set_text (GTK_LABEL (gsr->value_label),
string);
628 price = account_latest_price_any_currency (leader);
631 gnc_set_label_color (gsr->value_label, gnc_numeric_zero ());
632 gtk_label_set_text (GTK_LABEL (gsr->value_label),
633 _(
"<No information>"));
642 print_info = gnc_commodity_print_info (currency, TRUE);
645 xaccAccountConvertBalanceToCurrency(leader, amount,
646 commodity, currency);
649 default_currency_amount =
650 xaccAccountConvertBalanceToCurrency(leader, amount,
655 strcat(
string,
" / " );
656 print_info = gnc_commodity_print_info (default_currency, TRUE);
661 gnc_set_label_color (gsr->value_label, amount);
662 gtk_label_set_text (GTK_LABEL (gsr->value_label),
string);
672 print_info = gnc_commodity_print_info (currency, TRUE);
680 gnc_set_label_color (gsr->value_label, amount);
681 gtk_label_set_text (GTK_LABEL (gsr->value_label),
string);
691 gnc_ledger_display2_set_user_data (ledger, NULL);
705 view = gnc_ledger_display2_get_split_view_register (gsr->
ledger);
708 transaction = gsr2_create_balancing_transaction (gnc_get_current_book(),
709 account, statement_date, balancing_amount);
712 split = xaccTransFindSplitByAccount (transaction, account);
716 g_warning(
"gsr2_create_balancing_transaction failed");
717 gnc_tree_control_split_reg_jump_to_blank (view);
722 gnc_tree_control_split_reg_jump_to (view, NULL, split, FALSE);
727 gsr2_create_balancing_transaction (
QofBook *book,
Account *account,
772 gnc_split_reg2_sort_changed_cb (GtkTreeSortable *sortable, gpointer user_data)
781 const gchar *state_section;
784 gtk_tree_sortable_get_sort_column_id (sortable, &sortcol, &type);
785 ENTER(
"sortcol is %d", sortcol);
787 view = gnc_ledger_display2_get_split_view_register (gsr->
ledger);
788 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
790 query = gnc_ledger_display2_get_query (gsr->
ledger);
792 sort_depth = gnc_tree_view_reg_get_selected_row_depth (view);
801 g_key_file_set_integer (state_file, state_section,
"sort_depth", model->
sort_depth);
806 gnc_ledger_display2_refresh (gsr->
ledger);
811 gnc_split_reg2_change_style (
GNCSplitReg2 *gsr, SplitRegisterStyle2 style)
815 if (style == model->
style)
821 gnc_tree_view_split_reg_set_format (gnc_ledger_display2_get_split_view_register (gsr->
ledger));
825 gnc_split_reg2_style_ledger_cb (GtkWidget *w, gpointer data)
829 if (!GTK_CHECK_MENU_ITEM (w)->active)
832 gnc_split_reg2_change_style (gsr, REG2_STYLE_LEDGER);
836 gnc_split_reg2_style_auto_ledger_cb (GtkWidget *w, gpointer data)
840 if (!GTK_CHECK_MENU_ITEM (w)->active)
843 gnc_split_reg2_change_style (gsr, REG2_STYLE_AUTO_LEDGER);
847 gnc_split_reg2_style_journal_cb (GtkWidget *w, gpointer data)
851 if (!GTK_CHECK_MENU_ITEM (w)->active)
854 gnc_split_reg2_change_style (gsr, REG2_STYLE_JOURNAL);
858 gnc_split_reg2_double_line_cb (GtkWidget *w, gpointer data)
862 gboolean use_double_line;
864 use_double_line = GTK_CHECK_MENU_ITEM (w)->active;
868 gnc_tree_model_split_reg_config (model, model->
type, model->
style, use_double_line);
871 gnc_tree_view_split_reg_set_format (gnc_ledger_display2_get_split_view_register (gsr->
ledger));
876 add_summary_label (GtkWidget *summarybar,
const char *label_str)
881 hbox = gtk_hbox_new (FALSE, 2);
882 gtk_box_pack_start (GTK_BOX (summarybar), hbox, FALSE, FALSE, 5);
884 label = gtk_label_new (label_str);
885 gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
886 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
888 label = gtk_label_new (
"");
889 gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
890 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
898 GtkWidget *summarybar;
900 gsr->cleared_label = NULL;
901 gsr->balance_label = NULL;
902 gsr->reconciled_label = NULL;
903 gsr->future_label = NULL;
904 gsr->projectedminimum_label = NULL;
905 gsr->shares_label = NULL;
906 gsr->value_label = NULL;
908 if (gnc_ledger_display2_type (gsr->
ledger) >= LD2_SUBACCOUNT)
910 gsr->summarybar = NULL;
914 summarybar = gtk_hbox_new (FALSE, 4);
918 gsr->balance_label = add_summary_label (summarybar, _(
"Present:"));
919 gsr->future_label = add_summary_label (summarybar, _(
"Future:"));
920 gsr->cleared_label = add_summary_label (summarybar, _(
"Cleared:"));
921 gsr->reconciled_label = add_summary_label (summarybar, _(
"Reconciled:"));
922 gsr->projectedminimum_label = add_summary_label (summarybar, _(
"Projected Minimum:"));
926 gsr->shares_label = add_summary_label (summarybar, _(
"Shares:"));
927 gsr->value_label = add_summary_label (summarybar, _(
"Current Value:"));
930 gsr->summarybar = summarybar;
933 gsr2_redraw_all_cb (NULL, gsr);
934 return gsr->summarybar;
949 gboolean single_account;
952 return PLACEHOLDER_NONE;
954 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
958 case GENERAL_LEDGER2:
960 case PORTFOLIO_LEDGER2:
962 single_account = FALSE;
965 single_account = TRUE;
969 leader = gnc_ledger_display2_leader (gsr->
ledger);
972 return PLACEHOLDER_NONE;
976 return PLACEHOLDER_THIS;
977 return PLACEHOLDER_NONE;
997 gsr2_determine_account_pr_dialog (gpointer argp)
1002 const char *title = _(
"Account Payable / Receivable Register");
1003 const char *message =
1004 _(
"The register displayed is for Account Payable or Account Receivable. "
1005 "Changing the entries may cause harm, please use the business "
1006 "options to change the entries.");
1008 dialog = gtk_message_dialog_new (GTK_WINDOW (args->gsr->window),
1009 GTK_DIALOG_DESTROY_WITH_PARENT,
1010 GTK_MESSAGE_WARNING,
1013 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
1016 gnc_dialog_run (GTK_DIALOG (dialog), GNC_PREF_WARN_REG_IS_ACCT_PAY_REC);
1017 gtk_widget_destroy (dialog);
1025 gnc_split_reg2_determine_account_pr (
GNCSplitReg2 *gsr)
1030 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
1032 if (model->
type != PAYABLE_REGISTER2 && model->
type != RECEIVABLE_REGISTER2)
1037 g_timeout_add (250, gsr2_determine_account_pr_dialog, args);
1048 gtk_callback_bug_workaround (gpointer argp)
1051 const gchar *read_only = _(
"This account register is read-only.");
1054 dialog = gtk_message_dialog_new (GTK_WINDOW(args->gsr->window),
1055 GTK_DIALOG_DESTROY_WITH_PARENT,
1056 GTK_MESSAGE_WARNING,
1059 gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
1060 "%s", args->string);
1061 gnc_dialog_run (GTK_DIALOG (dialog), GNC_PREF_WARN_REG_IS_READ_ONLY);
1062 gtk_widget_destroy (dialog);
1081 gsr->read_only = TRUE;
1084 if (!gsr->read_only)
1087 switch (gnc_split_reg2_get_placeholder (gsr))
1089 case PLACEHOLDER_NONE:
1093 case PLACEHOLDER_THIS:
1094 args->string = _(
"This account may not be edited. If you want "
1095 "to edit transactions in this register, please "
1096 "open the account options and turn off the "
1097 "placeholder checkbox.");
1101 args->string = _(
"One of the sub-accounts selected may not be "
1102 "edited. If you want to edit transactions in "
1103 "this register, please open the sub-account "
1104 "options and turn off the placeholder checkbox. "
1105 "You may also open an individual account instead "
1106 "of a set of accounts.");
1109 gsr->read_only = TRUE;
1112 g_timeout_add (250, gtk_callback_bug_workaround, args);
1121 GNC_SPLIT_REG2 (gnc_ledger_display2_get_user_data (ledger));
1132 gsr2_emit_simple_signal ((
GNCSplitReg2*)user_data,
"help-changed" );
1140 gint trans_position;
1144 gtk_adjustment_set_value (gsr->scroll_adj, trans_position);
1150 gsr2_scroll_value_changed_cb (GtkAdjustment *adj, gpointer user_data)
1155 gint trans_position;
1157 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
1159 trans_position = gtk_adjustment_get_value (adj);
1161 text = gnc_tree_model_split_reg_get_tooltip (model, trans_position);
1163 g_object_set (gtk_widget_get_settings (gsr->scroll_bar),
"gtk-tooltip-timeout", 2, NULL);
1165 gtk_widget_set_tooltip_text (gsr->scroll_bar, text);
1172 gsr2_scroll_button_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data)
1176 gint trans_position;
1178 model = gnc_ledger_display2_get_split_model_register (gsr->
ledger);
1180 trans_position = gtk_adjustment_get_value (gsr->scroll_adj);
1182 gnc_tree_model_split_reg_set_current_trans_by_position (model, trans_position);
1185 g_object_set (gtk_widget_get_settings (gsr->scroll_bar),
"gtk-tooltip-timeout", 500, NULL);
1187 g_signal_emit_by_name (model,
"refresh_trans");
1194 gsr2_emit_simple_signal (
GNCSplitReg2 *gsr,
const char *sigName)
1196 g_signal_emit_by_name( gsr, sigName, NULL );
1205 return gnc_ledger_display2_get_split_view_register (gsr->
ledger);
1211 if (!gsr)
return NULL;
1212 return gsr->summarybar;
1219 return gsr->read_only;
1223 gnc_split_reg2_set_moved_cb (
GNCSplitReg2 *gsr, GFunc cb, gpointer cb_data )
1225 gnc_tree_view_split_reg_set_uiupdate_cb (gnc_ledger_display2_get_split_view_register (gsr->
ledger), cb, cb_data);
void xaccSplitSetValue(Split *s, gnc_numeric amt)
gint number_of_trans_in_full_tlist
void gnc_price_list_destroy(PriceList *prices)
gint position_of_trans_in_full_tlist
Functions to load, save and get gui state.
void gnc_tree_view_expand_columns(GncTreeView *view, gchar *first_column_name,...)
#define xaccTransAppendSplit(t, s)
Transaction * xaccMallocTransaction(QofBook *book)
gboolean gnc_numeric_equal(gnc_numeric a, gnc_numeric b)
void xaccTransSetDatePostedSecsNormalized(Transaction *trans, time64 time)
int gnc_commodity_get_fraction(const gnc_commodity *cm)
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
gboolean xaccAccountIsPriced(const Account *acc)
gnc_numeric gnc_numeric_neg(gnc_numeric a)
void gnc_price_unref(GNCPrice *p)
GNCLedgerDisplay2 * ledger
void xaccTransSetDescription(Transaction *trans, const char *desc)
GtkSortType sort_direction
gboolean gnc_numeric_zero_p(gnc_numeric a)
void gnc_tree_view_set_show_column_menu(GncTreeView *view, gboolean visible)
gchar * guid_to_string_buff(const GncGUID *guid, gchar *buff)
GtkTreeViewColumn * gnc_tree_view_find_column_by_name(GncTreeView *view, const gchar *wanted)
#define ENTER(format, args...)
GKeyFile * gnc_state_get_current(void)
gnc_numeric xaccAccountGetClearedBalance(const Account *acc)
GNCPriceDB * gnc_pricedb_get_db(QofBook *book)
void xaccTransSetCurrency(Transaction *trans, gnc_commodity *curr)
gnc_commodity * gnc_default_currency(void)
#define xaccAccountGetGUID(X)
void xaccSplitSetAmount(Split *s, gnc_numeric amt)
gnc_numeric gnc_numeric_mul(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
#define GUID_ENCODING_LENGTH
GNCPlaceholderType xaccAccountGetDescendantPlaceholder(const Account *acc)
void gnc_tree_view_configure_columns(GncTreeView *view)
SplitRegisterStyle2 style
PriceList * gnc_pricedb_lookup_latest_any_currency(GNCPriceDB *db, const gnc_commodity *commodity)
void xaccTransCommitEdit(Transaction *trans)
void xaccTransBeginEdit(Transaction *trans)
gnc_numeric xaccAccountGetReconciledBalance(const Account *acc)
gnc_numeric xaccAccountGetBalance(const Account *acc)
int xaccSPrintAmount(char *bufp, gnc_numeric val, GNCPrintAmountInfo info)
Split * xaccMallocSplit(QofBook *book)
const gchar * gnc_tree_view_get_state_section(GncTreeView *view)
gnc_commodity * gnc_account_or_default_currency(const Account *account, gboolean *currency_from_account_found)
gboolean qof_book_is_readonly(const QofBook *book)
GNCPrice * gnc_price_clone(GNCPrice *p, QofBook *book)
void xaccAccountBeginEdit(Account *acc)
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
#define xaccAccountInsertSplit(acc, s)
gboolean xaccAccountGetPlaceholder(const Account *acc)
#define LEAVE(format, args...)
GNCPrice * gnc_pricedb_lookup_latest(GNCPriceDB *db, const gnc_commodity *commodity, const gnc_commodity *currency)
void xaccAccountCommitEdit(Account *acc)
const gchar * QofLogModule