Compare commits

..

9 Commits

Author SHA1 Message Date
abijah 20284046c3 Fixed bug charging customers again when there is not charge through date.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1019 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-11-17 18:20:48 +00:00
abijah 99a98cbc7d Added some minor view tweaks
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1018 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-11-17 18:18:36 +00:00
abijah fc9226594c Added customer link on the receipts page
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1017 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-07 00:14:54 +00:00
abijah 352bdbbf49 Fixed non-backward compatible jqGrid issue caused during upgrade from 3.8.x to 4.0.0 (grid.postext.js module is no longer supported and is now a plugin)
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1016 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-07 00:11:03 +00:00
abijah 11fbdf0701 Upgraded to jqGrid 4.4.0
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1015 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-06 17:57:49 +00:00
abijah 2519f4c8a7 Added support for account name and number on the deposit slips
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1014 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-08-06 17:33:21 +00:00
abijah b6ed57c02c Checking in changes from some time ago, changing the reports screen to give direct Quickbooks invoice and credits info.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1013 97e9348a-65ac-dc4b-aefc-98561f571b83
2012-06-14 01:32:44 +00:00
abijah 4dffa540a0 Fixed a long standing bug preventing proper display of the customer-contact relationship fields.
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1010 97e9348a-65ac-dc4b-aefc-98561f571b83
2011-05-11 19:19:08 +00:00
abijah 3d1c4d2492 Added income / expense reports that produce results suitable for entry into quickbooks as per the current paradigm
git-svn-id: file:///svn-source/pmgr/branches/v0.3_work@1009 97e9348a-65ac-dc4b-aefc-98561f571b83
2011-03-30 16:57:28 +00:00
26 changed files with 2010 additions and 1176 deletions
+16 -4
View File
@@ -278,8 +278,20 @@ class AppController extends Controller {
$this->addSideMenuLink('Unit Summary',
array('controller' => 'units', 'action' => 'overview'), null,
'REPORT');
$this->addSideMenuLink('Monthly Charges',
array('controller' => 'statement_entries', 'action' => 'chargesbymonth'), null,
/* $this->addSideMenuLink('Monthly Income', */
/* array('controller' => 'statement_entries', 'action' => 'incomebymonth'), null, */
/* 'REPORT'); */
/* $this->addSideMenuLink('Monthly Expenses', */
/* array('controller' => 'statement_entries', 'action' => 'expensebymonth'), null, */
/* 'REPORT'); */
$this->addSideMenuLink('Quickbook Invoice',
array('controller' => 'statement_entries', 'action' => 'incomebymonth', 4, 1), null,
'REPORT');
$this->addSideMenuLink('Quickbook Credits',
array('controller' => 'statement_entries', 'action' => 'expensebymonth', 4, 0), null,
'REPORT');
$this->addSideMenuLink('Monthly Net',
array('controller' => 'statement_entries', 'action' => 'netbymonth'), null,
'REPORT');
}
else {
@@ -349,8 +361,8 @@ class AppController extends Controller {
if ($this->dev() && !$this->Option->enabled('dev'))
$this->redirect("/");
if ($this->dev())
Configure::write('debug', 2);
if (!$this->dev())
Configure::write('debug', '0');
$this->addDefaultSideMenuLinks();
//$this->sideMenuEnable('SITE', $this->op_area, false);
+1 -1
View File
@@ -38,7 +38,7 @@
* In production mode, flash messages redirect after a time interval.
* In development mode, you need to click the flash message to continue.
*/
Configure::write('debug', 0);
Configure::write('debug', 2);
/**
* Application wide charset encoding
*/
@@ -260,38 +260,65 @@ class StatementEntriesController extends AppController {
/**************************************************************************
**************************************************************************
**************************************************************************
* action: chargesbymonth
* - Displays charges by month
* action: incexpbymonth
* - Displays income and/or expenses by month
*/
function chargesbymonth($months = 12) {
function incexpbymonth($accts, $security_deposits, $months) {
$datefrom = 'DATE(NOW() - INTERVAL '.($months-1).' MONTH - INTERVAL DAY(NOW())-1 DAY)';
$dateto = 'NOW()';
/* $datefrom = '"2009-01-01"'; */
/* $dateto = '"2012-12-31"'; */
$result = $this->StatementEntry->find
('all',
array('link' => array('Account' => array('fields' => 'name')),
'fields' => array_merge(array('MONTHNAME(effective_date) AS month',
'YEAR(effective_date) AS year'),
$this->StatementEntry->chargeDisbursementFields(true)),
'conditions' => array('Account.type' => 'INCOME',
'effective_date >= DATE(NOW() - INTERVAL '.($months-1).' MONTH - INTERVAL DAY(NOW())-1 DAY)',
'effective_date <= NOW()',
'conditions' => array('Account.type' => $accts,
"effective_date >= $datefrom",
"effective_date <= $dateto",
),
'group' => array('YEAR(effective_date)', 'MONTH(effective_date)', 'Account.id'),
'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.name'),
'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.type',
'IF(Account.id = '.$this->StatementEntry->Account->rentAccountID().', "---", Account.name)'),
));
$overview = array('months' => array(), 'charges' => 0);
foreach ($result AS $row) {
if ($security_deposits) {
$sdresult = $this->StatementEntry->Transaction->LedgerEntry->find
('all',
array('link' => array('Transaction' => array('StatementEntry' => array('fields' => 'effective_date'),
'fields' => array()),
'Account' => array('fields' => 'name')),
'fields' => array_merge(array('MONTHNAME(effective_date) AS month',
'YEAR(effective_date) AS year'),
$this->StatementEntry->Transaction->LedgerEntry->debitCreditFields(true)),
'conditions' => array('LedgerEntry.account_id' => $this->StatementEntry->Account->securityDepositAccountID(),
"effective_date >= $datefrom",
"effective_date <= $dateto",
'StatementEntry.id = (SELECT MIN(id) FROM pmgr_statement_entries WHERE transaction_id = `Transaction`.id)'
),
'group' => array('YEAR(effective_date)', 'MONTH(effective_date)', 'Account.id'),
'order' => array('YEAR(effective_date) DESC', 'MONTH(effective_date) DESC', 'Account.type', 'Account.name'),
));
} else {
$sdresult = array();
}
$overview = array('months' => array(), 'amount' => 0);
foreach (array_merge($result, $sdresult) AS $row) {
$mname = $row[0]['month'] .', '. $row[0]['year'];
if (empty($overview['months'][$mname]))
$overview['months'][$mname] = array('name' => $mname,
'subs' => array(),
'charges' => 0);
'amount' => 0);
$month = &$overview['months'][$mname];
$month['subs'][] = array('name' => $row['Account']['name'],
'charges' => $row[0]['balance']);
'amount' => $row[0]['balance']);
$month['charges'] += $row[0]['balance'];
$overview['charges'] += $row[0]['balance'];
$month['amount'] += $row[0]['balance'];
$overview['amount'] += $row[0]['balance'];
}
// Enable the Reports menu section
@@ -299,8 +326,26 @@ class StatementEntriesController extends AppController {
// Prepare to render.
$this->set('months', $months);
$this->set('title', 'Monthly Charges');
$this->set(compact('overview'));
$this->render('chargesbymonth');
}
function incomebymonth($months = 12, $invoice = false) {
$this->set('title', 'Monthly Gross Income');
$this->set('reptype', 'Gross Income');
$this->incexpbymonth(array('INCOME'), $invoice, $months);
}
function expensebymonth($months = 12) {
$this->set('title', 'Gross Monthly Expenses');
$this->set('reptype', 'Gross Expenses');
$this->incexpbymonth(array('EXPENSE'), false, $months);
}
function netbymonth($months = 12) {
$this->set('title', 'Net Monthly Income');
$this->set('reptype', 'Net Income');
$this->incexpbymonth(array('INCOME', 'EXPENSE'), true, $months);
}
+1 -1
View File
@@ -468,7 +468,7 @@ class TransactionsController extends AppController {
function deposit_slip($id) {
// Find the deposit transaction
$this->Transaction->id = $id;
$deposit = $this->Transaction->find('first', array('contain' => false));
$deposit = $this->Transaction->find('first', array('contain' => array('Account')));
// Get a summary of all forms of tender in the deposit
$tenders = $this->Transaction->find
+2
View File
@@ -347,6 +347,8 @@ class Lease extends AppModel {
$this->pr(17, compact('date', 'charge_through_date')
+ array('date_str' => date('Y-m-d', $date),
'charge_through_date_str' => date('Y-m-d', $charge_through_date)));
if (!$charge_through_date)
return $this->prReturn(null);
if ($charge_through_date >= $date)
return $this->prReturn(null);
@@ -1,471 +1,471 @@
<?php
/* SVN FILE: $Id$ */
/**
* DebugKit DebugToolbar Component
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
class ToolbarComponent extends Object {
/**
* Controller instance reference
*
* @var object
*/
var $controller;
/**
* Components used by DebugToolbar
*
* @var array
*/
var $components = array('RequestHandler');
/**
* The default panels the toolbar uses.
* which panels are used can be configured when attaching the component
*
* @var array
*/
var $_defaultPanels = array('session', 'request', 'sqlLog', 'timer', 'log', 'memory', 'variables');
/**
* Loaded panel objects.
*
* @var array
*/
var $panels = array();
/**
* fallback for javascript settings
*
* @var array
**/
var $_defaultJavascript = array(
'behavior' => '/debug_kit/js/js_debug_toolbar'
);
/**
* javascript files component will be using.
*
* @var array
**/
var $javascript = array();
/**
* initialize
*
* If debug is off the component will be disabled and not do any further time tracking
* or load the toolbar helper.
*
* @return bool
**/
function initialize(&$controller, $settings) {
if (Configure::read('debug') == 0) {
$this->enabled = false;
return false;
}
App::import('Vendor', 'DebugKit.DebugKitDebugger');
DebugKitDebugger::startTimer('componentInit', __('Component initialization and startup', true));
if (!isset($settings['panels'])) {
$settings['panels'] = $this->_defaultPanels;
}
if (isset($settings['javascript'])) {
$settings['javascript'] = $this->_setJavascript($settings['javascript']);
} else {
$settings['javascript'] = $this->_defaultJavascript;
}
$this->_loadPanels($settings['panels']);
unset($settings['panels']);
$this->_set($settings);
$this->controller =& $controller;
return false;
}
/**
* Component Startup
*
* @return bool
**/
function startup(&$controller) {
$currentViewClass = $controller->view;
$this->_makeViewClass($currentViewClass);
$controller->view = 'DebugKit.Debug';
if (!isset($controller->params['url']['ext']) || (isset($controller->params['url']['ext']) && $controller->params['url']['ext'] == 'html')) {
$format = 'Html';
} else {
$format = 'FirePhp';
}
$controller->helpers['DebugKit.Toolbar'] = array('output' => sprintf('DebugKit.%sToolbar', $format));
$panels = array_keys($this->panels);
foreach ($panels as $panelName) {
$this->panels[$panelName]->startup($controller);
}
DebugKitDebugger::stopTimer('componentInit');
DebugKitDebugger::startTimer('controllerAction', __('Controller Action', true));
}
/**
* beforeRender callback
*
* Calls beforeRender on all the panels and set the aggregate to the controller.
*
* @return void
**/
function beforeRender(&$controller) {
DebugKitDebugger::stopTimer('controllerAction');
$vars = array();
$panels = array_keys($this->panels);
foreach ($panels as $panelName) {
$panel =& $this->panels[$panelName];
$vars[$panelName]['content'] = $panel->beforeRender($controller);
$elementName = Inflector::underscore($panelName) . '_panel';
if (isset($panel->elementName)) {
$elementName = $panel->elementName;
}
$vars[$panelName]['elementName'] = $elementName;
$vars[$panelName]['plugin'] = $panel->plugin;
$vars[$panelName]['disableTimer'] = true;
}
$controller->set(array('debugToolbarPanels' => $vars, 'debugToolbarJavascript' => $this->javascript));
DebugKitDebugger::startTimer('controllerRender', __('Render Controller Action', true));
}
/**
* Load Panels used in the debug toolbar
*
* @return void
* @access protected
**/
function _loadPanels($panels) {
foreach ($panels as $panel) {
$className = $panel . 'Panel';
if (!class_exists($className) && !App::import('Vendor', $className)) {
trigger_error(sprintf(__('Could not load DebugToolbar panel %s', true), $panel), E_USER_WARNING);
continue;
}
$panelObj = new $className();
if (is_subclass_of($panelObj, 'DebugPanel') || is_subclass_of($panelObj, 'debugpanel')) {
$this->panels[$panel] =& $panelObj;
}
}
}
/**
* Set the javascript to user scripts.
*
* Set either script key to false to exclude it from the rendered layout.
*
* @param array $scripts Javascript config information
* @return array
* @access protected
**/
function _setJavascript($scripts) {
$behavior = false;
if (!is_array($scripts)) {
$scripts = (array)$scripts;
}
if (isset($scripts[0])) {
$behavior = $scripts[0];
}
if (isset($scripts['behavior'])) {
$behavior = $scripts['behavior'];
}
if (!$behavior) {
return array();
} elseif ($behavior === true) {
$behavior = 'js';
}
if (strpos($behavior, '/') !== 0) {
$behavior .= '_debug_toolbar';
}
$pluginFile = APP . 'plugins' . DS . 'debug_kit' . DS . 'vendors' . DS . 'js' . DS . $behavior . '.js';
if (file_exists($pluginFile)) {
$behavior = '/debug_kit/js/' . $behavior . '.js';
}
return compact('behavior');
}
/**
* Makes the DoppleGangerView class if it doesn't already exist.
* This allows DebugView to be compatible with all view classes.
*
* @param string $baseClassName
* @access protected
* @return void
*/
function _makeViewClass($baseClassName) {
if (!class_exists('DoppelGangerView')) {
App::import('View', $baseClassName);
if (strpos('View', $baseClassName) === false) {
$baseClassName .= 'View';
}
$class = "class DoppelGangerView extends $baseClassName {}";
eval($class);
}
}
}
/**
* Debug Panel
*
* Abstract class for debug panels.
*
* @package cake.debug_kit
*/
class DebugPanel extends Object {
/**
* Defines which plugin this panel is from so the element can be located.
*
* @var string
*/
var $plugin = null;
/**
* startup the panel
*
* Pull information from the controller / request
*
* @param object $controller Controller reference.
* @return void
**/
function startup(&$controller) { }
/**
* Prepare output vars before Controller Rendering.
*
* @param object $controller Controller reference.
* @return void
**/
function beforeRender(&$controller) { }
}
/**
* Variables Panel
*
* Provides debug information on the View variables.
*
* @package cake.debug_kit.panels
**/
class VariablesPanel extends DebugPanel {
var $plugin = 'debug_kit';
}
/**
* Session Panel
*
* Provides debug information on the Session contents.
*
* @package cake.debug_kit.panels
**/
class SessionPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* beforeRender callback
*
* @param object $controller
* @access public
* @return array
*/
function beforeRender(&$controller) {
return $controller->Session->read();
}
}
/**
* Request Panel
*
* Provides debug information on the Current request params.
*
* @package cake.debug_kit.panels
**/
class RequestPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* beforeRender callback - grabs request params
*
* @return array
**/
function beforeRender(&$controller) {
$out = array();
$out['params'] = $controller->params;
if (isset($controller->Cookie)) {
$out['cookie'] = $controller->Cookie->read();
}
$out['get'] = $_GET;
$out['currentRoute'] = Router::currentRoute();
return $out;
}
}
/**
* Timer Panel
*
* Provides debug information on all timers used in a request.
*
* @package cake.debug_kit.panels
**/
class TimerPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* startup - add in necessary helpers
*
* @return void
**/
function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number';
}
}
}
/**
* Memory Panel
*
* Provides debug information on the memory consumption.
*
* @package cake.debug_kit.panels
**/
class MemoryPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* startup - add in necessary helpers
*
* @return void
**/
function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number';
}
}
}
/**
* sqlLog Panel
*
* Provides debug information on the SQL logs and provides links to an ajax explain interface.
*
* @package cake.debug_kit.panels
**/
class sqlLogPanel extends DebugPanel {
var $plugin = 'debug_kit';
var $dbConfigs = array();
/**
* get db configs.
*
* @param string $controller
* @access public
* @return void
*/
function startUp(&$controller) {
if (!class_exists('ConnectionManager')) {
$this->dbConfigs = array();
return false;
}
$this->dbConfigs = ConnectionManager::sourceList();
return true;
}
/**
* Get Sql Logs for each DB config
*
* @param string $controller
* @access public
* @return void
*/
function beforeRender(&$controller) {
$queryLogs = array();
if (!class_exists('ConnectionManager')) {
return array();
}
foreach ($this->dbConfigs as $configName) {
$db =& ConnectionManager::getDataSource($configName);
if ($db->isInterfaceSupported('showLog')) {
ob_start();
$db->showLog();
$queryLogs[$configName] = ob_get_clean();
}
}
return $queryLogs;
}
}
/**
* Log Panel - Reads log entries made this request.
*
* @package cake.debug_kit.panels
*/
class LogPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* Log files to scan
*
* @var array
*/
var $logFiles = array('error.log', 'debug.log');
/**
* startup
*
* @return void
**/
function startup(&$controller) {
if (!class_exists('CakeLog')) {
App::import('Core', 'Log');
}
}
/**
* beforeRender Callback
*
* @return array
**/
function beforeRender(&$controller) {
$this->startTime = DebugKitDebugger::requestStartTime();
$this->currentTime = DebugKitDebugger::requestTime();
$out = array();
foreach ($this->logFiles as $log) {
$file = LOGS . $log;
if (!file_exists($file)) {
continue;
}
$out[$log] = $this->_parseFile($file);
}
return $out;
}
/**
* parse a log file and find the relevant entries
*
* @param string $filename Name of file to read
* @access protected
* @return array
*/
function _parseFile($filename) {
$file = new File($filename);
$contents = $file->read();
$timePattern = '/(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})/';
$chunks = preg_split($timePattern, $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0, $len = count($chunks); $i < $len; $i += 2) {
if (strtotime($chunks[$i]) < $this->startTime) {
unset($chunks[$i], $chunks[$i + 1]);
}
}
return array_values($chunks);
}
}
<?php
/* SVN FILE: $Id$ */
/**
* DebugKit DebugToolbar Component
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
class ToolbarComponent extends Object {
/**
* Controller instance reference
*
* @var object
*/
var $controller;
/**
* Components used by DebugToolbar
*
* @var array
*/
var $components = array('RequestHandler');
/**
* The default panels the toolbar uses.
* which panels are used can be configured when attaching the component
*
* @var array
*/
var $_defaultPanels = array('session', 'request', 'sqlLog', 'timer', 'log', 'memory', 'variables');
/**
* Loaded panel objects.
*
* @var array
*/
var $panels = array();
/**
* fallback for javascript settings
*
* @var array
**/
var $_defaultJavascript = array(
'behavior' => '/debug_kit/js/js_debug_toolbar'
);
/**
* javascript files component will be using.
*
* @var array
**/
var $javascript = array();
/**
* initialize
*
* If debug is off the component will be disabled and not do any further time tracking
* or load the toolbar helper.
*
* @return bool
**/
function initialize(&$controller, $settings) {
if (Configure::read('debug') == 0) {
$this->enabled = false;
return false;
}
App::import('Vendor', 'DebugKit.DebugKitDebugger');
DebugKitDebugger::startTimer('componentInit', __('Component initialization and startup', true));
if (!isset($settings['panels'])) {
$settings['panels'] = $this->_defaultPanels;
}
if (isset($settings['javascript'])) {
$settings['javascript'] = $this->_setJavascript($settings['javascript']);
} else {
$settings['javascript'] = $this->_defaultJavascript;
}
$this->_loadPanels($settings['panels']);
unset($settings['panels']);
$this->_set($settings);
$this->controller =& $controller;
return false;
}
/**
* Component Startup
*
* @return bool
**/
function startup(&$controller) {
$currentViewClass = $controller->view;
$this->_makeViewClass($currentViewClass);
$controller->view = 'DebugKit.Debug';
if (!isset($controller->params['url']['ext']) || (isset($controller->params['url']['ext']) && $controller->params['url']['ext'] == 'html')) {
$format = 'Html';
} else {
$format = 'FirePhp';
}
$controller->helpers['DebugKit.Toolbar'] = array('output' => sprintf('DebugKit.%sToolbar', $format));
$panels = array_keys($this->panels);
foreach ($panels as $panelName) {
$this->panels[$panelName]->startup($controller);
}
DebugKitDebugger::stopTimer('componentInit');
DebugKitDebugger::startTimer('controllerAction', __('Controller Action', true));
}
/**
* beforeRender callback
*
* Calls beforeRender on all the panels and set the aggregate to the controller.
*
* @return void
**/
function beforeRender(&$controller) {
DebugKitDebugger::stopTimer('controllerAction');
$vars = array();
$panels = array_keys($this->panels);
foreach ($panels as $panelName) {
$panel =& $this->panels[$panelName];
$vars[$panelName]['content'] = $panel->beforeRender($controller);
$elementName = Inflector::underscore($panelName) . '_panel';
if (isset($panel->elementName)) {
$elementName = $panel->elementName;
}
$vars[$panelName]['elementName'] = $elementName;
$vars[$panelName]['plugin'] = $panel->plugin;
$vars[$panelName]['disableTimer'] = true;
}
$controller->set(array('debugToolbarPanels' => $vars, 'debugToolbarJavascript' => $this->javascript));
DebugKitDebugger::startTimer('controllerRender', __('Render Controller Action', true));
}
/**
* Load Panels used in the debug toolbar
*
* @return void
* @access protected
**/
function _loadPanels($panels) {
foreach ($panels as $panel) {
$className = $panel . 'Panel';
if (!class_exists($className) && !App::import('Vendor', $className)) {
trigger_error(sprintf(__('Could not load DebugToolbar panel %s', true), $panel), E_USER_WARNING);
continue;
}
$panelObj =& new $className();
if (is_subclass_of($panelObj, 'DebugPanel') || is_subclass_of($panelObj, 'debugpanel')) {
$this->panels[$panel] =& $panelObj;
}
}
}
/**
* Set the javascript to user scripts.
*
* Set either script key to false to exclude it from the rendered layout.
*
* @param array $scripts Javascript config information
* @return array
* @access protected
**/
function _setJavascript($scripts) {
$behavior = false;
if (!is_array($scripts)) {
$scripts = (array)$scripts;
}
if (isset($scripts[0])) {
$behavior = $scripts[0];
}
if (isset($scripts['behavior'])) {
$behavior = $scripts['behavior'];
}
if (!$behavior) {
return array();
} elseif ($behavior === true) {
$behavior = 'js';
}
if (strpos($behavior, '/') !== 0) {
$behavior .= '_debug_toolbar';
}
$pluginFile = APP . 'plugins' . DS . 'debug_kit' . DS . 'vendors' . DS . 'js' . DS . $behavior . '.js';
if (file_exists($pluginFile)) {
$behavior = '/debug_kit/js/' . $behavior . '.js';
}
return compact('behavior');
}
/**
* Makes the DoppleGangerView class if it doesn't already exist.
* This allows DebugView to be compatible with all view classes.
*
* @param string $baseClassName
* @access protected
* @return void
*/
function _makeViewClass($baseClassName) {
if (!class_exists('DoppelGangerView')) {
App::import('View', $baseClassName);
if (strpos('View', $baseClassName) === false) {
$baseClassName .= 'View';
}
$class = "class DoppelGangerView extends $baseClassName {}";
eval($class);
}
}
}
/**
* Debug Panel
*
* Abstract class for debug panels.
*
* @package cake.debug_kit
*/
class DebugPanel extends Object {
/**
* Defines which plugin this panel is from so the element can be located.
*
* @var string
*/
var $plugin = null;
/**
* startup the panel
*
* Pull information from the controller / request
*
* @param object $controller Controller reference.
* @return void
**/
function startup(&$controller) { }
/**
* Prepare output vars before Controller Rendering.
*
* @param object $controller Controller reference.
* @return void
**/
function beforeRender(&$controller) { }
}
/**
* Variables Panel
*
* Provides debug information on the View variables.
*
* @package cake.debug_kit.panels
**/
class VariablesPanel extends DebugPanel {
var $plugin = 'debug_kit';
}
/**
* Session Panel
*
* Provides debug information on the Session contents.
*
* @package cake.debug_kit.panels
**/
class SessionPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* beforeRender callback
*
* @param object $controller
* @access public
* @return array
*/
function beforeRender(&$controller) {
return $controller->Session->read();
}
}
/**
* Request Panel
*
* Provides debug information on the Current request params.
*
* @package cake.debug_kit.panels
**/
class RequestPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* beforeRender callback - grabs request params
*
* @return array
**/
function beforeRender(&$controller) {
$out = array();
$out['params'] = $controller->params;
if (isset($controller->Cookie)) {
$out['cookie'] = $controller->Cookie->read();
}
$out['get'] = $_GET;
$out['currentRoute'] = Router::currentRoute();
return $out;
}
}
/**
* Timer Panel
*
* Provides debug information on all timers used in a request.
*
* @package cake.debug_kit.panels
**/
class TimerPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* startup - add in necessary helpers
*
* @return void
**/
function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number';
}
}
}
/**
* Memory Panel
*
* Provides debug information on the memory consumption.
*
* @package cake.debug_kit.panels
**/
class MemoryPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* startup - add in necessary helpers
*
* @return void
**/
function startup(&$controller) {
if (!in_array('Number', $controller->helpers)) {
$controller->helpers[] = 'Number';
}
}
}
/**
* sqlLog Panel
*
* Provides debug information on the SQL logs and provides links to an ajax explain interface.
*
* @package cake.debug_kit.panels
**/
class sqlLogPanel extends DebugPanel {
var $plugin = 'debug_kit';
var $dbConfigs = array();
/**
* get db configs.
*
* @param string $controller
* @access public
* @return void
*/
function startUp(&$controller) {
if (!class_exists('ConnectionManager')) {
$this->dbConfigs = array();
return false;
}
$this->dbConfigs = ConnectionManager::sourceList();
return true;
}
/**
* Get Sql Logs for each DB config
*
* @param string $controller
* @access public
* @return void
*/
function beforeRender(&$controller) {
$queryLogs = array();
if (!class_exists('ConnectionManager')) {
return array();
}
foreach ($this->dbConfigs as $configName) {
$db =& ConnectionManager::getDataSource($configName);
if ($db->isInterfaceSupported('showLog')) {
ob_start();
$db->showLog();
$queryLogs[$configName] = ob_get_clean();
}
}
return $queryLogs;
}
}
/**
* Log Panel - Reads log entries made this request.
*
* @package cake.debug_kit.panels
*/
class LogPanel extends DebugPanel {
var $plugin = 'debug_kit';
/**
* Log files to scan
*
* @var array
*/
var $logFiles = array('error.log', 'debug.log');
/**
* startup
*
* @return void
**/
function startup(&$controller) {
if (!class_exists('CakeLog')) {
App::import('Core', 'Log');
}
}
/**
* beforeRender Callback
*
* @return array
**/
function beforeRender(&$controller) {
$this->startTime = DebugKitDebugger::requestStartTime();
$this->currentTime = DebugKitDebugger::requestTime();
$out = array();
foreach ($this->logFiles as $log) {
$file = LOGS . $log;
if (!file_exists($file)) {
continue;
}
$out[$log] = $this->_parseFile($file);
}
return $out;
}
/**
* parse a log file and find the relevant entries
*
* @param string $filename Name of file to read
* @access protected
* @return array
*/
function _parseFile($filename) {
$file =& new File($filename);
$contents = $file->read();
$timePattern = '/(\d{4}-\d{2}\-\d{2}\s\d{1,2}\:\d{1,2}\:\d{1,2})/';
$chunks = preg_split($timePattern, $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for ($i = 0, $len = count($chunks); $i < $len; $i += 2) {
if (strtotime($chunks[$i]) < $this->startTime) {
unset($chunks[$i], $chunks[$i + 1]);
}
}
return array_values($chunks);
}
}
?>
@@ -1,144 +1,144 @@
<?php
/* SVN FILE: $Id$ */
/**
* DebugView test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Core', 'View');
if (!class_exists('DoppelGangerView')) {
class DoppelGangerView extends View {}
}
App::import('View', 'DebugKit.Debug');
App::import('Vendor', 'DebugKit.DebugKitDebugger');
/**
* Debug View Test Case
*
* @package debug_kit.tests
*/
class DebugViewTestCase extends CakeTestCase {
/**
* set Up test case
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Controller =& ClassRegistry::init('Controller');
$this->View = new DebugView($this->Controller, false);
$this->_debug = Configure::read('debug');
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
}
/**
* test that element timers are working
*
* @return void
**/
function testElementTimers() {
$result = $this->View->element('test_element');
$this->assertPattern('/^this is the test element$/', $result);
$result = DebugKitDebugger::getTimers();
$this->assertTrue(isset($result['render_test_element.ctp']));
}
/**
* test rendering and ensure that timers are being set.
*
* @access public
* @return void
*/
function testRenderTimers() {
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->layout = 'default';
$View = new DebugView($this->Controller, false);
$View->render('index');
$result = DebugKitDebugger::getTimers();
$this->assertEqual(count($result), 3);
$this->assertTrue(isset($result['viewRender']));
$this->assertTrue(isset($result['render_default.ctp']));
$this->assertTrue(isset($result['render_index.ctp']));
}
/**
* Test for correct loading of helpers into custom view
*
* @return void
*/
function testLoadHelpers() {
$loaded = array();
$result = $this->View->_loadHelpers($loaded, array('Html', 'Javascript', 'Number'));
$this->assertTrue(is_object($result['Html']));
$this->assertTrue(is_object($result['Javascript']));
$this->assertTrue(is_object($result['Number']));
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tear down function
*
* @return void
**/
function tearDown() {
unset($this->View, $this->Controller);
DebugKitDebugger::clearTimers();
Configure::write('debug', $this->_debug);
}
}
<?php
/* SVN FILE: $Id$ */
/**
* DebugView test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.cake.libs.
* @since CakePHP v 1.2.0.4487
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Core', 'View');
if (!class_exists('DoppelGangerView')) {
class DoppelGangerView extends View {}
}
App::import('View', 'DebugKit.Debug');
App::import('Vendor', 'DebugKit.DebugKitDebugger');
/**
* Debug View Test Case
*
* @package debug_kit.tests
*/
class DebugViewTestCase extends CakeTestCase {
/**
* set Up test case
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Controller =& ClassRegistry::init('Controller');
$this->View =& new DebugView($this->Controller, false);
$this->_debug = Configure::read('debug');
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
}
/**
* test that element timers are working
*
* @return void
**/
function testElementTimers() {
$result = $this->View->element('test_element');
$this->assertPattern('/^this is the test element$/', $result);
$result = DebugKitDebugger::getTimers();
$this->assertTrue(isset($result['render_test_element.ctp']));
}
/**
* test rendering and ensure that timers are being set.
*
* @access public
* @return void
*/
function testRenderTimers() {
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->layout = 'default';
$View =& new DebugView($this->Controller, false);
$View->render('index');
$result = DebugKitDebugger::getTimers();
$this->assertEqual(count($result), 3);
$this->assertTrue(isset($result['viewRender']));
$this->assertTrue(isset($result['render_default.ctp']));
$this->assertTrue(isset($result['render_index.ctp']));
}
/**
* Test for correct loading of helpers into custom view
*
* @return void
*/
function testLoadHelpers() {
$loaded = array();
$result = $this->View->_loadHelpers($loaded, array('Html', 'Javascript', 'Number'));
$this->assertTrue(is_object($result['Html']));
$this->assertTrue(is_object($result['Javascript']));
$this->assertTrue(is_object($result['Number']));
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tear down function
*
* @return void
**/
function tearDown() {
unset($this->View, $this->Controller);
DebugKitDebugger::clearTimers();
Configure::write('debug', $this->_debug);
}
}
?>
@@ -1,137 +1,137 @@
<?php
/* SVN FILE: $Id$ */
/**
* Toolbar Abstract Helper Test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage debug_kit.tests.views.helpers
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Helper', 'DebugKit.FirePhpToolbar');
App::import('Core', array('View', 'Controller'));
require_once APP . 'plugins' . DS . 'debug_kit' . DS . 'tests' . DS . 'cases' . DS . 'test_objects.php';
FireCake::getInstance('TestFireCake');
class FirePhpToolbarHelperTestCase extends CakeTestCase {
/**
* setUp
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Toolbar = new ToolbarHelper(array('output' => 'DebugKit.FirePhpToolbar'));
$this->Toolbar->FirePhpToolbar = new FirePhpToolbarHelper();
$this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) {
Configure::write('debug', $this->_debug);
}
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
$this->_debug = Configure::read('debug');
$this->firecake =& FireCake::getInstance();
}
/**
* test neat array (dump)creation
*
* @return void
*/
function testMakeNeatArray() {
$this->Toolbar->makeNeatArray(array(1,2,3));
$result = $this->firecake->sentHeaders;
$this->assertTrue(isset($result['X-Wf-1-1-1-1']));
$this->assertPattern('/\[1,2,3\]/', $result['X-Wf-1-1-1-1']);
}
/**
* testAfterlayout element rendering
*
* @return void
*/
function testAfterLayout(){
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index', 'ext' => 'xml'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->layout = 'default';
$this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$this->assertNoPattern('/debug-toolbar/', $result);
$result = $this->firecake->sentHeaders;
$this->assertTrue(is_array($result));
}
/**
* endTest()
*
* @return void
*/
function endTest() {
TestFireCake::reset();
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tearDown
*
* @access public
* @return void
*/
function tearDown() {
unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view');
ClassRegistry::flush();
Router::reload();
}
}
<?php
/* SVN FILE: $Id$ */
/**
* Toolbar Abstract Helper Test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage debug_kit.tests.views.helpers
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Helper', 'DebugKit.FirePhpToolbar');
App::import('Core', array('View', 'Controller'));
require_once APP . 'plugins' . DS . 'debug_kit' . DS . 'tests' . DS . 'cases' . DS . 'test_objects.php';
FireCake::getInstance('TestFireCake');
class FirePhpToolbarHelperTestCase extends CakeTestCase {
/**
* setUp
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Toolbar =& new ToolbarHelper(array('output' => 'DebugKit.FirePhpToolbar'));
$this->Toolbar->FirePhpToolbar =& new FirePhpToolbarHelper();
$this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) {
Configure::write('debug', $this->_debug);
}
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
$this->_debug = Configure::read('debug');
$this->firecake =& FireCake::getInstance();
}
/**
* test neat array (dump)creation
*
* @return void
*/
function testMakeNeatArray() {
$this->Toolbar->makeNeatArray(array(1,2,3));
$result = $this->firecake->sentHeaders;
$this->assertTrue(isset($result['X-Wf-1-1-1-1']));
$this->assertPattern('/\[1,2,3\]/', $result['X-Wf-1-1-1-1']);
}
/**
* testAfterlayout element rendering
*
* @return void
*/
function testAfterLayout(){
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index', 'ext' => 'xml'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->layout = 'default';
$this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$this->assertNoPattern('/debug-toolbar/', $result);
$result = $this->firecake->sentHeaders;
$this->assertTrue(is_array($result));
}
/**
* endTest()
*
* @return void
*/
function endTest() {
TestFireCake::reset();
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tearDown
*
* @access public
* @return void
*/
function tearDown() {
unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view');
ClassRegistry::flush();
Router::reload();
}
}
?>
@@ -1,358 +1,358 @@
<?php
/* SVN FILE: $Id$ */
/**
* Toolbar HTML Helper Test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage debug_kit.tests.views.helpers
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Helper', array('DebugKit.HtmlToolbar', 'Html', 'Javascript'));
App::import('Core', array('View', 'Controller'));
class HtmlToolbarHelperTestCase extends CakeTestCase {
/**
* setUp
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Toolbar = new ToolbarHelper(array('output' => 'DebugKit.HtmlToolbar'));
$this->Toolbar->HtmlToolbar = new HtmlToolbarHelper();
$this->Toolbar->HtmlToolbar->Html = new HtmlHelper();
$this->Toolbar->HtmlToolbar->Javascript = new JavascriptHelper();
$this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) {
Configure::write('debug', $this->_debug);
}
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
$this->_debug = Configure::read('debug');
}
/**
* test Neat Array formatting
*
* @return void
**/
function testMakeNeatArray() {
$in = false;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(false)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = null;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(null)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = true;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(true)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value');
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => null);
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', '(null)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value', 'foo' => 'bar');
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', 'bar', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array(
'key' => 'value',
'foo' => array(
'this' => 'deep',
'another' => 'value'
)
);
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array(
'key' => 'value',
'foo' => array(
'this' => 'deep',
'another' => 'value'
),
'lotr' => array(
'gandalf' => 'wizard',
'bilbo' => 'hobbit'
)
);
$result = $this->Toolbar->makeNeatArray($in, 1);
$expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$result = $this->Toolbar->makeNeatArray($in, 2);
$expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value', 'array' => array());
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'array', '/strong', '(empty)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
}
/**
* Test injection of toolbar
*
* @return void
**/
function testInjectToolbar() {
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->helpers = array('Html', 'Javascript', 'DebugKit.Toolbar');
$this->Controller->layout = 'default';
$this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<div id\="debug-kit-toolbar">.+</div></body>#', $result);
}
/**
* test injection of javascript
*
* @return void
**/
function testJavascriptInjection() {
$this->Controller->viewPath = 'posts';
$this->Controller->uses = null;
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => '/',
'here' => '/posts/index',
);
$this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->layout = 'default';
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="/debug_kit/js/js_debug_toolbar.js"\s*>\s?</script>#', $result);
}
/**
* test Injection of user defined javascript
*
* @return void
**/
function testCustomJavascriptInjection() {
$this->Controller->viewPath = 'posts';
$this->Controller->uses = null;
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => '/',
'here' => '/posts/index',
);
$this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar' => array('javascript' => array('my_custom')));
$this->Controller->layout = 'default';
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="js/my_custom_debug_toolbar.js"\s*>\s?</script>#', $result);
}
/**
* test message creation
*
* @return void
*/
function testMessage() {
$result = $this->Toolbar->message('test', 'one, two');
$expected = array(
'<p',
'<strong', 'test', '/strong',
' one, two',
'/p',
);
$this->assertTags($result, $expected);
}
/**
* Test Table generation
*
* @return void
*/
function testTable() {
$rows = array(
array(1,2),
array(3,4),
);
$result = $this->Toolbar->table($rows);
$expected = array(
'table' => array('class' =>'debug-table'),
array('tr' => array('class' => 'odd')),
'<td', '1', '/td',
'<td', '2', '/td',
'/tr',
array('tr' => array('class' => 'even')),
'<td', '3', '/td',
'<td', '4', '/td',
'/tr',
'/table'
);
$this->assertTags($result, $expected);
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tearDown
*
* @access public
* @return void
*/
function tearDown() {
unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view');
ClassRegistry::flush();
}
}
<?php
/* SVN FILE: $Id$ */
/**
* Toolbar HTML Helper Test Case
*
*
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright 2006-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright 2006-2008, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage debug_kit.tests.views.helpers
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
App::import('Helper', array('DebugKit.HtmlToolbar', 'Html', 'Javascript'));
App::import('Core', array('View', 'Controller'));
class HtmlToolbarHelperTestCase extends CakeTestCase {
/**
* setUp
*
* @return void
**/
function setUp() {
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::parse('/');
$this->Toolbar =& new ToolbarHelper(array('output' => 'DebugKit.HtmlToolbar'));
$this->Toolbar->HtmlToolbar =& new HtmlToolbarHelper();
$this->Toolbar->HtmlToolbar->Html =& new HtmlHelper();
$this->Toolbar->HtmlToolbar->Javascript =& new JavascriptHelper();
$this->Controller =& ClassRegistry::init('Controller');
if (isset($this->_debug)) {
Configure::write('debug', $this->_debug);
}
}
/**
* start Case - switch view paths
*
* @return void
**/
function startCase() {
$this->_viewPaths = Configure::read('viewPaths');
Configure::write('viewPaths', array(
TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS,
APP . 'plugins' . DS . 'debug_kit' . DS . 'views'. DS,
ROOT . DS . LIBS . 'view' . DS
));
$this->_debug = Configure::read('debug');
}
/**
* test Neat Array formatting
*
* @return void
**/
function testMakeNeatArray() {
$in = false;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(false)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = null;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(null)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = true;
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', '0' , '/strong', '(true)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value');
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => null);
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', '(null)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value', 'foo' => 'bar');
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong', 'bar', '/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array(
'key' => 'value',
'foo' => array(
'this' => 'deep',
'another' => 'value'
)
);
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array(
'key' => 'value',
'foo' => array(
'this' => 'deep',
'another' => 'value'
),
'lotr' => array(
'gandalf' => 'wizard',
'bilbo' => 'hobbit'
)
);
$result = $this->Toolbar->makeNeatArray($in, 1);
$expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$result = $this->Toolbar->makeNeatArray($in, 2);
$expected = array(
'ul' => array('class' => 'neat-array depth-0 expanded'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'foo', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'this', '/strong', 'deep', '/li',
'<li', '<strong', 'another', '/strong', 'value', '/li',
'/ul',
'/li',
'<li', '<strong', 'lotr', '/strong',
array('ul' => array('class' => 'neat-array depth-1 expanded')),
'<li', '<strong', 'gandalf', '/strong', 'wizard', '/li',
'<li', '<strong', 'bilbo', '/strong', 'hobbit', '/li',
'/ul',
'/li',
'/ul'
);
$this->assertTags($result, $expected);
$in = array('key' => 'value', 'array' => array());
$result = $this->Toolbar->makeNeatArray($in);
$expected = array(
'ul' => array('class' => 'neat-array depth-0'),
'<li', '<strong', 'key', '/strong', 'value', '/li',
'<li', '<strong', 'array', '/strong', '(empty)', '/li',
'/ul'
);
$this->assertTags($result, $expected);
}
/**
* Test injection of toolbar
*
* @return void
**/
function testInjectToolbar() {
$this->Controller->viewPath = 'posts';
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => null,
'here' => '/posts/index',
);
$this->Controller->helpers = array('Html', 'Javascript', 'DebugKit.Toolbar');
$this->Controller->layout = 'default';
$this->Controller->uses = null;
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<div id\="debug-kit-toolbar">.+</div></body>#', $result);
}
/**
* test injection of javascript
*
* @return void
**/
function testJavascriptInjection() {
$this->Controller->viewPath = 'posts';
$this->Controller->uses = null;
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => '/',
'here' => '/posts/index',
);
$this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar');
$this->Controller->layout = 'default';
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="/debug_kit/js/js_debug_toolbar.js"\s*>\s?</script>#', $result);
}
/**
* test Injection of user defined javascript
*
* @return void
**/
function testCustomJavascriptInjection() {
$this->Controller->viewPath = 'posts';
$this->Controller->uses = null;
$this->Controller->action = 'index';
$this->Controller->params = array(
'action' => 'index',
'controller' => 'posts',
'plugin' => null,
'url' => array('url' => 'posts/index'),
'base' => '/',
'here' => '/posts/index',
);
$this->Controller->helpers = array('Javascript', 'Html');
$this->Controller->components = array('DebugKit.Toolbar' => array('javascript' => array('my_custom')));
$this->Controller->layout = 'default';
$this->Controller->constructClasses();
$this->Controller->Component->initialize($this->Controller);
$this->Controller->Component->startup($this->Controller);
$this->Controller->Component->beforeRender($this->Controller);
$result = $this->Controller->render();
$result = str_replace(array("\n", "\r"), '', $result);
$this->assertPattern('#<script\s*type="text/javascript"\s*src="js/my_custom_debug_toolbar.js"\s*>\s?</script>#', $result);
}
/**
* test message creation
*
* @return void
*/
function testMessage() {
$result = $this->Toolbar->message('test', 'one, two');
$expected = array(
'<p',
'<strong', 'test', '/strong',
' one, two',
'/p',
);
$this->assertTags($result, $expected);
}
/**
* Test Table generation
*
* @return void
*/
function testTable() {
$rows = array(
array(1,2),
array(3,4),
);
$result = $this->Toolbar->table($rows);
$expected = array(
'table' => array('class' =>'debug-table'),
array('tr' => array('class' => 'odd')),
'<td', '1', '/td',
'<td', '2', '/td',
'/tr',
array('tr' => array('class' => 'even')),
'<td', '3', '/td',
'<td', '4', '/td',
'/tr',
'/table'
);
$this->assertTags($result, $expected);
}
/**
* reset the view paths
*
* @return void
**/
function endCase() {
Configure::write('viewPaths', $this->_viewPaths);
}
/**
* tearDown
*
* @access public
* @return void
*/
function tearDown() {
unset($this->Toolbar, $this->Controller);
ClassRegistry::removeObject('view');
ClassRegistry::flush();
}
}
?>
@@ -30,14 +30,14 @@ $timers = DebugKitDebugger::getTimers();
?>
<h2><?php __('Timers'); ?></h2>
<p class="request-time">
<?php $totalTime = sprintf(__('%s (seconds)', true), DebugKitDebugger::requestTime()); ?>
<?php $totalTime = sprintf(__('%s (seconds)', true), $number->precision(DebugKitDebugger::requestTime(), 6)); ?>
<?php echo $toolbar->message(__('Total Request Time:', true), $totalTime)?>
</p>
<?php foreach ($timers as $timerName => $timeInfo):
$rows[] = array(
$timeInfo['message'],
$timeInfo['time']
$number->precision($timeInfo['time'], 6)
);
$headers = array(__('Message', true), __('time in seconds', true));
endforeach;
+1 -1
View File
@@ -100,7 +100,7 @@ echo $this->element('ledger_entries', array
'filter' => array('Account.id' => $account['id']),
'exclude' => array('Account', 'Amount', 'Cr/Dr', 'Balance',
empty($account['receipts']) ? 'Tender' : null),
'include' => array('Debit', 'Credit', 'Sub-Total'),
'include' => array('Transaction', 'Debit', 'Credit', 'Sub-Total'),
'limit' => 50,
)));
+1 -1
View File
@@ -66,7 +66,7 @@ function customerContactDiv($obj, $values = null, $primary = false) {
'</DIV>' . "\n" .
// BEGIN contact-div
'<div id="contact-%{id}-contact-div"' . "\n" .
'<div id="contact-%{id}-contact-div">' . "\n" .
$obj->element
('form_table',
+4 -1
View File
@@ -157,7 +157,10 @@ function onRowSelect(grid_id, customer_id) {
$("#customer-id").val(customer_id);
// Set the customer name, so the user knows who the receipt is for
$("#receipt-customer-name").html($(grid_id).getCell(customer_id, 'Customer-name'));
$("#receipt-customer-name")
.html('<A HREF="view/' + customer_id + '">'
+ $(grid_id).getCell(customer_id, 'Customer-name')
+ '</A>');
// Hide the "no customer" message and show the current customer
$(".customer-selection-invalid").hide();
+21
View File
@@ -105,6 +105,27 @@ echo $this->element('ledger_entries', array
)));
/**********************************************************************
* Invoice History
*/
/* NOT COMPLETED
echo $this->element('transactions', array
(// Grid configuration
'config' => array
('caption' => 'Invoices',
'limit' => 5,
'filter' => array('Customer.id' => $customer['Customer']['id'],
'Transaction.type' => 'INVOICE',
),
//'include' => array(),
'exclude' => array('Type'),
'remap' => array('ID' => 'Invoice',
//'Timestamp' => 'Date',
'Entries' => 'Charges'),
)));
NOT COMPLETED */
/**********************************************************************
* Lease History
*/
+1
View File
@@ -50,6 +50,7 @@ if (!isset($grid_setup))
$html->css('ui.jqgrid', null, null, false);
$javascript->link('jqGrid/grid.locale-en', false);
$javascript->link('jqGrid/jquery.jqGrid.min', false);
$javascript->link('jqGrid/grid.postext', false);
$javascript->link('pmgr_jqGrid', false);
+1 -1
View File
@@ -11,8 +11,8 @@ $cols['ID'] = array('index' => 'Transaction.id', 'formatter' =
$cols['Type'] = array('index' => 'Transaction.type', 'formatter' => 'enum');
$cols['Customer'] = array('index' => 'Customer.name', 'formatter' => 'longname');
$cols['Timestamp'] = array('index' => 'Transaction.stamp', 'formatter' => 'date');
$cols['Amount'] = array('index' => 'Transaction.amount', 'formatter' => 'currency');
$cols['Entries'] = array('index' => 'entries', 'formatter' => 'number');
$cols['Amount'] = array('index' => 'Transaction.amount', 'formatter' => 'currency');
$cols['Comment'] = array('index' => 'Transaction.comment', 'formatter' => 'comment');
// Render the grid
+1 -1
View File
@@ -75,7 +75,7 @@
echo $html->css('print', null, array('media' => 'print')) . "\n";
echo $html->css('sidemenu') . "\n";
echo $javascript->link('jquery-1.3.2.min') . "\n";
echo $javascript->link('jquery-1.7.2.min') . "\n";
echo $javascript->link('jquery-ui-1.7.2.custom.min') . "\n";
//echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js') . "\n";
//echo $javascript->link($protocol . 'ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js') . "\n";
@@ -10,11 +10,11 @@ echo '<div class="statement_entry overview">' . "\n";
*/
$rows = array();
$rows[] = array("$months Month Charges", FormatHelper::currency($overview['charges']));
$rows[] = array("$months Month Total", FormatHelper::currency($overview['amount']) . " / (" . FormatHelper::currency($overview['amount'] / $months) . " per month)");
echo $this->element('table',
array('class' => 'item statement_entry detail',
'caption' => 'Monthly Charges',
'caption' => $reptype,
'rows' => $rows,
'column_class' => array('field', 'value')));
@@ -38,11 +38,11 @@ foreach ($overview['months'] AS $month) {
$odd = 1;
foreach ($month['subs'] AS $sub) {
$row_class[] = array('subitem', $odd ? 'oddrow' : 'evenrow');
$rows[] = array($sub['name'], FormatHelper::currency($sub['charges']));
$rows[] = array($sub['name'], FormatHelper::currency($sub['amount']));
$odd = !$odd;
}
$row_class[] = 'grand';
$rows[] = array('Total for '.$month['name'], FormatHelper::currency($month['charges']));
$rows[] = array('Total for '.$month['name'], FormatHelper::currency($month['amount']));
}
echo $this->element('table',
+9 -2
View File
@@ -2,11 +2,18 @@
//style="display:inline;
echo('<H2 style="display:inline;">Deposit Slip: ' .
FormatHelper::datetime($deposit['Transaction']['stamp'])
. '</H2>' . "\n");
FormatHelper::date($deposit['Transaction']['stamp'])
. '</H2><br>' . "\n");
/* echo('(' . */
/* FormatHelper::age($deposit['Transaction']['stamp'], 60) */
/* . ')<BR>' . "\n"); */
if ($deposit['Account']['external_name'] || $deposit['Account']['external_account']) {
echo('<H2 style="display:inline;">' .
($deposit['Account']['external_name'] ? $deposit['Account']['external_name'] : '') .
($deposit['Account']['external_name'] && $deposit['Account']['external_account'] ? ': ' : '') .
($deposit['Account']['external_account'] ? 'Account #' . $deposit['Account']['external_account'] : '') .
'</H2><br>' . "\n");
}
//pr(compact('deposit'));
+11 -10
View File
@@ -95,16 +95,17 @@ if ($transaction['type'] === 'INVOICE' ||
* Ledger Entries
*/
echo $this->element('ledger_entries', array
(// Grid configuration
'config' => array
(
'caption' => 'Ledger Entries',
'filter' => array('Transaction.id' => $transaction['id'],
'Account.id !=' => $account['id']),
'exclude' => array('Transaction'),
)));
if (0) {
echo $this->element('ledger_entries', array
(// Grid configuration
'config' => array
(
'caption' => 'Ledger Entries',
'filter' => array('Transaction.id' => $transaction['id'],
'Account.id !=' => $account['id']),
'exclude' => array('Transaction'),
)));
}
/* /\********************************************************************** */
/* * Tenders Deposited */
File diff suppressed because one or more lines are too long
+169 -1
View File
@@ -1 +1,169 @@
(function(a){a.jgrid={defaults:{recordtext:"View {0} - {1} of {2}",emptyrecords:"No records to view",loadtext:"Loading...",pgtext:"Page {0} of {1}"},search:{caption:"Search...",Find:"Find",Reset:"Reset",odata:["equal","not equal","less","less or equal","greater","greater or equal","begins with","does not begin with","is in","is not in","ends with","does not end with","contains","does not contain"],groupOps:[{op:"AND",text:"all"},{op:"OR",text:"any"}],matchText:" match",rulesText:" rules"},edit:{addCaption:"Add Record",editCaption:"Edit Record",bSubmit:"Submit",bCancel:"Cancel",bClose:"Close",saveData:"Data has been changed! Save changes?",bYes:"Yes",bNo:"No",bExit:"Cancel",msg:{required:"Field is required",number:"Please, enter valid number",minValue:"value must be greater than or equal to ",maxValue:"value must be less than or equal to",email:"is not a valid e-mail",integer:"Please, enter valid integer value",date:"Please, enter valid date value",url:"is not a valid URL. Prefix required ('http://' or 'https://')"}},view:{caption:"View Record",bClose:"Close"},del:{caption:"Delete",msg:"Delete selected record(s)?",bSubmit:"Delete",bCancel:"Cancel"},nav:{edittext:"",edittitle:"Edit selected row",addtext:"",addtitle:"Add new row",deltext:"",deltitle:"Delete selected row",searchtext:"",searchtitle:"Find records",refreshtext:"",refreshtitle:"Reload Grid",alertcap:"Warning",alerttext:"Please, select row",viewtext:"",viewtitle:"View selected row"},col:{caption:"Show/Hide Columns",bSubmit:"Submit",bCancel:"Cancel"},errors:{errcap:"Error",nourl:"No url is set",norecords:"No records to process",model:"Length of colNames <> colModel!"},formatter:{integer:{thousandsSeparator:" ",defaultValue:"0"},number:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,defaultValue:"0.00"},currency:{decimalSeparator:".",thousandsSeparator:" ",decimalPlaces:2,prefix:"",suffix:"",defaultValue:"0.00"},date:{dayNames:["Sun","Mon","Tue","Wed","Thr","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],AmPm:["am","pm","AM","PM"],S:function(b){return b<11||b>13?["st","nd","rd","th"][Math.min((b-1)%10,3)]:"th"},srcformat:"Y-m-d",newformat:"d/m/Y",masks:{ISO8601Long:"Y-m-d H:i:s",ISO8601Short:"Y-m-d",ShortDate:"n/j/Y",LongDate:"l, F d, Y",FullDateTime:"l, F d, Y g:i:s A",MonthDay:"F d",ShortTime:"g:i A",LongTime:"g:i:s A",SortableDateTime:"Y-m-d\\TH:i:s",UniversalSortableDateTime:"Y-m-d H:i:sO",YearMonth:"F, Y"},reformatAfterEdit:false},baseLinkUrl:"",showAction:"",target:"",checkbox:{disabled:true},idName:"id"}}})(jQuery);
;(function($){
/**
* jqGrid English Translation
* Tony Tomov tony@trirand.com
* http://trirand.com/blog/
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
**/
$.jgrid = $.jgrid || {};
$.extend($.jgrid,{
defaults : {
recordtext: "View {0} - {1} of {2}",
emptyrecords: "No records to view",
loadtext: "Loading...",
pgtext : "Page {0} of {1}"
},
search : {
caption: "Search...",
Find: "Find",
Reset: "Reset",
odata : ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain'],
groupOps: [ { op: "AND", text: "all" }, { op: "OR", text: "any" } ],
matchText: " match",
rulesText: " rules"
},
edit : {
addCaption: "Add Record",
editCaption: "Edit Record",
bSubmit: "Submit",
bCancel: "Cancel",
bClose: "Close",
saveData: "Data has been changed! Save changes?",
bYes : "Yes",
bNo : "No",
bExit : "Cancel",
msg: {
required:"Field is required",
number:"Please, enter valid number",
minValue:"value must be greater than or equal to ",
maxValue:"value must be less than or equal to",
email: "is not a valid e-mail",
integer: "Please, enter valid integer value",
date: "Please, enter valid date value",
url: "is not a valid URL. Prefix required ('http://' or 'https://')",
nodefined : " is not defined!",
novalue : " return value is required!",
customarray : "Custom function should return array!",
customfcheck : "Custom function should be present in case of custom checking!"
}
},
view : {
caption: "View Record",
bClose: "Close"
},
del : {
caption: "Delete",
msg: "Delete selected record(s)?",
bSubmit: "Delete",
bCancel: "Cancel"
},
nav : {
edittext: "",
edittitle: "Edit selected row",
addtext:"",
addtitle: "Add new row",
deltext: "",
deltitle: "Delete selected row",
searchtext: "",
searchtitle: "Find records",
refreshtext: "",
refreshtitle: "Reload Grid",
alertcap: "Warning",
alerttext: "Please, select row",
viewtext: "",
viewtitle: "View selected row"
},
col : {
caption: "Select columns",
bSubmit: "Ok",
bCancel: "Cancel"
},
errors : {
errcap : "Error",
nourl : "No url is set",
norecords: "No records to process",
model : "Length of colNames <> colModel!"
},
formatter : {
integer : {thousandsSeparator: ",", defaultValue: '0'},
number : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, defaultValue: '0.00'},
currency : {decimalSeparator:".", thousandsSeparator: ",", decimalPlaces: 2, prefix: "", suffix:"", defaultValue: '0.00'},
date : {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
AmPm : ["am","pm","AM","PM"],
S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},
srcformat: 'Y-m-d',
newformat: 'n/j/Y',
masks : {
// see http://php.net/manual/en/function.date.php for PHP format used in jqGrid
// and see http://docs.jquery.com/UI/Datepicker/formatDate
// and https://github.com/jquery/globalize#dates for alternative formats used frequently
// one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many
// information about date, time, numbers and currency formats used in different countries
// one should just convert the information in PHP format
ISO8601Long:"Y-m-d H:i:s",
ISO8601Short:"Y-m-d",
// short date:
// n - Numeric representation of a month, without leading zeros
// j - Day of the month without leading zeros
// Y - A full numeric representation of a year, 4 digits
// example: 3/1/2012 which means 1 March 2012
ShortDate: "n/j/Y", // in jQuery UI Datepicker: "M/d/yyyy"
// long date:
// l - A full textual representation of the day of the week
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
// Y - A full numeric representation of a year, 4 digits
LongDate: "l, F d, Y", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy"
// long date with long time:
// l - A full textual representation of the day of the week
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
// Y - A full numeric representation of a year, 4 digits
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// s - Seconds, with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
FullDateTime: "l, F d, Y g:i:s A", // in jQuery UI Datepicker: "dddd, MMMM dd, yyyy h:mm:ss tt"
// month day:
// F - A full textual representation of a month
// d - Day of the month, 2 digits with leading zeros
MonthDay: "F d", // in jQuery UI Datepicker: "MMMM dd"
// short time (without seconds)
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
ShortTime: "g:i A", // in jQuery UI Datepicker: "h:mm tt"
// long time (with seconds)
// g - 12-hour format of an hour without leading zeros
// i - Minutes with leading zeros
// s - Seconds, with leading zeros
// A - Uppercase Ante meridiem and Post meridiem (AM or PM)
LongTime: "g:i:s A", // in jQuery UI Datepicker: "h:mm:ss tt"
SortableDateTime: "Y-m-d\\TH:i:s",
UniversalSortableDateTime: "Y-m-d H:i:sO",
// month with year
// Y - A full numeric representation of a year, 4 digits
// F - A full textual representation of a month
YearMonth: "F, Y" // in jQuery UI Datepicker: "MMMM, yyyy"
},
reformatAfterEdit : false
},
baseLinkUrl: '',
showAction: '',
target: '',
checkbox : {disabled:true},
idName : 'id'
}
});
})(jQuery);
+64
View File
@@ -0,0 +1,64 @@
;(function($){
/**
* jqGrid extension
* Paul Tiseo ptiseo@wasteconsultants.com
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl-2.0.html
**/
$.jgrid.extend({
getPostData : function(){
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.postData;
},
setPostData : function( newdata ) {
var $t = this[0];
if(!$t.grid) { return; }
// check if newdata is correct type
if ( typeof(newdata) === 'object' ) {
$t.p.postData = newdata;
}
else {
alert("Error: cannot add a non-object postData value. postData unchanged.");
}
},
appendPostData : function( newdata ) {
var $t = this[0];
if(!$t.grid) { return; }
// check if newdata is correct type
if ( typeof(newdata) === 'object' ) {
$.extend($t.p.postData, newdata);
}
else {
alert("Error: cannot append a non-object postData value. postData unchanged.");
}
},
setPostDataItem : function( key, val ) {
var $t = this[0];
if(!$t.grid) { return; }
$t.p.postData[key] = val;
},
getPostDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.postData[key];
},
removePostDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
delete $t.p.postData[key];
},
getUserData : function(){
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.userData;
},
getUserDataItem : function( key ) {
var $t = this[0];
if(!$t.grid) { return; }
return $t.p.userData[key];
}
});
})(jQuery);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long