Hopeful fix for the bug affecting customer security deposit balance. It was introduced when we added the Customer Credit account, since Security Deposit no longer _directly_ pays charges like it used to. Now, it's converted to customer credit, and _that_ account is the one that pays. The security deposit situation is a bit shaky, but seems to be working again.
git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716@600 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -101,12 +101,35 @@ class Customer extends AppModel {
|
||||
$this->prEnter(compact('id', 'query'));
|
||||
$this->queryInit($query);
|
||||
|
||||
$query['conditions'][] = array('StatementEntry.customer_id' => $id);
|
||||
$query['conditions'][] = array('StatementEntry.account_id' =>
|
||||
$this->StatementEntry->Account->securityDepositAccountID());
|
||||
$sd_account_id =
|
||||
$this->StatementEntry->Account->securityDepositAccountID();
|
||||
|
||||
$stats = $this->StatementEntry->stats(null, $query);
|
||||
return $this->prReturn($stats['account_balance']);
|
||||
$squery = $query;
|
||||
$squery['conditions'][] = array('StatementEntry.customer_id' => $id);
|
||||
$squery['conditions'][] = array('StatementEntry.account_id' => $sd_account_id);
|
||||
$stats = $this->StatementEntry->stats(null, $squery);
|
||||
$this->pr(26, compact('squery', 'stats'));
|
||||
|
||||
// OK, we know now how much we charged for a security
|
||||
// deposit, as well as how much we received to pay for it.
|
||||
// Now we need to know if any has been released.
|
||||
// Yes... this sucks.
|
||||
$lquery = $query;
|
||||
$lquery['link'] = array('Transaction' =>
|
||||
array('fields' => array(),
|
||||
'Customer' =>
|
||||
(empty($query['link'])
|
||||
? array('fields' => array())
|
||||
: $query['link'])));
|
||||
$lquery['conditions'][] = array('Transaction.customer_id' => $id);
|
||||
$lquery['conditions'][] = array('LedgerEntry.account_id' => $sd_account_id);
|
||||
$lquery['conditions'][] = array('LedgerEntry.crdr' => 'DEBIT');
|
||||
$lquery['fields'][] = 'SUM(LedgerEntry.amount) AS total';
|
||||
$released = $this->StatementEntry->Transaction->LedgerEntry->find
|
||||
('first', $lquery);
|
||||
$this->pr(26, compact('lquery', 'released'));
|
||||
|
||||
return $this->prReturn($stats['Charge']['disbursement'] - $released[0]['total']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -165,53 +165,13 @@ class LedgerEntry extends AppModel {
|
||||
*/
|
||||
function stats($id = null, $query = null, $set = null) {
|
||||
$this->queryInit($query);
|
||||
unset($query['group']);
|
||||
|
||||
if (!isset($query['link']['DoubleEntry']))
|
||||
$query['link']['DoubleEntry'] = array();
|
||||
/* if (!isset($query['link']['DoubleEntry']['fields'])) */
|
||||
/* $query['link']['DoubleEntry']['fields'] = array(); */
|
||||
|
||||
if (isset($id))
|
||||
$query['conditions'][] = array('Entry.id' => $id);
|
||||
|
||||
if (isset($set))
|
||||
$set = strtoupper($set);
|
||||
|
||||
//pr(array('stats()', compact('id', 'query', 'set')));
|
||||
|
||||
$rtypes = array('charge', 'disbursement',
|
||||
// 'debit', 'credit',
|
||||
);
|
||||
|
||||
$stats = array();
|
||||
foreach($rtypes AS $rtype) {
|
||||
$Rtype = ucfirst($rtype);
|
||||
|
||||
if (($rtype == 'charge' && (!isset($set) || $set == 'DISBURSEMENT')) ||
|
||||
($rtype == 'disbursement' && (!isset($set) || $set == 'CHARGE'))
|
||||
) {
|
||||
|
||||
$rquery = $query;
|
||||
$rquery['link'][$Rtype] =
|
||||
array('fields' => array("SUM(COALESCE(Applied{$Rtype}.amount,0)) AS reconciled"));
|
||||
|
||||
$rquery['fields'] = array();
|
||||
//$rquery['fields'][] = "SUM(DoubleEntry.amount) AS total";
|
||||
$rquery['fields'][] = "SUM(DoubleEntry.amount) - SUM(COALESCE(Applied{$Rtype}.amount,0)) AS balance";
|
||||
$rquery['conditions'][] = array("Applied{$Rtype}.id !=" => null);
|
||||
|
||||
$result = $this->find('first', $rquery);
|
||||
//pr(compact('Rtype', 'rquery', 'result'));
|
||||
|
||||
$sumfld = $Rtype;
|
||||
$stats[$sumfld] = $result[0];
|
||||
/* if (!isset($stats[$sumfld]['applied'])) */
|
||||
/* $stats[$sumfld]['applied'] = 0; */
|
||||
}
|
||||
}
|
||||
|
||||
return $stats;
|
||||
// REVISIT <AP>: 20090816
|
||||
// This function appeared to be dramatically broken,
|
||||
// a throwback to an earlier time. I deleted its
|
||||
// contents and added this error to ensure it does
|
||||
// not get used.
|
||||
$this->INTERNAL_ERROR('This function should not be used');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user