28 #include <glib/gi18n.h>
30 #include "dialog-utils.h"
31 #include "gnc-component-manager.h"
33 #include "gnc-gui-query.h"
37 #include "gnc-date-edit.h"
38 #include "gnc-amount-edit.h"
42 #include "tree-view-utils.h"
46 #include "engine-helpers.h"
50 #include "dialog-payment.h"
51 #include "business-gnome-utils.h"
53 #include "dialog-transfer.h"
54 #include "gnome-search/gnc-general-search.h"
56 #define DIALOG_PAYMENT_CUSTOMER_CM_CLASS "customer-payment-dialog"
57 #define DIALOG_PAYMENT_VENDOR_CM_CLASS "vendor-payment-dialog"
63 GtkWidget * payment_warning;
64 GtkWidget * ok_button;
65 GtkWidget * num_entry;
66 GtkWidget * memo_entry;
67 GtkWidget * post_combo;
68 GtkWidget * owner_choice;
69 GtkWidget * amount_debit_edit;
70 GtkWidget * amount_credit_edit;
71 GtkWidget * date_edit;
72 GtkWidget * acct_tree;
73 GtkWidget * docs_list_tree_view;
83 GList * acct_commodities;
88 void gnc_ui_payment_window_set_num (
PaymentWindow *pw,
const char* num)
91 gtk_entry_set_text(GTK_ENTRY (pw->num_entry), num);
93 void gnc_ui_payment_window_set_memo (
PaymentWindow *pw,
const char* memo)
96 gtk_entry_set_text(GTK_ENTRY (pw->memo_entry), memo);
98 void gnc_ui_payment_window_set_date (
PaymentWindow *pw,
const GDate *date)
102 gnc_date_edit_set_gdate (GNC_DATE_EDIT (pw->date_edit), date);
111 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT(pw->amount_credit_edit),
113 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT(pw->amount_debit_edit),
114 gnc_numeric_zero ());
118 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT(pw->amount_debit_edit),
120 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT(pw->amount_credit_edit),
121 gnc_numeric_zero ());
143 static gboolean gnc_payment_dialog_has_pre_existing_txn(
const PaymentWindow* pw)
145 return pw->pre_existing_txn != NULL;
147 int gnc_payment_dialog_post_to_changed_cb (GtkWidget *widget, gpointer data);
148 void gnc_payment_dialog_document_selection_changed_cb (GtkWidget *widget, gpointer data);
149 void gnc_payment_dialog_xfer_acct_changed_cb (GtkWidget *widget, gpointer data);
150 void gnc_payment_ok_cb (GtkWidget *widget, gpointer data);
151 void gnc_payment_cancel_cb (GtkWidget *widget, gpointer data);
152 void gnc_payment_window_destroy_cb (GtkWidget *widget, gpointer data);
153 void gnc_payment_acct_tree_row_activated_cb (GtkWidget *widget, GtkTreePath *path,
155 void gnc_payment_leave_amount_cb (GtkWidget *widget, GdkEventFocus *event,
161 gnc_payment_window_refresh_handler (GHashTable *changes, gpointer data)
165 gnc_payment_window_fill_docs_list (pw);
166 pw->post_acct = gnc_account_select_combo_fill (pw->post_combo, pw->book, pw->acct_types, pw->acct_commodities);
172 const char *conflict_msg = NULL;
175 gboolean enable_xfer_acct = TRUE;
176 GtkTreeSelection *selection;
184 conflict_msg = _(
"You must enter a valid account name for posting.");
189 gnc_owner_get_owner (pw->owner_choice, &(pw->owner));
192 conflict_msg = _(
"You must select a company for payment processing.");
197 amount_deb = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (pw->amount_debit_edit));
198 amount_cred = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (pw->amount_credit_edit));
205 enable_xfer_acct = FALSE;
213 conflict_msg = _(
"You must select a transfer account from the account tree.");
218 gtk_widget_set_sensitive (pw->acct_tree, enable_xfer_acct);
221 gtk_widget_set_tooltip_text (pw->payment_warning, conflict_msg);
224 gtk_widget_show (pw->payment_warning);
225 gtk_widget_set_sensitive (pw->ok_button, FALSE);
230 gtk_widget_hide (pw->payment_warning);
231 gtk_widget_set_sensitive (pw->ok_button, TRUE);
238 gnc_payment_window_close_handler (gpointer data)
243 gtk_widget_destroy (pw->dialog);
247 calculate_selected_total_helper (GtkTreeModel *model,
254 GValue value = { 0 };
259 gtk_tree_model_get_value (model, iter, 5, &value);
260 lot = (
GNCLot *) g_value_get_pointer (&value);
261 g_value_unset (&value);
273 gnc_payment_dialog_calculate_selected_total (
PaymentWindow *pw)
275 GtkTreeSelection *selection;
278 if (!pw->docs_list_tree_view || !GTK_IS_TREE_VIEW(pw->docs_list_tree_view))
279 return gnc_numeric_zero();
282 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view));
284 gtk_tree_selection_selected_foreach (selection,
285 calculate_selected_total_helper,
292 gnc_payment_dialog_document_selection_changed (
PaymentWindow *pw)
299 if (gnc_payment_dialog_has_pre_existing_txn (pw))
303 val = gnc_payment_dialog_calculate_selected_total (pw);
304 gnc_ui_payment_window_set_amount(pw, val);
313 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(pw->docs_list_tree_view));
314 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view));
315 gtk_tree_selection_unselect_all (selection);
317 if (gtk_tree_model_get_iter_first (model, &iter))
321 GValue value = { 0 };
325 gtk_tree_model_get_value (model, &iter, 5, &value);
326 lot = (
GNCLot *) g_value_get_pointer (&value);
327 g_value_unset (&value);
336 if (pw->invoice == invoice)
338 gtk_tree_selection_select_iter (selection, &iter);
339 gnc_payment_dialog_document_selection_changed (pw);
342 while (gtk_tree_model_iter_next (model, &iter));
351 GtkTreeSelection *selection;
352 GList *list = NULL, *node;
354 g_return_if_fail (pw->docs_list_tree_view && GTK_IS_TREE_VIEW(pw->docs_list_tree_view));
357 if (pw->owner.owner.undefined)
362 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view));
363 gtk_tree_selection_unselect_all (selection);
364 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(pw->docs_list_tree_view)));
365 gtk_list_store_clear(store);
368 for (node = list; node; node = node->next)
372 const gchar *doc_type_str = NULL;
373 const gchar *doc_id_str = NULL;
374 const gchar *doc_deb_str = NULL;
375 const gchar *doc_cred_str = NULL;
389 doc_date = gncInvoiceGetDatePosted (document);
404 doc_type_str = gncInvoiceGetTypeString (document);
407 doc_type_str = _(
"Pre-Payment");
412 doc_id_str = gncInvoiceGetID (document);
429 doc_deb_str = xaccPrintAmount (debit, gnc_default_print_info (FALSE));
431 doc_cred_str = xaccPrintAmount (credit, gnc_default_print_info (FALSE));
433 gtk_list_store_append (store, &iter);
434 gtk_list_store_set (store, &iter,
448 gnc_payment_dialog_highlight_document (pw);
463 "payment-last-account", &guid,
469 g_list_free(pw->acct_types);
470 pw->acct_types = NULL;
473 if (pw->acct_commodities)
475 g_list_free(pw->acct_commodities);
476 pw->acct_commodities = NULL;
482 pw->post_acct = gnc_account_select_combo_fill (pw->post_combo, pw->book, pw->acct_types, pw->acct_commodities);
485 gnc_payment_window_fill_docs_list (pw);
494 if (last_acct && !gnc_payment_dialog_has_pre_existing_txn(pw))
504 gnc_payment_window_fill_docs_list (pw);
518 "payment-last-account", guid,
527 gnc_owner_set_owner (pw->owner_choice, owner);
528 gnc_payment_dialog_owner_changed(pw);
532 gnc_payment_dialog_owner_changed_cb (GtkWidget *widget, gpointer data)
537 if (!pw)
return FALSE;
539 gncOwnerCopy (&(pw->owner), &owner);
540 gnc_owner_get_owner (pw->owner_choice, &owner);
545 gncOwnerCopy (&owner, &(pw->owner));
546 gnc_payment_dialog_owner_changed(pw);
550 gnc_payment_window_check_payment (pw);
556 gnc_payment_dialog_document_selection_changed_cb (GtkWidget *widget, gpointer data)
562 gnc_payment_dialog_document_selection_changed (pw);
565 gnc_payment_window_check_payment (pw);
569 gnc_payment_dialog_xfer_acct_changed_cb (GtkWidget *widget, gpointer data)
576 gnc_payment_window_check_payment (pw);
580 gnc_payment_dialog_post_to_changed_cb (GtkWidget *widget, gpointer data)
585 if (!pw)
return FALSE;
587 post_acct = gnc_account_select_combo_get_active (pw->post_combo);
590 if (post_acct != pw->post_acct)
592 pw->post_acct = post_acct;
593 gnc_payment_dialog_post_to_changed(pw);
596 gnc_payment_dialog_highlight_document (pw);
599 gnc_payment_window_check_payment (pw);
610 get_selected_lots (GtkTreeModel *model,
615 GList **return_list = data;
617 GValue value = { 0 };
619 gtk_tree_model_get_value (model, iter, 5, &value);
620 lot = (
GNCLot *) g_value_get_pointer (&value);
621 g_value_unset (&value);
628 gnc_payment_ok_cb (GtkWidget *widget, gpointer data)
631 const char *text = NULL;
650 gnc_gui_component_clear_watches (pw->component_id);
652 gnc_suspend_gui_refresh ();
654 const char *memo, *num;
657 GList *selected_lots = NULL;
658 GtkTreeSelection *selection;
662 memo = gtk_entry_get_text (GTK_ENTRY (pw->memo_entry));
663 num = gtk_entry_get_text (GTK_ENTRY (pw->num_entry));
664 date = gnc_date_edit_get_date_ts (GNC_DATE_EDIT (pw->date_edit));
667 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view));
668 gtk_tree_selection_selected_foreach (selection, get_selected_lots, &selected_lots);
681 text = _(
"The transfer and post accounts are associated with different currencies. Please specify the conversion rate.");
683 xfer = gnc_xfer_dialog(pw->dialog, pw->xfer_acct);
684 gnc_info_dialog(pw->dialog,
"%s", text);
686 gnc_xfer_dialog_select_to_account(xfer, pw->post_acct);
687 gnc_xfer_dialog_set_amount(xfer, pw->amount_tot);
691 gnc_xfer_dialog_set_from_show_button_active(xfer, FALSE);
692 gnc_xfer_dialog_set_to_show_button_active(xfer, FALSE);
693 gnc_xfer_dialog_hide_from_account_tree(xfer);
694 gnc_xfer_dialog_hide_to_account_tree(xfer);
695 gnc_xfer_dialog_is_exchange_dialog(xfer, &exch);
696 gnc_xfer_dialog_run_until_done(xfer);
706 pw->post_acct, pw->xfer_acct, pw->amount_tot,
707 exch, date, memo, num, auto_pay);
709 gnc_resume_gui_refresh ();
712 gnc_payment_dialog_remember_account(pw, pw->xfer_acct);
714 gnc_ui_payment_window_destroy (pw);
718 gnc_payment_cancel_cb (GtkWidget *widget, gpointer data)
721 gnc_ui_payment_window_destroy (pw);
725 gnc_payment_window_destroy_cb (GtkWidget *widget, gpointer data)
731 gnc_unregister_gui_component (pw->component_id);
733 g_list_free (pw->acct_types);
734 g_list_free (pw->acct_commodities);
739 gnc_payment_acct_tree_row_activated_cb (GtkWidget *widget, GtkTreePath *path,
746 g_return_if_fail(widget);
747 view = GTK_TREE_VIEW(widget);
749 model = gtk_tree_view_get_model(view);
750 if (gtk_tree_model_get_iter(model, &iter, path))
752 if (gtk_tree_model_iter_has_child(model, &iter))
756 if (gtk_tree_view_row_expanded(view, path))
757 gtk_tree_view_collapse_row(view, path);
759 gtk_tree_view_expand_row(view, path, FALSE);
761 else if (gnc_payment_window_check_payment (pw))
764 gnc_payment_ok_cb(widget, pw);
769 gnc_payment_leave_amount_cb (GtkWidget *widget, GdkEventFocus *event,
774 if (! pw->amount_credit_edit || ! pw->amount_debit_edit)
778 amount_deb = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (pw->amount_debit_edit));
779 amount_cred = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (pw->amount_credit_edit));
784 gnc_ui_payment_window_set_amount (pw, amount_tot);
787 gnc_payment_window_check_payment (pw);
809 avi.include_type[i] = AccountTypeOkForPayments (i);
815 find_handler (gpointer
find_data, gpointer user_data)
822 static void print_date (GtkTreeViewColumn *tree_column,
823 GtkCellRenderer *cell,
824 GtkTreeModel *tree_model,
828 GValue value = { 0 };
832 g_return_if_fail (cell && iter && tree_model);
835 gtk_tree_model_get_value (tree_model, iter, 0, &value);
836 doc_date_time = (
time64) g_value_get_int64 (&value);
837 g_value_unset (&value);
839 g_object_set (G_OBJECT (cell),
"text", doc_date_str, NULL);
840 g_free (doc_date_str);
848 GtkWidget *box, *label, *credit_box, *debit_box;
849 GtkTreeSelection *selection;
850 GtkTreeViewColumn *column;
851 GtkCellRenderer *renderer;
853 DIALOG_PAYMENT_CUSTOMER_CM_CLASS :
854 DIALOG_PAYMENT_VENDOR_CM_CLASS);
862 pw = gnc_find_first_gui_component (cm_class, find_handler, NULL);
866 gnc_payment_set_owner (pw, owner);
869 pw->pre_existing_txn = NULL;
871 gtk_window_present (GTK_WINDOW(pw->dialog));
879 gncOwnerCopy (owner, &(pw->owner));
888 builder = gtk_builder_new();
889 gnc_builder_add_from_file (builder,
"dialog-payment.glade",
"docs_list_hor_adj");
890 gnc_builder_add_from_file (builder,
"dialog-payment.glade",
"docs_list_vert_adj");
891 gnc_builder_add_from_file (builder,
"dialog-payment.glade",
"docs_list_model");
892 gnc_builder_add_from_file (builder,
"dialog-payment.glade",
"post_combo_model");
893 gnc_builder_add_from_file (builder,
"dialog-payment.glade",
"Payment Dialog");
894 pw->dialog = GTK_WIDGET (gtk_builder_get_object (builder,
"Payment Dialog"));
897 pw->payment_warning = GTK_WIDGET (gtk_builder_get_object (builder,
"payment_warning"));
898 pw->ok_button = GTK_WIDGET (gtk_builder_get_object (builder,
"okbutton"));
899 pw->num_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"num_entry"));
900 pw->memo_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"memo_entry"));
901 pw->post_combo = GTK_WIDGET (gtk_builder_get_object (builder,
"post_combo"));
902 gtk_combo_box_set_entry_text_column( GTK_COMBO_BOX( pw->post_combo ), 0 );
903 gnc_cbwe_require_list_item(GTK_COMBO_BOX(pw->post_combo));
905 label = GTK_WIDGET (gtk_builder_get_object (builder,
"owner_label"));
906 box = GTK_WIDGET (gtk_builder_get_object (builder,
"owner_box"));
907 pw->owner_choice = gnc_owner_select_create (label, box, book, owner);
922 debit_box = GTK_WIDGET (gtk_builder_get_object (builder,
"amount_refund_box"));
923 credit_box = GTK_WIDGET (gtk_builder_get_object (builder,
"amount_payment_box"));
927 debit_box = GTK_WIDGET (gtk_builder_get_object (builder,
"amount_payment_box"));
928 credit_box = GTK_WIDGET (gtk_builder_get_object (builder,
"amount_refund_box"));
931 pw->amount_debit_edit = gnc_amount_edit_new ();
932 gtk_box_pack_start (GTK_BOX (debit_box), pw->amount_debit_edit, TRUE, TRUE, 0);
933 gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (pw->amount_debit_edit),
935 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (pw->amount_debit_edit), gnc_numeric_zero());
936 g_signal_connect(G_OBJECT(gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(pw->amount_debit_edit))),
938 G_CALLBACK(gnc_payment_leave_amount_cb), pw);
940 pw->amount_credit_edit = gnc_amount_edit_new ();
941 gtk_box_pack_start (GTK_BOX (credit_box), pw->amount_credit_edit, TRUE, TRUE, 0);
942 gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT (pw->amount_credit_edit),
944 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (pw->amount_credit_edit), gnc_numeric_zero());
945 g_signal_connect(G_OBJECT(gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(pw->amount_credit_edit))),
947 G_CALLBACK(gnc_payment_leave_amount_cb), pw);
949 box = GTK_WIDGET (gtk_builder_get_object (builder,
"date_box"));
950 pw->date_edit = gnc_date_edit_new (time(NULL), FALSE, FALSE);
951 gtk_box_pack_start (GTK_BOX (box), pw->date_edit, TRUE, TRUE, 0);
953 pw->docs_list_tree_view = GTK_WIDGET (gtk_builder_get_object (builder,
"docs_list_tree_view"));
954 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->docs_list_tree_view));
955 gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
958 renderer = gtk_cell_renderer_text_new ();
959 column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 0);
960 gtk_tree_view_column_pack_start (column, renderer, TRUE);
962 column,
"31-12-2013");
963 gtk_tree_view_column_set_cell_data_func (column, renderer,
964 (GtkTreeCellDataFunc) print_date,
968 column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 1);
970 column,
"INV2013-016");
973 column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 2);
975 column, _(
"Credit Note"));
978 column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 3);
980 column,
"11,999.00");
983 column = gtk_tree_view_get_column (GTK_TREE_VIEW (pw->docs_list_tree_view), 4);
985 column,
"11,999.00");
987 gtk_tree_sortable_set_sort_column_id (
988 GTK_TREE_SORTABLE (gtk_tree_view_get_model (GTK_TREE_VIEW (pw->docs_list_tree_view))),
989 0, GTK_SORT_ASCENDING);
992 box = GTK_WIDGET (gtk_builder_get_object (builder,
"acct_window"));
994 gtk_container_add (GTK_CONTAINER (box), pw->acct_tree);
995 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(pw->acct_tree), FALSE);
996 gnc_payment_set_account_types (GNC_TREE_VIEW_ACCOUNT (pw->acct_tree));
1000 gnc_payment_dialog_owner_changed(pw);
1003 pw->invoice = invoice;
1006 Account *postacct = gncInvoiceGetPostedAcc (invoice);
1011 gnc_payment_dialog_post_to_changed_cb (pw->post_combo, pw);
1012 g_free(acct_string);
1017 gtk_builder_connect_signals_full( builder,
1018 gnc_builder_connect_full_func,
1021 g_signal_connect (G_OBJECT (pw->owner_choice),
"changed",
1022 G_CALLBACK (gnc_payment_dialog_owner_changed_cb), pw);
1024 g_signal_connect (G_OBJECT (pw->acct_tree),
"row-activated",
1025 G_CALLBACK (gnc_payment_acct_tree_row_activated_cb), pw);
1027 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(pw->acct_tree));
1028 g_signal_connect (G_OBJECT (selection),
"changed",
1029 G_CALLBACK (gnc_payment_dialog_xfer_acct_changed_cb), pw);
1034 gnc_register_gui_component (cm_class,
1035 gnc_payment_window_refresh_handler,
1036 gnc_payment_window_close_handler,
1040 gnc_gui_component_watch_entity_type (pw->component_id,
1042 QOF_EVENT_CREATE | QOF_EVENT_MODIFY |
1046 gtk_widget_show_all (pw->dialog);
1047 g_object_unref(G_OBJECT(builder));
1050 if (GNC_IS_GENERAL_SEARCH(pw->owner_choice))
1052 gnc_general_search_grab_focus(GNC_GENERAL_SEARCH(pw->owner_choice));
1056 gnc_payment_window_check_payment (pw);
1061 const char *acct_type;
1063 text = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (GTK_COMBO_BOX(pw->post_combo)))));
1065 if (!text || g_strcmp0 (text,
"") == 0)
1070 g_assert (g_list_length (pw->acct_types) == 1);
1072 gnc_warning_dialog(pw->dialog,
1073 _(
"You have no valid \"Post To\" accounts. "
1074 "Please create an account of type \"%s\" "
1075 "before you continue to process this payment. "
1076 "Perhaps you want to create an Invoice or "
1090 gnc_close_gui_component (pw->component_id);
1094 gnc_ui_payment_new_with_invoice (
const GncOwner *owner,
QofBook *book,
1099 if (!book)
return NULL;
1107 gncOwnerInitCustomer (&owner_def, NULL);
1110 return new_payment_window (&owner_def, book, invoice);
1116 return gnc_ui_payment_new_with_invoice (owner, book, NULL);
1120 static void increment_if_asset_account (gpointer data,
1124 const Split *split = data;
1129 static int countAssetAccounts(
SplitList* slist)
1132 g_list_foreach(slist, &increment_if_asset_account, &result);
1136 static gint predicate_is_asset_account(gconstpointer a,
1137 gconstpointer user_data)
1139 const Split *split = a;
1146 static gint predicate_is_apar_account(gconstpointer a,
1147 gconstpointer user_data)
1149 const Split *split = a;
1158 GList *r = g_list_find_custom(slist, NULL, &predicate_is_asset_account);
1166 GList *r = g_list_find_custom(slist, NULL, &predicate_is_apar_account);
1175 gboolean gnc_ui_payment_is_customer_payment(
const Transaction *txn)
1178 gboolean result = TRUE;
1180 Split *assetaccount_split;
1191 if (countAssetAccounts(slist) == 0)
1193 g_message(
"No asset splits in txn \"%s\"; cannot use this for assigning a payment.",
1198 assetaccount_split = getFirstAssetAccountSplit(slist);
1211 Split *assetaccount_split;
1212 Split *postaccount_split;
1224 if (countAssetAccounts(slist) == 0)
1226 g_message(
"No asset splits in txn \"%s\"; cannot use this for assigning a payment.",
1231 assetaccount_split = getFirstAssetAccountSplit(slist);
1232 postaccount_split = getFirstAPARAccountSplit(slist);
1235 pw = gnc_ui_payment_new(owner,
1237 g_assert(assetaccount_split);
1241 pw->pre_existing_txn = txn;
1242 gnc_ui_payment_window_set_num(pw, gnc_get_num_action(txn, assetaccount_split));
1246 gnc_ui_payment_window_set_date(pw, &txn_date);
1248 gnc_ui_payment_window_set_amount(pw, amount);
1250 if (postaccount_split)
void gnc_cbwe_set_by_string(GtkComboBox *cbwe, const gchar *text)
GList * gncOwnerGetCommoditiesList(const GncOwner *owner)
void gnc_tree_view_account_get_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
void tree_view_column_set_default_width(GtkTreeView *view, GtkTreeViewColumn *column, const gchar *sizing_text)
int gnc_commodity_get_fraction(const gnc_commodity *cm)
time64 timespecToTime64(Timespec ts)
Business Interface: Object OWNERs.
void qof_instance_get(const QofInstance *inst, const gchar *first_param,...)
Wrapper for g_object_get.
Date and Time handling routines.
GList * gncOwnerGetAccountTypesList(const GncOwner *owner)
QofBook * qof_instance_get_book(gconstpointer)
utility functions for the GnuCash UI
GNCAccountType xaccAccountGetType(const Account *acc)
gnc_numeric gnc_numeric_neg(gnc_numeric a)
void qof_instance_set(QofInstance *inst, const gchar *first_param,...)
Wrapper for g_object_set Group setting multiple parameters in a single begin/commit/rollback.
gboolean gnc_commodity_equal(const gnc_commodity *a, const gnc_commodity *b)
gboolean gncOwnerEqual(const GncOwner *a, const GncOwner *b)
gnc_numeric gnc_numeric_add(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
Use a 64-bit unsigned int timespec.
gboolean gnc_numeric_zero_p(gnc_numeric a)
Transaction * xaccSplitGetParent(const Split *split)
void gnc_tree_view_account_set_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
gchar * gnc_numeric_to_string(gnc_numeric n)
gboolean qof_commit_edit(QofInstance *inst)
gboolean gncOwnerIsValid(const GncOwner *owner)
QofInstance * qofOwnerGetOwner(const GncOwner *owner)
Split * gnc_lot_get_latest_split(GNCLot *lot)
char * qof_print_date(time64 secs)
gboolean qof_begin_edit(QofInstance *inst)
#define xaccAccountGetGUID(X)
gboolean xaccAccountIsAssetLiabType(GNCAccountType t)
gchar * gnc_account_get_full_name(const Account *account)
Account handling public routines.
void gncOwnerApplyPayment(const GncOwner *owner, Transaction *txn, GList *lots, Account *posted_acc, Account *xfer_acc, gnc_numeric amount, gnc_numeric exch, Timespec date, const char *memo, const char *num, gboolean auto_pay)
GtkTreeView implementation for gnucash account tree.
gint gncOwnerLotsSortFunc(GNCLot *lotA, GNCLot *lotB)
GtkTreeView * gnc_tree_view_account_new(gboolean show_root)
const char * xaccTransGetDescription(const Transaction *trans)
gboolean xaccAccountIsAPARType(GNCAccountType t)
gboolean gnc_numeric_positive_p(gnc_numeric a)
Generic api to store and retrieve preferences.
gnc_numeric gnc_numeric_sub(gnc_numeric a, gnc_numeric b, gint64 denom, gint how)
GncOwnerType gncOwnerGetType(const GncOwner *owner)
const GncOwner * gncOwnerGetEndOwner(const GncOwner *owner)
GncInvoice * gncInvoiceGetInvoiceFromLot(GNCLot *lot)
Business Invoice Interface.
void gnc_tree_view_account_set_selected_account(GncTreeViewAccount *view, Account *account)
gboolean gncOwnerLotMatchOwnerFunc(GNCLot *lot, gpointer user_data)
gnc_numeric xaccSplitGetValue(const Split *split)
Account * xaccSplitGetAccount(const Split *s)
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Account * gnc_tree_view_account_get_selected_account(GncTreeViewAccount *view)
Timespec xaccTransRetDatePostedTS(const Transaction *trans)
GNCNumericErrorCode gnc_numeric_check(gnc_numeric a)
Account * gnc_lot_get_account(const GNCLot *lot)
LotList * xaccAccountFindOpenLots(const Account *acc, gboolean(*match_func)(GNCLot *lot, gpointer user_data), gpointer user_data, GCompareFunc sort_func)
const char * xaccAccountGetTypeStr(GNCAccountType type)
GDate xaccTransGetDatePostedGDate(const Transaction *trans)
API for Transactions and Splits (journal entries)
SplitList * xaccTransGetSplitList(const Transaction *trans)
gboolean xaccAccountIsEquityType(GNCAccountType t)
gnc_numeric gnc_lot_get_balance(GNCLot *lot)
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)