gboolean gnc_tree_model_budget_get_iter_for_budget(GtkTreeModel *tm, GtkTreeIter *iter, GncBudget *bgt) { GValue gv = { 0 }; const GncGUID *guid1; GncGUID *guid2; g_return_val_if_fail(GNC_BUDGET(bgt), FALSE); guid1 = gnc_budget_get_guid(bgt); if (!gtk_tree_model_get_iter_first(tm, iter)) return FALSE; while (gtk_list_store_iter_is_valid(GTK_LIST_STORE(tm), iter)) { gtk_tree_model_get_value(tm, iter, BUDGET_GUID_COLUMN, &gv); guid2 = (GncGUID *) g_value_get_pointer(&gv); g_value_unset(&gv); if (guid_equal(guid1, guid2)) return TRUE; if (!gtk_tree_model_iter_next(tm, iter)) return FALSE; } return FALSE; }
static gboolean budget_recurrence_handler (xmlNodePtr node, gpointer bgt) { Recurrence* r; if ((r = dom_tree_to_recurrence (node)) == NULL) return FALSE; gnc_budget_set_recurrence (GNC_BUDGET (bgt), r); g_free (r); return TRUE; }
static gboolean budget_num_periods_handler (xmlNodePtr node, gpointer bgt) { guint num_periods; if (dom_tree_to_guint (node, &num_periods)) { gnc_budget_set_num_periods (GNC_BUDGET (bgt), num_periods); return TRUE; } else return FALSE; }
/* Add the new budget object to the tree model. */ static void add_budget_to_model(QofInstance* data, gpointer user_data ) { GtkTreeIter iter; GncBudget* budget = GNC_BUDGET(data); GtkTreeModel* treeModel = user_data; g_return_if_fail(GNC_IS_BUDGET(budget)); g_return_if_fail(budget && treeModel); gtk_list_store_append (GTK_LIST_STORE(treeModel), &iter); gtk_list_store_set (GTK_LIST_STORE(treeModel), &iter, BUDGET_GUID_COLUMN, gnc_budget_get_guid(budget), BUDGET_NAME_COLUMN, gnc_budget_get_name(budget), BUDGET_DESCRIPTION_COLUMN, gnc_budget_get_description(budget), -1); }
static gboolean budget_description_handler (xmlNodePtr node, gpointer bgt) { return set_string (node, GNC_BUDGET (bgt), gnc_budget_set_description); }
/* ================================================================= */ 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; }