/**
  * Get the list of shifts for the given Employee ID
  * 
  * @param $id Shift ID
  * */
 public function getList($id = false)
 {
     $shifts_gateway = Shifts::factory($this->getServiceLocator());
     // select all shifts for the given user
     $result = $shifts_gateway->select(array('employee_id' => $this->params()->fromRoute('user_id')));
     return $result;
 }
 /**
  * Get the list of weekly hours for the given Employee ID
  * 
  * @param $id Week #
  * */
 public function getList($id = false)
 {
     $shifts_gateway = Shifts::factory($this->getServiceLocator());
     $employee_id = $this->params()->fromRoute('user_id');
     // aggregate hours worked each week by the given user
     $result = $shifts_gateway->select(function ($select) use($employee_id, $id) {
         $select->columns(array('employee_id', 'week_id' => new Expression("WEEK(start_time)"), 'start_of_week' => new Expression("DATE_FORMAT(\r\n\t\t\t\t\t\tDATE_ADD(start_time, INTERVAL(1 - DAYOFWEEK(start_time)) + 1 DAY),\r\n\t\t\t\t\t\t'%a, %d %b %Y'\r\n\t\t\t\t\t)"), 'end_of_week' => new Expression("DATE_FORMAT(\r\n\t\t\t\t\t\tDATE_ADD(start_time, INTERVAL(7 - DAYOFWEEK(start_time)) + 1 DAY),\r\n\t\t\t\t\t\t'%a, %d %b %Y'\r\n\t\t\t\t\t)"), 'hours' => new Expression("SUM(TIMESTAMPDIFF(HOUR, start_time, end_time))")));
         $where = new Where();
         $where->equalTo('employee_id', $employee_id);
         if ($id !== false) {
             $where->expression("WEEK(start_time) = ?", array($id));
         }
         $select->where($where);
         $select->group(array(new Expression("WEEK(start_time)")));
     });
     return $result;
 }
 /**
  * Allows a manager to update a shift
  * Curl Execution
  * 		curl -X PUT --data "employee_id=1&start_time=Mon, 14 Dec 2015 08:00:00 -0800&end_time=Mon, 14 Dec 2015 17:00:00 -0800&break=2" http://localhost:8080/rest/managers/2/shifts/6
  * 
  * @param Array $data
  * 			employee_id
  * 			break
  * 			start_time
  * 			end_time
  **/
 public function update($id, $data)
 {
     $shifts_gateway = Shifts::factory($this->getServiceLocator());
     // NOTE: manager_id is not currently use, but can be use for verification/authorization purposes
     $manager_id = $this->params()->fromRoute('manager_id');
     if (!empty($data['start_time'])) {
         $data['start_time'] = strtotime($data['start_time']);
         if ($data['start_time'] === false || $data['start_time'] == 0) {
             return $this->responseError(400, 'invalid start time');
         }
     }
     if (!empty($data['end_time'])) {
         $data['end_time'] = strtotime($data['end_time']);
         if ($data['end_time'] === false || $data['end_time'] == 0) {
             return $this->responseError(400, 'invalid end time');
         }
     }
     if (isset($data['break'])) {
         $data['break'] = empty($data['break']) ? 0 : floatval($data['break']);
     }
     $cnt = $shifts_gateway->update($data, array('id' => $id));
     return array('affected' => $cnt);
 }