Implemented bad debt write-off. This was tested about as well as the last checkin for security deposit utilization. Also, both of these need a redirect. I'm thinking redirect will have to be controlled dynamically, since we probably want to have them in a sequence of pages daisy changed at move out. Of course, we also will allow them each to be run on their own individually.
git-svn-id: file:///svn-source/pmgr/branches/invoice_receipt_20090629/site@295 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -283,6 +283,64 @@ class LeasesController extends AppController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
**************************************************************************
|
||||||
|
**************************************************************************
|
||||||
|
* action: bad_debt
|
||||||
|
* - Writes off remaining charges on a lease.
|
||||||
|
* REVISIT <AP>: 20090710
|
||||||
|
* Should this be a customer function? What customer
|
||||||
|
* would have only one lease that results in bad debt.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function bad_debt($id) {
|
||||||
|
$A = new Account();
|
||||||
|
|
||||||
|
$lease = $this->Lease->find
|
||||||
|
('first', array
|
||||||
|
('contain' => array
|
||||||
|
(// Models
|
||||||
|
'Unit' =>
|
||||||
|
array('order' => array('sort_order'),
|
||||||
|
'fields' => array('id', 'name'),
|
||||||
|
),
|
||||||
|
|
||||||
|
'Customer' =>
|
||||||
|
array('fields' => array('id', 'name'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
'conditions' => array(array('Lease.id' => $id),
|
||||||
|
array('Lease.close_date' => null),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
// Get the lease balance, part of lease stats
|
||||||
|
$this->Lease->statsMerge($lease['Lease'],
|
||||||
|
array('stats' => $this->Lease->stats($id)));
|
||||||
|
|
||||||
|
// Determine the lease security deposit
|
||||||
|
$deposit = $this->Lease->findSecurityDeposits($lease['Lease']['id']);
|
||||||
|
if ($deposit['summary']['balance'] > 0)
|
||||||
|
die("Still have un-utilized security deposit");
|
||||||
|
|
||||||
|
$this->set('customer', $lease['Customer']);
|
||||||
|
$this->set('unit', $lease['Unit']);
|
||||||
|
$this->set('lease', $lease['Lease']);
|
||||||
|
$this->set('account', array('id' => $A->badDebtAccountID()));
|
||||||
|
|
||||||
|
/* $redirect = array('controller' => 'leases', */
|
||||||
|
/* 'action' => 'view', */
|
||||||
|
/* $id); */
|
||||||
|
|
||||||
|
$title = ('Lease #' . $lease['Lease']['number'] . ': ' .
|
||||||
|
$lease['Unit']['name'] . ': ' .
|
||||||
|
$lease['Customer']['name'] . ': Write Off Bad Debt');
|
||||||
|
$this->set(compact('title', 'redirect'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
@@ -406,6 +464,11 @@ class LeasesController extends AppController {
|
|||||||
array('name' => 'Apply Deposit', 'url' => array('action' => 'apply_deposit',
|
array('name' => 'Apply Deposit', 'url' => array('action' => 'apply_deposit',
|
||||||
$id));
|
$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',
|
||||||
|
$id));
|
||||||
|
|
||||||
if ($this->Lease->closeable($id))
|
if ($this->Lease->closeable($id))
|
||||||
$this->sidemenu_links[] =
|
$this->sidemenu_links[] =
|
||||||
array('name' => 'Close', 'url' => array('action' => 'close',
|
array('name' => 'Close', 'url' => array('action' => 'close',
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ class Account extends AppModel {
|
|||||||
function pettyCashAccountID() { return $this->nameToID('Petty Cash'); }
|
function pettyCashAccountID() { return $this->nameToID('Petty Cash'); }
|
||||||
function invoiceAccountID() { return $this->nameToID('Invoice'); }
|
function invoiceAccountID() { return $this->nameToID('Invoice'); }
|
||||||
function receiptAccountID() { return $this->nameToID('Receipt'); }
|
function receiptAccountID() { return $this->nameToID('Receipt'); }
|
||||||
|
function badDebtAccountID() { return $this->nameToID('Bad Debt'); }
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|||||||
80
views/leases/bad_debt.ctp
Normal file
80
views/leases/bad_debt.ctp
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<?php /* -*- mode:PHP -*- */
|
||||||
|
|
||||||
|
echo '<div class="bad-debt input">' . "\n";
|
||||||
|
|
||||||
|
echo ('<DIV CLASS="bad-debt grid-selection-text">' .
|
||||||
|
|
||||||
|
'Lease #' . $lease['number'] .
|
||||||
|
' / Customer #' . $customer['id'] .
|
||||||
|
': ' . $customer['name'] .
|
||||||
|
' / Unit ' . $unit['name'] .
|
||||||
|
|
||||||
|
'<DIV CLASS="supporting">' .
|
||||||
|
'<TABLE>' .
|
||||||
|
'<TR><TD CLASS="field">Balance:</TD><TD CLASS="value">'.$lease['stats']['balance'].'</TD></TR>' .
|
||||||
|
'</TABLE>' .
|
||||||
|
'</DIV>' .
|
||||||
|
|
||||||
|
'</DIV>' . "\n");
|
||||||
|
|
||||||
|
|
||||||
|
echo $form->create(null, array('id' => 'receipt-form',
|
||||||
|
'url' => array('controller' => 'transactions',
|
||||||
|
'action' => 'postReceipt')));
|
||||||
|
|
||||||
|
echo $form->input("Customer.id",
|
||||||
|
array('id' => 'customer-id',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'value' => $customer['id']));
|
||||||
|
|
||||||
|
echo $form->input("Lease.id",
|
||||||
|
array('id' => 'lease-id',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'value' => $lease['id']));
|
||||||
|
|
||||||
|
echo $form->input("LedgerEntry.0.account_id",
|
||||||
|
array('id' => 'account-id',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'value' => $account['id']));
|
||||||
|
|
||||||
|
echo $form->input("LedgerEntry.0.amount",
|
||||||
|
array('id' => 'amount',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'value' => $lease['stats']['balance']));
|
||||||
|
|
||||||
|
|
||||||
|
echo $this->element('form_table',
|
||||||
|
array('class' => "item receipt transaction entry",
|
||||||
|
//'with_name_after' => ':',
|
||||||
|
'field_prefix' => 'Transaction',
|
||||||
|
'fields' => array
|
||||||
|
("stamp" => array('opts' => array('type' => 'text'),
|
||||||
|
'between' => '<A HREF="#" ONCLICK="datepickerNow(\'TransactionStamp\'); return false;">Now</A>',
|
||||||
|
),
|
||||||
|
"comment" => array('opts' => array('size' => 50),
|
||||||
|
),
|
||||||
|
)));
|
||||||
|
|
||||||
|
echo $form->end('Write Off Remaining Balance');
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
|
||||||
|
// Reset the form
|
||||||
|
function resetForm() {
|
||||||
|
datepickerNow('TransactionStamp');
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
$("#TransactionStamp")
|
||||||
|
.attr('autocomplete', 'off')
|
||||||
|
.datepicker({ constrainInput: true,
|
||||||
|
numberOfMonths: [1, 1],
|
||||||
|
showCurrentAtPos: 0,
|
||||||
|
dateFormat: 'mm/dd/yy' });
|
||||||
|
|
||||||
|
resetForm();
|
||||||
|
});
|
||||||
|
--></script>
|
||||||
|
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user