array( 'className' => 'Transaction', ), '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 : 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 : 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', '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); } } ?>