Captured some thoughts, some experiments on how to tie statement entry to ledger entry. It's not at all clear we want to go down this (or any other) path at the moment. This checkin will probably go nowhere, as I'm going to see if we can make do with the current implementation.

git-svn-id: file:///svn-source/pmgr/branches/statement_ledger_entry_tie_20090802@468 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2009-08-03 02:19:39 +00:00
parent 4ee9c99e30
commit ae09d160bb
10 changed files with 143 additions and 56 deletions

View File

@@ -88,7 +88,7 @@ class Customer extends AppModel {
$query['conditions'][] = array('Customer.id' => $id);
$query['conditions'][] = array('StatementEntry.account_id' =>
$this->StatementEntry->Account->securityDepositAccountID());
$this->StatementEntry->LedgerEntry->Account->securityDepositAccountID());
$set = $this->StatementEntry->reconciledSet('CHARGE', $query, false, true);
return $this->prReturn($set);
@@ -113,7 +113,7 @@ class Customer extends AppModel {
$query['conditions'][] = array('Lease.id' => $id);
$query['conditions'][] = array('StatementEntry.account_id' =>
$this->StatementEntry->Account->securityDepositAccountID());
$this->StatementEntry->LedgerEntry->Account->securityDepositAccountID());
$stats = $this->StatementEntry->stats(null, $query);
$balance = $stats['Charge']['reconciled'] - $stats['Payment']['reconciled'];

View File

@@ -30,7 +30,7 @@ class Lease extends AppModel {
$query['conditions'][] = array('Lease.id' => $id);
$query['conditions'][] = array('StatementEntry.account_id' =>
$this->StatementEntry->Account->securityDepositAccountID());
$this->StatementEntry->LedgerEntry->Account->securityDepositAccountID());
$set = $this->StatementEntry->reconciledSet('CHARGE', $query, false, true);
@@ -60,7 +60,7 @@ class Lease extends AppModel {
$query['conditions'][] = array('Lease.id' => $id);
$query['conditions'][] = array('StatementEntry.account_id' =>
$this->StatementEntry->Account->securityDepositAccountID());
$this->StatementEntry->LedgerEntry->Account->securityDepositAccountID());
$stats = $this->StatementEntry->stats(null, $query);
$balance = $stats['Charge']['reconciled'] - $stats['Payment']['reconciled'];
@@ -115,7 +115,7 @@ class Lease extends AppModel {
$release['Entry'][] =
array('amount' => $charge['StatementEntry']['reconciled'],
'account_id' => $this->StatementEntry->Account->securityDepositAccountID(),
'account_id' => $this->StatementEntry->LedgerEntry->Account->securityDepositAccountID(),
'comment' => "Released Security Deposit",
);
}
@@ -143,7 +143,7 @@ class Lease extends AppModel {
function rentLastCharges($id) {
$this->prEnter(compact('id'));
$rent_account_id = $this->StatementEntry->Account->rentAccountID();
$rent_account_id = $this->StatementEntry->LedgerEntry->Account->rentAccountID();
$entries = $this->find
('all',
array('link' =>
@@ -221,7 +221,7 @@ class Lease extends AppModel {
function rentPaidThrough($id) {
$this->prEnter(compact('id'));
$rent_account_id = $this->StatementEntry->Account->rentAccountID();
$rent_account_id = $this->StatementEntry->LedgerEntry->Account->rentAccountID();
// First, see if we can find any unpaid entries. Of course,
// the first unpaid entry gives us a very direct indication

View File

@@ -33,6 +33,12 @@ class LedgerEntry extends AppModel {
'foreignKey' => 'debit_entry_id',
'associationForeignKey' => 'credit_entry_id',
),
//
'StatementEntry' => array(
'joinTable' => 'statement_fractions',
'fields' => 'StatementFraction.amount',
),
);

View File

@@ -5,7 +5,6 @@ class StatementEntry extends AppModel {
'Transaction',
'Customer',
'Lease',
'Account',
// The charge to which this payment applies (if it is one)
'ChargeEntry' => array(
@@ -20,6 +19,14 @@ class StatementEntry extends AppModel {
'foreignKey' => 'charge_entry_id',
),
'StatementFraction',
);
var $hasAndBelongsToMany = array(
'LedgerEntry' => array(
'joinTable' => 'statement_fractions',
//'fields' => 'StatementFraction.amount',
),
);
//var $default_log_level = 30;
@@ -66,12 +73,11 @@ class StatementEntry extends AppModel {
* (not in a pre-existing statement entry)
*/
function verifyStatementEntry($entry) {
$this->prFunctionLevel(10);
$this->prFunctionLevel(30);
$this->prEnter(compact('entry'));
if (empty($entry['type']) ||
//empty($entry['effective_date']) ||
empty($entry['account_id']) ||
empty($entry['amount'])
) {
return $this->prReturn(false);
@@ -101,6 +107,12 @@ class StatementEntry extends AppModel {
if (!$this->save($entry))
return array('error' => true, 'save_data' => $entry) + $ret;
foreach ($entry['Fraction'] AS $fraction) {
$fraction['statement_entry_id'] = $this->id;
$this->StatementFraction->id = null;
$this->StatementFraction->save($fraction);
}
$ret['statement_entry_id'] = $this->id;
return $this->prReturn($ret + array('error' => false));
}
@@ -335,7 +347,7 @@ OPTION 2
*
*/
function assignCredits($query = null, $receipt_id = null) {
//$this->prFunctionLevel(25);
$this->prFunctionLevel(25);
$this->prEnter( compact('query', 'receipt_id'));
$this->queryInit($query);
@@ -352,16 +364,17 @@ OPTION 2
// Next, establish credit from the newly added receipt
$receipt_credit = null;
if (!empty($receipt_id)) {
$lquery = $query;
$lquery['link'] += array('LedgerEntry' =>
array('conditions' =>
//array(LedgerEntry.'crdr'=>'DEBIT'),
array('LedgerEntry.account_id !=' => $this->Account->accountReceivableAccountID()),
));
$lquery['fields'] = array('Transaction.id', 'Transaction.stamp', 'Transaction.amount',
'LedgerEntry.account_id');
// Very specific case here... no extra conditions
unset($lquery['conditions']);
$lquery = array
('contain' => array
('LedgerEntry' =>
array('conditions' =>
//array(LedgerEntry.'crdr'=>'DEBIT'),
array('LedgerEntry.account_id !=' =>
$this->LedgerEntry->Account->accountReceivableAccountID()),
),
),
);
$this->Transaction->id = $receipt_id;
$receipt_credit = $this->Transaction->find('first', $lquery);
if (!$receipt_credit)

View File

@@ -0,0 +1,9 @@
<?php
class StatementFraction extends AppModel {
var $belongsTo = array(
'StatementEntry',
'LedgerEntry',
);
}

View File

@@ -118,7 +118,7 @@ class Transaction extends AppModel {
// REVISIT <AP>: 20090802
// Completely un-implemented. Just copied from addReceipt
// and search-replace receipt with waiver.
return ('error' => true);
return array('error' => true);
// Establish the transaction as a waiver
$waiver =& $data['Transaction'];
@@ -427,7 +427,7 @@ class Transaction extends AppModel {
// Create the statement entry
$se =
array_intersect_key($entry,
array_flip(array('type', 'account_id', 'amount',
array_flip(array('type', 'amount',
'effective_date', 'through_date', 'due_date',
'customer_id', 'lease_id',
'charge_entry_id'))) +
@@ -502,7 +502,11 @@ class Transaction extends AppModel {
}
if (!empty($se)) {
//pr($ret['entries'][$e_index]['DoubleEntry']); die;
$le_id = $ret['entries'][0]['DoubleEntry']['Entry1']['ledger_entry_id'];
$se['transaction_id'] = $ret['transaction_id'];
$se['Fraction'] = array(array('ledger_entry_id' => $le_id,
'amount' => $se['amount']));
$result = $this->StatementEntry->addStatementEntry($se);
$ret['entries'][$e_index]['StatementEntry'] = $result;
if ($result['error']) {