From 009ea6b44dea8a32986a5ed42955316192c114c8 Mon Sep 17 00:00:00 2001 From: abijah Date: Tue, 23 Jun 2009 19:04:41 +0000 Subject: [PATCH] Nowhere near done yet, but checking in a snapshot of semi-working code. There is some simultaneous support for both with and without use of the Invoice/Receipt account. I want to do away with them completely, but will need to change how sitelink payments are mapped (right now, they split a payment into multiple parts to match the charge). git-svn-id: file:///svn-source/pmgr/branches/single_AR_20090622/site@181 97e9348a-65ac-dc4b-aefc-98561f571b83 --- app_controller.php | 6 ++ controllers/leases_controller.php | 12 +-- controllers/ledger_entries_controller.php | 79 +++++++++++++++-- controllers/units_controller.php | 4 +- models/account.php | 59 +++++-------- models/customer.php | 101 +++++----------------- models/lease.php | 44 +++++----- models/ledger.php | 6 +- models/ledger_entry.php | 2 + views/customers/view.ctp | 7 +- views/elements/jqGrid.ctp | 8 +- views/elements/ledger_entries.ctp | 16 ++-- views/leases/view.ctp | 15 ++-- views/ledger_entries/view.ctp | 14 ++- views/transactions/view.ctp | 3 +- views/units/view.ctp | 17 ++-- 16 files changed, 200 insertions(+), 193 deletions(-) diff --git a/app_controller.php b/app_controller.php index f203193..b0b0bca 100644 --- a/app_controller.php +++ b/app_controller.php @@ -305,7 +305,13 @@ class AppController extends Controller { $id = 'id'; extract(array_intersect_key($fields, array_flip($special))); foreach ($records AS &$record) { + if (!isset($record[$table])) + continue; + foreach (array_diff_key($fields, array_flip($special)) AS $field) { + if (!isset($record[$table][$id]) || !isset($record[$table][$field])) + continue; + // DEBUG PURPOSES ONLY! //$params['linkrecord'][] = compact('table', 'field', 'id', 'controller', 'record'); $record[$table][$field] = diff --git a/controllers/leases_controller.php b/controllers/leases_controller.php index 3957c69..b0942b3 100644 --- a/controllers/leases_controller.php +++ b/controllers/leases_controller.php @@ -71,6 +71,7 @@ class LeasesController extends AppController { function jqGridRecordLinks(&$params, &$model, &$records, $links) { $links['Lease'] = array('number'); $links['Unit'] = array('name'); + $links['Customer'] = array('name'); return parent::jqGridRecordLinks($params, $model, $records, $links); } @@ -107,7 +108,6 @@ class LeasesController extends AppController { array(// Models 'LeaseType', 'Unit', - 'Account' => array('CurrentLedger'), 'Customer', ), 'conditions' => array(array('Lease.id' => $id)), @@ -115,23 +115,15 @@ class LeasesController extends AppController { ) ); - // Summarize each ledger - $this->Lease->statsMerge($lease, - $this->Lease->stats($lease['Lease']['id'])); - // Obtain the overall lease balance $this->Lease->statsMerge($lease['Lease'], array('stats' => $this->Lease->stats($id))); - $outstanding_balance = $lease['Lease']['stats']['Account']['Ledger']['balance']; + $outstanding_balance = $lease['Lease']['stats']['balance']; // Determine the lease security deposit $deposits = $this->Lease->findSecurityDeposits($lease['Lease']['id']); $outstanding_deposit = $deposits['summary']['balance']; - // Move the Leder stats into our alias 'CurrentLedger' - $lease['Account']['CurrentLedger'] += $lease['Account']['Ledger']; - unset($lease['Account']['Ledger']); - // Prepare to render $title = 'Lease: #' . $lease['Lease']['id']; $this->set(compact('lease', 'title', diff --git a/controllers/ledger_entries_controller.php b/controllers/ledger_entries_controller.php index 6b0100a..5fbce32 100644 --- a/controllers/ledger_entries_controller.php +++ b/controllers/ledger_entries_controller.php @@ -36,6 +36,16 @@ class LedgerEntriesController extends AppController { 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'])) { @@ -118,20 +128,64 @@ class LedgerEntriesController extends AppController { $conditions[] = array('Reconciliation.'.$ftype.'_ledger_entry_id' => $params['custom']['reconcile_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'); - if (isset($params['custom']['account_ftype']) || isset($params['custom']['ledger_id'])) { - $links['Account'] = array('controller' => 'accounts', 'name'); - } - else { - $links['DebitAccount'] = array('controller' => 'accounts', 'name'); - $links['CreditAccount'] = array('controller' => 'accounts', 'name'); - } + $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); } @@ -145,8 +199,13 @@ class LedgerEntriesController extends AppController { function jqGridDataOrder(&$params, &$model, $index, $direction) { /* if ($index === 'balance') */ /* return ($index .' '. $direction); */ + $order = parent::jqGridDataOrder($params, $model, $index, $direction); - return parent::jqGridDataOrder($params, $model, $index, $direction); + if ($index === 'Transaction.stamp') { + $order[] = 'LedgerEntry.id ' . $direction; + } + + return $order; } @@ -167,6 +226,7 @@ class LedgerEntriesController extends AppController { $entry = $this->LedgerEntry->find ('first', array('contain' => array('MonetarySource.id', + 'MonetarySource.name', 'MonetarySource.MonetaryType.id', 'Transaction.id', 'Transaction.stamp', @@ -176,6 +236,9 @@ class LedgerEntriesController extends AppController { 'CreditLedger.id', 'CreditLedger.sequence', 'CreditLedger.account_id', + 'Customer.id', + 'Customer.name', + 'Lease.id', ), 'fields' => array('LedgerEntry.id', diff --git a/controllers/units_controller.php b/controllers/units_controller.php index 5163f19..ee409bb 100644 --- a/controllers/units_controller.php +++ b/controllers/units_controller.php @@ -121,7 +121,7 @@ class UnitsController extends AppController { // Get the balance on each lease. foreach ($unit['Lease'] AS &$lease) { $stats = $this->Unit->Lease->stats($lease['id']); - $lease['balance'] = $stats['Account']['Ledger']['balance']; + $lease['balance'] = $stats['balance']; } $outstanding_balance = 0; @@ -130,7 +130,7 @@ class UnitsController extends AppController { // Figure out the outstanding balance of the current lease. $stats = $this->Unit->stats($id); $outstanding_balance = - $stats['CurrentLease']['Account']['Ledger']['balance']; + $stats['CurrentLease']['balance']; // Figure out the total security deposit for the current lease. $deposits = $this->Unit->Lease->findSecurityDeposits($unit['CurrentLease']['id']); diff --git a/models/account.php b/models/account.php index 71df3f2..bded9e5 100644 --- a/models/account.php +++ b/models/account.php @@ -82,37 +82,26 @@ class Account extends AppModel { /************************************************************************** ************************************************************************** ************************************************************************** - * function: securityDepositAccountID - * - Returns the ID of the Security Deposit Account + * function: accountNameToID + * - Returns the ID of the named account */ - function securityDepositAccountID() { + function accountNameToID($name) { $this->cacheQueries = true; $account = $this->find('first', array ('recursive' => -1, - 'conditions' => array - (array('name' => 'Security Deposit')), + 'conditions' => compact('name'), )); $this->cacheQueries = false; return $account['Account']['id']; } - - /************************************************************************** - ************************************************************************** - ************************************************************************** - * function:rentAccountID - * - Returns the ID of the Rent Account - */ - function rentAccountID() { - $this->cacheQueries = true; - $account = $this->find('first', array - ('recursive' => -1, - 'conditions' => array - (array('name' => 'Rent')), - )); - $this->cacheQueries = false; - return $account['Account']['id']; - } + function securityDepositAccountID() { return $this->accountNameToID('Security Deposit'); } + function rentAccountID() { return $this->accountNameToID('Rent'); } + function accountReceivableAccountID() { return $this->accountNameToID('A/R'); } + function invoiceAccountID() { return $this->accountReceivableAccountID(); } + function receiptAccountID() { return $this->accountReceivableAccountID(); } + //function invoiceAccountID() { return $this->accountNameToID('Invoice'); } + //function receiptAccountID() { return $this->accountNameToID('Receipt'); } /************************************************************************** @@ -122,22 +111,19 @@ class Account extends AppModel { * - Returns an array of ledger ids from the given account */ function ledgers($id, $all = false) { - $cachekey = $all ? 'all' : 'current'; - if (isset($this->cache[$id]['ledgers'][$cachekey])) { - return $this->cache[$id]['ledgers'][$cachekey]; - } - if ($all) { $contain = array('Ledger' => array('fields' => array('Ledger.id'))); } else { $contain = array('CurrentLedger' => array('fields' => array('CurrentLedger.id'))); } + $this->cacheQueries = true; $account = $this->find('first', array ('contain' => $contain, 'fields' => array(), 'conditions' => array(array('Account.id' => $id)), )); + $this->cacheQueries = false; if ($all) { $ledger_ids = array(); @@ -148,14 +134,11 @@ class Account extends AppModel { $ledger_ids = array($account['CurrentLedger']['id']); } - // Save the ledgers in our cache for future reference - $this->cache[$id]['ledgers'][$cachekey] = $ledger_ids; - /* pr(array('function' => 'Account::ledgers', */ /* 'args' => compact('id', 'all'), */ -/* 'return' => $this->cache[$id]['ledgers'][$cachekey])); */ +/* 'return' => $ledger_ids)); */ - return $this->cache[$id]['ledgers'][$cachekey]; + return $ledger_ids; } @@ -234,7 +217,11 @@ class Account extends AppModel { * (such as charges not paid). */ - function findUnreconciledLedgerEntries($id = null, $fundamental_type = null) { + function findUnreconciledLedgerEntries($id = null, $fundamental_type = null, $cond = null) { + if (!isset($cond)) + $cond = array(); + $cond[] = array('Account.id' => $id); + foreach (($fundamental_type ? array($fundamental_type) : array('debit', 'credit')) AS $fund) { @@ -260,7 +247,7 @@ class Account extends AppModel { 'group' => ("LedgerEntry.id" . " HAVING LedgerEntry.amount" . " <> COALESCE(SUM(Reconciliation.amount),0)"), - 'conditions' => array('Account.id' => $id), + 'conditions' => $cond, 'fields' => array(), )); $balance = 0; @@ -290,7 +277,7 @@ class Account extends AppModel { * whatever algorithm is simplest. */ - function reconcileNewLedgerEntry($id, $fundamental_type, $amount) { + function reconcileNewLedgerEntry($id, $fundamental_type, $amount, $cond = null) { $ofund = $this->fundamentalOpposite($fundamental_type); $unreconciled = array($ofund => array('entry'=>array(), 'balance'=>0)); $applied = 0; @@ -298,7 +285,7 @@ class Account extends AppModel { // if there is no money in the entry, it can reconcile nothing // don't bother wasting time sifting ledger entries. if ($amount > 0) { - $unreconciled = $this->findUnreconciledLedgerEntries($id, $ofund); + $unreconciled = $this->findUnreconciledLedgerEntries($id, $ofund, $cond); foreach ($unreconciled[$ofund]['entry'] AS $i => &$entry) { // Determine if amount is sufficient to cover the entry diff --git a/models/customer.php b/models/customer.php index 4064fe0..b78deab 100644 --- a/models/customer.php +++ b/models/customer.php @@ -8,7 +8,6 @@ class Customer extends AppModel { ); var $belongsTo = array( - 'Account', 'PrimaryContact' => array( 'className' => 'Contact', ), @@ -20,11 +19,19 @@ class Customer extends AppModel { 'conditions' => 'CurrentLease.close_date IS NULL', ), 'Lease', - 'Transaction', + 'LedgerEntry', + + // Cheat to get Account set as part of this class + 'Account', ); var $hasAndBelongsToMany = array( 'Contact', + 'Transaction' => array( + 'joinTable' => 'ledger_entries', + 'foreignKey' => 'customer_id', + 'associationForeignKey' => 'transaction_id', + ), ); @@ -80,16 +87,9 @@ class Customer extends AppModel { /* )); */ $entries = $this->Account->findLedgerEntriesRelatedToAccount - ($this->accountId($id), + ($this->Account->invoiceAccountID(), $this->Account->securityDepositAccountID(), - true, null, $link); - - foreach ($this->leaseIds($id) AS $lease_id) { - $ledger_entries = $this->Lease->findSecurityDeposits($lease_id, $link); - $this->statsMerge($entries['summary'], $ledger_entries['summary']); - $entries['Entries'] = array_merge($entries['Entries'], - $ledger_entries['Entries']); - } + true, array('LedgerEntry.customer_id' => $id), $link); /* pr(array('function' => 'Customer::findSecurityDeposits', */ /* 'args' => compact('id', 'link'), */ @@ -110,22 +110,10 @@ class Customer extends AppModel { */ function findUnreconciledLedgerEntries($id = null, $fundamental_type = null) { - $unreconciled = $this->Account->findUnreconciledLedgerEntries - ($this->accountId($id), $fundamental_type); - - foreach ($this->leaseIds($id) AS $lease_id) { - $unrec = $this->Lease->findUnreconciledLedgerEntries($lease_id, - $fundamental_type); - - foreach (array_keys($unreconciled) AS $type) { - $left = &$unreconciled[$type]; - $right = &$unrec[$type]; - - $left['entry'] = array_merge($left['entry'], $right['entry']); - $left['balance'] += $right['balance']; - } - } + ($this->Account->accountReceivableAccountID(), + $fundamental_type, + array('LedgerEntry.customer_id' => $id)); return $unreconciled; } @@ -146,25 +134,11 @@ class Customer extends AppModel { */ function reconcileNewLedgerEntry($id, $fundamental_type, $amount) { - $reconciled = $this->Account->reconcileNewLedgerEntry - ($this->accountId($id), $fundamental_type, $amount); - - foreach ($this->leaseIds($id) AS $lease_id) { - foreach (array_keys($reconciled) AS $type) { - $rec = $this->Lease->reconcileNewLedgerEntry($lease_id, - $fundamental_type, - $reconciled[$type]['unapplied']); - - $left = &$reconciled[$type]; - $right = &$rec[$type]; - - $left['entry'] = array_merge($left['entry'], $right['entry']); - $left['balance'] += $right['balance']; - $left['applied'] += $right['applied']; - $left['unapplied'] = $right['unapplied']; - } - } + ($this->Account->accountReceivableAccountID(), + $fundamental_type, + $amount, + array('LedgerEntry.customer_id' => $id)); return $reconciled; } @@ -189,7 +163,6 @@ class Customer extends AppModel { 'ContactEmail', 'ContactAddress', ), - 'Account', 'Lease' => array('Unit' => array('order' => array('sort_order'), @@ -201,22 +174,12 @@ class Customer extends AppModel { 'conditions' => array('Customer.id' => $id), )); - // Add the lease balance to each lease. - foreach ($customer['Lease'] AS &$lease) { - $stats = $this->Lease->stats($lease['id']); - $lease['balance'] = $stats['Account']['Ledger']['balance']; - } - - // Figure out the outstanding balance of the current lease. + // Figure out the outstanding balance for this customer $customer['stats'] = $this->stats($id); // Figure out the total security deposit for the current lease. $customer['deposits'] = $this->findSecurityDeposits($id); - // Add statistics into the customer account. - $customer['Account'] = array_merge($customer['Account'], - $customer['stats']['Account']['Ledger']); - return $customer; } @@ -232,29 +195,11 @@ class Customer extends AppModel { if (!$id) return null; - // Get the basic information necessary - $customer = $this->find('first', - array('contain' => - array('Account' => array - ('fields' => array('Account.id')), - - 'Lease' => array - ('fields' => array('Lease.id')) - ), - 'conditions' => array - (array('Customer.id' => $id)))); - - // Get stats from the customer account, and each lease - $stats['Account'] = $this->Account->stats($customer['Account']['id']); - foreach ($customer['Lease'] AS $lease) { - $this->statsMerge($stats['Lease'], $this->Lease->stats($lease['id'])); - } - - // Merge the stats from both the customer specific account, as - // well as the leases. This will provide current customer standing. - $this->statsMerge($stats, $stats['Account']['Ledger']); - $this->statsMerge($stats, $stats['Lease']['Account']['Ledger']); + $stats = $this->Account->stats($this->Account->accountReceivableAccountID(), true, + array('LedgerEntry.customer_id' => $id)); + // Pull to the top level and return + $stats = $stats['Ledger']; return $stats; } diff --git a/models/lease.php b/models/lease.php index 13873e5..66d2a47 100644 --- a/models/lease.php +++ b/models/lease.php @@ -25,11 +25,18 @@ class Lease extends AppModel { var $belongsTo = array( 'LeaseType', 'Unit', - 'Account', 'Customer', 'LateSchedule', ); + var $hasMany = array( + 'LedgerEntry', + + // Cheat to get Account set as part of this class + 'Account', + ); + + /************************************************************************** ************************************************************************** ************************************************************************** @@ -37,15 +44,7 @@ class Lease extends AppModel { * - Returns the accountId of the given lease */ function accountId($id) { - $this->cacheQueries = true; - $lease = $this->find('first', array - ('recursive' => -1, - 'fields' => array('account_id'), - 'conditions' => array(array('id' => $id)), - )); - $this->cacheQueries = false; - - return $lease['Lease']['account_id']; + return $this->Account->invoiceAccountID(); } @@ -61,6 +60,10 @@ class Lease extends AppModel { /* 'args' => compact('id', 'all', 'cond', 'link'), */ /* )); */ + if (!isset($cond)) + $cond = array(); + $cond[] = array('LedgerEntry.lease_id' => $id); + $entries = $this->Account->findLedgerEntries($this->accountId($id), $all, $cond, $link); @@ -87,7 +90,7 @@ class Lease extends AppModel { $entries = $this->Account->findLedgerEntriesRelatedToAccount ($this->accountId($id), $this->Account->securityDepositAccountID(), - true, null, $link); + true, array('LedgerEntry.lease_id' => $id), $link); /* pr(array('function' => 'Lease::findSecurityDeposits', */ /* 'args' => compact('id', 'link'), */ @@ -108,7 +111,7 @@ class Lease extends AppModel { function findUnreconciledLedgerEntries($id = null, $fundamental_type = null) { return $this->Account->findUnreconciledLedgerEntries - ($this->accountId($id), $fundamental_type); + ($this->accountId($id), $fundamental_type, array('LedgerEntry.lease_id' => $id)); } @@ -128,7 +131,7 @@ class Lease extends AppModel { function reconcileNewLedgerEntry($id, $fundamental_type, $amount) { return $this->Account->reconcileNewLedgerEntry - ($this->accountId($id), $fundamental_type, $amount); + ($this->accountId($id), $fundamental_type, $amount, array('LedgerEntry.lease_id' => $id)); } @@ -143,18 +146,11 @@ class Lease extends AppModel { if (!$id) return null; - // Find the associated account. - $lease = $this->find('first', - array('recursive' => -1, - 'conditions' => array(array('Lease.id' => $id)))); - - // Pull the stats from the account. - $stats['Account'] = $this->Account->stats($lease['Lease']['account_id']); - - // Place a summary of the stats (one lease account in this case) - // at the top level for easy summarized access. - $this->statsMerge($stats, $stats['Account']['Ledger']); + $stats = $this->Account->stats($this->Account->accountReceivableAccountID(), true, + array('LedgerEntry.lease_id' => $id)); + // Pull to the top level and return + $stats = $stats['Ledger']; return $stats; } diff --git a/models/ledger.php b/models/ledger.php index 25f8f33..aa10e76 100644 --- a/models/ledger.php +++ b/models/ledger.php @@ -115,6 +115,9 @@ class Ledger extends AppModel { * - Returns summary data from the requested ledger. */ function stats($id, $cond = null) { + if (!isset($cond)) + $cond = array(); + $cond[] = array('Ledger.id' => $id); $stats = $this->find ('first', array @@ -138,8 +141,7 @@ class Ledger extends AppModel { ) * IF(LedgerEntry.amount, LedgerEntry.amount, 0) ) AS balance", "COUNT(LedgerEntry.id) AS entries"), - 'conditions' => array(isset($cond) ? $cond : array(), - array('Ledger.id' => $id)), + 'conditions' => $cond, 'group' => 'Ledger.id', )); diff --git a/models/ledger_entry.php b/models/ledger_entry.php index e0ea6a9..6831545 100644 --- a/models/ledger_entry.php +++ b/models/ledger_entry.php @@ -11,6 +11,8 @@ class LedgerEntry extends AppModel { var $belongsTo = array( 'MonetarySource', 'Transaction', + 'Customer', + 'Lease', 'DebitLedger' => array( 'className' => 'Ledger', diff --git a/views/customers/view.ctp b/views/customers/view.ctp index af239b2..fbf4b4a 100644 --- a/views/customers/view.ctp +++ b/views/customers/view.ctp @@ -63,12 +63,13 @@ echo $this->element('leases', /********************************************************************** - * Account + * Customer Account History */ -echo $this->element('accounts', +echo $this->element('ledger_entries', array('caption' => 'Account', - 'accounts' => array($customer['Account']))); + 'customer_id' => $customer['Customer']['id'], + )); /* End "detail supporting" div */ diff --git a/views/elements/jqGrid.ctp b/views/elements/jqGrid.ctp index 1b4ae4b..be6dbde 100644 --- a/views/elements/jqGrid.ctp +++ b/views/elements/jqGrid.ctp @@ -143,8 +143,12 @@ foreach ($jqGridColumns AS &$col) { } // Set the default sort column -reset($jqGridColumns); -$sortname = current($jqGridColumns); +if (isset($sort_column)) { + $sortname = $jqGridColumns[$sort_column]; +} else { + reset($jqGridColumns); + $sortname = current($jqGridColumns); +} $sortname = $sortname['index']; // Configure the grid setup, giving priority to user defined parameters diff --git a/views/elements/ledger_entries.ctp b/views/elements/ledger_entries.ctp index 3755a78..b4602c2 100644 --- a/views/elements/ledger_entries.ctp +++ b/views/elements/ledger_entries.ctp @@ -21,6 +21,9 @@ else { $cols['Debit Account'] = array('index' => 'DebitAccount.name', 'formatter' => 'longname'); $cols['Credit Account'] = array('index' => 'CreditAccount.name', 'formatter' => 'longname'); } +$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'name'); +$cols['Lease'] = array('index' => 'Lease.number', 'formatter' => 'id'); +$cols['Unit'] = array('index' => 'Unit.name', 'formatter' => 'name'); $cols['Source'] = array('index' => 'MonetarySource.name', 'formatter' => 'name'); $cols['Comment'] = array('index' => 'LedgerEntry.comment', 'formatter' => 'comment', 'width'=>150); if (isset($ledger_id)) { @@ -34,7 +37,8 @@ if (isset($reconcile_id)) { $cols['Applied'] = array('index' => "Reconciliation.amount", 'formatter' => 'currency'); } -$custom_post_data = compact('ledger_id', 'account_type', 'account_ftype', 'notxgroup'); +$custom_post_data = compact('ledger_id', 'account_type', 'account_ftype', + 'customer_id', 'lease_id', 'transaction_id', 'notxgroup'); $jqGrid_options = array('jqGridColumns' => $cols, 'controller' => 'ledger_entries', @@ -42,11 +46,6 @@ $jqGrid_options = array('jqGridColumns' => $cols, $jqGrid_options += compact('grid_div_id', 'grid_id', 'caption', 'grid_setup', 'limit'); -if (isset($ledger_id)) { - $jqGrid_options += array('action' => 'ledger', - 'limit' => 50); -} - if (isset($ledger_entries)) { $jqGrid_options += array('custom_ids' => array_map(create_function('$data', @@ -54,6 +53,10 @@ if (isset($ledger_entries)) { $ledger_entries), 'limit' => 10); } +else { + $jqGrid_options += array('action' => 'ledger', + 'limit' => 50); +} if (isset($reconcile_id)) { $custom_post_data += compact('reconcile_id'); @@ -61,5 +64,6 @@ if (isset($reconcile_id)) { } $jqGrid_options += compact('custom_post_data'); +$jqGrid_options['sort_column'] = 'Date'; echo $this->element('jqGrid', $jqGrid_options); diff --git a/views/leases/view.ctp b/views/leases/view.ctp index 8ee77e9..f18e798 100644 --- a/views/leases/view.ctp +++ b/views/leases/view.ctp @@ -11,7 +11,6 @@ echo '
' . "\n"; $lease_type = $lease['LeaseType']; $customer = $lease['Customer']; -$account = $lease['Account']; $unit = $lease['Unit']; if (isset($lease['Lease'])) @@ -36,10 +35,6 @@ $rows = array(array('ID', $lease['id']), array('Notice Given', FormatHelper::date($lease['notice_given_date'], true)), array('Notice Received', FormatHelper::date($lease['notice_received_date'], true)), array('Closed', FormatHelper::date($lease['close_date'], true)), - array('Account', $html->link($account['name'], - array('controller' => 'accounts', - 'action' => 'view', - $account['id']))), array('Deposit', FormatHelper::currency($lease['deposit'])), array('Rent', FormatHelper::currency($lease['amount'])), array('Comment', $lease['comment'])); @@ -53,7 +48,7 @@ echo $this->element('table', /********************************************************************** - * Account Info Box + * Lease Info Box */ echo '
' . "\n"; @@ -80,15 +75,15 @@ echo '
' . "\n"; /********************************************************************** - * Current Ledger + * Lease Account History */ echo $this->element('ledger_entries', - array('caption' => "Current Ledger: (#{$account['id']}-{$account['CurrentLedger']['sequence']})", - 'ledger_id' => $account['CurrentLedger']['id'], - 'account_type' => $account['type'], + array('caption' => 'Account', + 'lease_id' => $lease['id'], )); + /* End "detail supporting" div */ echo '
' . "\n"; diff --git a/views/ledger_entries/view.ctp b/views/ledger_entries/view.ctp index 51a6cec..384d14e 100644 --- a/views/ledger_entries/view.ctp +++ b/views/ledger_entries/view.ctp @@ -13,6 +13,8 @@ $transaction = $entry['Transaction']; $debit_ledger = $entry['DebitLedger']; $credit_ledger = $entry['CreditLedger']; $source = $entry['MonetarySource']; +$customer = $entry['Customer']; +$lease = $entry['Lease']; $entry = $entry['LedgerEntry']; $rows = array(array('ID', $entry['id']), @@ -21,8 +23,16 @@ $rows = array(array('ID', $entry['id']), 'action' => 'view', $transaction['id']))), array('Timestamp', FormatHelper::datetime($transaction['stamp'])), - array('Monetary Source', (isset($source['id']) - ? $html->link('#'.$source['id'], + array('Customer', $html->link($customer['name'], + array('controller' => 'customers', + 'action' => 'view', + $customer['id']))), + array('Lease', $html->link('#'.$lease['id'], + array('controller' => 'leases', + 'action' => 'view', + $lease['id']))), + array('Monetary Source', (isset($source['name']) + ? $html->link($source['name'], array('controller' => 'monetary_sources', 'action' => 'view', $source['id'])) diff --git a/views/transactions/view.ctp b/views/transactions/view.ctp index c51871e..2e02e60 100644 --- a/views/transactions/view.ctp +++ b/views/transactions/view.ctp @@ -54,7 +54,8 @@ echo '
' . "\n"; echo $this->element('ledger_entries', array('caption' => 'Entries in Transaction', - 'ledger_entries' => $transaction['LedgerEntry'], + //'ledger_entries' => $transaction['LedgerEntry'], + 'transaction_id' => $transaction['Transaction']['id'], 'notxgroup' => true, )); diff --git a/views/units/view.ctp b/views/units/view.ctp index 9ea350f..a417554 100644 --- a/views/units/view.ctp +++ b/views/units/view.ctp @@ -57,16 +57,15 @@ echo $this->element('leases', /********************************************************************** - * Ledger History + * Current Tenant Lease Account History */ -/* foreach($unit['Lease'] AS $lease) { */ -/* pr($lease); */ -/* $caption = 'Lease #'.$lease['number'].' (Tenant: '.$lease['Customer']['name'].')'; */ -/* echo $this->element('lease', */ -/* array('caption' => $caption, */ -/* 'entries' => $lease['Customer']['Transaction'], */ -/* 'ledger' => array('mix'=>1))); */ -/* } */ + +echo $this->element('ledger_entries', + array('caption' => ('Current Lease Account (' . + $unit['CurrentLease']['Customer']['name'] + . ')'), + 'lease_id' => $unit['CurrentLease']['id'], + )); /* End "detail supporting" div */