sidemenu_links); } /************************************************************************** ************************************************************************** ************************************************************************** * action: index / all * - Generate a listing of Tenders */ function index() { $this->all(); } function all() { $this->gridView('All Legal Tender', 'all'); } /************************************************************************** ************************************************************************** ************************************************************************** * virtuals: gridData * - With the application controller handling the gridData action, * these virtual functions ensure that the correct data is passed * to jqGrid. */ function gridDataTables(&$params, &$model) { return array ('link' => array('TenderType', 'Customer', 'LedgerEntry' => array('Transaction', ), ), ); } function gridDataRecordsExecute(&$params, &$model, $query) { $tquery = array_diff_key($query, array('fields'=>1,'group'=>1,'limit'=>1,'order'=>1)); $tquery['fields'] = array("SUM(COALESCE(LedgerEntry.amount,0)) AS 'total'"); $total = $model->find('first', $tquery); $params['userdata']['total'] = $total[0]['total']; return parent::gridDataRecordsExecute($params, $model, $query); } function gridDataPostProcessLinks(&$params, &$model, &$records, $links) { $links['Tender'] = array('name', 'id'); $links['Customer'] = array('name'); $links['TenderType'] = array('name'); return parent::gridDataPostProcessLinks($params, $model, $records, $links); } /************************************************************************** ************************************************************************** ************************************************************************** * action: deposit * - Prepares the books for a bank deposit */ function deposit() { // Prepare a close page... $deposit_types = $this->Tender->TenderType->depositTypes( // Testing... limit to only one type //array('limit' => 1) ); $deposit_accounts = $this->Tender->TenderType->Account->depositAccounts(); foreach ($deposit_types AS $type_id => &$type) $type = array('id' => $type_id, 'name' => $type, 'stats' => $this->Tender->TenderType->stats($type_id)); //pr(compact('deposit_types', 'deposit_accounts')); $title = 'Prepare Deposit'; $this->set(compact('title', 'deposit_types', 'deposit_accounts')); } /************************************************************************** ************************************************************************** ************************************************************************** * action: nsf * - Marks a tender as having insufficient funds. */ function nsf($id = null) { if (!$id) { $this->Session->setFlash(__('Invalid Item.', true)); $this->redirect(array('action'=>'index')); } // REVISIT : 20090713 // For testing purposes, must be deleted $stamp = '2009-07-09'; $stamp = null; $this->Tender->nsf($id, $stamp); } /************************************************************************** ************************************************************************** ************************************************************************** * action: view * - Displays information about a specific entry */ function view($id = null) { if (!$id) { $this->Session->setFlash(__('Invalid Item.', true)); $this->redirect(array('controller' => 'accounts', 'action'=>'index')); } // Get the Tender and related fields $tender = $this->Tender->find ('first', array ('contain' => array('TenderType', 'Customer', 'LedgerEntry' => array('Transaction')), )); if (!empty($tender['Tender']['deposit_transaction_id']) && empty($tender['Tender']['nsf_transaction_id'])) { // Set up dynamic menu items $this->sidemenu_links[] = array('name' => 'Operations', 'header' => true); $this->sidemenu_links[] = array('name' => 'NSF', 'url' => array('action' => 'nsf', $id)); } // Prepare to render. $title = "Tender #{$tender['Tender']['id']}"; $this->set(compact('tender', 'title')); } }