Exemplo n.º 1
0
 function index()
 {
     $my_user_id = $this->auth->user()->id;
     $this->hc_time->setNow();
     $today = $this->hc_time->formatDate_Db();
     $args = $this->parse_args(func_get_args());
     $display = isset($args['display']) ? $args['display'] : 'my';
     if (isset($args['start'])) {
         $start_date = $args['start'];
     } else {
         // last month
         $this->hc_time->setNow();
         //			$this->hc_time->modify( '-1 month' );
         $this->hc_time->setStartMonth();
         $start_date = $this->hc_time->formatDate_Db();
     }
     if (isset($args['end'])) {
         $end_date = $args['end'];
     } else {
         // last month
         $this->hc_time->setNow();
         //			$this->hc_time->modify( '-1 month' );
         $this->hc_time->setEndMonth();
         $end_date = $this->hc_time->formatDate_Db();
     }
     $location_id = 0;
     switch ($display) {
         case 'list':
         case 'my':
             $sm = $this->auth->user()->shift;
             break;
         case 'pickup':
             $sm = new Shift_Model();
             if (isset($args['location'])) {
                 $location_id = $args['location'];
             }
             break;
     }
     $sm->include_related('location', 'show_order')->include_related('location', 'id')->include_related('location', 'name')->include_related('user', 'id')->where('status', SHIFT_MODEL::STATUS_ACTIVE)->order_by('date', 'ASC')->order_by('start', 'ASC')->order_by('location_show_order', 'ASC');
     if ($location_id) {
         $sm->where('location_id', $location_id);
     }
     switch ($display) {
         case 'pickup':
         case 'my':
             $sm->where('date >=', $today);
             break;
         case 'list':
             $sm->where('date >=', $start_date);
             $sm->where('date <=', $end_date);
             break;
     }
     switch ($display) {
         case 'pickup':
             $sm->include_related('user', 'id')->group_start()->or_group_start()->where('user_id <> ', $my_user_id)->where('has_trade <>', 0)->group_end();
             $staff_can_pickup = $this->app_conf->get('staff_pick_shifts');
             if ($staff_can_pickup) {
                 $sm->or_group_start()->or_where('user_id IS ', 'NULL', FALSE)->or_where('user_id', 0)->group_end();
             }
             $sm->group_end();
             break;
     }
     $this->data['shifts'] = $sm->get()->all;
     // timeoffs
     $this->data['timeoffs'] = $this->auth->user()->timeoff->where('date_end >=', $today)->where('status', TIMEOFF_MODEL::STATUS_ACTIVE)->order_by('date', 'ASC')->get()->all;
     $this->data['display'] = $display;
     // view file
     switch ($display) {
         case 'pickup':
         case 'my':
             $view_file = 'index';
             break;
         case 'list':
             $view_file = 'index_browse';
             break;
     }
     $this->data['start_date'] = $start_date;
     $this->data['end_date'] = $end_date;
     $this->data['location_id'] = $location_id;
     $lm = new Location_Model();
     $locations = $lm->get()->all;
     $this->data['locations'] = array();
     foreach ($locations as $loc) {
         $this->data['locations'][$loc->id] = $loc;
     }
     $this->set_include($view_file);
     $this->load->view($this->template, $this->data);
 }
Exemplo n.º 2
0
 function index()
 {
     $args = $this->parse_args(func_get_args());
     $args = array_merge($this->default_params, $args);
     $display = 'all';
     $location_id = array();
     $supplied_location_id = isset($args['location']) ? $args['location'] : '';
     if (strlen($supplied_location_id)) {
         if (strpos($supplied_location_id, ',') !== FALSE) {
             $location_id = explode(',', $supplied_location_id);
             array_walk($location_id, 'intval');
         } else {
             if ($location_id) {
                 $location_id = array($supplied_location_id);
             } else {
                 $location_id = $supplied_location_id;
             }
             // 0 for all
         }
     }
     $staff_id = array();
     $supplied_staff_id = isset($args['staff']) ? $args['staff'] : '';
     if ($supplied_staff_id) {
         if (strpos($supplied_staff_id, ',') !== FALSE) {
             $staff_id = explode(',', $supplied_staff_id);
             array_walk($staff_id, 'intval');
         } elseif ($supplied_staff_id == '_current_user_id_') {
             if ($this->auth && $this->auth->user()) {
                 $staff_id = array($this->auth->user()->id);
             }
         } else {
             $staff_id = array($supplied_staff_id);
         }
     }
     $within = FALSE;
     /* whithin now */
     if (isset($args['within'])) {
         $within = $args['within'];
         if (strlen($within)) {
             $within = urldecode($within);
         }
         $this->hc_time->setNow();
         $start_date = $this->hc_time->formatDate_Db();
         $within_from = $this->hc_time->getTimestamp();
         if ($within) {
             $this->hc_time->modify($within);
         }
         $end_date = $this->hc_time->formatDate_Db();
         $within_to = $this->hc_time->getTimestamp();
         $this->data['within_from'] = $within_from;
         $this->data['within_to'] = $within_to;
     } else {
         if (isset($args['start'])) {
             $start_date = $args['start'];
         } else {
             $start_date = $this->hc_time->setNow()->formatDate_Db();
         }
         if (isset($args['end'])) {
             $end_date = $args['end'];
         } else {
             $end_date = '';
         }
         $this->hc_time->setDateDb($start_date);
         $range = isset($args['range']) ? $args['range'] : '';
         if ($range) {
             switch ($range) {
                 case 'week':
                     $this->hc_time->setStartWeek();
                     $start_date = $this->hc_time->formatDate_Db();
                     $this->hc_time->setEndWeek();
                     $end_date = $this->hc_time->formatDate_Db();
                     break;
                 case 'month':
                     $this->hc_time->setStartMonth();
                     $start_date = $this->hc_time->formatDate_Db();
                     $this->hc_time->setEndMonth();
                     $end_date = $this->hc_time->formatDate_Db();
                     break;
                 default:
                     $this->hc_time->modify('+' . $range);
                     $this->hc_time->modify('-1 day');
                     $end_date = $this->hc_time->formatDate_Db();
                     break;
             }
         }
     }
     /* find dates that we have shifts */
     $shift_model = new Shift_Model();
     $shift_model->select('date');
     $shift_model->where('date >=', $start_date);
     if ($end_date) {
         $shift_model->where('date <=', $end_date);
     }
     $shift_model->group_start();
     $shift_model->where('status', SHIFT_MODEL::STATUS_ACTIVE);
     if ($this->auth->check() && $this->app_conf->get('staff_pick_shifts')) {
         //				$shift_model->or_where('user_id IS ', 'NULL', FALSE);
     } else {
         $shift_model->where('user_id IS NOT ', 'NULL', FALSE);
     }
     $shift_model->group_end();
     if ($location_id) {
         $shift_model->where_related('location', 'id', $location_id);
     }
     if ($staff_id) {
         $shift_model->where_related('user', 'id', $staff_id);
     }
     $shift_model->distinct();
     //		$shift_model->limit( 3 );
     $shift_model->order_by('date', 'ASC');
     $shift_model->order_by('start', 'ASC');
     $shift_model->get();
     //		$shift_model->check_last_query();
     //		exit;
     $dates = array();
     foreach ($shift_model as $s) {
         $dates[] = $s->date;
     }
     $this->data['dates'] = $dates;
     /* preload staff information */
     $um = new User_Model();
     $staffs = $um->get_staff();
     $this->data['staffs'] = array();
     foreach ($staffs as $sta) {
         $this->data['staffs'][$sta->id] = $sta;
     }
     /* preload location information */
     $lm = new Location_Model();
     $locations = $lm->get()->all;
     $this->data['locations'] = array();
     foreach ($locations as $loc) {
         $this->data['locations'][$loc->id] = $loc;
     }
     $this->data['location_id'] = $location_id;
     $this->data['display'] = $display;
     $this->data['within'] = $within;
     /* load shifts so that they can be reused in module displays to save queries */
     $this->_load_shifts($dates, $staff_id, $location_id, $within);
     $view = 'index';
     $this->set_include($view);
     $this->load->view($this->template, $this->data);
     return;
 }
Exemplo n.º 3
0
 function index()
 {
     $args = $this->parse_args(func_get_args());
     $display = isset($args['display']) ? $args['display'] : 'calendar';
     $filter = isset($args['filter']) ? $args['filter'] : 'all';
     $range = isset($args['range']) ? $args['range'] : 'week';
     // or month
     $date = isset($args['start']) ? $args['start'] : '';
     $end_date = isset($args['end']) ? $args['end'] : '';
     $this->data['id'] = isset($args['id']) ? $args['id'] : 0;
     /* check if schedule for this date exists */
     if ($end_date) {
         $start_date = $date;
         if ($end_date < $start_date) {
             $end_date = $start_date;
         }
     } else {
         if ($date) {
             $this->hc_time->setDateDb($date);
         } else {
             $this->hc_time->setNow();
         }
         switch ($range) {
             case 'week':
                 $this->hc_time->setStartWeek();
                 $start_date = $this->hc_time->formatDate_Db();
                 $this->hc_time->setEndWeek();
                 $end_date = $this->hc_time->formatDate_Db();
                 break;
             case 'month':
                 $this->hc_time->setStartMonth();
                 $start_date = $this->hc_time->formatDate_Db();
                 $this->hc_time->setEndMonth();
                 $end_date = $this->hc_time->formatDate_Db();
                 break;
         }
     }
     $this->data['start_date'] = $start_date;
     $this->data['end_date'] = $end_date;
     $this->data['range'] = $range;
     /* working staff */
     $um = new User_Model();
     $this->data['working_staff'] = $um->get_staff();
     $lm = new Location_Model();
     $locations = $lm->get()->all;
     $this->data['locations'] = array();
     foreach ($locations as $loc) {
         $this->data['locations'][$loc->id] = $loc;
     }
     $this->data['display'] = $display;
     $this->data['filter'] = $filter;
     /* load shifts so that they can be reused in module displays to save queries */
     $filter_staff_id = $filter == 'staff' ? $this->data['id'] : 0;
     $this->_load_shifts(array($start_date, $end_date), $filter_staff_id);
     /* save view */
     $this->session->set_userdata(array('schedule_view' => $args));
     switch ($filter) {
         case 'location':
             if (isset($args['id']) && $args['id']) {
                 $location_id = $args['id'];
             } else {
                 $ids = array_keys($this->data['locations']);
                 $location_id = $ids[0];
             }
             $this->data['current_location'] = $this->data['locations'][$location_id];
             break;
         case 'staff':
             if (isset($args['id']) && $args['id']) {
                 $staff_id = $args['id'];
             } else {
                 $ids = array_keys($this->data['staffs']);
                 $staff_id = $ids[0];
             }
             $this->data['current_staff'] = $this->data['staffs'][$staff_id];
             break;
     }
     /* decide which view */
     switch ($display) {
         case 'calendar':
             switch ($filter) {
                 case 'location':
                     $view = 'index_location';
                     break;
                 case 'staff':
                     $view = 'index_staff';
                     break;
                 default:
                     $view = 'index';
                     break;
             }
             $view = 'index_calendar';
             break;
         case 'browse':
             $view = 'index_browse';
             break;
         case 'exportbrowse':
             return $this->export_browse();
             break;
         case 'exportstats':
         case 'stats':
             $stats_shifts = array();
             $stats_drafts = array();
             reset($this->data['staffs']);
             foreach ($this->data['staffs'] as $sta) {
                 if ($filter == 'staff') {
                     if ($sta->id != $this->data['current_staff']->id) {
                         continue;
                     }
                 }
                 $stats_shifts[$sta->id] = array(0, 0);
                 $stats_drafts[$sta->id] = array(0, 0);
             }
             reset($this->data['shifts']);
             foreach ($this->data['shifts'] as $sh) {
                 if (!$sh->user_id) {
                     continue;
                 }
                 if ($sh->date < $this->data['start_date']) {
                     continue;
                 }
                 if ($sh->date > $this->data['end_date']) {
                     continue;
                 }
                 if ($filter == 'location') {
                     if ($sh->location_id != $this->data['current_location']->id) {
                         continue;
                     }
                 }
                 if ($filter == 'staff') {
                     if ($sh->user_id != $this->data['current_staff']->id) {
                         continue;
                     }
                 }
                 if (!isset($stats_shifts[$sh->user_id])) {
                     continue;
                     //						$stats_shifts[$sh->user_id] = array( 0, 0 );
                     //						$stats_drafts[$sh->user_id] = array( 0, 0 );
                 }
                 if ($sh->status == SHIFT_MODEL::STATUS_ACTIVE) {
                     $stats_shifts[$sh->user_id][0] += 1;
                     $stats_shifts[$sh->user_id][1] += $sh->get_duration();
                 } else {
                     $stats_drafts[$sh->user_id][0] += 1;
                     $stats_drafts[$sh->user_id][1] += $sh->get_duration();
                 }
             }
             /* filter archived staff if they have no shifts */
             $archived_users = array();
             $um = new User_Model();
             $um->select('id')->where('active', USER_MODEL::STATUS_ARCHIVE)->get();
             foreach ($um as $u) {
                 $archived_users[] = $u->id;
             }
             if ($archived_users) {
                 $all_users = array_keys($stats_shifts);
                 foreach ($all_users as $uid) {
                     if (in_array($uid, $archived_users) && $stats_shifts[$uid][0] == 0 && $stats_drafts[$uid][0] == 0) {
                         unset($stats_shifts[$uid]);
                         unset($stats_drafts[$uid]);
                     }
                 }
             }
             $this->data['stats_shifts'] = $stats_shifts;
             $this->data['stats_drafts'] = $stats_drafts;
             /* sort by duration */
             uasort($this->data['stats_shifts'], create_function('$a, $b', 'return ($b[1] - $a[1]);'));
             if ($display == 'exportstats') {
                 return $this->export_stats();
             } else {
                 $view = 'index_stats';
             }
             break;
         default:
             $view = 'index_calendar';
             break;
     }
     $this->set_include($view);
     $this->load->view($this->template, $this->data);
     return;
 }