git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716@609 97e9348a-65ac-dc4b-aefc-98561f571b83
166 lines
5.3 KiB
PHP
166 lines
5.3 KiB
PHP
<?php
|
|
class Tender extends AppModel {
|
|
|
|
var $belongsTo = array(
|
|
'TenderType',
|
|
'Customer',
|
|
'LedgerEntry',
|
|
'DepositTransaction' => array(
|
|
'className' => 'Transaction',
|
|
),
|
|
'DepositLedgerEntry' => array(
|
|
'className' => 'LedgerEntry',
|
|
),
|
|
'NsfTransaction' => array(
|
|
'className' => 'Transaction',
|
|
'dependent' => true,
|
|
),
|
|
);
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: afterSave
|
|
* - Performs any work needed after the save occurs
|
|
*/
|
|
|
|
function afterSave($created) {
|
|
// Come up with a (not necessarily unique) name for the tender.
|
|
// For checks & money orders, this will be based on the check
|
|
// number. For other types of tender, we'll just use the
|
|
// generic name of the tender type, and the tender ID
|
|
|
|
// Determine our tender type, and set the ID of that model
|
|
$this->TenderType->id = $this->field('tender_type_id');
|
|
|
|
// REVISIT <AP>: 20090810
|
|
// The only tender expected to have no tender type
|
|
// is our special "Closing" tender.
|
|
if (empty($this->TenderType->id))
|
|
$newname = 'Closing';
|
|
else {
|
|
$newname = $this->TenderType->field('name');
|
|
$naming_field = $this->TenderType->field('naming_field');
|
|
if (!empty($naming_field))
|
|
$newname .= ' #' . $this->field($naming_field);
|
|
}
|
|
|
|
if ($newname !== $this->field('name'))
|
|
$this->saveField('name', $newname);
|
|
|
|
return parent::afterSave($created);
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: beforeDelete
|
|
* - Performs any work needed before the delete occurs
|
|
*/
|
|
|
|
function beforeDelete($cascade = true) {
|
|
// REVISIT <AP>: 20090814
|
|
// Experimental, and incomplete mechanism to protect
|
|
// against trying to delete data that shouldn't be deleted.
|
|
|
|
$deposit_id = $this->field('deposit_transaction_id');
|
|
pr(compact('deposit_id'));
|
|
// If this tender has already been deposited, it would
|
|
// be a rats nest to figure out how to delete this tender.
|
|
if (!empty($deposit_id))
|
|
return false;
|
|
|
|
return parent::beforeDelete($cascade);
|
|
}
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: verifyTender
|
|
* - Verifies consistenty of new tender data
|
|
* (not in a pre-existing tender)
|
|
*/
|
|
function verifyTender($tender) {
|
|
$this->prFunctionLevel(10);
|
|
$this->prEnter(compact('tender'));
|
|
|
|
if (empty($tender['tender_type_id'])) {
|
|
return $this->prReturn(false);
|
|
}
|
|
|
|
return $this->prReturn(true);
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: addTender
|
|
* - Inserts new Tender into the database
|
|
*/
|
|
|
|
function addTender($tender) {
|
|
$this->prEnter(compact('tender'));
|
|
|
|
$ret = array('data' => $tender);
|
|
if (!$this->verifyTender($tender))
|
|
return $this->prReturn(array('error' => true) + $ret);
|
|
|
|
$this->create();
|
|
if (!$this->save($tender))
|
|
return $this->prReturn(array('error' => true) + $ret);
|
|
|
|
$ret['tender_id'] = $this->id;
|
|
return $this->prReturn($ret + array('error' => false));
|
|
}
|
|
|
|
|
|
/**************************************************************************
|
|
**************************************************************************
|
|
**************************************************************************
|
|
* function: nsf
|
|
* - Flags the ledger entry as having insufficient funds
|
|
*/
|
|
|
|
function nsf($id, $stamp = null, $comment = null) {
|
|
$this->prEnter(compact('id', 'stamp', 'comment'));
|
|
|
|
// Get information about this NSF item.
|
|
$this->id = $id;
|
|
$tender = $this->find
|
|
('first', array
|
|
('contain' =>
|
|
array('LedgerEntry',
|
|
'DepositTransaction',
|
|
'DepositLedgerEntry',
|
|
'NsfTransaction'),
|
|
));
|
|
$this->pr(20, compact('tender'));
|
|
|
|
if (!empty($tender['NsfTransaction']['id']))
|
|
die("Item has already been set as NSF");
|
|
|
|
if (empty($tender['DepositTransaction']['id']))
|
|
die("Item has not been deposited yet");
|
|
|
|
$tender['Transaction'] = $tender['DepositTransaction'];
|
|
unset($tender['DepositTransaction']);
|
|
unset($tender['NsfTransaction']);
|
|
|
|
$T = new Transaction();
|
|
$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']);
|
|
}
|
|
|
|
return $this->prReturn($result);
|
|
}
|
|
|
|
|
|
}
|
|
?>
|