Added support for querying only occupied or vacant units. It's working at the moment, but I'll probably move some more logic to the controller next.

git-svn-id: file:///svn-source/pmgr/branches/initial_20090526/site@29 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
abijah
2009-05-28 21:52:14 +00:00
parent 7805e4d229
commit 1249854514
4 changed files with 46 additions and 22 deletions

View File

@@ -37,5 +37,42 @@
* @subpackage cake.app
*/
class AppModel extends Model {
/**
* Get Enum Values
* Snippet v0.1.3
* http://cakeforge.org/snippet/detail.php?type=snippet&id=112
*
* Gets the enum values for MySQL 4 and 5 to use in selectTag()
*/
function getEnumValues($columnName=null, $respectDefault=false)
{
if ($columnName==null) { return array(); } //no field specified
//Get the name of the table
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$tableName = $db->fullTableName($this, false);
//Get the values for the specified column (database and version specific, needs testing)
$result = $this->query("SHOW COLUMNS FROM {$tableName} LIKE '{$columnName}'");
//figure out where in the result our Types are (this varies between mysql versions)
$types = null;
if ( isset( $result[0]['COLUMNS']['Type'] ) ) { //MySQL 5
$types = $result[0]['COLUMNS']['Type']; $default = $result[0]['COLUMNS']['Default'];
}
elseif ( isset( $result[0][0]['Type'] ) ) { //MySQL 4
$types = $result[0][0]['Type']; $default = $result[0][0]['Default'];
}
else { //types return not accounted for
return array();
}
//Get the values
return array_flip(array_merge(array(''), // MySQL sets 0 to be the empty string
explode("','", preg_replace("/(enum)\('(.+?)'\)/","\\2", $types))
));
} //end getEnumValues
}
?>

View File

@@ -12,29 +12,13 @@ class UnitsController extends AppController {
function vacant() {
$this->Unit->recursive = 0;
$this->Unit->bindModel(array('hasOne' => array('UnitsLease',
'Lease' => array(
'foreignKey' => false,
'conditions' => array('Lease.id = UnitsLease.lease_id')
))),
false);
$this->set('units', $this->paginate(array('Lease.close_date IS NULL',
'UnitsLease.type != "ALTERNATE"')));
$this->set('units', $this->paginate(array('Unit.status < ' . $this->Unit->occupiedEnumValue())));
$this->render('index');
}
function occupied() {
$this->Unit->recursive = 0;
$this->Unit->bindModel(array('hasOne' => array('UnitsLease',
'Lease' => array(
'foreignKey' => false,
'conditions' => array('Lease.id = UnitsLease.lease_id')
))),
false);
$this->set('units', $this->paginate(array('Lease.close_date IS NULL',
'UnitsLease.type != "ALTERNATE"')));
$this->set('units', $this->paginate(array('Unit.status >= ' . $this->Unit->occupiedEnumValue())));
$this->render('index');
}

View File

@@ -45,5 +45,8 @@ class Unit extends AppModel {
)
);
function occupiedEnumValue() {
$enums = $this->getEnumValues('status');
return $enums['OCCUPIED'];
}
}
?>

View File

@@ -18,12 +18,12 @@
'format' => __('Page %page% of %pages%, showing %current% records (%start% - %end%) of %count% total', true)));
$rows = array($paginator->sort('id'),
$paginator->sort('name'),
$paginator->sort('Unit', 'name'),
$paginator->sort('unit_size_id'),
$paginator->sort('status'),
$paginator->sort('comment'));
} else {
$rows = array('Id', 'Name', 'Size', 'Status', 'Comment');
$rows = array('Id', 'Unit', 'Size', 'Status', 'Comment');
}
echo $html->tableHeaders($rows);