27#include <glib/gi18n.h>
29#include "dialog-utils.h"
31#include "gnc-component-manager.h"
33#include "gnc-gui-query.h"
36#include "dialog-search.h"
37#include "search-param.h"
41#include "gncVendorP.h"
43#include "business-gnome-utils.h"
44#include "dialog-vendor.h"
45#include "dialog-job.h"
46#include "dialog-order.h"
47#include "dialog-invoice.h"
48#include "dialog-payment.h"
50#define DIALOG_NEW_VENDOR_CM_CLASS "dialog-new-vendor"
51#define DIALOG_EDIT_VENDOR_CM_CLASS "dialog-edit-vendor"
53#define GNC_PREFS_GROUP_SEARCH "dialogs.business.vendor-search"
55void gnc_vendor_taxtable_check_cb (GtkToggleButton *togglebutton, gpointer user_data);
56void gnc_vendor_window_ok_cb (GtkWidget *widget, gpointer data);
57void gnc_vendor_window_cancel_cb (GtkWidget *widget, gpointer data);
58void gnc_vendor_window_help_cb (GtkWidget *widget, gpointer data);
59void gnc_vendor_window_destroy_cb (GtkWidget *widget, gpointer data);
60void gnc_vendor_name_changed_cb (GtkWidget *widget, gpointer data);
61void gnc_vendor_terms_changed_cb (GtkWidget *widget, gpointer data);
62void gnc_vendor_taxincluded_changed_cb (GtkWidget *widget, gpointer data);
63void gnc_vendor_taxtable_changed_cb (GtkWidget *widget, gpointer data);
82 GtkWidget * company_entry;
84 GtkWidget * name_entry;
85 GtkWidget * addr1_entry;
86 GtkWidget * addr2_entry;
87 GtkWidget * addr3_entry;
88 GtkWidget * addr4_entry;
89 GtkWidget * phone_entry;
90 GtkWidget * fax_entry;
91 GtkWidget * email_entry;
92 GtkWidget * terms_menu;
93 GtkWidget * currency_edit;
95 GtkWidget * active_check;
96 GtkWidget * taxincluded_menu;
97 GtkWidget * notes_text;
99 GtkWidget * taxtable_check;
100 GtkWidget * taxtable_menu;
104 VendorDialogType dialog_type;
108 GncVendor * created_vendor;
114gnc_vendor_taxtable_check_cb (GtkToggleButton *togglebutton,
117 VendorWindow *vw = user_data;
119 if (gtk_toggle_button_get_active (togglebutton))
120 gtk_widget_set_sensitive (vw->taxtable_menu, TRUE);
122 gtk_widget_set_sensitive (vw->taxtable_menu, FALSE);
126vw_get_vendor (VendorWindow *vw)
131 return gncVendorLookup (vw->book, &vw->vendor_guid);
134static void gnc_ui_to_vendor (VendorWindow *vw, GncVendor *vendor)
136 GtkTextBuffer* text_buffer;
137 GtkTextIter start, end;
141 addr = gncVendorGetAddr (vendor);
143 gnc_suspend_gui_refresh ();
144 gncVendorBeginEdit (vendor);
146 if (vw->dialog_type == NEW_VENDOR)
149 gncVendorSetID (vendor, gtk_entry_get_text (GTK_ENTRY (vw->id_entry)));
150 gncVendorSetName (vendor, gtk_entry_get_text (GTK_ENTRY (vw->company_entry)));
152 gncAddressSetName (addr, gtk_entry_get_text (GTK_ENTRY (vw->name_entry)));
153 gncAddressSetAddr1 (addr, gtk_entry_get_text (GTK_ENTRY (vw->addr1_entry)));
154 gncAddressSetAddr2 (addr, gtk_entry_get_text (GTK_ENTRY (vw->addr2_entry)));
155 gncAddressSetAddr3 (addr, gtk_entry_get_text (GTK_ENTRY (vw->addr3_entry)));
156 gncAddressSetAddr4 (addr, gtk_entry_get_text (GTK_ENTRY (vw->addr4_entry)));
157 gncAddressSetPhone (addr, gtk_entry_get_text (GTK_ENTRY (vw->phone_entry)));
158 gncAddressSetFax (addr, gtk_entry_get_text (GTK_ENTRY (vw->fax_entry)));
159 gncAddressSetEmail (addr, gtk_entry_get_text (GTK_ENTRY (vw->email_entry)));
161 gncVendorSetActive (vendor, gtk_toggle_button_get_active
162 (GTK_TOGGLE_BUTTON (vw->active_check)));
163 gncVendorSetTaxIncluded (vendor, vw->taxincluded);
165 text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(vw->notes_text));
166 gtk_text_buffer_get_bounds (text_buffer, &start, &end);
167 text = gtk_text_buffer_get_text (text_buffer, &start, &end, FALSE);
168 gncVendorSetNotes (vendor, text);
170 gncVendorSetTerms (vendor, vw->terms);
171 gncVendorSetCurrency (vendor,
173 (vw->currency_edit)));
175 gncVendorSetTaxTableOverride
176 (vendor, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (vw->taxtable_check)));
177 gncVendorSetTaxTable (vendor, vw->taxtable);
179 gncVendorCommitEdit (vendor);
180 gnc_resume_gui_refresh ();
184static gboolean check_entry_nonempty (GtkWidget *entry,
185 const char * error_message)
187 const char *res = gtk_entry_get_text (GTK_ENTRY (entry));
188 if (g_strcmp0 (res,
"") == 0)
198gnc_vendor_window_ok_cb (GtkWidget *widget, gpointer data)
200 VendorWindow *vw = data;
204 if (check_entry_nonempty (vw->company_entry,
205 _(
"The Company Name field cannot be left blank, please "
206 "enter a company name or a person's name.")))
210 if (g_strcmp0 (gtk_entry_get_text (GTK_ENTRY (vw->id_entry)),
"") == 0)
212 string = gncVendorNextID(vw->book);
213 gtk_entry_set_text (GTK_ENTRY (vw->id_entry),
string);
219 GncVendor *vendor = vw_get_vendor (vw);
222 gnc_ui_to_vendor (vw, vendor);
224 vw->created_vendor = vendor;
228 gnc_close_gui_component (vw->component_id);
232gnc_vendor_window_cancel_cb (GtkWidget *widget, gpointer data)
234 VendorWindow *vw = data;
236 gnc_close_gui_component (vw->component_id);
240gnc_vendor_window_help_cb (GtkWidget *widget, gpointer data)
242 VendorWindow *vw = data;
243 gnc_gnome_help (GTK_WINDOW(vw->dialog), DF_MANUAL, DL_USAGE_VENDOR);
247gnc_vendor_window_destroy_cb (GtkWidget *widget, gpointer data)
249 VendorWindow *vw = data;
250 GncVendor *vendor = vw_get_vendor (vw);
252 gnc_suspend_gui_refresh ();
254 if (vw->dialog_type == NEW_VENDOR && vendor != NULL)
256 gncVendorBeginEdit (vendor);
257 gncVendorDestroy (vendor);
261 gnc_unregister_gui_component (vw->component_id);
262 gnc_resume_gui_refresh ();
268gnc_vendor_name_changed_cb (GtkWidget *widget, gpointer data)
270 VendorWindow *vw = data;
274 gnc_owner_window_set_title (GTK_WINDOW (vw->dialog),
275 (vw->dialog_type == EDIT_VENDOR) ?
276 _(
"Edit Vendor") :
_(
"New Vendor"),
277 vw->company_entry, vw->id_entry);
281gnc_vendor_terms_changed_cb (GtkWidget *widget, gpointer data)
283 GtkComboBox *cbox = GTK_COMBO_BOX (widget);
284 VendorWindow *vw = data;
289 vw->terms = gnc_simple_combo_get_value (cbox);
293gnc_vendor_taxincluded_changed_cb (GtkWidget *widget, gpointer data)
295 GtkComboBox *cbox = GTK_COMBO_BOX (widget);
296 VendorWindow *vw = data;
301 vw->taxincluded = GPOINTER_TO_INT (gnc_simple_combo_get_value (cbox));
305gnc_vendor_taxtable_changed_cb (GtkWidget *widget, gpointer data)
307 GtkComboBox *cbox = GTK_COMBO_BOX (widget);
308 VendorWindow *vw = data;
313 vw->taxtable = gnc_simple_combo_get_value (cbox);
317gnc_vendor_window_close_handler (gpointer user_data)
319 VendorWindow *vw = user_data;
321 gtk_widget_destroy (vw->dialog);
325gnc_vendor_window_refresh_handler (GHashTable *changes, gpointer user_data)
327 VendorWindow *vw = user_data;
329 GncVendor *vendor = vw_get_vendor (vw);
334 gnc_close_gui_component (vw->component_id);
341 info = gnc_gui_get_entity_events (changes, &vw->vendor_guid);
342 if (info && (info->event_mask & QOF_EVENT_DESTROY))
344 gnc_close_gui_component (vw->component_id);
351find_handler (gpointer
find_data, gpointer user_data)
354 VendorWindow *vw = user_data;
356 return(vw &&
guid_equal(&vw->vendor_guid, vendor_guid));
360gnc_vendor_new_window (GtkWindow *parent,
QofBook *bookp, GncVendor *vendor)
364 GtkWidget *edit, *hbox;
365 gnc_commodity *currency;
375 vendor_guid = *gncVendorGetGUID (vendor);
376 vw = gnc_find_first_gui_component (DIALOG_EDIT_VENDOR_CM_CLASS,
377 find_handler, &vendor_guid);
380 gtk_window_set_transient_for (GTK_WINDOW(vw->dialog), parent);
381 gtk_window_present (GTK_WINDOW(vw->dialog));
388 currency = gncVendorGetCurrency (vendor);
395 vw = g_new0 (VendorWindow, 1);
400 builder = gtk_builder_new();
401 gnc_builder_add_from_file (builder,
"dialog-vendor.glade",
"terms_store");
402 gnc_builder_add_from_file (builder,
"dialog-vendor.glade",
"tax_included_store");
403 gnc_builder_add_from_file (builder,
"dialog-vendor.glade",
"taxtable_store");
404 gnc_builder_add_from_file (builder,
"dialog-vendor.glade",
"vendor_dialog");
405 vw->dialog = GTK_WIDGET (gtk_builder_get_object (builder,
"vendor_dialog"));
406 gtk_window_set_transient_for (GTK_WINDOW(vw->dialog), parent);
409 gtk_widget_set_name (GTK_WIDGET(vw->dialog),
"gnc-id-vendor");
410 gnc_widget_style_context_add_class (GTK_WIDGET(vw->dialog),
"gnc-class-vendors");
413 vw->id_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"id_entry"));
414 vw->company_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"company_entry"));
416 vw->name_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"name_entry"));
417 vw->addr1_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"addr1_entry"));
418 vw->addr2_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"addr2_entry"));
419 vw->addr3_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"addr3_entry"));
420 vw->addr4_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"addr4_entry"));
421 vw->phone_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"phone_entry"));
422 vw->fax_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"fax_entry"));
423 vw->email_entry = GTK_WIDGET (gtk_builder_get_object (builder,
"email_entry"));
425 vw->active_check = GTK_WIDGET (gtk_builder_get_object (builder,
"active_check"));
426 vw->taxincluded_menu = GTK_WIDGET (gtk_builder_get_object (builder,
"tax_included_menu"));
427 vw->notes_text = GTK_WIDGET (gtk_builder_get_object (builder,
"notes_text"));
428 vw->terms_menu = GTK_WIDGET (gtk_builder_get_object (builder,
"terms_menu"));
430 vw->taxtable_check = GTK_WIDGET (gtk_builder_get_object (builder,
"taxtable_button"));
431 vw->taxtable_menu = GTK_WIDGET (gtk_builder_get_object (builder,
"taxtable_menu"));
436 vw->currency_edit = edit;
438 hbox = GTK_WIDGET (gtk_builder_get_object (builder,
"currency_box"));
439 gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0);
442 gtk_builder_connect_signals_full( builder,
443 gnc_builder_connect_full_func,
449 GtkTextBuffer* text_buffer;
453 vw->dialog_type = EDIT_VENDOR;
454 vw->vendor_guid = *gncVendorGetGUID (vendor);
456 addr = gncVendorGetAddr (vendor);
458 gtk_entry_set_text (GTK_ENTRY (vw->id_entry), gncVendorGetID (vendor));
459 gtk_entry_set_text (GTK_ENTRY (vw->company_entry), gncVendorGetName (vendor));
462 gtk_entry_set_text (GTK_ENTRY (vw->name_entry), gncAddressGetName (addr));
463 gtk_entry_set_text (GTK_ENTRY (vw->addr1_entry), gncAddressGetAddr1 (addr));
464 gtk_entry_set_text (GTK_ENTRY (vw->addr2_entry), gncAddressGetAddr2 (addr));
465 gtk_entry_set_text (GTK_ENTRY (vw->addr3_entry), gncAddressGetAddr3 (addr));
466 gtk_entry_set_text (GTK_ENTRY (vw->addr4_entry), gncAddressGetAddr4 (addr));
467 gtk_entry_set_text (GTK_ENTRY (vw->phone_entry), gncAddressGetPhone (addr));
468 gtk_entry_set_text (GTK_ENTRY (vw->fax_entry), gncAddressGetFax (addr));
469 gtk_entry_set_text (GTK_ENTRY (vw->email_entry), gncAddressGetEmail (addr));
472 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vw->active_check),
473 gncVendorGetActive (vendor));
475 string = gncVendorGetNotes (vendor);
476 text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(vw->notes_text));
477 gtk_text_buffer_set_text (text_buffer,
string, -1);
480 gnc_register_gui_component (DIALOG_EDIT_VENDOR_CM_CLASS,
481 gnc_vendor_window_refresh_handler,
482 gnc_vendor_window_close_handler,
485 vw->terms = gncVendorGetTerms (vendor);
490 vendor = gncVendorCreate (bookp);
491 vw->vendor_guid = *gncVendorGetGUID (vendor);
493 vw->dialog_type = NEW_VENDOR;
495 gnc_register_gui_component (DIALOG_NEW_VENDOR_CM_CLASS,
496 gnc_vendor_window_refresh_handler,
497 gnc_vendor_window_close_handler,
506 vw->taxincluded = gncVendorGetTaxIncluded (vendor);
507 gnc_taxincluded_combo (GTK_COMBO_BOX(vw->taxincluded_menu), vw->taxincluded);
508 gnc_billterms_combo (GTK_COMBO_BOX(vw->terms_menu), bookp, TRUE, vw->terms);
510 vw->taxtable = gncVendorGetTaxTable (vendor);
511 gnc_taxtables_combo (GTK_COMBO_BOX(vw->taxtable_menu), bookp, TRUE, vw->taxtable);
512 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vw->taxtable_check),
513 gncVendorGetTaxTableOverride (vendor));
514 gnc_vendor_taxtable_check_cb (GTK_TOGGLE_BUTTON (vw->taxtable_check), vw);
516 gnc_gui_component_watch_entity_type (vw->component_id,
517 GNC_VENDOR_MODULE_NAME,
518 QOF_EVENT_MODIFY | QOF_EVENT_DESTROY);
520 gtk_widget_show_all (vw->dialog);
521 g_object_unref(G_OBJECT(builder));
527gnc_ui_vendor_new (GtkWindow *parent,
QofBook *bookp)
532 if (!bookp)
return NULL;
534 vw = gnc_vendor_new_window (parent, bookp, NULL);
539gnc_ui_vendor_edit (GtkWindow *parent, GncVendor *vendor)
543 if (!vendor)
return NULL;
553invoice_vendor_cb (GtkWindow *dialog, gpointer *vendor_p, gpointer user_data)
559 g_return_if_fail (vendor_p && user_data);
566 gncOwnerInitVendor (&owner, vendor);
567 gnc_invoice_search (dialog, NULL, &owner, sw->book);
572order_vendor_cb (GtkWindow *dialog, gpointer *vendor_p, gpointer user_data)
578 g_return_if_fail (vendor_p && user_data);
585 gncOwnerInitVendor (&owner, vendor);
586 gnc_order_search (dialog, NULL, &owner, sw->book);
591jobs_vendor_cb (GtkWindow *dialog, gpointer *vendor_p, gpointer user_data)
597 g_return_if_fail (vendor_p && user_data);
604 gncOwnerInitVendor (&owner, vendor);
605 gnc_job_search (dialog, NULL, &owner, sw->book);
610payment_vendor_cb (GtkWindow *dialog, gpointer *vendor_p, gpointer user_data)
616 g_return_if_fail (vendor_p && user_data);
623 gncOwnerInitVendor (&owner, vendor);
624 gnc_ui_payment_new (dialog, &owner, sw->book);
629edit_vendor_cb (GtkWindow *dialog, gpointer *vendor_p, gpointer user_data)
633 g_return_if_fail (vendor_p && user_data);
640 gnc_ui_vendor_edit (dialog, vendor);
645new_vendor_cb (GtkWindow *dialog, gpointer user_data)
650 g_return_val_if_fail (user_data, NULL);
652 vw = gnc_ui_vendor_new (dialog, sw->book);
653 return vw_get_vendor (vw);
657free_vendor_cb (gpointer user_data)
660 g_return_if_fail (sw);
667gnc_vendor_search (GtkWindow *parent, GncVendor *start,
QofBook *book)
672 static GList *params = NULL;
673 static GList *columns = NULL;
676 { N_(
"View/Edit Vendor"), edit_vendor_cb, NULL, TRUE},
677 { N_(
"Vendor's Jobs"), jobs_vendor_cb, NULL, TRUE},
679 { N_(
"Vendor's Bills"), invoice_vendor_cb, NULL, TRUE},
680 { N_(
"Pay Bill"), payment_vendor_cb, NULL, FALSE},
683 (void)order_vendor_cb;
685 g_return_val_if_fail (book, NULL);
690 params = gnc_search_param_prepend (params,
_(
"Billing Contact"), NULL, type,
691 VENDOR_ADDR, ADDRESS_NAME, NULL);
692 params = gnc_search_param_prepend (params,
_(
"Vendor ID"), NULL, type,
694 params = gnc_search_param_prepend (params,
_(
"Company Name"), NULL, type,
701 columns = gnc_search_param_prepend (columns,
_(
"Contact"), NULL, type,
702 VENDOR_ADDR, ADDRESS_NAME, NULL);
703 columns = gnc_search_param_prepend (columns,
_(
"Company"), NULL, type,
705 columns = gnc_search_param_prepend (columns,
_(
"ID #"), NULL, type,
710 q = qof_query_create_for (type);
718 gncVendorGetGUID (start), QOF_QUERY_AND);
727 return gnc_search_dialog_create (parent, type,
_(
"Find Vendor"),
728 params, columns, q, q2, buttons, NULL,
729 new_vendor_cb, sw, free_vendor_cb,
730 GNC_PREFS_GROUP_SEARCH, NULL,
731 "gnc-class-vendors");
735gnc_vendor_search_select (GtkWindow *parent, gpointer start, gpointer book)
737 if (!book)
return NULL;
739 return gnc_vendor_search (parent, start, book);
743gnc_vendor_search_edit (GtkWindow *parent, gpointer start, gpointer book)
746 gnc_ui_vendor_edit (parent, start);
Currency selection widget.
utility functions for the GnuCash UI
const gchar * QofIdType
QofIdType declaration.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
void gnc_currency_edit_set_currency(GNCCurrencyEdit *gce, const gnc_commodity *currency)
Set the widget to display a certain currency name.
GtkWidget * gnc_currency_edit_new(void)
Create a new GNCCurrencyEdit widget which can be used to provide an easy way to enter ISO currency co...
gnc_commodity * gnc_currency_edit_get_currency(GNCCurrencyEdit *gce)
Retrieve the displayed currency of the widget.
const GncGUID * guid_null(void)
Returns a GncGUID which is guaranteed to never reference any entity.
gboolean guid_equal(const GncGUID *guid_1, const GncGUID *guid_2)
Given two GUIDs, return TRUE if they are non-NULL and equal.
GtkWindow * gnc_ui_get_gtk_window(GtkWidget *widget)
Get a pointer to the widget's immediate top level GtkWindow.
void gnc_gnome_help(GtkWindow *parent, const char *file_name, const char *anchor)
Launch the systems default help browser, gnome's yelp for linux, and open to a given link within a gi...
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
void qof_query_add_guid_match(QofQuery *q, QofQueryParamList *param_list, const GncGUID *guid, QofQueryOp op)
DOCUMENT ME !!
QofQuery * qof_query_copy(QofQuery *q)
Make a copy of the indicated query.
void qof_query_set_book(QofQuery *query, QofBook *book)
Set the book to be searched.
void qof_query_destroy(QofQuery *query)
Frees the resources associate with a Query object.
GncTaxIncluded
How to interpret the TaxIncluded.
#define gncVendorGetBook(X)
deprecated functions
The type used to store guids in C.
modtime is the internal date of the last modtime See libgnucash/engine/TaxTableBillTermImmutability....