Esempio n. 1
0
static GncEntry*
dom_tree_to_entry (xmlNodePtr node, QofBook *book)
{
    struct entry_pdata entry_pdata;
    gboolean successful;

    entry_pdata.entry = gncEntryCreate(book);
    entry_pdata.book = book;
    entry_pdata.acc = NULL;
    gncEntryBeginEdit (entry_pdata.entry);

    successful = dom_tree_generic_parse (node, entry_handlers_v2,
                                         &entry_pdata);
    if (entry_pdata.acc != NULL)
    {
        if (gncEntryGetBill (entry_pdata.entry))
            gncEntrySetBillAccount (entry_pdata.entry, entry_pdata.acc);
        else
            gncEntrySetInvAccount (entry_pdata.entry, entry_pdata.acc);
    }

    if (successful)
        gncEntryCommitEdit (entry_pdata.entry);
    else
    {
        PERR ("failed to parse entry tree");
        gncEntryDestroy (entry_pdata.entry);
        entry_pdata.entry = NULL;
    }

    return entry_pdata.entry;
}
Esempio n. 2
0
Transaction *
dom_tree_to_transaction( xmlNodePtr node, QofBook *book )
{
    Transaction *trn;
    gboolean successful;
    struct trans_pdata pdata;

    g_return_val_if_fail(node, NULL);
    g_return_val_if_fail(book, NULL);

    trn = xaccMallocTransaction(book);
    g_return_val_if_fail(trn, NULL);
    xaccTransBeginEdit(trn);

    pdata.trans = trn;
    pdata.book = book;

    successful = dom_tree_generic_parse(node, trn_dom_handlers, &pdata);

    xaccTransCommitEdit(trn);

    if ( !successful )
    {
        xmlElemDump(stdout, NULL, node);
        xaccTransBeginEdit(trn);
        xaccTransDestroy(trn);
        xaccTransCommitEdit(trn);
        trn = NULL;
    }

    return trn;
}
Esempio n. 3
0
static GncBillTerm*
dom_tree_to_billterm (xmlNodePtr node, QofBook *book)
{
    struct billterm_pdata billterm_pdata;
    gboolean successful;

    billterm_pdata.term = gncBillTermCreate (book);
    billterm_pdata.book = book;
    gncBillTermBeginEdit (billterm_pdata.term);

    successful = dom_tree_generic_parse (node, billterm_handlers_v2,
                                         &billterm_pdata);

    if (successful)
    {
        gncBillTermCommitEdit (billterm_pdata.term);
    }
    else
    {
        PERR ("failed to parse billing term tree");
        gncBillTermDestroy (billterm_pdata.term);
        billterm_pdata.term = NULL;
    }

    return billterm_pdata.term;
}
Esempio n. 4
0
GNCLot*
dom_tree_to_lot (xmlNodePtr node, QofBook *book)
{
    struct lot_pdata pdata;
    GNCLot *lot;
    gboolean successful;

    lot = gnc_lot_new(book);
    ENTER("(lot=%p)", lot);

    pdata.lot = lot;
    pdata.book = book;

    successful = dom_tree_generic_parse (node, lot_handlers_v2,
                                         &pdata);
    if (!successful)
    {
        PERR ("failed to parse lot");
        gnc_lot_destroy (lot);
        lot = NULL;
    }

    LEAVE("");
    return lot;
}
Esempio n. 5
0
static Split*
dom_tree_to_split(xmlNodePtr node, QofBook *book)
{
    struct split_pdata pdata;
    Split *ret;

    g_return_val_if_fail (book, NULL);

    ret = xaccMallocSplit(book);
    g_return_val_if_fail(ret, NULL);

    pdata.split = ret;
    pdata.book = book;

    /* this isn't going to work in a testing setup */
    if (dom_tree_generic_parse(node, spl_dom_handlers, &pdata))
    {
        return ret;
    }
    else
    {
        xaccSplitDestroy(ret);
        return NULL;
    }
}
Esempio n. 6
0
static
gboolean
sx_defer_inst_handler( xmlNodePtr node, gpointer sx_pdata )
{
    struct sx_pdata *pdata = sx_pdata;
    SchedXaction *sx = pdata->sx;
    SXTmpStateData *tsd;

    g_return_val_if_fail( node, FALSE );

    tsd = g_new0( SXTmpStateData, 1 );
    g_assert( sx_defer_dom_handlers != NULL );
    if ( !dom_tree_generic_parse( node,
                                  sx_defer_dom_handlers,
                                  tsd ) )
    {
        xmlElemDump(stdout, NULL, node);
        g_free( tsd );
        tsd = NULL;
        return FALSE;
    }

    /* We assume they were serialized in sorted order, here. */
    sx->deferredList = g_list_append( sx->deferredList, tsd );
    return TRUE;
}
Esempio n. 7
0
static gboolean
dom_tree_to_prox_data (xmlNodePtr node, struct billterm_pdata *pdata)
{
    gboolean successful;

    successful = dom_tree_generic_parse (node, prox_data_handlers_v2, pdata);

    if (!successful)
        PERR ("failed to parse billing term prox data");

    return successful;
}
Esempio n. 8
0
GncBudget*
dom_tree_to_budget (xmlNodePtr node, QofBook* book)
{
    GncBudget* bgt;

    bgt = gnc_budget_new (book);
    if (!dom_tree_generic_parse (node, budget_handlers, bgt))
    {
        PERR ("failed to parse budget tree");
        gnc_budget_destroy (bgt);
        bgt = NULL;
    }
    return bgt;
}
Esempio n. 9
0
QofBook*
dom_tree_to_book (xmlNodePtr node, QofBook *book)
{
    gboolean successful;

    successful = dom_tree_generic_parse (node, book_handlers_v2,
                                         book);
    if (!successful)
    {
        PERR ("failed to parse book");
        book = NULL;
    }

    return book;
}
Esempio n. 10
0
gboolean
gnc_dom_tree_to_address (xmlNodePtr node, GncAddress *address)
{
    struct address_pdata addr_pdata;
    gboolean successful;

    addr_pdata.address = address;

    successful = dom_tree_generic_parse (node, address_handlers_v2,
                                         &addr_pdata);

    if (!successful)
    {
        PERR ("failed to parse address tree");
    }

    return successful;
}
gboolean
gnc_dom_tree_to_owner (xmlNodePtr node, GncOwner* owner, QofBook* book)
{
    struct owner_pdata owner_pdata;
    gboolean successful;

    owner_pdata.owner = owner;
    owner_pdata.book = book;

    successful = dom_tree_generic_parse (node, owner_handlers_v2,
                                         &owner_pdata);

    if (!successful)
    {
        PERR ("failed to parse owner tree");
    }

    return successful;
}
Esempio n. 12
0
static gboolean
sx_recurrence_handler(xmlNodePtr node, gpointer _pdata)
{
    struct sx_pdata *parsing_data = _pdata;
    GList *schedule = NULL;
    gchar* debug_str;

    g_return_val_if_fail(node, FALSE);

    if (!dom_tree_generic_parse(node, sx_recurrence_list_handlers, &schedule))
        return FALSE;
    // g_return_val_if_fail(schedule, FALSE);
    debug_str = recurrenceListToString(schedule);
    g_debug("setting freshly-parsed schedule: [%s]", debug_str);
    g_free(debug_str);
    gnc_sx_set_schedule(parsing_data->sx, schedule);
    parsing_data->saw_recurrence = TRUE;
    return TRUE;
}
Esempio n. 13
0
static GncTaxTableEntry*
dom_tree_to_ttentry (xmlNodePtr node, QofBook *book)
{
    struct ttentry_pdata ttentry_pdata;
    gboolean successful;

    ttentry_pdata.ttentry = gncTaxTableEntryCreate ();
    ttentry_pdata.book = book;

    successful = dom_tree_generic_parse (node, ttentry_handlers_v2,
                                         &ttentry_pdata);

    if (!successful)
    {
        PERR ("failed to parse tax table entry tree");
        gncTaxTableEntryDestroy (ttentry_pdata.ttentry);
        ttentry_pdata.ttentry = NULL;
    }

    return ttentry_pdata.ttentry;
}
Esempio n. 14
0
static GncEmployee*
dom_tree_to_employee (xmlNodePtr node, QofBook *book)
{
    struct employee_pdata employee_pdata;
    gboolean successful;

    employee_pdata.employee = gncEmployeeCreate(book);
    employee_pdata.book = book;
    gncEmployeeBeginEdit (employee_pdata.employee);

    successful = dom_tree_generic_parse (node, employee_handlers_v2,
                                         &employee_pdata);
    if (successful)
        gncEmployeeCommitEdit (employee_pdata.employee);
    else
    {
        PERR ("failed to parse employee tree");
        gncEmployeeDestroy (employee_pdata.employee);
        employee_pdata.employee = NULL;
    }

    return employee_pdata.employee;
}
Esempio n. 15
0
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;
}
Esempio n. 16
0
static GncJob*
dom_tree_to_job (xmlNodePtr node, QofBook *book)
{
    struct job_pdata job_pdata;
    gboolean successful;

    job_pdata.job = gncJobCreate(book);
    job_pdata.book = book;
    gncJobBeginEdit (job_pdata.job);

    successful = dom_tree_generic_parse (node, job_handlers_v2,
                                         &job_pdata);

    if (successful)
        gncJobCommitEdit (job_pdata.job);
    else
    {
        PERR ("failed to parse job tree");
        gncJobDestroy (job_pdata.job);
        job_pdata.job = NULL;
    }

    return job_pdata.job;
}
Esempio n. 17
0
static GncVendor*
dom_tree_to_vendor (xmlNodePtr node, QofBook* book)
{
    struct vendor_pdata vendor_pdata;
    gboolean successful;

    vendor_pdata.vendor = gncVendorCreate (book);
    vendor_pdata.book = book;
    gncVendorBeginEdit (vendor_pdata.vendor);

    successful = dom_tree_generic_parse (node, vendor_handlers_v2,
                                         &vendor_pdata);

    if (successful)
        gncVendorCommitEdit (vendor_pdata.vendor);
    else
    {
        PERR ("failed to parse vendor tree");
        gncVendorDestroy (vendor_pdata.vendor);
        vendor_pdata.vendor = NULL;
    }

    return vendor_pdata.vendor;
}
Esempio n. 18
0
static GncTaxTable*
dom_tree_to_taxtable (xmlNodePtr node, QofBook *book)
{
    struct taxtable_pdata taxtable_pdata;
    gboolean successful;

    taxtable_pdata.table = gncTaxTableCreate (book);
    taxtable_pdata.book = book;
    gncTaxTableBeginEdit (taxtable_pdata.table);

    successful = dom_tree_generic_parse (node, taxtable_handlers_v2,
                                         &taxtable_pdata);

    if (successful)
        gncTaxTableCommitEdit (taxtable_pdata.table);
    else
    {
        PERR ("failed to parse tax table tree");
        gncTaxTableDestroy (taxtable_pdata.table);
        taxtable_pdata.table = NULL;
    }

    return taxtable_pdata.table;
}
Esempio n. 19
0
static GncInvoice*
dom_tree_to_invoice (xmlNodePtr node, QofBook* book)
{
    struct invoice_pdata invoice_pdata;
    gboolean successful;

    invoice_pdata.invoice = gncInvoiceCreate (book);
    invoice_pdata.book = book;
    gncInvoiceBeginEdit (invoice_pdata.invoice);

    successful = dom_tree_generic_parse (node, invoice_handlers_v2,
                                         &invoice_pdata);

    if (successful)
        gncInvoiceCommitEdit (invoice_pdata.invoice);
    else
    {
        PERR ("failed to parse invoice tree");
        gncInvoiceDestroy (invoice_pdata.invoice);
        invoice_pdata.invoice = NULL;
    }

    return invoice_pdata.invoice;
}
Esempio n. 20
0
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;
}
Esempio n. 21
0
static gboolean
gnc_schedXaction_end_handler(gpointer data_for_children,
                             GSList* data_from_children, GSList* sibling_data,
                             gpointer parent_data, gpointer global_data,
                             gpointer *result, const gchar *tag)
{
    SchedXaction *sx;
    gboolean     successful = FALSE;
    xmlNodePtr   tree = (xmlNodePtr)data_for_children;
    gxpf_data    *gdata = (gxpf_data*)global_data;
    struct sx_pdata sx_pdata;

    if ( parent_data )
    {
        return TRUE;
    }

    if ( !tag )
    {
        return TRUE;
    }

    g_return_val_if_fail( tree, FALSE );

    sx = xaccSchedXactionMalloc( gdata->bookdata );

    memset(&sx_pdata, 0, sizeof(sx_pdata));
    sx_pdata.sx = sx;
    sx_pdata.book = gdata->bookdata;

    g_assert( sx_dom_handlers != NULL );

    successful = dom_tree_generic_parse( tree, sx_dom_handlers, &sx_pdata );
    if (!successful)
    {
        g_critical("failed to parse scheduled xaction");
        xmlElemDump( stdout, NULL, tree );
        gnc_sx_begin_edit( sx );
        xaccSchedXactionDestroy( sx );
        goto done;
    }

    if (tree->properties)
    {
        gchar *sx_name = xaccSchedXactionGetName(sx);
        xmlAttr *attr;
        for (attr = tree->properties; attr != NULL; attr = attr->next)
        {
            xmlChar *attr_value = attr->children->content;
            g_debug("sx attribute name[%s] value[%s]", attr->name, attr_value);
            if (strcmp((const char *)attr->name, "version") != 0)
            {
                g_warning("unknown sx attribute [%s]", attr->name);
                continue;
            }

            // if version == 1.0.0: ensure freqspec, no recurrence
            // if version == 2.0.0: ensure recurrence, no freqspec.
            if (strcmp((const char *)attr_value,
                       schedxaction_version_string) == 0)
            {
                if (!sx_pdata.saw_freqspec)
                    g_critical("did not see freqspec in version 1 sx [%s]", sx_name);
                if (sx_pdata.saw_recurrence)
                    g_warning("saw recurrence in supposedly version 1 sx [%s]", sx_name);
            }

            if (strcmp((const char *)attr_value,
                       schedxaction_version2_string) == 0)
            {
                if (sx_pdata.saw_freqspec)
                    g_warning("saw freqspec in version 2 sx [%s]", sx_name);
                if (!sx_pdata.saw_recurrence)
                    g_critical("did not find recurrence in version 2 sx [%s]", sx_name);
            }
        }
    }

    // generic_callback -> book_callback: insert the SX in the book
    gdata->cb( tag, gdata->parsedata, sx );

    /* FIXME: this should be removed somewhere near 1.8 release time. */
    if ( sx->template_acct == NULL )
    {
        Account *ra = NULL;
        const char *id = NULL;
        Account *acct = NULL;
        sixtp_gdv2 *sixdata = gdata->parsedata;
        QofBook *book;

        book = sixdata->book;

        /* We're dealing with a pre-200107<near-end-of-month> rgmerk
           change re: storing template accounts. */
        /* Fix: get account with name of our GncGUID from the template
           accounts.  Make that our template_acct pointer. */
        /* THREAD-UNSAFE */
        id = guid_to_string( xaccSchedXactionGetGUID( sx ) );
        ra = gnc_book_get_template_root(book);
        if ( ra == NULL )
        {
            g_warning( "Error getting template root account from being-parsed Book." );
            xmlFreeNode( tree );
            return FALSE;
        }
        acct = gnc_account_lookup_by_name( ra, id );
        if ( acct == NULL )
        {
            g_warning("no template account with name [%s]", id);
            xmlFreeNode( tree );
            return FALSE;
        }
        g_debug("template account name [%s] for SX with GncGUID [%s]",
                xaccAccountGetName( acct ), id );

        /* FIXME: free existing template account.
         *  HUH????? We only execute this if there isn't
         * currently an existing template account, don't we?
         * <rgmerk>
         */

        sx->template_acct = acct;
    }

done:
    xmlFreeNode( tree );

    return successful;
}
Esempio n. 22
0
static gboolean
gnc_template_transaction_end_handler(gpointer data_for_children,
                                     GSList* data_from_children,
                                     GSList* sibling_data,
                                     gpointer parent_data,
                                     gpointer global_data,
                                     gpointer *result,
                                     const gchar *tag)
{
    gboolean   successful = FALSE;
    xmlNodePtr tree = data_for_children;
    gxpf_data  *gdata = global_data;
    QofBook    *book = gdata->bookdata;
    GList      *n;
    gnc_template_xaction_data txd;

    txd.book = book;
    txd.accts = NULL;
    txd.transactions = NULL;

    /* the DOM tree will have an account tree [the template
       accounts] and a list of transactions [which will be members
       of the template account].

       we want to parse through the dom trees for each, placing
       the null-parent account in the book's template-group slot,
       the others under it, and the transactions as normal. */

    if ( parent_data )
    {
        return TRUE;
    }

    if ( !tag )
    {
        return TRUE;
    }

    g_return_val_if_fail( tree, FALSE );

    successful = dom_tree_generic_parse( tree, tt_dom_handlers, &txd );

    if ( successful )
    {
        gdata->cb( tag, gdata->parsedata, &txd );
    }
    else
    {
        g_warning("failed to parse template transaction");
        xmlElemDump( stdout, NULL, tree );
    }

    /* cleanup */
    for ( n = txd.accts; n; n = n->next )
    {
        n->data = NULL;
    }
    for ( n = txd.transactions; n; n = n->next )
    {
        n->data = NULL;
    }
    g_list_free( txd.accts );
    g_list_free( txd.transactions );

    xmlFreeNode( tree );

    return successful;
}