Added a Unit overview action. It's a bit quick and dirty, but it's intended for admins only.

git-svn-id: file:///svn-source/pmgr/branches/v0.3_work/site@957 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2010-03-11 23:40:47 +00:00
parent f89ca2ab93
commit 1f831551a1
4 changed files with 95 additions and 5 deletions

View File

@@ -52,6 +52,15 @@ class AppController extends Controller {
parent::__construct(); parent::__construct();
} }
/**************************************************************************
**************************************************************************
**************************************************************************
* function: dev/admin()
* - Indicates if the user has dev/admin access
*/
function dev() { return !empty($this->params['dev']); }
function admin() { return !empty($this->params['admin']); }
/************************************************************************** /**************************************************************************
************************************************************************** **************************************************************************
************************************************************************** **************************************************************************
@@ -246,7 +255,7 @@ class AppController extends Controller {
$this->addSideMenuLink('New Deposit', $this->addSideMenuLink('New Deposit',
array('controller' => 'tenders', 'action' => 'deposit'), null, array('controller' => 'tenders', 'action' => 'deposit'), null,
'SITE', $this->op_area); 'SITE', $this->op_area);
if (!empty($this->params['admin'])) if ($this->admin())
$this->addSideMenuLink('Assess Charges', $this->addSideMenuLink('Assess Charges',
array('controller' => 'leases', 'action' => 'assess_all'), null, array('controller' => 'leases', 'action' => 'assess_all'), null,
'SITE', $this->op_area); 'SITE', $this->op_area);
@@ -308,19 +317,19 @@ class AppController extends Controller {
$this->params['admin'] = $this->Option->enabled('admin'); $this->params['admin'] = $this->Option->enabled('admin');
$this->params['dev'] = devbox(); $this->params['dev'] = devbox();
if ($this->params['dev'] && !$this->Option->enabled('dev')) if ($this->dev() && !$this->Option->enabled('dev'))
$this->redirect("/"); $this->redirect("/");
if (!$this->params['dev']) if (!$this->dev())
Configure::write('debug', '0'); Configure::write('debug', '0');
$this->addDefaultSideMenuLinks(); $this->addDefaultSideMenuLinks();
//$this->sideMenuEnable('SITE', $this->op_area, false); //$this->sideMenuEnable('SITE', $this->op_area, false);
foreach ($this->sidemenu['areas'] AS $area_name => $area) { foreach ($this->sidemenu['areas'] AS $area_name => $area) {
if (empty($this->params['dev'])) if (!$this->dev())
$this->sideMenuEnable($area_name, $this->dev_area, false); $this->sideMenuEnable($area_name, $this->dev_area, false);
if (empty($this->params['admin'])) if (!$this->admin())
$this->sideMenuEnable($area_name, $this->admin_area, false); $this->sideMenuEnable($area_name, $this->admin_area, false);
} }

View File

@@ -31,6 +31,10 @@ class UnitsController extends AppController {
$this->addSideMenuLink('All', $this->addSideMenuLink('All',
array('controller' => 'units', 'action' => 'all'), null, array('controller' => 'units', 'action' => 'all'), null,
'CONTROLLER'); 'CONTROLLER');
if ($this->admin())
$this->addSideMenuLink('Overview',
array('controller' => 'units', 'action' => 'overview'), null,
'CONTROLLER');
} }
@@ -225,6 +229,68 @@ class UnitsController extends AppController {
function unlock($id) { $this->status($id, 'OCCUPIED'); } function unlock($id) { $this->status($id, 'OCCUPIED'); }
/**************************************************************************
**************************************************************************
**************************************************************************
* action: overview
* - Displays overview information for all units
*/
function overview() {
$result = $this->Unit->find
('all',
array('link' => array('UnitSize' => array('fields' => array(), 'UnitType' => array('fields' => array('name')))),
'fields' => array('status', 'COUNT(Unit.id) AS cnt', 'SUM(Unit.rent) AS rents'),
//'conditions' => array('
'group' => array('UnitType.id', 'Unit.status'),
'order' => array('UnitType.name', 'Unit.status')
));
//pr($result);
$overview = array('types' => array(), 'count' => 0, 'rents' => 0);
foreach ($result AS $row) {
$utname = $row['UnitType']['name'];
if (empty($overview['types'][$utname]))
$overview['types'][$utname] = array('name' => $utname,
'subs' => array(),
'count' => 0,
'rents' => 0,
'phys_pct' => 0,
'econ_pct' => 0);
$type = &$overview['types'][$utname];
$type['subs'][] = array('name' => $row['Unit']['status'],
'count' => $row[0]['cnt'],
'rents' => $row[0]['rents'],
'phys_subpct' => 0,
'phys_totpct' => 0,
'econ_subpct' => 0,
'econ_totpct' => 0);
$type['count'] += $row[0]['cnt'];
$type['rents'] += $row[0]['rents'];
$overview['count'] += $row[0]['cnt'];
$overview['rents'] += $row[0]['rents'];
}
foreach ($overview['types'] AS &$type) {
foreach ($type['subs'] AS &$sub) {
$sub['phys_subpct'] = $sub['count'] / $type['count'];
$sub['econ_subpct'] = $sub['rents'] / $type['rents'];
$sub['phys_totpct'] = $sub['count'] / $overview['count'];
$sub['econ_totpct'] = $sub['rents'] / $overview['rents'];
}
$type['phys_pct'] = $type['count'] / $overview['count'];
$type['econ_pct'] = $type['rents'] / $overview['rents'];
}
//pr($overview);
// Prepare to render.
$this->set('title', 'Unit Overview');
$this->set(compact('overview'));
}
/************************************************************************** /**************************************************************************
************************************************************************** **************************************************************************
************************************************************************** **************************************************************************

View File

@@ -47,6 +47,13 @@ class FormatHelper extends AppHelper {
return $currency; return $currency;
} }
function percent($amount, $precision = 2) {
if (!isset($amount))
return '-';
return self::$number->toPercentage($amount*100, $precision);
}
function date($date, $age = false, $class = null, $time = false) { function date($date, $age = false, $class = null, $time = false) {
if (!$date) return null; if (!$date) return null;

View File

@@ -266,6 +266,14 @@ form#collected-form input[type=button] { float : left;
/* NSF items */ /* NSF items */
.nsf-tender { text-decoration: line-through; } .nsf-tender { text-decoration: line-through; }
/* Overview lists */
table.overview td.grand { border-top : 4px double #000; }
table.overview td.subheader { padding-top: 1em; padding-left: 0.5em; font-size: 150%; }
table.overview td:first-child.subitem { padding-left: 2em; }
table.overview td:first-child { text-align: left; }
table.overview td { text-align: right; }
table.overview td.oddrow { background : #f4f4f4; }
/************************************************************ /************************************************************
************************************************************ ************************************************************