/** * 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); }