33 #include <glib/gi18n.h>
43 #include "engine-helpers.h"
46 #include "dialog-utils.h"
47 #include "dialog-lot-viewer.h"
48 #include "gnc-component-manager.h"
51 #include "misc-gnome-utils.h"
52 #include "tree-view-utils.h"
54 #define LOT_VIEWER_CM_CLASS "dialog-lot-viewer"
72 SPLIT_COL_DESCRIPTION,
81 #define RESPONSE_VIEW 1
82 #define RESPONSE_DELETE 2
83 #define RESPONSE_SCRUB_LOT 3
84 #define RESPONSE_SCRUB_ACCOUNT 4
85 #define RESPONSE_NEW_LOT 5
87 #define GNC_PREFS_GROUP "dialogs.lot-viewer"
88 #define GNC_PREF_HPOS "hpane-position"
89 #define GNC_PREF_VPOS "vpane-position"
94 #ifdef LOTS_READY_FOR_SHOWTIME
95 GtkButton * regview_button;
97 GtkButton * delete_button;
98 GtkButton * scrub_lot_button;
99 GtkButton * new_lot_button;
100 GtkTreeView * lot_view;
101 GtkListStore * lot_store;
102 GtkTextView * lot_notes;
103 GtkEntry * title_entry;
104 GtkTreeView * split_in_lot_view;
105 GtkListStore * split_in_lot_store;
106 GtkTreeView * split_free_view;
107 GtkListStore * split_free_store;
108 GtkButton * add_split_to_lot_button;
109 GtkButton * remove_split_from_lot_button;
110 GtkToggleButton * only_show_open_lots_checkbutton;
122 void lv_title_entry_changed_cb (GtkEntry *ent, gpointer user_data);
123 void lv_response_cb (GtkDialog *dialog, gint response, gpointer data);
124 void lv_window_destroy_cb (GtkObject *
object, gpointer user_data);
125 void lv_paned_notify_cb (GObject *gobject,
137 find_first_currency (
GNCLot *lot)
142 for (node = split_list; node; node = node->next)
144 Split *s = node->data;
160 if (!currency)
return zero;
163 for (node = split_list; node; node = node->next)
165 Split *s = node->data;
184 GNCLot *lot = lv->selected_lot;
187 if (NULL == lot)
return;
190 gnc_split_viewer_fill(lv, lv->split_in_lot_store, split_list);
199 gtk_list_store_clear (lv->split_in_lot_store);
212 gtk_list_store_clear (lv->split_free_store);
218 for (node = split_list; node; node = node->next)
220 Split *split = node->data;
223 filtered_list = g_list_append(filtered_list, split);
228 gnc_split_viewer_fill(lv, lv->split_free_store, filtered_list);
237 GNCLot *lot = lv->selected_lot;
243 gnc_lot_begin_edit(lot);
246 str = gtk_entry_get_text (lv->title_entry);
247 gnc_lot_set_title (lot, str);
250 notes = xxxgtk_textview_get_text (lv->lot_notes);
251 gnc_lot_set_notes (lot, notes);
254 gnc_lot_commit_edit(lot);
265 lv->selected_lot = NULL;
268 gtk_entry_set_text (lv->title_entry,
"");
269 gtk_editable_set_editable (GTK_EDITABLE(lv->title_entry), FALSE);
272 xxxgtk_textview_set_text (lv->lot_notes,
"");
273 gtk_text_view_set_editable (lv->lot_notes, FALSE);
276 lv_clear_splits_in_lot (lv);
278 #ifdef LOTS_READY_FOR_SHOWTIME
279 gtk_widget_set_sensitive(GTK_WIDGET(lv->regview_button), FALSE);
281 gtk_widget_set_sensitive(GTK_WIDGET(lv->delete_button), FALSE);
282 gtk_widget_set_sensitive(GTK_WIDGET(lv->scrub_lot_button), FALSE);
294 lv_save_current_lot (lv);
298 gtk_entry_set_text (lv->title_entry, str);
299 gtk_editable_set_editable (GTK_EDITABLE(lv->title_entry), TRUE);
302 str = gnc_lot_get_notes (lot);
304 xxxgtk_textview_set_text (lv->lot_notes, str);
305 gtk_text_view_set_editable (lv->lot_notes, TRUE);
308 lv->selected_lot = lot;
309 lv_show_splits_in_lot (lv);
311 #ifdef LOTS_READY_FOR_SHOWTIME
312 gtk_widget_set_sensitive(GTK_WIDGET(lv->regview_button), TRUE);
314 gtk_widget_set_sensitive(GTK_WIDGET(lv->delete_button), TRUE);
315 gtk_widget_set_sensitive(GTK_WIDGET(lv->scrub_lot_button), TRUE);
324 lv_save_current_lot (lv);
335 GNCLot *this_lot, *selected_lot = NULL;
339 GtkTreeSelection *selection;
340 gboolean found = FALSE;
344 selection = gtk_tree_view_get_selection(lv->lot_view);
345 if (gtk_tree_selection_get_selected (selection, &model, &iter))
346 gtk_tree_model_get(model, &iter, LOT_COL_PNTR, &selected_lot, -1);
349 gtk_list_store_clear (lv->lot_store);
351 for (node = lot_list; node; node = node->next)
362 gnc_numeric gains_baln = get_realized_gains (lot, currency);
365 if (TRUE == gtk_toggle_button_get_active(lv->only_show_open_lots_checkbutton) &&
gnc_lot_is_closed (lot))
370 store = lv->lot_store;
371 gtk_list_store_append(store, &iter);
377 snprintf(type_buff, 200,
"I");
379 gtk_list_store_set(store, &iter, LOT_COL_TYPE, type_buff, -1);
382 gtk_list_store_set(store, &iter, LOT_COL_OPEN, open_date, -1);
391 gtk_list_store_set(store, &iter, LOT_COL_CLOSE, close_date, -1);
395 gtk_list_store_set(store, &iter, LOT_COL_CLOSE, 0, -1);
403 gnc_account_print_info (lv->account, TRUE));
404 gtk_list_store_set(store, &iter, LOT_COL_BALN, baln_buff, -1);
408 gnc_commodity_print_info (currency, TRUE));
409 gtk_list_store_set(store, &iter, LOT_COL_GAINS, gain_buff, -1);
412 gtk_list_store_set(store, &iter, LOT_COL_PNTR, lot, -1);
414 g_list_free(lot_list);
420 model = GTK_TREE_MODEL(lv->lot_store);
421 if (gtk_tree_model_get_iter_first(model, &iter))
425 gtk_tree_model_get(model, &iter, LOT_COL_PNTR, &this_lot, -1);
426 if (this_lot == selected_lot)
428 gtk_tree_selection_select_iter(selection, &iter);
433 while (gtk_tree_model_iter_next(model, &iter));
438 gtk_tree_selection_unselect_all(selection);
445 lv_get_selected_split (
GNCLotViewer *lv, GtkTreeView *view)
449 GtkTreeSelection *selection;
452 selection = gtk_tree_view_get_selection(view);
453 if (gtk_tree_selection_get_selected (selection, &model, &iter))
455 gtk_tree_model_get(model, &iter, SPLIT_COL_PNTR, &split, -1);
465 lv_can_remove_split_from_lot(
Split * split,
GNCLot * lot)
473 if ( lot_invoice != NULL && lot_invoice == txn_invoice )
489 gtk_list_store_clear (lv->split_in_lot_store);
490 for (node = split_list; node; node = node->next)
492 Split *split = node->data;
505 gtk_list_store_append(store, &iter);
508 gtk_list_store_set (store, &iter, SPLIT_COL_DATE, date, -1);
511 gtk_list_store_set (store, &iter, SPLIT_COL_NUM,
512 gnc_get_num_action (trans, split), -1);
520 gnc_account_print_info (lv->account, TRUE));
521 gtk_list_store_set (store, &iter, SPLIT_COL_AMOUNT, amtbuff, -1);
526 if (node != split_list)
531 gnc_commodity_print_info (currency, TRUE));
532 gtk_list_store_set (store, &iter, SPLIT_COL_VALUE, valbuff, -1);
543 gnc_commodity_print_info (currency, TRUE));
545 gtk_list_store_set (store, &iter, SPLIT_COL_GAIN_LOSS, gainbuff, -1);
548 baln = gnc_numeric_add_fixed (baln, amnt);
556 gnc_account_print_info (lv->account, TRUE));
558 gtk_list_store_set (store, &iter, SPLIT_COL_BALANCE, balnbuff, -1);
561 gtk_list_store_set(store, &iter, SPLIT_COL_PNTR, split, -1);
571 gtk_widget_set_sensitive(GTK_WIDGET(lv->add_split_to_lot_button), FALSE);
572 gtk_widget_set_sensitive(GTK_WIDGET(lv->remove_split_from_lot_button), FALSE);
573 if (NULL != lv->selected_lot)
575 if (NULL != lv_get_selected_split(lv, lv->split_free_view) )
577 gtk_widget_set_sensitive(GTK_WIDGET(lv->add_split_to_lot_button), TRUE);
579 split = lv_get_selected_split(lv, lv->split_in_lot_view);
580 if (NULL != split && TRUE == lv_can_remove_split_from_lot(split, lv->selected_lot))
582 gtk_widget_set_sensitive(GTK_WIDGET(lv->remove_split_from_lot_button), TRUE);
589 gnc_lot_viewer_fill (lv);
590 lv_show_splits_free (lv);
591 lv_show_splits_in_lot (lv);
597 lv_refresh_handler (GHashTable *changes, gpointer user_data)
604 lv_close_handler (gpointer user_data)
608 lv_save_current_lot (lv);
610 gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(lv->window));
611 gtk_widget_destroy (lv->window);
619 lv_title_entry_changed_cb (GtkEntry *ent, gpointer user_data)
624 GtkTreeSelection *selection;
626 title = gtk_entry_get_text (lv->title_entry);
628 selection = gtk_tree_view_get_selection(lv->lot_view);
629 if (gtk_tree_selection_get_selected (selection, &model, &iter))
631 gtk_list_store_set(GTK_LIST_STORE(model), &iter, LOT_COL_TITLE, title, -1);
639 lv_selection_changed_cb (GtkTreeSelection *selection,
646 if (gtk_tree_selection_get_selected (selection, &model, &iter))
648 gtk_tree_model_get(model, &iter, LOT_COL_PNTR, &lot, -1);
649 lv_select_row(lv, lot);
655 lv_update_split_buttons(lv);
662 lv_window_destroy_cb (GtkObject *
object, gpointer user_data)
665 gnc_close_gui_component_by_data (LOT_VIEWER_CM_CLASS, lv);
666 gnc_unregister_gui_component_by_data (LOT_VIEWER_CM_CLASS, lv);
671 lv_split_selection_changed_cb (GtkTreeSelection *selection,
674 lv_update_split_buttons(lv);
678 lv_add_split_to_lot_cb (GtkWidget *widget,
GNCLotViewer * lv)
682 if ( NULL == lv->selected_lot )
return;
683 split = lv_get_selected_split(lv, lv->split_free_view);
684 if ( NULL == split )
return;
694 lv_remove_split_from_lot_cb (GtkWidget *widget,
GNCLotViewer * lv)
698 if ( NULL == lv->selected_lot )
return;
699 split = lv_get_selected_split(lv, lv->split_in_lot_view);
700 if ( NULL == split )
return;
702 if ( FALSE == lv_can_remove_split_from_lot(split, lv->selected_lot) )
706 gnc_lot_remove_split(lv->selected_lot, split);
713 lv_only_show_open_lots_changed_cb (GtkWidget *widget,
GNCLotViewer * lv)
722 lv_response_cb (GtkDialog *dialog, gint response, gpointer data)
725 GNCLot *lot = lv->selected_lot;
729 case GTK_RESPONSE_CLOSE:
730 lv_close_handler(lv);
736 printf (
"UNIMPLEMENTED: need to display register showing only this one lot \n");
739 case RESPONSE_DELETE:
746 gnc_lot_destroy (lot);
748 gnc_lot_viewer_fill (lv);
751 case RESPONSE_SCRUB_LOT:
758 gnc_lot_viewer_fill (lv);
759 lv_show_splits_in_lot (lv);
762 case RESPONSE_SCRUB_ACCOUNT:
763 gnc_suspend_gui_refresh ();
768 gnc_resume_gui_refresh ();
769 gnc_lot_viewer_fill (lv);
770 lv_show_splits_free (lv);
771 lv_show_splits_in_lot (lv);
774 case RESPONSE_NEW_LOT:
775 lv_save_current_lot (lv);
784 static void print_date (GtkTreeViewColumn *tree_column,
785 GtkCellRenderer *cell,
786 GtkTreeModel *tree_model,
790 GValue value = { 0 };
792 gchar *doc_date_str = g_strdup (_(
"Open"));
793 gint col = GPOINTER_TO_INT(data);
795 g_return_if_fail (cell && iter && tree_model);
797 gtk_tree_model_get_value (tree_model, iter, col, &value);
798 doc_date_time = (
time64) g_value_get_int64 (&value);
799 g_value_unset (&value);
803 g_free (doc_date_str);
806 g_object_set (G_OBJECT (cell),
"text", doc_date_str, NULL);
807 g_free (doc_date_str);
815 GtkTreeViewColumn *column;
816 GtkTreeSelection *selection;
817 GtkCellRenderer *renderer;
819 g_return_if_fail(GTK_IS_TREE_VIEW(lv->lot_view));
822 store = gtk_list_store_new(NUM_LOT_COLS, G_TYPE_STRING, G_TYPE_INT64,
823 G_TYPE_INT64, G_TYPE_STRING, G_TYPE_STRING,
824 G_TYPE_STRING, G_TYPE_POINTER);
825 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
826 g_object_unref(store);
827 lv->lot_store = store;
830 renderer = gtk_cell_renderer_text_new();
831 column = gtk_tree_view_column_new_with_attributes(_(
"Type"), renderer,
832 "text", LOT_COL_TYPE, NULL);
833 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_TYPE);
834 gtk_tree_view_append_column(view, column);
836 renderer = gtk_cell_renderer_text_new();
837 column = gtk_tree_view_column_new_with_attributes(_(
"Opened"), renderer,
838 "text", LOT_COL_OPEN, NULL);
839 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_OPEN);
841 gtk_tree_view_column_set_cell_data_func (column, renderer,
842 (GtkTreeCellDataFunc) print_date,
843 GINT_TO_POINTER (LOT_COL_OPEN), NULL);
844 gtk_tree_view_append_column(view, column);
846 renderer = gtk_cell_renderer_text_new();
847 column = gtk_tree_view_column_new_with_attributes(_(
"Closed"), renderer,
848 "text", LOT_COL_CLOSE, NULL);
849 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_CLOSE);
851 gtk_tree_view_column_set_cell_data_func (column, renderer,
852 (GtkTreeCellDataFunc) print_date,
853 GINT_TO_POINTER (LOT_COL_CLOSE), NULL);
854 gtk_tree_view_append_column(view, column);
856 renderer = gtk_cell_renderer_text_new();
857 column = gtk_tree_view_column_new_with_attributes(_(
"Title"), renderer,
858 "text", LOT_COL_TITLE, NULL);
859 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_TITLE);
860 gtk_tree_view_append_column(view, column);
862 renderer = gtk_cell_renderer_text_new();
863 column = gtk_tree_view_column_new_with_attributes(_(
"Balance"), renderer,
864 "text", LOT_COL_BALN, NULL);
865 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_BALN);
866 gtk_tree_view_append_column(view, column);
868 renderer = gtk_cell_renderer_text_new();
869 column = gtk_tree_view_column_new_with_attributes(_(
"Gains"), renderer,
870 "text", LOT_COL_GAINS, NULL);
871 gtk_tree_view_column_set_sort_column_id(column, LOT_COL_GAINS);
872 gtk_tree_view_append_column(view, column);
875 selection = gtk_tree_view_get_selection(view);
876 g_signal_connect(selection,
"changed",
877 G_CALLBACK(lv_selection_changed_cb), lv);
878 g_signal_connect(lv->only_show_open_lots_checkbutton,
"toggled",
879 G_CALLBACK(lv_only_show_open_lots_changed_cb), lv);
885 static GtkListStore *
886 lv_init_split_view (
GNCLotViewer *lv, GtkTreeView *view)
889 GtkTreeViewColumn *column;
890 GtkTreeSelection *selection;
891 GtkCellRenderer *renderer;
893 g_return_val_if_fail(GTK_IS_TREE_VIEW(view), NULL);
895 store = gtk_list_store_new(NUM_SPLIT_COLS, G_TYPE_INT64, G_TYPE_STRING,
896 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
897 G_TYPE_STRING, G_TYPE_STRING,
899 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
900 g_object_unref(store);
903 renderer = gtk_cell_renderer_text_new();
904 column = gtk_tree_view_column_new_with_attributes(_(
"Date"), renderer,
905 "text", SPLIT_COL_DATE, NULL);
906 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_DATE);
908 gtk_tree_view_column_set_cell_data_func (column, renderer,
909 (GtkTreeCellDataFunc) print_date,
910 GINT_TO_POINTER (SPLIT_COL_DATE), NULL);
911 gtk_tree_view_append_column(view, column);
913 renderer = gtk_cell_renderer_text_new();
914 column = gtk_tree_view_column_new_with_attributes(_(
"Num"), renderer,
915 "text", SPLIT_COL_NUM, NULL);
916 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_NUM);
917 gtk_tree_view_append_column(view, column);
919 renderer = gtk_cell_renderer_text_new();
920 column = gtk_tree_view_column_new_with_attributes(_(
"Description"), renderer,
921 "text", SPLIT_COL_DESCRIPTION, NULL);
922 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_DESCRIPTION);
923 gtk_tree_view_append_column(view, column);
925 renderer = gtk_cell_renderer_text_new();
926 column = gtk_tree_view_column_new_with_attributes(_(
"Amount"), renderer,
927 "text", SPLIT_COL_AMOUNT, NULL);
928 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_AMOUNT);
929 gtk_tree_view_append_column(view, column);
931 renderer = gtk_cell_renderer_text_new();
932 column = gtk_tree_view_column_new_with_attributes(_(
"Value"), renderer,
933 "text", SPLIT_COL_VALUE, NULL);
934 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_VALUE);
935 gtk_tree_view_append_column(view, column);
937 renderer = gtk_cell_renderer_text_new();
938 column = gtk_tree_view_column_new_with_attributes(_(
"Gain/Loss"), renderer,
939 "text", SPLIT_COL_GAIN_LOSS, NULL);
940 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_GAIN_LOSS);
941 gtk_tree_view_append_column(view, column);
943 renderer = gtk_cell_renderer_text_new();
944 column = gtk_tree_view_column_new_with_attributes(_(
"Balance"), renderer,
945 "text", SPLIT_COL_BALANCE, NULL);
946 gtk_tree_view_column_set_sort_column_id(column, SPLIT_COL_BALANCE);
947 gtk_tree_view_append_column(view, column);
950 selection = gtk_tree_view_get_selection(view);
951 g_signal_connect(selection,
"changed",
952 G_CALLBACK(lv_split_selection_changed_cb), lv);
960 lv->split_free_store = lv_init_split_view (lv, lv->split_free_view);
961 lv->split_in_lot_store = lv_init_split_view (lv, lv->split_in_lot_view);
968 g_signal_connect(G_OBJECT(lv->add_split_to_lot_button),
"clicked",
969 G_CALLBACK(lv_add_split_to_lot_cb), lv);
970 g_signal_connect(G_OBJECT(lv->remove_split_from_lot_button),
"clicked",
971 G_CALLBACK(lv_remove_split_from_lot_cb), lv);
984 builder = gtk_builder_new();
985 gnc_builder_add_from_file (builder,
"dialog-lot-viewer.glade",
"Lot Viewer Window");
987 lv->window = GTK_WIDGET(gtk_builder_get_object (builder,
"Lot Viewer Window"));
989 win_title = g_strdup_printf (_(
"Lots in Account %s"),
991 gtk_window_set_title (GTK_WINDOW (lv->window), win_title);
994 #ifdef LOTS_READY_FOR_SHOWTIME
995 lv->regview_button = GTK_BUTTON(glade_xml_get_widget (builder,
"regview button"));
997 lv->delete_button = GTK_BUTTON(gtk_builder_get_object (builder,
"delete button"));
998 lv->scrub_lot_button = GTK_BUTTON(gtk_builder_get_object (builder,
"scrub lot button"));
999 lv->new_lot_button = GTK_BUTTON(gtk_builder_get_object (builder,
"new lot button"));
1001 lv->lot_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
"lot view"));
1002 lv->only_show_open_lots_checkbutton = GTK_TOGGLE_BUTTON(gtk_builder_get_object (builder,
"only show open lots checkbutton"));
1003 lv_init_lot_view(lv);
1004 lv->lot_notes = GTK_TEXT_VIEW(gtk_builder_get_object (builder,
"lot notes text"));
1005 lv->title_entry = GTK_ENTRY (gtk_builder_get_object (builder,
"lot title entry"));
1007 lv->split_in_lot_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
"split in lot view"));
1008 lv->split_free_view = GTK_TREE_VIEW(gtk_builder_get_object (builder,
"split free view"));
1009 lv_init_split_views(lv);
1011 lv->add_split_to_lot_button = GTK_BUTTON(gtk_builder_get_object (builder,
"add split to lot button"));
1012 lv->remove_split_from_lot_button = GTK_BUTTON(gtk_builder_get_object (builder,
"remove split from lot button"));
1013 lv_init_split_buttons(lv);
1019 object = gtk_builder_get_object (builder,
"lot vpaned");
1020 gnc_prefs_bind (GNC_PREFS_GROUP, GNC_PREF_VPOS,
object,
"position");
1022 object = gtk_builder_get_object (builder,
"lot hpaned");
1023 gnc_prefs_bind (GNC_PREFS_GROUP, GNC_PREF_HPOS,
object,
"position");
1026 lv->selected_lot = NULL;
1029 gtk_builder_connect_signals(builder, lv);
1030 g_object_unref(G_OBJECT(builder));
1032 lv_update_split_buttons(lv);
1034 gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(lv->window));
1040 gnc_lot_viewer_dialog (
Account *account)
1045 if (!account)
return NULL;
1048 lv->account = account;
1050 gnc_lot_viewer_fill (lv);
1051 lv_show_splits_free (lv);
1053 component_id = gnc_register_gui_component (LOT_VIEWER_CM_CLASS,
1058 gnc_gui_component_watch_entity_type (component_id,
1060 QOF_EVENT_CREATE | QOF_EVENT_ADD | QOF_EVENT_REMOVE | QOF_EVENT_MODIFY | QOF_EVENT_DESTROY);
1062 gtk_widget_show_all (lv->window);
1063 gnc_window_adjust_for_screen (GTK_WINDOW(lv->window));
High-Level API for imposing Lot constraints.
void tree_view_column_set_default_width(GtkTreeView *view, GtkTreeViewColumn *column, const gchar *sizing_text)
time64 xaccTransGetDate(const Transaction *trans)
SplitList * xaccAccountGetSplitList(const Account *acc)
utility functions for the GnuCash UI
GNCAccountType xaccAccountGetType(const Account *acc)
void gncScrubBusinessAccountLots(Account *acc)
gnc_numeric gnc_numeric_neg(gnc_numeric a)
gboolean gnc_commodity_equal(const gnc_commodity *a, const gnc_commodity *b)
void gnc_lot_add_split(GNCLot *lot, Split *split)
gnc_numeric gnc_numeric_add(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
gboolean gnc_numeric_zero_p(gnc_numeric a)
void xaccAccountInsertLot(Account *acc, GNCLot *lot)
Transaction * xaccSplitGetParent(const Split *split)
gnc_numeric xaccSplitGetCapGains(Split *split)
void xaccAccountScrubLots(Account *acc)
Cleanup functions for business objects.
Split * gnc_lot_get_earliest_split(GNCLot *lot)
GncInvoice * gncInvoiceGetInvoiceFromTxn(const Transaction *txn)
const char * gnc_lot_get_title(const GNCLot *lot)
Split * gnc_lot_get_latest_split(GNCLot *lot)
char * qof_print_date(time64 secs)
Account handling public routines.
void gnc_prefs_bind(const gchar *group, const gchar *pref_name, gpointer object, const gchar *property)
SplitList * gnc_lot_get_split_list(const GNCLot *lot)
LotList * xaccAccountGetLotList(const Account *acc)
const char * xaccTransGetDescription(const Transaction *trans)
gboolean xaccAccountIsAPARType(GNCAccountType t)
int xaccSPrintAmount(char *bufp, gnc_numeric val, GNCPrintAmountInfo info)
Generic api to store and retrieve preferences.
GncInvoice * gncInvoiceGetInvoiceFromLot(GNCLot *lot)
Business Invoice Interface.
GNCLot * gnc_lot_make_default(Account *acc)
gboolean gnc_lot_is_closed(GNCLot *lot)
gnc_numeric xaccSplitGetValue(const Split *split)
gboolean gncScrubBusinessLot(GNCLot *lot)
void xaccAccountBeginEdit(Account *acc)
gnc_commodity * xaccTransGetCurrency(const Transaction *trans)
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
gboolean xaccScrubLot(GNCLot *lot)
Account * gnc_lot_get_account(const GNCLot *lot)
const char * xaccAccountGetName(const Account *acc)
API for Transactions and Splits (journal entries)
void xaccAccountCommitEdit(Account *acc)
Utilities to Automatically Compute Capital Gains/Losses.
Commodity handling public routines.
gnc_numeric gnc_lot_get_balance(GNCLot *lot)
GNCLot * xaccSplitGetLot(const Split *split)
gnc_numeric xaccSplitGetAmount(const Split *split)