git-svn-id: file:///svn-source/pmgr/branches/ledger_transactions_20090605@81 97e9348a-65ac-dc4b-aefc-98561f571b83
97 lines
3.2 KiB
PHP
97 lines
3.2 KiB
PHP
<?php
|
|
class LedgerEntry extends AppModel {
|
|
|
|
var $name = 'LedgerEntry';
|
|
var $validate = array(
|
|
'id' => 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:
|
|
* -
|
|
*/
|
|
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'),
|
|
));
|
|
|
|
/* $entries['summary'] = array('balance' => null, 'debit' => null, 'credit' => null); */
|
|
/* foreach($entries AS $entry) */
|
|
/* $this->statsMerge($entries['summary'], $entry[0]); */
|
|
|
|
/* //if (isset($entries['summary']['debit']) || isset($entries['summary']['credit'])) { */
|
|
/* $entries['summary']['debits'] = $entries['summary']['debit']; */
|
|
/* $entries['summary']['credits'] = $entries['summary']['credit']; */
|
|
/* unset($entries['summary']['debit']); */
|
|
/* unset($entries['summary']['credit']); */
|
|
/* //} */
|
|
|
|
|
|
return $entries;
|
|
}
|
|
}
|
|
|
|
?>
|