xmlNodePtr gnc_budget_dom_tree_create (GncBudget* bgt) { xmlNodePtr ret; ENTER ("(budget=%p)", bgt); ret = xmlNewNode (NULL, BAD_CAST gnc_budget_string); xmlSetProp (ret, BAD_CAST "version", BAD_CAST budget_version_string); /* field: GncGUID */ xmlAddChild (ret, guid_to_dom_tree (bgt_id_string, gnc_budget_get_guid (bgt))); /* field: char* name */ xmlAddChild (ret, text_to_dom_tree (bgt_name_string, gnc_budget_get_name (bgt))); /* field: char* description */ xmlAddChild (ret, text_to_dom_tree (bgt_description_string, gnc_budget_get_description (bgt))); /* field: guint num_periods */ xmlAddChild (ret, guint_to_dom_tree (bgt_num_periods_string, gnc_budget_get_num_periods (bgt))); /* field: Recurrence* */ xmlAddChild (ret, recurrence_to_dom_tree (bgt_recurrence_string, gnc_budget_get_recurrence (bgt))); /* xmlAddChild won't do anything with a NULL, so tests are superfluous. */ xmlAddChild (ret, qof_instance_slots_to_dom_tree (bgt_slots_string, QOF_INSTANCE (bgt))); LEAVE (" "); return ret; }
/* ================================================================= */ bool GncSqlBudgetBackend::commit (GncSqlBackend* sql_be, QofInstance* inst) { GncBudget* pBudget = GNC_BUDGET (inst); const GncGUID* guid; E_DB_OPERATION op; gboolean is_infant; gboolean is_ok; g_return_val_if_fail (sql_be != NULL, FALSE); g_return_val_if_fail (inst != NULL, FALSE); g_return_val_if_fail (GNC_IS_BUDGET (inst), FALSE); is_infant = qof_instance_get_infant (inst); if (qof_instance_get_destroying (inst)) { op = OP_DB_DELETE; } else if (sql_be->pristine() || is_infant) { op = OP_DB_INSERT; } else { op = OP_DB_UPDATE; } is_ok = sql_be->do_db_operation(op, BUDGET_TABLE, GNC_ID_BUDGET, pBudget, col_table); // Now, commit any slots and recurrence if (is_ok) { guid = qof_instance_get_guid (inst); if (!qof_instance_get_destroying (inst)) { is_ok = save_budget_amounts (sql_be, pBudget); if (is_ok) { is_ok = gnc_sql_recurrence_save (sql_be, guid, gnc_budget_get_recurrence (pBudget)); } if (is_ok) { is_ok = gnc_sql_slots_save (sql_be, guid, is_infant, inst); } } else { is_ok = delete_budget_amounts (sql_be, pBudget); if (is_ok) { is_ok = gnc_sql_recurrence_delete (sql_be, guid); } if (is_ok) { (void)gnc_sql_slots_delete (sql_be, guid); } } } return is_ok; }