void gncEntryCopy (const GncEntry *src, GncEntry *dest, gboolean add_entry) { if (!src || !dest) return; gncEntryBeginEdit (dest); dest->date = src->date; dest->date_entered = src->date_entered; /* ??? */ gncEntrySetDescription (dest, src->desc); gncEntrySetAction (dest, src->action); gncEntrySetNotes (dest, src->notes); dest->quantity = src->quantity; dest->i_account = src->i_account; dest->i_price = src->i_price; dest->i_taxable = src->i_taxable; dest->i_taxincluded = src->i_taxincluded; dest->i_discount = src->i_discount; dest->i_disc_type = src->i_disc_type; dest->i_disc_how = src->i_disc_how; /* vendor bill data */ dest->b_account = src->b_account; dest->b_price = src->b_price; dest->b_taxable = src->b_taxable; dest->b_taxincluded = src->b_taxincluded; dest->billable = src->billable; dest->billto = src->billto; if (src->i_tax_table) gncEntrySetInvTaxTable (dest, src->i_tax_table); if (src->b_tax_table) gncEntrySetBillTaxTable (dest, src->b_tax_table); if (add_entry) { if (src->order) gncOrderAddEntry (src->order, dest); if (src->invoice) gncInvoiceAddEntry (src->invoice, dest); if (src->bill) gncBillAddEntry (src->bill, dest); } dest->values_dirty = TRUE; mark_entry (dest); gncEntryCommitEdit (dest); }
static gboolean entry_order_handler (xmlNodePtr node, gpointer entry_pdata) { struct entry_pdata *pdata = entry_pdata; GncGUID *guid; GncOrder *order; guid = dom_tree_to_guid (node); g_return_val_if_fail (guid, FALSE); order = gncOrderLookup (pdata->book, guid); if (!order) { order = gncOrderCreate (pdata->book); gncOrderBeginEdit (order); gncOrderSetGUID (order, guid); gncOrderCommitEdit (order); } gncOrderBeginEdit (order); gncOrderAddEntry (order, pdata->entry); gncOrderCommitEdit (order); g_free(guid); return TRUE; }
static gboolean gnc_entry_ledger_save (GncEntryLedger *ledger, gboolean do_commit) { GncEntry *blank_entry; GncEntry *entry; if (!ledger) return FALSE; blank_entry = gnc_entry_ledger_get_blank_entry (ledger); entry = gnc_entry_ledger_get_current_entry (ledger); if (entry == NULL) return FALSE; /* Try to avoid heavy-weight updates if nothing has changed */ if (!gnc_table_current_cursor_changed (ledger->table, FALSE)) { if (!do_commit) return FALSE; if (entry == blank_entry) { if (ledger->blank_entry_edited) { ledger->last_date_entered = gncEntryGetDateGDate (entry); ledger->blank_entry_guid = *guid_null (); ledger->blank_entry_edited = FALSE; blank_entry = NULL; } else return FALSE; } return TRUE; } gnc_suspend_gui_refresh (); if (!gncEntryIsOpen (entry)) gncEntryBeginEdit (entry); gnc_table_save_cells (ledger->table, entry); if (entry == blank_entry) { Timespec ts; ts.tv_sec = time(NULL); ts.tv_nsec = 0; gncEntrySetDateEntered (blank_entry, ts); switch (ledger->type) { case GNCENTRY_ORDER_ENTRY: gncOrderAddEntry (ledger->order, blank_entry); break; case GNCENTRY_INVOICE_ENTRY: case GNCENTRY_CUST_CREDIT_NOTE_ENTRY: /* Anything entered on an invoice entry must be part of the invoice! */ gncInvoiceAddEntry (ledger->invoice, blank_entry); break; case GNCENTRY_BILL_ENTRY: case GNCENTRY_EXPVOUCHER_ENTRY: case GNCENTRY_VEND_CREDIT_NOTE_ENTRY: case GNCENTRY_EMPL_CREDIT_NOTE_ENTRY: /* Anything entered on an invoice entry must be part of the invoice! */ gncBillAddEntry (ledger->invoice, blank_entry); break; default: /* Nothing to do for viewers */ g_warning ("blank entry traversed in a viewer"); break; } } if (entry == blank_entry) { if (do_commit) { ledger->blank_entry_guid = *guid_null (); blank_entry = NULL; ledger->last_date_entered = gncEntryGetDateGDate (entry); } else ledger->blank_entry_edited = TRUE; } if (do_commit) gncEntryCommitEdit (entry); gnc_table_clear_current_cursor_changes (ledger->table); gnc_resume_gui_refresh (); return TRUE; }