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" 55 void gnc_vendor_taxtable_check_cb (GtkToggleButton *togglebutton, gpointer user_data);
56 void gnc_vendor_window_ok_cb (GtkWidget *widget, gpointer data);
57 void gnc_vendor_window_cancel_cb (GtkWidget *widget, gpointer data);
58 void gnc_vendor_window_help_cb (GtkWidget *widget, gpointer data);
59 void gnc_vendor_window_destroy_cb (GtkWidget *widget, gpointer data);
60 void gnc_vendor_name_changed_cb (GtkWidget *widget, gpointer data);
61 void gnc_vendor_terms_changed_cb (GtkWidget *widget, gpointer data);
62 void gnc_vendor_taxincluded_changed_cb (GtkWidget *widget, gpointer data);
63 void 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;
114 gnc_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);
126 vw_get_vendor (VendorWindow *vw)
131 return gncVendorLookup (vw->book, &vw->vendor_guid);
134 static 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 ();
184 static 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)
198 gnc_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);
232 gnc_vendor_window_cancel_cb (GtkWidget *widget, gpointer data)
234 VendorWindow *vw = data;
236 gnc_close_gui_component (vw->component_id);
240 gnc_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);
247 gnc_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 ();
268 gnc_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);
281 gnc_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);
293 gnc_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));
305 gnc_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);
317 gnc_vendor_window_close_handler (gpointer user_data)
319 VendorWindow *vw = user_data;
321 gtk_widget_destroy (vw->dialog);
325 gnc_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);
351 find_handler (gpointer
find_data, gpointer user_data)
354 VendorWindow *vw = user_data;
356 return(vw &&
guid_equal(&vw->vendor_guid, vendor_guid));
359 static VendorWindow *
360 gnc_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));
527 gnc_ui_vendor_new (GtkWindow *parent, QofBook *bookp)
532 if (!bookp)
return NULL;
534 vw = gnc_vendor_new_window (parent, bookp, NULL);
539 gnc_ui_vendor_edit (GtkWindow *parent, GncVendor *vendor)
543 if (!vendor)
return NULL;
553 invoice_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);
572 order_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);
591 jobs_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);
610 payment_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);
629 edit_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);
645 new_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);
657 free_vendor_cb (gpointer user_data)
660 g_return_if_fail (sw);
667 gnc_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");
735 gnc_vendor_search_select (GtkWindow *parent, gpointer start, gpointer book)
737 if (!book)
return NULL;
739 return gnc_vendor_search (parent, start, book);
743 gnc_vendor_search_edit (GtkWindow *parent, gpointer start, gpointer book)
746 gnc_ui_vendor_edit (parent, start);
void gnc_currency_edit_set_currency(GNCCurrencyEdit *gce, const gnc_commodity *currency)
Set the widget to display a certain currency name.
utility functions for the GnuCash UI
GncTaxIncluded
How to interpret the TaxIncluded.
QofQuery * qof_query_copy(QofQuery *q)
Make a copy of the indicated query.
GtkWindow * gnc_ui_get_gtk_window(GtkWidget *widget)
Get a pointer to the widget's immediate top level GtkWindow.
gnc_commodity * gnc_default_currency(void)
Return the default currency set by the user.
const gchar * QofIdType
QofIdType declaration.
Currency selection widget.
void qof_query_destroy(QofQuery *query)
Frees the resources associate with a Query object.
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...
gboolean guid_equal(const GncGUID *guid_1, const GncGUID *guid_2)
Given two GUIDs, return TRUE if they are non-NULL and equal.
void qof_query_set_book(QofQuery *query, QofBook *book)
Set the book to be searched.
gnc_commodity * gnc_currency_edit_get_currency(GNCCurrencyEdit *gce)
Retrieve the displayed currency of the widget.
#define gncVendorGetBook(X)
deprecated functions
void qof_query_add_guid_match(QofQuery *q, QofQueryParamList *param_list, const GncGUID *guid, QofQueryOp op)
DOCUMENT ME !!
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...
const GncGUID * guid_null(void)
Returns a GncGUID which is guaranteed to never reference any entity.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.
The type used to store guids in C.
modtime is the internal date of the last modtime See libgnucash/engine/TaxTableBillTermImmutability.txt for an explanation of the following Code that handles refcount, parent, child, invisible and children is identical to that in ::GncBillTerm