static void test_bool_fcn (QofBook *book, const char *message, void (*set) (GncCustomer *, gboolean), gboolean (*get) (const GncCustomer *)) { GncCustomer *customer = gncCustomerCreate (book); gboolean num = get_random_boolean (); do_test (!gncCustomerIsDirty (customer), "test if start dirty"); gncCustomerBeginEdit (customer); set (customer, FALSE); set (customer, TRUE); set (customer, num); /* Customer record should be dirty */ do_test (gncCustomerIsDirty (customer), "test dirty later"); gncCustomerCommitEdit (customer); /* Customer record should be not dirty */ /* Skip, because will always fail without a backend. * It's not possible to load a backend in the engine code * without having circular dependencies. */ // do_test (!gncCustomerIsDirty (customer), "test dirty after commit"); do_test (get (customer) == num, message); gncCustomerSetActive (customer, FALSE); count++; }
static gboolean customer_guid_handler (xmlNodePtr node, gpointer cust_pdata) { struct customer_pdata *pdata = cust_pdata; GncGUID *guid; GncCustomer *cust; guid = dom_tree_to_guid(node); g_return_val_if_fail(guid, FALSE); cust = gncCustomerLookup (pdata->book, guid); if (cust) { gncCustomerDestroy (pdata->customer); pdata->customer = cust; gncCustomerBeginEdit (cust); } else { gncCustomerSetGUID(pdata->customer, guid); } g_free(guid); return TRUE; }
void gncOwnerBeginEdit (GncOwner *owner) { if (!owner) return; switch (owner->type) { case GNC_OWNER_NONE : case GNC_OWNER_UNDEFINED : break; case GNC_OWNER_CUSTOMER : { gncCustomerBeginEdit(owner->owner.customer); break; } case GNC_OWNER_JOB : { gncJobBeginEdit(owner->owner.job); break; } case GNC_OWNER_VENDOR : { gncVendorBeginEdit(owner->owner.vendor); break; } case GNC_OWNER_EMPLOYEE : { gncEmployeeBeginEdit(owner->owner.employee); break; } } }
void gncCustomerSetCurrency (GncCustomer *cust, gnc_commodity *currency) { if (!cust || !currency) return; if (cust->currency && gnc_commodity_equal (cust->currency, currency)) return; gncCustomerBeginEdit (cust); cust->currency = currency; mark_customer (cust); gncCustomerCommitEdit (cust); }
void gncCustomerSetCredit (GncCustomer *cust, gnc_numeric credit) { if (!cust) return; if (gnc_numeric_equal (credit, cust->credit)) return; gncCustomerBeginEdit (cust); cust->credit = credit; mark_customer (cust); gncCustomerCommitEdit (cust); }
void gncCustomerSetDiscount (GncCustomer *cust, gnc_numeric discount) { if (!cust) return; if (gnc_numeric_equal (discount, cust->discount)) return; gncCustomerBeginEdit (cust); cust->discount = discount; mark_customer (cust); gncCustomerCommitEdit (cust); }
void gncCustomerSetActive (GncCustomer *cust, gboolean active) { if (!cust) return; if (active == cust->active) return; gncCustomerBeginEdit (cust); cust->active = active; mark_customer (cust); gncCustomerCommitEdit (cust); }
void gncCustomerSetTaxIncluded (GncCustomer *cust, GncTaxIncluded taxincl) { if (!cust) return; if (taxincl == cust->taxincluded) return; gncCustomerBeginEdit (cust); cust->taxincluded = taxincl; mark_customer (cust); gncCustomerCommitEdit (cust); }
static void teardown( Fixture *fixture, gconstpointer pData ) { gncCustomerBeginEdit(fixture->customer); gncCustomerDestroy(fixture->customer); xaccAccountBeginEdit(fixture->account); xaccAccountDestroy(fixture->account); gnc_commodity_destroy(fixture->commodity); qof_book_destroy( fixture->book ); }
void gncCustomerSetTerms (GncCustomer *cust, GncBillTerm *terms) { if (!cust) return; if (cust->terms == terms) return; gncCustomerBeginEdit (cust); if (cust->terms) gncBillTermDecRef (cust->terms); cust->terms = terms; if (cust->terms) gncBillTermIncRef (cust->terms); mark_customer (cust); gncCustomerCommitEdit (cust); }
void gnc_customer_window_destroy_cb (GtkWidget *widget, gpointer data) { CustomerWindow *cw = data; GncCustomer *customer = cw_get_customer (cw); gnc_suspend_gui_refresh (); if (cw->dialog_type == NEW_CUSTOMER && customer != NULL) { gncCustomerBeginEdit (customer); gncCustomerDestroy (customer); cw->customer_guid = *guid_null (); } if (cw->addrX_selection_source_id) g_source_remove (cw->addrX_selection_source_id); gnc_unregister_gui_component (cw->component_id); gnc_resume_gui_refresh (); g_free (cw); }
static GncCustomer* dom_tree_to_customer (xmlNodePtr node, QofBook *book) { struct customer_pdata cust_pdata; gboolean successful; cust_pdata.customer = gncCustomerCreate(book); cust_pdata.book = book; gncCustomerBeginEdit (cust_pdata.customer); successful = dom_tree_generic_parse (node, customer_handlers_v2, &cust_pdata); if (successful) gncCustomerCommitEdit (cust_pdata.customer); else { PERR ("failed to parse customer tree"); gncCustomerDestroy (cust_pdata.customer); cust_pdata.customer = NULL; } return cust_pdata.customer; }
static void gnc_ui_to_customer (CustomerWindow *cw, GncCustomer *cust) { GtkTextBuffer* text_buffer; GtkTextIter start, end; gchar *text; GncAddress *addr, *shipaddr; addr = gncCustomerGetAddr (cust); shipaddr = gncCustomerGetShipAddr (cust); gnc_suspend_gui_refresh (); gncCustomerBeginEdit (cust); if (cw->dialog_type == NEW_CUSTOMER) qof_event_gen(QOF_INSTANCE(cust), QOF_EVENT_ADD, NULL); gncCustomerSetID (cust, gtk_editable_get_chars (GTK_EDITABLE (cw->id_entry), 0, -1)); gncCustomerSetName (cust, gtk_editable_get_chars (GTK_EDITABLE (cw->company_entry), 0, -1)); gncAddressSetName (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->name_entry), 0, -1)); gncAddressSetAddr1 (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->addr1_entry), 0, -1)); gncAddressSetAddr2 (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->addr2_entry), 0, -1)); gncAddressSetAddr3 (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->addr3_entry), 0, -1)); gncAddressSetAddr4 (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->addr4_entry), 0, -1)); gncAddressSetPhone (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->phone_entry), 0, -1)); gncAddressSetFax (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->fax_entry), 0, -1)); gncAddressSetEmail (addr, gtk_editable_get_chars (GTK_EDITABLE (cw->email_entry), 0, -1)); gncAddressSetName (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipname_entry), 0, -1)); gncAddressSetAddr1 (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipaddr1_entry), 0, -1)); gncAddressSetAddr2 (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipaddr2_entry), 0, -1)); gncAddressSetAddr3 (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipaddr3_entry), 0, -1)); gncAddressSetAddr4 (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipaddr4_entry), 0, -1)); gncAddressSetPhone (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipphone_entry), 0, -1)); gncAddressSetFax (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipfax_entry), 0, -1)); gncAddressSetEmail (shipaddr, gtk_editable_get_chars (GTK_EDITABLE (cw->shipemail_entry), 0, -1)); gncCustomerSetActive (cust, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cw->active_check))); gncCustomerSetTaxIncluded (cust, cw->taxincluded); text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(cw->notes_text)); gtk_text_buffer_get_bounds (text_buffer, &start, &end); text = gtk_text_buffer_get_text (text_buffer, &start, &end, FALSE); gncCustomerSetNotes (cust, text); /* Parse and set the currency, terms, discount, and credit amounts */ gncCustomerSetCurrency (cust, gnc_currency_edit_get_currency (GNC_CURRENCY_EDIT (cw->currency_edit))); gncCustomerSetTerms (cust, cw->terms); gncCustomerSetDiscount (cust, gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (cw->discount_amount))); gncCustomerSetCredit (cust, gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT (cw->credit_amount))); gncCustomerSetTaxTableOverride (cust, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cw->taxtable_check))); gncCustomerSetTaxTable (cust, cw->taxtable); gncCustomerCommitEdit (cust); gnc_resume_gui_refresh (); }
static void test_customer (void) { QofBook *book; GncCustomer *customer; book = qof_book_new (); /* Test creation/destruction */ { do_test (gncCustomerCreate (NULL) == NULL, "customer create NULL"); customer = gncCustomerCreate (book); do_test (customer != NULL, "customer create"); do_test (gncCustomerGetBook (customer) == book, "getbook"); gncCustomerBeginEdit (customer); gncCustomerDestroy (customer); success ("create/destroy"); } /* Test setting/getting routines; does the active flag get set right? */ { GncGUID guid; test_string_fcn (book, "Id", gncCustomerSetID, gncCustomerGetID); test_string_fcn (book, "Name", gncCustomerSetName, gncCustomerGetName); test_string_fcn (book, "Notes", gncCustomerSetNotes, gncCustomerGetNotes); //test_string_fcn (book, "Terms", gncCustomerSetTerms, gncCustomerGetTerms); test_numeric_fcn (book, "Discount", gncCustomerSetDiscount, gncCustomerGetDiscount); test_numeric_fcn (book, "Credit", gncCustomerSetCredit, gncCustomerGetCredit); test_bool_fcn (book, "Active", gncCustomerSetActive, gncCustomerGetActive); do_test (gncCustomerGetAddr (customer) != NULL, "Addr"); do_test (gncCustomerGetShipAddr (customer) != NULL, "ShipAddr"); guid_replace (&guid); customer = gncCustomerCreate (book); count++; gncCustomerSetGUID (customer, &guid); do_test (guid_equal (&guid, gncCustomerGetGUID (customer)), "guid compare"); } { GList *list; list = gncBusinessGetList (book, GNC_ID_CUSTOMER, TRUE); do_test (list != NULL, "getList all"); do_test (g_list_length (list) == count, "correct length: all"); g_list_free (list); list = gncBusinessGetList (book, GNC_ID_CUSTOMER, FALSE); do_test (list != NULL, "getList active"); do_test (g_list_length (list) == 1, "correct length: active"); g_list_free (list); } { const char *str = get_random_string(); const char *res; res = NULL; gncCustomerBeginEdit(customer); gncCustomerSetName (customer, str); gncCustomerCommitEdit(customer); res = qof_object_printable (GNC_ID_CUSTOMER, customer); do_test (res != NULL, "Printable NULL?"); do_test (g_strcmp0 (str, res) == 0, "Printable equals"); } do_test (gncCustomerGetJoblist (customer, TRUE) == NULL, "joblist empty"); /* Test the Entity Table */ { const GncGUID *guid; guid = gncCustomerGetGUID (customer); do_test (gncCustomerLookup (book, guid) == customer, "Entity Table"); } /* Note: JobList is tested from the Job tests */ qof_book_destroy (book); }