/** Does this object refer to a specific object */ static gboolean impl_refers_to_object(const QofInstance* inst, const QofInstance* ref) { GncTaxTable* tt; g_return_val_if_fail(inst != NULL, FALSE); g_return_val_if_fail(GNC_IS_TAXTABLE(inst), FALSE); tt = GNC_TAXTABLE(inst); if (GNC_IS_ACCOUNT(ref)) { GList* node; for (node = tt->entries; node != NULL; node = node->next) { GncTaxTableEntry* tte = node->data; if (tte->account == GNC_ACCOUNT(ref)) { return TRUE; } } } return FALSE; }
/** Returns a list of my type of object which refers to an object. For example, when called as qof_instance_get_typed_referring_object_list(taxtable, account); it will return the list of taxtables which refer to a specific account. The result should be the same regardless of which taxtable object is used. The list must be freed by the caller but the objects on the list must not. */ static GList* impl_get_typed_referring_object_list(const QofInstance* inst, const QofInstance* ref) { if (!GNC_IS_ACCOUNT(ref) && !GNC_IS_TAXTABLE(ref)) { return NULL; } return qof_instance_get_referring_object_list_from_collection(qof_instance_get_collection(inst), ref); }
static void set_account (gpointer pObj, gpointer val) { budget_amount_info_t* info = (budget_amount_info_t*)pObj; g_return_if_fail (pObj != NULL); g_return_if_fail (val != NULL); g_return_if_fail (GNC_IS_ACCOUNT (val)); info->account = GNC_ACCOUNT (val); }
static void set_lot_account (gpointer pObject, gpointer pValue) { GNCLot* lot; Account* pAccount; g_return_if_fail (pObject != NULL && GNC_IS_LOT (pObject)); g_return_if_fail (pValue == NULL || GNC_IS_ACCOUNT (pValue)); lot = GNC_LOT (pObject); pAccount = GNC_ACCOUNT (pValue); if (pAccount != NULL) { xaccAccountInsertLot (pAccount, lot); } }
/** Does this object refer to a specific object */ static gboolean impl_refers_to_object(const QofInstance* inst, const QofInstance* ref) { GncEmployee* emp; g_return_val_if_fail(inst != NULL, FALSE); g_return_val_if_fail(GNC_IS_EMPLOYEE(inst), FALSE); emp = GNC_EMPLOYEE(inst); if (GNC_IS_COMMODITY(ref)) { return (emp->currency == GNC_COMMODITY(ref)); } else if (GNC_IS_ACCOUNT(ref)) { return (emp->ccard_acc == GNC_ACCOUNT(ref)); } return FALSE; }
static void set_parent (gpointer pObject, gpointer pValue) { Account* pAccount; QofBook* pBook; GncGUID* guid = (GncGUID*)pValue; Account* pParent; g_return_if_fail (pObject != NULL); g_return_if_fail (GNC_IS_ACCOUNT (pObject)); pAccount = GNC_ACCOUNT (pObject); pBook = qof_instance_get_book (QOF_INSTANCE (pAccount)); if (guid != NULL) { pParent = xaccAccountLookup (guid, pBook); if (pParent != NULL) { gnc_account_append_child (pParent, pAccount); } } }
/** Does this object refer to a specific object */ static gboolean impl_refers_to_object(const QofInstance* inst, const QofInstance* ref) { GncEntry* entry; g_return_val_if_fail(inst != NULL, FALSE); g_return_val_if_fail(GNC_IS_ENTRY(inst), FALSE); entry = GNC_ENTRY(inst); if (GNC_IS_ACCOUNT(ref)) { Account* acc = GNC_ACCOUNT(ref); return (entry->i_account == acc || entry->b_account == acc); } else if (GNC_IS_TAXTABLE(ref)) { GncTaxTable* tt = GNC_TAXTABLE(ref); return (entry->i_tax_table == tt || entry->b_tax_table == tt); } return FALSE; }
static gpointer get_parent (gpointer pObject) { const Account* pAccount; const Account* pParent; const GncGUID* parent_guid; g_return_val_if_fail (pObject != NULL, NULL); g_return_val_if_fail (GNC_IS_ACCOUNT (pObject), NULL); pAccount = GNC_ACCOUNT (pObject); pParent = gnc_account_get_parent (pAccount); if (pParent == NULL) { parent_guid = NULL; } else { parent_guid = qof_instance_get_guid (QOF_INSTANCE (pParent)); } return (gpointer)parent_guid; }
/* ================================================================= */ bool GncSqlAccountBackend::commit (GncSqlBackend* sql_be, QofInstance* inst) { Account* pAcc = GNC_ACCOUNT (inst); const GncGUID* guid; gboolean is_infant; gboolean is_ok = FALSE; gnc_commodity* commodity; E_DB_OPERATION op; g_return_val_if_fail (sql_be != NULL, FALSE); g_return_val_if_fail (inst != NULL, FALSE); g_return_val_if_fail (GNC_IS_ACCOUNT (inst), FALSE); ENTER ("inst=%p", inst); is_infant = qof_instance_get_infant (inst); // If there is no commodity yet, this might be because a new account name // has been entered directly into the register and an account window will // be opened. The account info is not complete yet, but the name has been // set, triggering this commit commodity = xaccAccountGetCommodity (pAcc); is_ok = TRUE; 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; } // If not deleting the account, ensure the commodity is in the db if (op != OP_DB_DELETE && commodity != NULL) { is_ok = sql_be->save_commodity(commodity); } if (is_ok) { is_ok = sql_be->do_db_operation (op, TABLE_NAME, GNC_ID_ACCOUNT, pAcc, col_table); } if (is_ok) { // Now, commit or delete any slots guid = qof_instance_get_guid (inst); if (!qof_instance_get_destroying (inst)) { is_ok = gnc_sql_slots_save (sql_be, guid, is_infant, inst); } else { is_ok = gnc_sql_slots_delete (sql_be, guid); } } LEAVE ("is_ok=%d", is_ok); return is_ok; }