Brought the bad debt write-off functionality up to date. I'm not entirely convinced that calling it a receipt is such a good idea, but bad debt is certainly a non-normal case, and we can work on this later if need be.
git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716/site@486 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -252,57 +252,39 @@ class LeasesController extends AppController {
|
|||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* action: bad_debt
|
* action: bad_debt
|
||||||
* - Writes off remaining charges on a lease.
|
* - Sets up the write-off entry page, so that the
|
||||||
* REVISIT <AP>: 20090710
|
* user can write off remaining charges on a lease.
|
||||||
* Should this be a customer function? What customer
|
|
||||||
* would have only one lease that results in bad debt.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function bad_debt($id) {
|
function bad_debt($id) {
|
||||||
$A = new Account();
|
|
||||||
|
|
||||||
$lease = $this->Lease->find
|
$lease = $this->Lease->find
|
||||||
('first', array
|
('first', array
|
||||||
('contain' => array
|
('contain' => array
|
||||||
(// Models
|
(// Models
|
||||||
'Unit' =>
|
'Unit' => array('fields' => array('id', 'name')),
|
||||||
array('order' => array('sort_order'),
|
'Customer' => array('fields' => array('id', 'name')),
|
||||||
'fields' => array('id', 'name'),
|
|
||||||
),
|
|
||||||
|
|
||||||
'Customer' =>
|
|
||||||
array('fields' => array('id', 'name'),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
|
|
||||||
'conditions' => array(array('Lease.id' => $id),
|
'conditions' => array(array('Lease.id' => $id),
|
||||||
|
// Make sure lease is not closed...
|
||||||
array('Lease.close_date' => null),
|
array('Lease.close_date' => null),
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// Make sure we have a valid lease to write off
|
||||||
|
if (empty($lease))
|
||||||
|
$this->redirect(array('action' => 'view', $id));
|
||||||
|
|
||||||
// Get the lease balance, part of lease stats
|
// Get the lease balance, part of lease stats
|
||||||
$this->Lease->statsMerge($lease['Lease'],
|
$stats = $this->Lease->stats($id);
|
||||||
array('stats' => $this->Lease->stats($id)));
|
$balance = $stats['balance'];
|
||||||
|
|
||||||
// Determine the lease security deposit
|
|
||||||
$deposit_balance = $this->Lease->securityDepositBalance($lease['Lease']['id']);
|
|
||||||
if ($deposit_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); */
|
|
||||||
|
|
||||||
|
// Prepare to render
|
||||||
$title = ('Lease #' . $lease['Lease']['number'] . ': ' .
|
$title = ('Lease #' . $lease['Lease']['number'] . ': ' .
|
||||||
$lease['Unit']['name'] . ': ' .
|
$lease['Unit']['name'] . ': ' .
|
||||||
$lease['Customer']['name'] . ': Write Off Bad Debt');
|
$lease['Customer']['name'] . ': Write Off Bad Debt');
|
||||||
$this->set(compact('title', 'redirect'));
|
$this->set(compact('title', 'lease', 'balance'));
|
||||||
|
$this->render('/transactions/bad_debt');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -261,6 +261,53 @@ class TransactionsController extends AppController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
**************************************************************************
|
||||||
|
**************************************************************************
|
||||||
|
* action: postWriteOff
|
||||||
|
* - handles the write off of bad debt
|
||||||
|
*/
|
||||||
|
|
||||||
|
function postWriteOff() {
|
||||||
|
if (!$this->RequestHandler->isPost()) {
|
||||||
|
echo('<H2>THIS IS NOT A POST FOR SOME REASON</H2>');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $this->data;
|
||||||
|
$data['Entry'][0]['account_id'] =
|
||||||
|
$this->Transaction->Account->badDebtAccountID();
|
||||||
|
|
||||||
|
if (empty($data['Customer']['id']))
|
||||||
|
$data['Customer']['id'] = null;
|
||||||
|
if (empty($data['Lease']['id']))
|
||||||
|
$data['Lease']['id'] = null;
|
||||||
|
|
||||||
|
if (!$this->Transaction->addReceipt($data,
|
||||||
|
$data['Customer']['id'],
|
||||||
|
$this->data['Lease']['id'])) {
|
||||||
|
$this->Session->setFlash("WRITE OFF FAILED", true);
|
||||||
|
// REVISIT <AP> 20090706:
|
||||||
|
// Until we can work out the session problems,
|
||||||
|
// just die.
|
||||||
|
die("<H1>RECEIPT FAILED</H1>");
|
||||||
|
}
|
||||||
|
|
||||||
|
pr(compact('data'));
|
||||||
|
$this->render('/fake');
|
||||||
|
|
||||||
|
// Return to viewing the lease/customer
|
||||||
|
if (empty($data['Lease']['id']))
|
||||||
|
$this->redirect(array('controller' => 'customers',
|
||||||
|
'action' => 'view',
|
||||||
|
$data['Customer']['id']));
|
||||||
|
else
|
||||||
|
$this->redirect(array('controller' => 'leases',
|
||||||
|
'action' => 'view',
|
||||||
|
$data['Lease']['id']));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
<?php /* -*- mode:PHP -*- */
|
|
||||||
|
|
||||||
echo '<div class="apply-deposit input">' . "\n";
|
|
||||||
|
|
||||||
echo ('<DIV CLASS="apply-deposit 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">' . */
|
|
||||||
/* FormatHelper::currency($lease['stats']['balance']) . */
|
|
||||||
/* '</TD></TR>' . */
|
|
||||||
|
|
||||||
'<TR><TD CLASS="field">Deposit:</TD><TD CLASS="value">' .
|
|
||||||
FormatHelper::currency($depositBalance) .
|
|
||||||
'</TD></TR>' .
|
|
||||||
|
|
||||||
'</TABLE>' .
|
|
||||||
'</DIV>' .
|
|
||||||
|
|
||||||
'</DIV>' . "\n");
|
|
||||||
|
|
||||||
|
|
||||||
echo $form->create(null, array('id' => 'apply-deposit-form',
|
|
||||||
'url' => array('controller' => 'leases',
|
|
||||||
'action' => 'apply_deposit')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
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.Account.id",
|
|
||||||
array('id' => 'account-id',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'value' => $account['id']));
|
|
||||||
|
|
||||||
|
|
||||||
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>',
|
|
||||||
),
|
|
||||||
"amount" => array('prefix' => 'LedgerEntry',
|
|
||||||
'opts' => array('value' => $depositBalance),
|
|
||||||
),
|
|
||||||
"comment" => array('opts' => array('size' => 50),
|
|
||||||
),
|
|
||||||
)));
|
|
||||||
|
|
||||||
echo $form->end('Utilize Deposit');
|
|
||||||
?>
|
|
||||||
|
|
||||||
<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>
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
<?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>
|
|
||||||
89
views/transactions/bad_debt.ctp
Normal file
89
views/transactions/bad_debt.ctp
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
<?php /* -*- mode:PHP -*- */
|
||||||
|
|
||||||
|
echo '<div class="bad-debt input">' . "\n";
|
||||||
|
|
||||||
|
if (isset($lease)) {
|
||||||
|
$customer = $lease['Customer'];
|
||||||
|
$unit = $lease['Unit'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($customer['Customer']))
|
||||||
|
$customer = $customer['Customer'];
|
||||||
|
|
||||||
|
if (isset($lease['Lease']))
|
||||||
|
$lease = $lease['Lease'];
|
||||||
|
|
||||||
|
// We're not actually using a grid to select the customer / lease
|
||||||
|
// but we could/should be, and the result would be selection-text
|
||||||
|
echo ('<DIV CLASS="bad-debt grid-selection-text">' .
|
||||||
|
'<TABLE>' . "\n");
|
||||||
|
|
||||||
|
echo ('<TR><TD style="padding-right: 1em;">' . $customer['name'] . '</TD>' .
|
||||||
|
' <TD>' . '(Customer #' . $customer['id'] . ')' . '</TD>' .
|
||||||
|
'</TR>' . "\n");
|
||||||
|
|
||||||
|
if (isset($lease))
|
||||||
|
echo ('<TR><TD style="padding-right: 1em;">' . 'Unit ' . $unit['name'] . '</TD>' .
|
||||||
|
' <TD>' . '(Lease #' . $lease['number'] . ')' . '</TD>' .
|
||||||
|
'</TR>' . "\n");
|
||||||
|
|
||||||
|
echo ('<TR><TD style="padding-right: 1em;">Remaining Balance:</TD>' .
|
||||||
|
' <TD>' . FormatHelper::currency($balance) . '</TD>' .
|
||||||
|
'</TR>' . "\n");
|
||||||
|
|
||||||
|
echo ('</TABLE>' .
|
||||||
|
'</DIV>' . "\n");
|
||||||
|
|
||||||
|
|
||||||
|
echo $form->create(null, array('id' => 'receipt-form',
|
||||||
|
'url' => array('controller' => 'transactions',
|
||||||
|
'action' => 'postWriteOff'))) . "\n";
|
||||||
|
|
||||||
|
echo $form->input("Customer.id",
|
||||||
|
array('type' => 'hidden',
|
||||||
|
'value' => $customer['id'])) . "\n";
|
||||||
|
|
||||||
|
if (isset($lease['id']))
|
||||||
|
echo $form->input("Lease.id",
|
||||||
|
array('type' => 'hidden',
|
||||||
|
'value' => $lease['id'])) . "\n";
|
||||||
|
|
||||||
|
echo $form->input("Entry.0.amount",
|
||||||
|
array('type' => 'hidden',
|
||||||
|
'value' => $balance)) . "\n";
|
||||||
|
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
))) . "\n";
|
||||||
|
|
||||||
|
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