git-svn-id: file:///svn-source/pmgr/branches/statements_20090623@185 97e9348a-65ac-dc4b-aefc-98561f571b83
123 lines
4.1 KiB
PHP
123 lines
4.1 KiB
PHP
<?php
|
|
class Statement extends AppModel {
|
|
|
|
var $hasMany = array(
|
|
'Lease',
|
|
'Customer',
|
|
'StatementEntry',
|
|
|
|
'ChargeStatementEntry' => array(
|
|
'className' => 'StatementEntry',
|
|
'conditions' => array('type' => 'CHARGE'),
|
|
),
|
|
'PaymentStatementEntry' => array(
|
|
'className' => 'StatementEntry',
|
|
'conditions' => array('type' => 'PAYMENT'),
|
|
),
|
|
);
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: findStatementEntries
|
|
* - Returns an array of statement entries that belong to a given
|
|
* statement. There is extra work done... see the StatementEntry model.
|
|
*/
|
|
function findStatementEntries($id, $cond = null, $link = null) {
|
|
/* pr(array('function' => 'Statement::findStatementEntries', */
|
|
/* 'args' => compact('id', 'cond', 'link'), */
|
|
/* )); */
|
|
|
|
if (!isset($cond))
|
|
$cond = array();
|
|
|
|
$cond[] = array('Statement.id' => $id);
|
|
$entries = $this->find('all', array('link' => $link, 'conditions' => $cond));
|
|
|
|
/* pr(array('function' => 'Statement::findStatementEntries', */
|
|
/* 'args' => compact('id', 'cond', 'link'), */
|
|
/* 'return' => compact('entries'), */
|
|
/* )); */
|
|
return $entries;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: findEntriesRelatedToAccount
|
|
* - Returns an array of statement entries that belong to the given
|
|
* account, and are related to a specific account.
|
|
*/
|
|
function findEntriesRelatedToAccount($id, $rel_ids, $cond = null, $link = null) {
|
|
/* pr(array('function' => 'Statement::findEntriesRelatedToAccount', */
|
|
/* 'args' => compact('id', 'rel_ids', 'cond', 'link'), */
|
|
/* )); */
|
|
|
|
if (!isset($cond))
|
|
$cond = array();
|
|
if (!isset($link))
|
|
$link = array();
|
|
if (!is_array($rel_ids))
|
|
$rel_ids = array($rel_ids);
|
|
|
|
$link['StatementEntry'] = array('LedgerEntry' => array('Ledger' => array('Account')));
|
|
$cond[] = array('Account.id' => $rel_ids);
|
|
|
|
$entries = $this->findStatementEntries($id, $cond, $link);
|
|
|
|
$stats = $this->stats($id, $cond, $link);
|
|
$entries = array('Entries' => $entries,
|
|
'summary' => $stats);
|
|
|
|
/* pr(array('function' => 'Statement::findEntriesRelatedToAccount', */
|
|
/* 'args' => compact('id', 'relid', 'cond', 'link'), */
|
|
/* 'return' => compact('entries'), */
|
|
/* )); */
|
|
return $entries;
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: stats
|
|
* - Returns summary data from the requested statement.
|
|
*/
|
|
function stats($id, $cond = null, $link = null) {
|
|
if (!isset($cond))
|
|
$cond = array();
|
|
if (!isset($link))
|
|
$link = array();
|
|
|
|
if (!isset($link['StatementEntry']))
|
|
$link['StatementEntry'] = array('fields' => array());
|
|
|
|
$cond[] = array('Statement.id' => $id);
|
|
|
|
$stats = $this->find
|
|
('first', array
|
|
('link' => $link,
|
|
|
|
'fields' =>
|
|
array("SUM(IF(StatementEntry.type = 'CHARGE',
|
|
StatementEntry.amount, NULL)) AS charges",
|
|
"SUM(IF(StatementEntry.type = 'PAYMENT',
|
|
StatementEntry.amount, NULL)) AS payments",
|
|
"SUM(IF(StatementEntry.type = 'CHARGE', 1, -1)
|
|
* IF(StatementEntry.amount, StatementEntry.amount, 0)
|
|
) AS balance",
|
|
"COUNT(StatementEntry.id) AS entries"),
|
|
|
|
'conditions' => $cond,
|
|
'group' => 'Statement.id',
|
|
));
|
|
|
|
// The fields are all tucked into the [0] index,
|
|
// and the rest of the array is useless (empty).
|
|
return $stats[0];
|
|
}
|
|
|
|
}
|
|
?>
|