diff --git a/controllers/accounts_controller.php b/controllers/accounts_controller.php index 4817c80..aa4bb8f 100644 --- a/controllers/accounts_controller.php +++ b/controllers/accounts_controller.php @@ -152,9 +152,7 @@ class AccountsController extends AppController { $this->redirect(array('action'=>'index')); } - $payment_accounts = $this->Account->paymentAccounts(); - $payment_accounts[$this->Account->nsfAccountID()] = - $this->Account->name($this->Account->nsfAccountID()); + $payment_accounts = $this->Account->collectableAccounts(); //$payment_accounts[$this->Account->nameToID('Bank')] = 'Bank'; $default_accounts = array_diff_key($payment_accounts, array($this->Account->concessionAccountID() => 1)); diff --git a/controllers/customers_controller.php b/controllers/customers_controller.php index 8672d64..7dbbd34 100644 --- a/controllers/customers_controller.php +++ b/controllers/customers_controller.php @@ -432,11 +432,14 @@ class CustomersController extends AppController { $entries = $this->Customer->LedgerEntry->find ('all', array ('contain' => false, - 'conditions' => array('LedgerEntry.id' => array(199,200,201)), + 'conditions' => array('LedgerEntry.id' => + //array(199,200,201) + 61 + ), )); pr(compact('entries')); - $this->Customer->LedgerEntry->refund($entries); + $this->Customer->LedgerEntry->reverse($entries); } diff --git a/controllers/leases_controller.php b/controllers/leases_controller.php index f32c13a..2447bff 100644 --- a/controllers/leases_controller.php +++ b/controllers/leases_controller.php @@ -475,11 +475,18 @@ class LeasesController extends AppController { 'action' => 'receipt', $lease['Customer']['id'])); - if (isset($lease['Lease']['moveout_date']) && $outstanding_deposit > 0) + if (isset($lease['Lease']['moveout_date']) && $outstanding_deposit > 0 && $outstanding_balance > 0) $this->sidemenu_links[] = array('name' => 'Apply Deposit', 'url' => array('action' => 'apply_deposit', $id)); + if (isset($lease['Lease']['moveout_date']) && + $outstanding_balance <= 0 && + ($outstanding_deposit - $outstanding_balance) > 0) + $this->sidemenu_links[] = + array('name' => 'Issue Refund', 'url' => array('action' => 'refund', + $id)); + if (isset($lease['Lease']['moveout_date']) && $outstanding_deposit == 0 && $outstanding_balance > 0) $this->sidemenu_links[] = array('name' => 'Write-Off', 'url' => array('action' => 'bad_debt', diff --git a/controllers/ledger_entries_controller.php b/controllers/ledger_entries_controller.php index 7ced4f3..1aa0837 100644 --- a/controllers/ledger_entries_controller.php +++ b/controllers/ledger_entries_controller.php @@ -341,7 +341,7 @@ class LedgerEntriesController extends AppController { */ function reverse($id) { - $id = $this->LedgerEntry->reverse($id); + $this->LedgerEntry->reverse($id); $this->redirect(array('action'=>'view', $id)); } @@ -433,13 +433,27 @@ class LedgerEntriesController extends AppController { (!$entry['CreditLedger']['Account']['trackable'] || $stats['credit']['amount_reconciled'] == 0) - || 1 // REVISIT : 20090711 : Testing + && 0 + ) { // Set up dynamic menu items $this->sidemenu_links[] = array('name' => 'Operations', 'header' => true); + $this->sidemenu_links[] = + array('name' => 'Undo', + 'url' => array('action' => 'reverse', + $id)); + } + + if ($this->LedgerEntry->Ledger->Account->type + ($entry['CreditLedger']['Account']['id']) == 'INCOME') + { + // Set up dynamic menu items + $this->sidemenu_links[] = + array('name' => 'Operations', 'header' => true); + $this->sidemenu_links[] = array('name' => 'Reverse', 'url' => array('action' => 'reverse', diff --git a/models/account.php b/models/account.php index 66a69ef..abbd666 100644 --- a/models/account.php +++ b/models/account.php @@ -211,6 +211,25 @@ class Account extends AppModel { return $payment_accounts; } + /************************************************************************** + ************************************************************************** + ************************************************************************** + * function: collectableAccounts + * - Returns an array of accounts suitable to show income collection + */ + + function collectableAccounts() { + $accounts = $this->paymentAccounts(); + + foreach(array($this->nsfAccountID(), + $this->securityDepositAccountID()) + AS $account_id) { + $accounts[$account_id] = $this->name($account_id); + } + + return $accounts; + } + /************************************************************************** ************************************************************************** diff --git a/models/ledger_entry.php b/models/ledger_entry.php index ab82b17..3fa4701 100644 --- a/models/ledger_entry.php +++ b/models/ledger_entry.php @@ -251,7 +251,7 @@ class LedgerEntry extends AppModel { * - Reverses the ledger entry */ - function reverse($id, $amount = null, $transaction_id = null, $rec_id = null) { + function reverse1($id, $amount = null, $transaction_id = null, $rec_id = null) { /* pr(array('LedgerEntry::reverse', */ /* compact('id', 'amount', 'transaction_id', 'rec_id'))); */ @@ -378,8 +378,8 @@ class LedgerEntry extends AppModel { /************************************************************************** ************************************************************************** ************************************************************************** - * function: refund - * - Flags the given items as refunded + * function: reverse + * - Reverses the charges * * SAMPLE MOVE IN w/ PRE PAYMENT * DEPOSIT RENT A/R RECEIPT CHECK PETTY BANK @@ -427,20 +427,26 @@ OPTION 2 * | | | | | | | * */ - function refund($ledger_entries, $stamp = null) { - pr(array('LedgerEntry::refund', + function reverse($ledger_entries, $stamp = null) { + pr(array('LedgerEntry::reverse', compact('ledger_entries', 'stamp'))); + // If the user only wants to reverse one ID, we'll allow it + if (!is_array($ledger_entries)) + $ledger_entries = $this->find + ('all', array + ('contain' => false, + 'conditions' => array('LedgerEntry.id' => $ledger_entries))); + $A = new Account(); - $cp_account_id = $A->creditPayableAccountID(); - $cp_account_id = $A->accountReceivableAccountID(); + $ar_account_id = $A->accountReceivableAccountID(); $receipt_account_id = $A->receiptAccountID(); $transaction_id = null; foreach ($ledger_entries AS $entry) { $entry = $entry['LedgerEntry']; - $amount = $entry['amount']; + $amount = -1*$entry['amount']; if (isset($entry['credit_account_id'])) $refund_account_id = $entry['credit_account_id']; @@ -455,8 +461,8 @@ OPTION 2 $ids = $A->postLedgerEntry (array('transaction_id' => $transaction_id), null, - array('debit_ledger_id' => $A->currentLedgerID($refund_account_id), - 'credit_ledger_id' => $A->currentLedgerID($cp_account_id), + array('debit_ledger_id' => $A->currentLedgerID($ar_account_id), + 'credit_ledger_id' => $A->currentLedgerID($refund_account_id), 'effective_date' => $entry['effective_date'], 'through_date' => $entry['through_date'], 'amount' => $amount, @@ -476,7 +482,7 @@ OPTION 2 $transaction_id = $ids['transaction_id']; pr(array('checkpoint' => 'Posted Refund Ledger Entry', - compact('ids', 'amount', 'refund_account_id', 'cp_account_id'))); + compact('ids', 'amount', 'refund_account_id', 'ar_account_id'))); } return true;