sidemenu_links); } /************************************************************************** ************************************************************************** ************************************************************************** * virtuals: jqGridData * - With the application controller handling the jqGridData action, * these virtual functions ensure that the correct data is passed * to jqGrid. */ function jqGridDataSetup(&$params) { parent::jqGridDataSetup($params); if (isset($params['custom']['ar_account'])) { $params['custom']['account_id'] = $this->LedgerEntry->DebitLedger->Account->accountReceivableAccountID(); } } function jqGridDataTables(&$params, &$model) { $link = array(// Models 'Transaction' => array('fields' => array('id', 'stamp'), ), 'MonetarySource' => array('fields' => array('id', 'name'), ), 'Customer' => array('fields' => array('id', 'name'), ), 'Lease' => array('fields' => array('id', 'number'), 'Unit' => array('fields' => array('id', 'name'), ), ), ); if (isset($params['custom']['account_ftype'])) { $ftype = $params['custom']['account_ftype']; $ftype = ucfirst($ftype); //$ftype = $this->LedgerEntry->DebitLedger->Account->fundamentalOpposite($ftype); $link[$ftype . 'Ledger'] = array('fields' => array('id', 'sequence'), 'Account' => array('class' => 'Account', 'fields' => array('id', 'name'), ), ); } elseif (isset($params['custom']['ledger_id'])) { $ledger_id = $params['custom']['ledger_id']; $link['Ledger'] = array('fields' => array('id', 'sequence'), 'conditions' => ("Ledger.id = IF(LedgerEntry.debit_ledger_id = $ledger_id," . " LedgerEntry.credit_ledger_id," . " LedgerEntry.debit_ledger_id)"), 'Account' => array( 'fields' => array('id', 'name'), ), ); } else { $link['DebitLedger'] = array('fields' => array('id', 'sequence'), 'DebitAccount' => array('class' => 'Account', 'fields' => array('id', 'name'), ), ); $link['CreditLedger'] = array('fields' => array('id', 'sequence'), 'CreditAccount' => array('class' => 'Account', 'fields' => array('id', 'name'), ), ); } if (isset($params['custom']['account_id'])) { $account_id = $params['custom']['account_id']; $link['Ledger'] = array('fields' => array('id', 'sequence'), 'conditions' => ("Ledger.id = IF(DebitLedger.account_id = $account_id," . " LedgerEntry.credit_ledger_id," . " LedgerEntry.debit_ledger_id)"), 'Account' => array( 'fields' => array('id', 'name'), ), ); } if (isset($params['custom']['reconcile_id'])) { $ftype = $params['custom']['account_ftype']; $ftype = $this->LedgerEntry->DebitLedger->Account->fundamentalOpposite($ftype); $ftype = ucfirst($ftype); $link[$ftype.'ReconciliationLedgerEntry'] = array('fields' => array('Reconciliation.amount')); } return array('link' => $link); } function jqGridDataFields(&$params, &$model) { $ledger_id = (isset($params['custom']['ledger_id']) ? $params['custom']['ledger_id'] : null); $account_id = (isset($params['custom']['account_id']) ? $params['custom']['account_id'] : null); $account_type = (isset($params['custom']['account_type']) ? $params['custom']['account_type'] : null); return $model->ledgerContextFields2($ledger_id, $account_id, $account_type); } function jqGridDataConditions(&$params, &$model) { $ledger_id = (isset($params['custom']['ledger_id']) ? $params['custom']['ledger_id'] : null); $account_type = (isset($params['custom']['account_type']) ? $params['custom']['account_type'] : null); $conditions = parent::jqGridDataConditions($params, $model); if ($params['action'] === 'ledger') { $conditions[] = $model->ledgerContextConditions($ledger_id, $account_type); } if (isset($params['custom']['reconcile_id'])) { $ftype = $params['custom']['account_ftype']; //$ftype = $this->LedgerEntry->DebitLedger->Account->fundamentalOpposite($ftype); $conditions[] = array('Reconciliation.'.$ftype.'_ledger_entry_id' => $params['custom']['reconcile_id']); } if (isset($params['custom']['account_id'])) { $conditions[] = array('OR' => array(array('CreditAccount.id' => $params['custom']['account_id']), array('DebitAccount.id' => $params['custom']['account_id']))); } if (isset($params['custom']['customer_id'])) { $conditions[] = array('Customer.id' => $params['custom']['customer_id']); /* $Account = new Account(); */ /* if (isset($params['custom']['account_ftype']) || */ /* isset($params['custom']['ledger_id'])) { */ /* $conditions[] = */ /* array('OR' => array('Account.id' => $Account->invoiceAccountID(), */ /* 'Account.id' => $Account->receiptAccountID())); */ /* } else { */ /* $conditions[] = */ /* array('OR' => array('DebitAccount.id' => $Account->invoiceAccountID(), */ /* //'CreditAccount.id' => $Account->invoiceAccountID(), */ /* //'DebitAccount.id' => $Account->receiptAccountID(), */ /* 'CreditAccount.id' => $Account->receiptAccountID(), */ /* )); */ /* } */ } if (isset($params['custom']['lease_id'])) { $conditions[] = array('Lease.id' => $params['custom']['lease_id']); /* $Account = new Account(); */ /* if (isset($params['custom']['account_ftype']) || */ /* isset($params['custom']['ledger_id'])) { */ /* $conditions[] = */ /* array('OR' => array('Account.id' => $Account->invoiceAccountID(), */ /* 'Account.id' => $Account->receiptAccountID())); */ /* } else { */ /* $conditions[] = */ /* array('OR' => array('DebitAccount.id' => $Account->invoiceAccountID(), */ /* //'CreditAccount.id' => $Account->invoiceAccountID(), */ /* //'DebitAccount.id' => $Account->receiptAccountID(), */ /* 'CreditAccount.id' => $Account->receiptAccountID(), */ /* )); */ /* } */ } if (isset($params['custom']['transaction_id'])) { $conditions[] = array('Transaction.id' => $params['custom']['transaction_id']); } return $conditions; } function jqGridRecordLinks(&$params, &$model, &$records, $links) { $links['Transaction'] = array('id'); $links['LedgerEntry'] = array('id'); $links['Account'] = array('controller' => 'accounts', 'name'); $links['DebitAccount'] = array('controller' => 'accounts', 'name'); $links['CreditAccount'] = array('controller' => 'accounts', 'name'); $links['MonetarySource'] = array('name'); $links['Customer'] = array('name'); $links['Lease'] = array('number'); $links['Unit'] = array('name'); return parent::jqGridRecordLinks($params, $model, $records, $links); } function jqGridDataGroup(&$params, &$model) { if (isset($params['custom']['notxgroup'])) return parent::jqGridDataGroup($params, $model); return $model->alias.'.transaction_id'; } function jqGridDataOrder(&$params, &$model, $index, $direction) { /* if ($index === 'balance') */ /* return ($index .' '. $direction); */ $order = parent::jqGridDataOrder($params, $model, $index, $direction); if ($index === 'Transaction.stamp') { $order[] = 'LedgerEntry.id ' . $direction; } return $order; } function jqGridRecordsPostProcess(&$params, &$model, &$records) { parent::jqGridRecordsPostProcess($params, $model, $records); $subtotal = 0; foreach ($records AS &$record) { $amount = (isset($record['LedgerEntry']['balance']) ? $record['LedgerEntry']['balance'] : $record['LedgerEntry']['amount']); $record['LedgerEntry']['subtotal'] = ($subtotal += $amount); continue; // Experiment to minimize columns by putting the monetary source // as the Account, when available if ($record['MonetarySource']['name']) $record['Account']['name'] = $record['MonetarySource']['name']; } } function jqGridDataOutputRecordCell(&$params, &$model, &$record, $field, $data) { /* if ($field === 'CreditAccount.name') { */ /* $data .= '-OK'; */ /* } */ parent::jqGridDataOutputRecordCell($params, $model, $record, $field, $data); } /************************************************************************** ************************************************************************** ************************************************************************** * 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 LedgerEntry and related fields $entry = $this->LedgerEntry->find ('first', array('contain' => array('MonetarySource.id', 'MonetarySource.name', 'MonetarySource.MonetaryType.id', 'Transaction.id', 'Transaction.stamp', 'DebitLedger.id', 'DebitLedger.sequence', 'DebitLedger.account_id', 'CreditLedger.id', 'CreditLedger.sequence', 'CreditLedger.account_id', 'Customer.id', 'Customer.name', 'Lease.id', ), 'fields' => array('LedgerEntry.*'), 'conditions' => array('LedgerEntry.id' => $id), )); //pr($entry); // Because 'DebitLedger' and 'CreditLedger' both relate to 'Account', // CakePHP will not include them in the LedgerEntry->find (or so it // seems). We'll have to break out each Account separately. // Get the Account from DebitLedger $entry['DebitLedger'] += $this->LedgerEntry->DebitLedger->Account->find ('first', array('contain' => true, 'fields' => array('Account.id', 'Account.name', 'Account.type', 'Account.trackable'), 'conditions' => array('Account.id' => $entry['DebitLedger']['account_id']), )); // Get the Account from CreditLedger $entry['CreditLedger'] += $this->LedgerEntry->CreditLedger->Account->find ('first', array('contain' => true, 'fields' => array('Account.id', 'Account.name', 'Account.type', 'Account.trackable'), 'conditions' => array('Account.id' => $entry['CreditLedger']['account_id']), )); // Get the reconciliation balances for this ledger entry $stats = $this->LedgerEntry->stats($id); if ($entry['DebitLedger']['Account']['trackable']) $stats['debit_amount_remaining'] = $entry['LedgerEntry']['amount'] - $stats['debit_amount_reconciled']; if ($entry['CreditLedger']['Account']['trackable']) $stats['credit_amount_remaining'] = $entry['LedgerEntry']['amount'] - $stats['credit_amount_reconciled']; //pr($stats); $reconciled = $this->LedgerEntry->findReconciledLedgerEntries($id); //pr($reconciled); // Prepare to render. $title = "Ledger Entry #{$entry['LedgerEntry']['id']}"; $this->set(compact('entry', 'title', 'reconciled', 'stats')); } }