static gboolean order_guid_handler (xmlNodePtr node, gpointer order_pdata) { struct order_pdata *pdata = order_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) { gncOrderDestroy (pdata->order); pdata->order = order; gncOrderBeginEdit (order); } else { gncOrderSetGUID(pdata->order, guid); } g_free(guid); return TRUE; }
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 GncOrder* dom_tree_to_order (xmlNodePtr node, QofBook *book) { struct order_pdata order_pdata; gboolean successful; order_pdata.order = gncOrderCreate(book); order_pdata.book = book; gncOrderBeginEdit (order_pdata.order); successful = dom_tree_generic_parse (node, order_handlers_v2, &order_pdata); if (successful) gncOrderCommitEdit (order_pdata.order); else { PERR ("failed to parse order tree"); gncOrderDestroy (order_pdata.order); order_pdata.order = NULL; } return order_pdata.order; }