/* employee bills */ static gboolean entry_billpayment_handler (xmlNodePtr node, gpointer entry_pdata) { struct entry_pdata *pdata = entry_pdata; GncEntryPaymentType type; char *str; gboolean ret; str = dom_tree_to_text (node); g_return_val_if_fail (str, FALSE); ret = gncEntryPaymentStringToType (str, &type); g_free (str); if (ret) gncEntrySetBillPayment(pdata->entry, type); return ret; }
static void gnc_entry_ledger_save_cells (gpointer save_data, gpointer user_data) { GncEntryLedger *ledger = user_data; GncEntry *entry = save_data; g_return_if_fail (entry != NULL); /* copy the contents from the cursor to the split */ if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_IACCT_CELL, TRUE)) { Account *acc; acc = gnc_entry_ledger_get_account (ledger, ENTRY_IACCT_CELL); if (acc != NULL) gncEntrySetInvAccount (entry, acc); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_BACCT_CELL, TRUE)) { Account *acc; acc = gnc_entry_ledger_get_account (ledger, ENTRY_BACCT_CELL); if (acc != NULL) gncEntrySetBillAccount (entry, acc); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_ACTN_CELL, TRUE)) { const char *value; value = gnc_table_layout_get_cell_value (ledger->table->layout, ENTRY_ACTN_CELL); gncEntrySetAction (entry, value); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_DATE_CELL, TRUE)) { BasicCell *cell; GDate date; cell = gnc_table_layout_get_cell (ledger->table->layout, ENTRY_DATE_CELL); /* commit any pending changes */ gnc_date_cell_commit ((DateCell *) cell); gnc_date_cell_get_date_gdate ((DateCell *) cell, &date); gncEntrySetDateGDate (entry, &date); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_DESC_CELL, TRUE)) { const char *value; value = gnc_table_layout_get_cell_value (ledger->table->layout, ENTRY_DESC_CELL); gncEntrySetDescription (entry, value); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_DISC_CELL, TRUE)) { gnc_numeric amount; if (gnc_entry_ledger_get_numeric (ledger, ENTRY_DISC_CELL, &amount)) gncEntrySetInvDiscount (entry, amount); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_DISTYPE_CELL, TRUE)) { gint type; type = gnc_entry_ledger_get_type (ledger, ENTRY_DISTYPE_CELL); if (type != -1) gncEntrySetInvDiscountType (entry, type); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_DISHOW_CELL, TRUE)) { gint type; type = gnc_entry_ledger_get_type (ledger, ENTRY_DISHOW_CELL); if (type != -1) gncEntrySetInvDiscountHow (entry, type); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_QTY_CELL, TRUE)) { gnc_numeric amount; if (gnc_entry_ledger_get_numeric (ledger, ENTRY_QTY_CELL, &amount)) { gncEntrySetDocQuantity (entry, amount, ledger->is_credit_note); } } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_BILLABLE_CELL, TRUE)) { gboolean billable; billable = gnc_entry_ledger_get_checkmark (ledger, ENTRY_BILLABLE_CELL); gncEntrySetBillable (entry, billable); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_PAYMENT_CELL, TRUE)) { const char *value; value = gnc_table_layout_get_cell_value (ledger->table->layout, ENTRY_PAYMENT_CELL); if (!g_strcmp0 (value, _("Cash"))) gncEntrySetBillPayment (entry, GNC_PAYMENT_CASH); else if (!g_strcmp0 (value, _("Charge"))) gncEntrySetBillPayment (entry, GNC_PAYMENT_CARD); else g_warning ("Invalid Payment cell: %s", value ? value : "(null)"); } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_PRIC_CELL, TRUE)) { gnc_numeric amount; if (gnc_entry_ledger_get_numeric (ledger, ENTRY_PRIC_CELL, &amount)) { if (ledger->is_cust_doc) gncEntrySetInvPrice (entry, amount); else gncEntrySetBillPrice (entry, amount); } } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_TAXABLE_CELL, TRUE)) { gboolean taxable; taxable = gnc_entry_ledger_get_checkmark (ledger, ENTRY_TAXABLE_CELL); if (ledger->is_cust_doc) gncEntrySetInvTaxable (entry, taxable); else gncEntrySetBillTaxable (entry, taxable); } /* XXX: Only (re-set) these if taxable is TRUE? */ if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_TAXTABLE_CELL, TRUE)) { GncTaxTable *table; table = gnc_entry_ledger_get_taxtable (ledger, ENTRY_TAXTABLE_CELL); if (table) { if (ledger->is_cust_doc) gncEntrySetInvTaxTable (entry, table); else gncEntrySetBillTaxTable (entry, table); } } if (gnc_table_layout_get_cell_changed (ledger->table->layout, ENTRY_TAXINCLUDED_CELL, TRUE)) { gboolean taxincluded; taxincluded = gnc_entry_ledger_get_checkmark (ledger, ENTRY_TAXINCLUDED_CELL); if (ledger->is_cust_doc) gncEntrySetInvTaxIncluded (entry, taxincluded); else gncEntrySetBillTaxIncluded (entry, taxincluded); } if (ledger->type == GNCENTRY_INVOICE_ENTRY || ledger->type == GNCENTRY_CUST_CREDIT_NOTE_ENTRY) { gboolean inv_value; inv_value = gnc_entry_ledger_get_checkmark (ledger, ENTRY_INV_CELL); if (inv_value) { /* Add this to the invoice (if it's not already attached) */ if (gncEntryGetInvoice (entry) == NULL) gncInvoiceAddEntry (ledger->invoice, entry); } else { /* Remove from the invoice iff we're attached to an order or bill */ if ((gncEntryGetOrder (entry) != NULL) || (gncEntryGetBill (entry) != NULL)) gncInvoiceRemoveEntry (ledger->invoice, entry); } } }