/**
  * @return \Zend\Http\Response|ViewModel
  */
 public function detailAction()
 {
     $id = (int) $this->params()->fromRoute('id', 0);
     $helper = new AttendanceBoardHelper();
     $form = $helper->getForm($this->staffCombo());
     $attendance = $this->attendanceTable()->getAttendance($id);
     if (!$attendance) {
         $attendance = new ArrayObject(array('attendanceId' => $id));
     } else {
         $attendance = new ArrayObject($attendance->getArrayCopy());
     }
     $attendance['hour'] = (int) date('H', time());
     $attendance['minute'] = round((int) date('i', time()) / 5);
     if ($attendance['hour'] > 12 && strlen($attendance['inTime']) > 1) {
         $attendance['type'] = 'O';
     } else {
         $attendance['type'] = 'I';
     }
     $form->bind($attendance);
     $request = $this->getRequest();
     if ($request->isPost()) {
         $post_data = $request->getPost();
         $form->setData($post_data);
         $form->setInputFilter($helper->getInputFilter());
         if ($form->isValid()) {
             $newData = $this->attendanceTable()->getAttendanceByStaff($attendance['staffId'], $attendance['attendanceDate']);
             if (!$newData) {
                 $newData = new Attendance();
                 $newData->exchangeArray($attendance->getArrayCopy());
             }
             $time = sprintf('%02d:%02d:00', $attendance['hour'], $attendance['minute'] * 5);
             if ($attendance['type'] == 'I') {
                 $newData->setInTime($time);
             } else {
                 $newData->setOutTime($time);
             }
             $this->attendanceTable()->saveAttendance($newData);
             $this->flashMessenger()->addSuccessMessage('Save successful');
             return $this->redirect()->toRoute('hr_attendance');
         }
     }
     return new ViewModel(array('form' => $form, 'id' => $id));
 }
 public function jsonAttendanceAction()
 {
     $request = $this->getRequest();
     if ($request->isPost()) {
         $this->init_data();
         $attendance = $this->attendanceTable()->checkAttendance($this->staff->getStaffId(), date('Y-m-d', time()));
         if (!$attendance) {
             $attendance = new Attendance();
             $attendance->exchangeArray(array('staffId' => $this->staff->getStaffId(), 'attendanceDate' => date('Y-m-d', time())));
         }
         $message = 'success';
         try {
             $type = $this->params()->fromPost('status', '');
             if ($type == 'I' && !$attendance->getInTime()) {
                 $attendance->setInTime(date('H:i:s', time()));
                 $this->attendanceTable()->saveAttendance($attendance);
             } else {
                 if ($type == 'O' && !$attendance->getOutTime()) {
                     $attendance->setOutTime(date('H:i:s', time()));
                     $this->attendanceTable()->saveAttendance($attendance);
                 } else {
                     $message = 'You already registered. Please contact to HR if you want to change time.';
                 }
             }
         } catch (\Exception $ex) {
             $message = $ex->getMessage();
         }
         return new JsonModel(array('message' => $message));
     }
     return new JsonModel(array('message' => 'Invalid request.'));
 }
 /**
  * @param Attendance $attendance
  * @return Attendance
  */
 public function saveAttendance(Attendance $attendance)
 {
     $id = $attendance->getAttendanceId();
     $data = $attendance->getArrayCopy();
     if ($id > 0) {
         $this->update($data, array('attendanceId' => $id));
     } else {
         unset($data['attendanceId']);
         $this->insert($data);
     }
     if (!$attendance->getAttendanceId()) {
         $attendance->setAttendanceId($this->getLastInsertValue());
     }
     return $attendance;
 }