Added confirmation to the NSF functionality, as well as a timestamp field instead of forcing time=now.

git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716/site@513 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2009-08-10 05:49:43 +00:00
parent 4358732878
commit d49201211b
4 changed files with 111 additions and 39 deletions

View File

@@ -80,31 +80,10 @@ class Tender extends AppModel {
**************************************************************************
* function: nsf
* - Flags the ledger entry as having insufficient funds
*
* Steps:
* - Get information from Check (C1); for amount $A
* - Find Bank Deposit matching to Tender
* - New Transaction (T1)
* - New Bank Deposit (D1)
* - New Tender (N1); NSF; D1,
* - Add new LedgerEntry (L1a); T1; debit:bank; -$A
* - Add new LedgerEntry (L1b); T1; credit:NSF; -$A
* - Add new LedgerEntry (L2a); T1; debit:NSF; -$A; N1
* - Add new LedgerEntry (L2b); T1; credit:A/R; -$A
* - For Tx associated with LE associated with C1:
* - For each Disbursement SE of Tx:
* - Add new StatementEntry (S1n); T1; DISBURSEMENT; -1*S1n.amount
* - New Transaction (T2) (?????)
* - Add new StatementEntry (S2); T2; CHARGE; NSF; $35
* - Add new LedgerEntry (L3a); T2; credit:NSF-Fee; $35
* - Add new LedgerEntry (L3b); T2; debit:A/R; $35
* - Set C1.nsf_tx = T1
* - Re-Reconcile (customer may have running credit)
*/
function nsf($id, $stamp = null) {
$this->prFunctionLevel(30);
$this->prEnter(compact('id'));
function nsf($id, $stamp = null, $comment = null) {
$this->prEnter(compact('id', 'stamp', 'comment'));
// Get information about this NSF item.
$this->id = $id;
@@ -128,16 +107,15 @@ class Tender extends AppModel {
unset($tender['NsfTransaction']);
$T = new Transaction();
$result = $T->addNsf($tender, $stamp);
if ($result['error'])
return $this->prReturn(false);
$result = $T->addNsf($tender, $stamp, $comment);
if (empty($result['error'])) {
// Flag the tender as NSF, using the items created from addNsf
$this->id = $id;
$this->saveField('nsf_transaction_id', $result['nsf_transaction_id']);
$this->saveField('nsf_ledger_entry_id', $result['nsf_ledger_entry_id']);
}
// Flag the tender as NSF, using the items created from addNsf
$this->id = $id;
$this->saveField('nsf_transaction_id', $result['nsf_transaction_id']);
$this->saveField('nsf_ledger_entry_id', $result['nsf_ledger_entry_id']);
return $this->prReturn(true);
return $this->prReturn($result);
}

View File

@@ -673,8 +673,8 @@ class Transaction extends AppModel {
* - Adds NSF transaction
*/
function addNsf($tender, $stamp) {
$this->prEnter(compact('tender', 'stamp'));
function addNsf($tender, $stamp = null, $comment = null) {
$this->prEnter(compact('tender', 'stamp', 'comment'));
$ret = array();
@@ -683,7 +683,8 @@ class Transaction extends AppModel {
// and recording it in the NSF account. It has nothing to do
// with the customer statement (charges, disbursements, credits, etc).
$bounce_result = $this->addDeposit
(array('Transaction' => array('crdr' => 'CREDIT'),
(array('Transaction' => array('stamp' => $stamp,
'crdr' => 'CREDIT'),
'Entry' => array(array('tender_id' => null,
'account_id' => $this->Account->nsfAccountID(),
'crdr' => 'DEBIT',
@@ -731,6 +732,7 @@ class Transaction extends AppModel {
$rollback['Transaction']['crdr'] = 'CREDIT'; // Unused... keeps verifyTx happy
$rollback['Transaction']['account_id'] = $this->Account->nsfAccountID();
$rollback['Transaction']['customer_id'] = $tender['Tender']['customer_id'];
$rollback['Transaction']['comment'] = $comment;
foreach ($nsf_ledger_entry['Transaction']['StatementEntry'] AS $disbursement) {
if ($disbursement['type'] === 'SURPLUS') {
@@ -746,7 +748,6 @@ class Transaction extends AppModel {
'customer_id' => $disbursement['customer_id'],
'lease_id' => $disbursement['lease_id'],
'charge_entry_id' => $disbursement['charge_entry_id'],
'effective_date' => $stamp,
);
}
}