' . "\n"; /********************************************************************** ********************************************************************** ********************************************************************** ********************************************************************** * LedgerEntry Detail Main Section */ $transaction = $entry['Transaction']; $debit_ledger = $entry['DebitLedger']; $credit_ledger = $entry['CreditLedger']; $ledgers['debit'] = $entry['DebitLedger']; $ledgers['credit'] = $entry['CreditLedger']; $source = $entry['MonetarySource']; $customer = $entry['Customer']; $lease = $entry['Lease']; $entry = $entry['LedgerEntry']; $rows = array(); $rows[] = array('ID', $entry['id']); $rows[] = array('Transaction', $html->link('#'.$transaction['id'], array('controller' => 'transactions', 'action' => 'view', $transaction['id']))); $rows[] = array('Timestamp', FormatHelper::datetime($transaction['stamp'])); $rows[] = array('Effective', FormatHelper::date($entry['effective_date'])); $rows[] = array('Through', FormatHelper::date($entry['through_date'])); $rows[] = array('Customer', (isset($customer['name']) ? $html->link($customer['name'], array('controller' => 'customers', 'action' => 'view', $customer['id'])) : null)); $rows[] = array('Lease', (isset($lease['id']) ? $html->link('#'.$lease['id'], array('controller' => 'leases', 'action' => 'view', $lease['id'])) : null)); $rows[] = array('Monetary Source', (isset($source['name']) ? $html->link($source['name'], array('controller' => 'monetary_sources', 'action' => 'view', $source['id'])) : null)); $rows[] = array('Amount', FormatHelper::currency($entry['amount'])); foreach ($ledgers AS $type => $ledger) $rows[] = array(ucfirst($type), ($html->link($ledger['Account']['name'], array('controller' => 'accounts', 'action' => 'view', $ledger['Account']['id'])) . ' (' . $html->link('#' . $ledger['Account']['id'] . '-' . $ledger['sequence'], array('controller' => 'ledgers', 'action' => 'view', $ledger['id'])) . ')')); $rows[] = array('Comment', $entry['comment']); echo $this->element('table', array('class' => 'item ledger-entry detail', 'caption' => 'Ledger Entry Detail', 'rows' => $rows, 'column_class' => array('field', 'value'))); /********************************************************************** * LedgerEntry Info Box */ echo '
' . "\n"; $rows = array(); foreach ($ledgers AS $type => $ledger) { pr($ledger); if (!$ledger['Account']['trackable']) continue; // The two accounts, debit and credit, are actually individual // entries in each of those account (each make up one of the two // entries required for "double entry"). This, when we provide // reconcile information, we're really providing reconcile info // for two independent accounts. The reconciling entries, // therefore, are those on the opposite side of the ledger in // each account. For example, assume this "double" entry is // // debit: A/R credit: Cash amount: 55 // // Then, our accounts might look like: // // RENT TAX A/R CASH BANK // ------- ------- ------- ------- ------- // |20 | 20| | | <-- Unrelated // | | |20 20| | <-- Unrelated // | | | | | // |50 | 50| | | <-- Rent paid by this entry // | |5 5| | | <-- Tax paid by this entry // | | |55 55| | <-- THIS ENTRY // | | | | | // | | | |75 75| <-- Deposit includes this entry // | | | | | // // In this case, we're looking to provide reconcile information // of A/R for (the credit side of) this entry, and also of Cash // (for the debit side). Taking the accounts as individual // entries, instead of the "double entry" representation in the // database, we're actually providing information on the two // A/R entries, 50 & 5, which are both debits, i.e. opposite // entries to the credit of A/R. The cash account entry // reconciles against the credit of 75. Again, this is the // opposite entry to the debit of Cash. // // Thus, for our debit_ledger_id, we're reconciling against // credits, and for our credit_ledger_id, against debits. // Since we're looking at items opposite to $type (see above), // our verbage needs to reflect those entry types. $verb = ($ledger['Account']['ftype'] == $type) ? 'REDUCTION' : 'INCREASE'; $rows[] = array("Applied $verb {$ledger['Account']['name']}:", FormatHelper::currency($stats[$type]['amount_reconciled'])); $rows[] = array("{$debit_ledger['Account']['name']} Amount Remaining:", FormatHelper::currency($stats[$type]['amount_remaining'])); } echo $this->element('table', array('class' => 'summary', 'rows' => $rows, 'column_class' => array('field', 'value'), 'suppress_alternate_rows' => true, )); echo '
' . "\n"; /********************************************************************** ********************************************************************** ********************************************************************** ********************************************************************** * Supporting Elements Section */ echo '
' . "\n"; /********************************************************************** * Reconciliation Ledger Entries */ foreach ($ledgers AS $type => $ledger) { if (!$ledger['Account']['trackable']) continue; //$verb = ($ledger['Account']['ftype'] == $type) ? 'REDUCTION' : 'INCREASE'; $caption = ('Matching ' . (($type == 'credit') ? 'DEBITS' : 'CREDITS') . ' from Account ' . $ledger['Account']['name']); //$caption = ('Reconciled Entries ' . ($ledger['Account']['ftype'] == $type ? 'OUT OF' : 'INTO') . $caption = ('Contribution to entries ' . ($ledger['Account']['ftype'] == $type ? 'OUT OF' : 'INTO') . ' Account ' . $ledger['Account']['name']); echo $this->element('ledger_entries', array (// Element configuration 'account_ftype' => $type, 'reconcile_id' => $entry['id'], // Grid configuration 'config' => array ('caption' => $caption, 'grid_div_id' => $type.'_reconciliation_ledger_entries', ), )); } /* End "detail supporting" div */ echo '
' . "\n"; /* End page div */ echo '' . "\n";