Dashboard functional
This commit is contained in:
parent
30f6717c9f
commit
ef16492de2
114
application/classes/Controller/Director/Welcome.php
Normal file
114
application/classes/Controller/Director/Welcome.php
Normal file
@ -0,0 +1,114 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides the Directors Welcome Screen
|
||||
*
|
||||
* @package Membership Database
|
||||
* @category Controllers/Director
|
||||
* @author Deon George
|
||||
* @copyright (c) 2014 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Controller_Director_Welcome extends Controller_Welcome {
|
||||
protected $secure_actions = array(
|
||||
'index'=>TRUE,
|
||||
);
|
||||
|
||||
/**
|
||||
* Edit a Module Configuration
|
||||
*/
|
||||
public function action_index() {
|
||||
$output = '';
|
||||
|
||||
$date = Site::DateStartOfWeek(time());
|
||||
$so = Company::instance()->so();
|
||||
$days = 7;
|
||||
|
||||
$open_dates = $so->open_dates($date,$days);
|
||||
$output .= '<table class="table table-striped table-condensed table-hover">';
|
||||
|
||||
$output .= '<tr>';
|
||||
$output .= '<th colspan="2"> </th>';
|
||||
foreach (array_keys($open_dates) as $day)
|
||||
$output .= sprintf('<th class="text-right">%s (%s)</th>',Site::date($day),date('D',$day));
|
||||
$output .= '</tr>';
|
||||
|
||||
$output .= '<tr>';
|
||||
$output .= '<th colspan="2">Open</th>';
|
||||
foreach (array_keys($open_dates) as $day)
|
||||
$output .= sprintf('<th class="text-right">%s</th>',StaticList_YesNo::factory()->get(isset($open_dates[$day]) ? $open_dates[$day] : FALSE,TRUE));
|
||||
$output .= '</tr>';
|
||||
|
||||
$output .= '<tr>';
|
||||
$output .= '<th colspan="2">Total</th>';
|
||||
foreach (array_keys($open_dates) as $day)
|
||||
$output .= sprintf('<th class="text-right">%s</th>','-');
|
||||
$output .= '</tr>';
|
||||
|
||||
foreach ($so->rooms->find_all() as $ro) {
|
||||
$output .= sprintf('<tr><th colspan="2">%s</th><th colspan="%s"> </th></tr>',$ro->display('name'),$days);
|
||||
|
||||
// Capacity
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Capacity</td>';
|
||||
$output .= sprintf('<td class="text-right">%s</td>',join('</td><td class="text-right">',array_values($ro->availability_dates($date,$days))));
|
||||
$output .= '</tr>';
|
||||
|
||||
// Permanent
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Permanent</td>';
|
||||
foreach (array_values($ro->child_list_date($date,$days)) as $x)
|
||||
$output .= sprintf('<td class="text-right">%s</td>',count($x));
|
||||
$output .= '</tr>';
|
||||
|
||||
// Permanent
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Absent</td>';
|
||||
foreach (array_values($ro->child_list_date($date,$days,'a')) as $x)
|
||||
$output .= sprintf('<td class="text-right">%s</td>',count($x));
|
||||
$output .= '</tr>';
|
||||
|
||||
// Casual
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Casual</td>';
|
||||
foreach (array_values($ro->child_list_date($date,$days,'C')) as $x)
|
||||
$output .= sprintf('<td class="text-right">%s</td>',count($x));
|
||||
$output .= '</tr>';
|
||||
|
||||
// Spacer
|
||||
$output .= sprintf('<tr><td colspan="%s"> </td></tr>',$days+2);
|
||||
|
||||
// Waitlist
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Waitlist</td>';
|
||||
foreach (array_values($ro->child_list_date($date,$days,'W')) as $x)
|
||||
$output .= sprintf('<td class="text-right">%s</td>',count($x));
|
||||
$output .= '</tr>';
|
||||
|
||||
// Availablity
|
||||
$output .= '<tr>';
|
||||
$output .= '<td> </td>';
|
||||
$output .= '<td>Availability</td>';
|
||||
foreach (array_values($ro->room_availablity($date,$days)) as $x)
|
||||
$output .= sprintf('<td class="text-right">%s</td>',$x);
|
||||
$output .= '</tr>';
|
||||
|
||||
// Spacer
|
||||
$output .= sprintf('<tr><td colspan="%s"> </td></tr>',$days+2);
|
||||
}
|
||||
|
||||
$output .= '</table>';
|
||||
|
||||
Block::factory()
|
||||
->title(sprintf('Site Availability for %s',Site::date($date)))
|
||||
->title_icon('icon-cog')
|
||||
->span(10)
|
||||
->body($output);
|
||||
}
|
||||
}
|
||||
?>
|
14
application/classes/Model/Child.php
Normal file
14
application/classes/Model/Child.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports Children belonging to a family
|
||||
*
|
||||
* @package Membership Database
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2014 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Model_Child extends ORM {
|
||||
}
|
||||
?>
|
22
application/classes/Model/Room/Children.php
Normal file
22
application/classes/Model/Room/Children.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class supports Children in a Room Configuration
|
||||
*
|
||||
* @package Membership Database
|
||||
* @category Models
|
||||
* @author Deon George
|
||||
* @copyright (c) 2014 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Model_Room_Children extends ORM {
|
||||
protected $_belongs_to = array(
|
||||
'child'=>array(),
|
||||
);
|
||||
|
||||
// @todo: Code A (availble) start/end dates cannot overlap with existing records - put in validation that it cannot be saved.
|
||||
public function day($day) {
|
||||
return $this->{'d_'.$day};
|
||||
}
|
||||
}
|
||||
?>
|
@ -10,16 +10,21 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Model_Rooms extends ORM {
|
||||
protected $_belongs_to = array(
|
||||
'site'=>array('model'=>'Setup'),
|
||||
);
|
||||
protected $_has_many = array(
|
||||
'dates'=>array('model'=>'Room_Dates','far_key'=>'id','foreign_key'=>'room_id'),
|
||||
'children'=>array('model'=>'Room_Children','far_key'=>'id','foreign_key'=>'room_id'),
|
||||
);
|
||||
|
||||
public function room_dates(Model_Setup $so,$date,$days=0) {
|
||||
public function availability_dates($date,$days=0,$code='A') {
|
||||
$result = array();
|
||||
$x = $date;
|
||||
|
||||
$date_end = $date+$days*86400;
|
||||
$open_dates = $so->open_dates($date,$days);
|
||||
foreach ($this->dates->where('code','=','A')->where_startstop($date,$date_end)->find_all() as $o) {
|
||||
$open_dates = $this->site->open_dates($date,$days);
|
||||
foreach ($this->dates->where('code','=',$code)->where_startstop($date,$date_end)->find_all() as $o) {
|
||||
$x = $date;
|
||||
|
||||
while ($x<$date_end) {
|
||||
@ -55,5 +60,77 @@ class Model_Rooms extends ORM {
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
// 'P' - Permanent
|
||||
public function child_list_date($date,$days,$code='P') {
|
||||
$result = array();
|
||||
$x = $date;
|
||||
|
||||
$date_end = $date+$days*86400;
|
||||
$open_dates = $this->site->open_dates($date,$days);
|
||||
foreach ($this->children->where('code','=',$code)->where_startstop($date,$date_end)->find_all() as $o) {
|
||||
$x = $date;
|
||||
|
||||
while ($x<$date_end) {
|
||||
// If we havent made the start date yet, we need to advance
|
||||
if (! $open_dates[$x]
|
||||
OR ($o->date_start > $x AND (is_null($o->date_stop) OR $o->date_stop > $date_end))
|
||||
OR ((is_null($o->date_start) OR $o->date_start > $x) AND $o->date_stop > $date_end)
|
||||
OR (! is_null($o->date_start) AND ! is_null($o->date_stop))) {
|
||||
|
||||
if (! isset($result[$x]) OR ! $result[$x])
|
||||
$result[$x] = array();
|
||||
|
||||
$x += 86400;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check that this record covers our current date
|
||||
if ($o->date_stop < $x AND ! is_null($o->date_stop))
|
||||
break;
|
||||
|
||||
if (! isset($result[$x]))
|
||||
$result[$x] = array();
|
||||
|
||||
if ($o->day(date('w',$x)))
|
||||
array_push($result[$x],$o->child);
|
||||
|
||||
$x += 86400;
|
||||
}
|
||||
}
|
||||
|
||||
// If we broke out and our date $days hasnt ben evaluated, we are closed
|
||||
while ($x<$date_end) {
|
||||
if (! isset($result[$x]) OR ! $result[$x])
|
||||
$result[$x] = array();
|
||||
|
||||
$x += 86400;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function room_availablity($date,$days) {
|
||||
// We start with our availablity
|
||||
$result = $this->availability_dates($date,$days);
|
||||
|
||||
// Less Permanents
|
||||
foreach ($this->child_list_date($date,$days) as $k => $v)
|
||||
$result[$k] -= count($v);
|
||||
|
||||
// Add Absent
|
||||
foreach ($this->child_list_date($date,$days,'a') as $k => $v)
|
||||
$result[$k] += count($v);
|
||||
|
||||
// Less Casuals
|
||||
foreach ($this->child_list_date($date,$days,'C') as $k => $v)
|
||||
$result[$k] -= count($v);
|
||||
|
||||
// Less Waitlist
|
||||
foreach ($this->child_list_date($date,$days,'W') as $k => $v)
|
||||
$result[$k] -= count($v);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -41,17 +41,6 @@ abstract class ORM extends lnApp_ORM {
|
||||
if (! in_array($this->_table_name,ORM::$no_site_id_tables))
|
||||
$this->where($this->_object_name.'.site_id','=',Company::instance()->site());
|
||||
|
||||
// Ensure we Cache our queries
|
||||
$caching = FALSE;
|
||||
foreach ($this->_db_pending as $method)
|
||||
if ($method['name'] == 'cached') {
|
||||
$caching = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (! $caching)
|
||||
$this->cached(Kohana::$config->load('cache.orm.'.$this->_table_name));
|
||||
|
||||
return parent::_build($type);
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,6 @@ return array
|
||||
),
|
||||
'table_prefix' => 'mdb_',
|
||||
'charset' => 'utf8',
|
||||
'caching' => FALSE,
|
||||
'caching' => TRUE,
|
||||
),
|
||||
);
|
||||
|
Reference in New Issue
Block a user