Changed the deposit to use a grouped double entry instead of individual ones for each tender deposited

git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716@414 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2009-07-29 10:10:11 +00:00
parent b789ed62b7
commit 13f97e5770
5 changed files with 39 additions and 10 deletions

View File

@@ -40,6 +40,7 @@ class TendersController extends AppController {
return array
('link' =>
array('TenderType',
'Customer',
'LedgerEntry' =>
array('Transaction',
),
@@ -58,6 +59,7 @@ class TendersController extends AppController {
function gridDataPostProcessLinks(&$params, &$model, &$records, $links) {
$links['Tender'] = array('name', 'id');
$links['Customer'] = array('name');
$links['TenderType'] = array('name');
return parent::gridDataPostProcessLinks($params, $model, $records, $links);
}

View File

@@ -35,7 +35,8 @@ class DoubleEntry extends AppModel {
}
if (!(($entry1['crdr'] === 'DEBIT' && $entry2['crdr'] === 'CREDIT') ||
($entry1['crdr'] === 'CREDIT' && $entry2['crdr'] === 'DEBIT'))) {
($entry1['crdr'] === 'CREDIT' && $entry2['crdr'] === 'DEBIT')) ||
($entry1['amount'] != $entry2['amount'])) {
/* pr(array("DoubleEntry::verifyDoubleEntry()" */
/* => "Double Entry verification failed")); */
return false;

View File

@@ -112,11 +112,6 @@ class Transaction extends AppModel {
$deposit['customer_id'] = null;
$deposit['lease_id'] = null;
// Go through the statement entries and flag as credits
foreach ($data['Entry'] AS &$entry) {
$entry['crdr'] = 'CREDIT';
}
// For some reason, $data is being modified by the
// addTransaction call, even though we're not passing by
// reference. Not all items in $data['Entry'] are being
@@ -131,6 +126,18 @@ class Transaction extends AppModel {
'return $item["tender_id"];'),
$data['Entry']);
// Go through the statement entries and re-group by account id
$group = array();
foreach ($data['Entry'] AS &$entry) {
if (!isset($group[$entry['account_id']]))
$group[$entry['account_id']] =
array('account_id' => $entry['account_id'],
'crdr' => 'CREDIT',
'amount' => 0);
$group[$entry['account_id']]['amount'] += $entry['amount'];
}
$data['Entry'] = $group;
$ids = $this->addTransaction($data);
if (isset($ids['transaction_id']))
$ids['deposit_id'] = $ids['transaction_id'];
@@ -251,7 +258,7 @@ class Transaction extends AppModel {
function addTransaction($data) {
/* pr(array("Transaction::addTransaction()" */
/* => compact('data', 'customer_id', 'lease_id'))); */
/* => compact('data'))); */
// Verify that we have a transaction and entries
if (empty($data['Transaction']) || empty($data['Entry']))
@@ -353,7 +360,8 @@ class Transaction extends AppModel {
foreach ($data['Entry'] AS $e_index => &$entry) {
extract($entry);
$le1['transaction_id'] = $le2['transaction_id'] = $ret['transaction_id'];
$le1_tender['customer_id'] = $transaction['customer_id'];
if (isset($le1_tender))
$le1_tender['customer_id'] = $transaction['customer_id'];
$result = $this->LedgerEntry->DoubleEntry->addDoubleEntry($le1, $le2, $le1_tender);
$ret['entries'][$e_index]['DoubleEntry'] = $result;
if ($result['error']) {

View File

@@ -4,7 +4,8 @@
$cols = array();
//$cols['ID'] = array('index' => 'Tender.id', 'formatter' => 'id');
$cols['Date'] = array('index' => 'Transaction.stamp', 'formatter' => 'date');
$cols['Name'] = array('index' => 'Tender.name', 'formatter' => 'longname');
$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname');
$cols['Item'] = array('index' => 'Tender.name', 'formatter' => 'longname');
$cols['Type'] = array('index' => 'TenderType.name', 'formatter' => 'name');
$cols['Comment'] = array('index' => 'Tender.comment', 'formatter' => 'comment');
$cols['Amount'] = array('index' => 'LedgerEntry.amount', 'formatter' => 'currency');

View File

@@ -88,11 +88,28 @@ echo $this->element('ledger_entries', array
'config' => array
(
'caption' => 'Ledger Entries',
'filter' => array('transaction_id' => $transaction['id']),
'filter' => array('transaction_id' => $transaction['id'],
'Account.id !=' => $account['id']),
'exclude' => array('Transaction'),
)));
/**********************************************************************
* Tenders Deposited
*/
if ($transaction['type'] === 'DEPOSIT') {
echo $this->element('tenders', array
(// Grid configuration
'config' => array
(
'caption' => 'Deposited Items',
'filter' => array('Tender.deposit_transaction_id' => $transaction['id']),
)));
}
/* End "detail supporting" div */
echo '</div>' . "\n";