示例#1
0
 public function getPunch($req)
 {
     $date = $req->date;
     $arr = explode(" ", $date);
     $date = $arr[0];
     $employee = $this->baseService->getElement('Employee', $this->getCurrentEmployeeId(), null, true);
     //Find any open punch
     $attendance = new Attendance();
     $attendance->Load("employee = ? and DATE_FORMAT( in_time,  '%Y-%m-%d' ) = ? and (out_time is NULL or out_time = '0000-00-00 00:00:00')", array($employee->id, $date));
     if ($attendance->employee == $employee->id) {
         //found an open punch
         return new IceResponse(IceResponse::SUCCESS, $attendance);
     } else {
         return new IceResponse(IceResponse::SUCCESS, null);
     }
 }
示例#2
0
 public function savePunch($req)
 {
     $employee = $this->baseService->getElement('Employee', $req->employee, null, true);
     $inDateTime = $req->in_time;
     $inDateArr = explode(" ", $inDateTime);
     $inDate = $inDateArr[0];
     $outDateTime = $req->out_time;
     $outDate = "";
     if (!empty($outDateTime)) {
         $outDateArr = explode(" ", $outDateTime);
         $outDate = $outDateArr[0];
     }
     $note = $req->note;
     //check if dates are differnet
     if (!empty($outDate) && $inDate != $outDate) {
         return new IceResponse(IceResponse::ERROR, "Attendance entry should be within a single day");
     }
     //compare dates
     if (!empty($outDateTime) && strtotime($outDateTime) <= strtotime($inDateTime)) {
         return new IceResponse(IceResponse::ERROR, "Punch-in time should be lesser than Punch-out time");
     }
     //Find all punches for the day
     $attendance = new Attendance();
     $attendanceList = $attendance->Find("employee = ? and DATE_FORMAT( in_time,  '%Y-%m-%d' ) = ?", array($employee->id, $inDate));
     foreach ($attendanceList as $attendance) {
         if (!empty($req->id) && $req->id == $attendance->id) {
             continue;
         }
         if (empty($attendance->out_time) || $attendance->out_time == "0000-00-00 00:00:00") {
             return new IceResponse(IceResponse::ERROR, "There is a non closed attendance entry for today. Please mark punch-out time of the open entry before adding a new one");
         } else {
             if (!empty($outDateTime)) {
                 if (strtotime($attendance->out_time) >= strtotime($outDateTime) && strtotime($attendance->in_time) <= strtotime($outDateTime)) {
                     //-1---0---1---0 || ---0--1---1---0
                     return new IceResponse(IceResponse::ERROR, "Time entry is overlapping with an existing one");
                 } else {
                     if (strtotime($attendance->out_time) >= strtotime($inDateTime) && strtotime($attendance->in_time) <= strtotime($inDateTime)) {
                         //---0---1---0---1 || ---0--1---1---0
                         return new IceResponse(IceResponse::ERROR, "Time entry is overlapping with an existing one");
                     } else {
                         if (strtotime($attendance->out_time) <= strtotime($outDateTime) && strtotime($attendance->in_time) >= strtotime($inDateTime)) {
                             //--1--0---0--1--
                             return new IceResponse(IceResponse::ERROR, "Time entry is overlapping with an existing one");
                         }
                     }
                 }
             } else {
                 if (strtotime($attendance->out_time) >= strtotime($inDateTime) && strtotime($attendance->in_time) <= strtotime($inDateTime)) {
                     //---0---1---0
                     return new IceResponse(IceResponse::ERROR, "Time entry is overlapping with an existing one");
                 }
             }
         }
     }
     $attendance = new Attendance();
     if (!empty($req->id)) {
         $attendance->Load("id = ?", array($req->id));
     }
     $attendance->in_time = $inDateTime;
     if (empty($outDateTime)) {
         $attendance->out_time = "0000-00-00 00:00:00";
     } else {
         $attendance->out_time = $outDateTime;
     }
     $attendance->employee = $req->employee;
     $attendance->note = $note;
     $ok = $attendance->Save();
     if (!$ok) {
         error_log($attendance->ErrorMsg());
         return new IceResponse(IceResponse::ERROR, "Error occured while saving attendance");
     }
     return new IceResponse(IceResponse::SUCCESS, $attendance);
 }