array('numeric'), 'transaction_id' => array('numeric'), 'amount' => array('money') ); var $belongsTo = array( 'MonetarySource', 'Transaction', 'DebitLedger' => array( 'className' => 'Ledger', 'foreignKey' => 'debit_ledger_id', ), 'CreditLedger' => array( 'className' => 'Ledger', 'foreignKey' => 'credit_ledger_id', ), ); /************************************************************************** ************************************************************************** ************************************************************************** * function: conditionEntryAsCreditOrDebit * - returns the condition necessary to match a set of * Ledgers to all related LedgerEntries */ function conditionEntryAsCreditOrDebit($ledger_ids) { return array('OR' => array(array('debit_ledger_id' => $ledger_ids), array('credit_ledger_id' => $ledger_ids))); } /************************************************************************** ************************************************************************** ************************************************************************** * function: findInLedgerContext * - Returns an array of ledger entries that belong to a given ledger. * There is extra logic to also figure out whether the ledger_entry * amount is either a credit, or a debit, depending on how it was * written into the ledger, as well as whether the amount increases or * decreases the balance depending on the particular account type of * the ledger. */ function findInLedgerContext($ledger_id, $account_type, $cond = null, $link = null) { if (!isset($link)) $link = array('Transaction'); if (in_array($account_type, array('ASSET', 'EXPENSE'))) $ledger_type = 'debit'; else $ledger_type = 'credit'; $entries = $this->find ('all', array('link' => $link, 'fields' => array('id', 'name', 'comment', "IF(LedgerEntry.debit_ledger_id = $ledger_id," . " LedgerEntry.amount, NULL) AS debit", "IF(LedgerEntry.credit_ledger_id = $ledger_id," . " LedgerEntry.amount, NULL) AS credit", "(IF(LedgerEntry.{$ledger_type}_ledger_id = $ledger_id, 1, -1)" . " * LedgerEntry.amount) AS balance"), 'conditions' => array(isset($cond) ? $cond : array(), 'OR' => array(array('LedgerEntry.debit_ledger_id' => $ledger_id), array('LedgerEntry.credit_ledger_id' => $ledger_id))), 'order' => array('Transaction.stamp'), )); return $entries; } } ?>