From bfa71375e82cfb3219bdc8f3331f4477c75f222f Mon Sep 17 00:00:00 2001 From: abijah Date: Wed, 29 Jul 2009 01:51:34 +0000 Subject: [PATCH] Started work on handling NSF, but will deal with deposits first, since we can't get an NSF without a deposit first. git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716/site@407 97e9348a-65ac-dc4b-aefc-98561f571b83 --- controllers/tenders_controller.php | 1 + models/tender.php | 126 +++++++---------------------- 2 files changed, 32 insertions(+), 95 deletions(-) diff --git a/controllers/tenders_controller.php b/controllers/tenders_controller.php index 02dc059..ce33bf7 100644 --- a/controllers/tenders_controller.php +++ b/controllers/tenders_controller.php @@ -64,6 +64,7 @@ class TendersController extends AppController { // REVISIT : 20090713 // For testing purposes, must be deleted $stamp = '2009-07-09'; + $stamp = null; $this->Tender->nsf($id, $stamp); } diff --git a/models/tender.php b/models/tender.php index f5c3597..70522a1 100644 --- a/models/tender.php +++ b/models/tender.php @@ -83,108 +83,44 @@ class Tender extends AppModel { ************************************************************************** * function: nsf * - Flags the ledger entry as having insufficient funds - * - NOTE: nsf only works if given the monetary source id - * to transaction e3, below - * - NOTE: In order to show that the rent formerly considered - * "collected" is now recognized in reverse, we must - * credit A/R with a negative amount in order to - * reconcile it against the Rent<->A/R ledger entry. - * - * FEE RENT A/R RECEIPT CHECK NSF BANK - * ------- ------- ------- ------- ------- ------- ------- - * | |30 30| | | | | t1 e1a : R e2/e7a : - * | |20 20| | | | | t1 e1b : R e2/e7b : - * | | | | | | | - * | | |30 30| | | | t2 e2a : R e3 : R e1a - * | | |20 20| | | | t2 e2b : R e3 : R e1b - * | | | |50 50| | | t2 e3 : R e4 : R e2 - * | | | | | | | - * | | | | |50 | 50| t3 e4 : : R e3 - * | | | | | | | - * | | | | | |-50 -50| t4 e5 : : R e6 - * | | | |-50 | -50| | t5 e6 : R e5 : R e7a/e7b - * | | |-30 -30| | | | t6 e7a : R e6 : R e1a - * | | |-20 -20| | | | t6 e7b : R e6 : R e1b - * |35 | 35| | | | | t6 e8 * + * Steps: + * - Get information from Check (C1); for amount $A + * - New Transaction (T1) + * - Find Bank Deposit matching to Tender + * - 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 Payment SE of Tx: + * - Add new StatementEntry (S1n); T1; PAYMENT; -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) { pr(array('Tender::nsf', compact('id'))); - $A = new Account(); - - // Get the LedgerEntries that use this monetary source - $source = $this->find - ('first', - array('contain' => - array(/* e3 */ - 'LedgerEntry' => - array('Transaction.id', - 'Tender.id', - 'Customer.id', - 'Lease.id', - - /* e3 debit */ - 'DebitLedger' => /* e.g. CHECK Ledger */ - array('fields' => array(), - - 'Account' => /* e.g. CHECK Account */ - array('fields' => array('id', 'name'), - 'conditions' => - array('Account.payable' => 1, - 'Account.type' => 'ASSET'), - ), - ), - - /* e3 credit */ - 'CreditLedger' => /* i.e. RECEIPT Ledger */ - array('fields' => array('id'), - 'Account' => /* i.e. RECEIPT Account */ - array('fields' => array('id', 'name'), - 'conditions' => - array('Account.id' => $A->receiptAccountID()), - ), - ), - - /* e2 */ - 'DebitReconciliationLedgerEntry' => - array(/* e2 credit */ - 'CreditLedger' => /* i.e. A/R Ledger */ - array('fields' => array(), - - 'Account' => /* i.e. A/R Account */ - array('fields' => array(), - 'conditions' => - array('Account.id' => $A->accountReceivableAccountID()), - ), - ), - - /* e1 */ - // STUPID CakePHP bug screws up CLASS contains CLASS. - // Use the same class, but with different name. - 'DebitReconciliationLedgerEntry2', - ), - - /* e4 */ - 'CreditReconciliationLedgerEntry' => - array(/* e4 debit */ - 'DebitLedger' => /* e.g. BANK Ledger */ - array('fields' => array('id'), - 'Account' => /* e.g. BANK Account */ - array('fields' => array('id', 'name'), - 'conditions' => - array('Account.depositable' => 1), - ), - ), - ), - ), - ), - - 'conditions' => array(array('Tender.id' => $id)), - )); - pr($source); + // Get information about this NSF item. + $this->id = $id; + $tender = $this->find + ('first', array + ('contain' => + array('LedgerEntry', + 'DepositTransaction', + 'NsfTransaction'), + )); + //'conditions' => array(array('Tender.id' => $id)), + pr($tender); + return; $nsf_account_id = $A->nsfAccountID(); $nsf_fee_account_id = $A->nsfChargeAccountID();