Beispiel #1
0
 public function setClockType($id, $employment_type, $time_in, $time_out)
 {
     // 打卡超过分钟数
     $clock_arr = array('clock_chk' => 1, 'type' => 0, 'sec_late' => 0, 'sec_leave' => 0, 'sec_truancy_half' => 0, 'sec_truancy' => 0, 'clock_info' => null);
     $time = isset($time_in) && $time_in != '' ? $time_in : $time_out;
     $time = strtotime($time);
     $date = date('Y-m-d', $time);
     $worktime = new Hra_Model_Worktime();
     $where = "type = " . $employment_type . " and active_from <= '" . $date . "' and active_to >= '" . $date . "'";
     if ($worktime->fetchAll($where)->count() > 0) {
         $data = $worktime->fetchRow($where)->toArray();
         $work_from = substr($data['work_from'], 11);
         $work_to = substr($data['work_to'], 11);
         $work_from_time = strtotime($date . ' ' . $work_from);
         $work_to_time = strtotime($date . ' ' . $work_to);
         $limit_late_time = $work_from_time + $data['limit_late'] * 60;
         $limit_leave_time = $work_to_time - $data['limit_leave'] * 60;
         $limit_truancy_half_from_time = $work_from_time + $data['limit_truancy_half'] * 60;
         $limit_truancy_half_to_time = $work_to_time - $data['limit_truancy_half'] * 60;
         $limit_truancy_from_time = $work_from_time + $data['limit_truancy'] * 60;
         $limit_truancy_to_time = $work_to_time - $data['limit_truancy'] * 60;
         $clock_info_arr = array();
         // 检查上班时间
         if (isset($time_in) && $time_in != '') {
             $time = strtotime($time_in);
             if ($time > $limit_late_time) {
                 if ($time <= $limit_truancy_half_from_time) {
                     // 迟到
                     $clock_arr['sec_late'] = $time - $work_from_time;
                     $clock_arr['type'] = 1;
                     array_push($clock_info_arr, '迟到');
                 } else {
                     if ($time <= $limit_truancy_from_time) {
                         // 旷工半天
                         $clock_arr['sec_truancy_half'] += $time - $work_from_time;
                         $clock_arr['type'] = 3;
                         array_push($clock_info_arr, '旷工半天');
                     } else {
                         // 旷工一天
                         $clock_arr['sec_truancy'] += $time - $work_from_time;
                         $clock_arr['type'] = 4;
                         array_push($clock_info_arr, '旷工一天');
                     }
                 }
             }
         }
         // 检查下班时间
         if (isset($time_out) && $time_out != '') {
             $time = strtotime($time_out);
             if ($time < $limit_leave_time) {
                 if ($time >= $limit_truancy_half_to_time) {
                     // 早退
                     $clock_arr['sec_leave'] = $work_to_time - $time;
                     $clock_arr['type'] = 2;
                     array_push($clock_info_arr, '早退');
                 } else {
                     if ($time >= $limit_truancy_to_time) {
                         // 旷工半天
                         $clock_arr['sec_truancy_half'] += $work_to_time - $time;
                         $clock_arr['type'] = $clock_arr['type'] < 3 ? 3 : $clock_arr['type'];
                         // 取最大值(1:迟到,2:早退,3:旷工半天,4:旷工一天)
                         array_push($clock_info_arr, '旷工半天');
                     } else {
                         // 旷工一天
                         $clock_arr['sec_truancy'] += $work_to_time - $time;
                         $clock_arr['type'] = $clock_arr['type'] < 4 ? 4 : $clock_arr['type'];
                         // 取最大值(1:迟到,2:早退,3:旷工半天,4:旷工一天)
                         array_push($clock_info_arr, '旷工一天');
                     }
                 }
             }
         }
         $clock_arr['clock_info'] = implode(',', $clock_info_arr);
         // 更新记录
         $this->update($clock_arr, "id = " . $id);
     }
     return $clock_arr;
 }
Beispiel #2
0
 /**
  * 获取加班时长
  * @param unknown $userType
  * @param unknown $from
  * @param unknown $to
  * @return multitype:number NULL multitype:
  */
 public function getOvertimeQtyByTimeRange($userType, $from, $to)
 {
     $result = array('qty' => 0, 'qty_hours' => 0, 'work_day' => null);
     $workDayQty = 0;
     $workDayQty_hours = 0;
     $workDayArr = array();
     if (strtotime($from) < strtotime($to)) {
         $dayCnt = 1;
         $fromDate = date('Y-m-d', strtotime($from));
         $toDate = date('Y-m-d', strtotime($to));
         // 时间范围包含天数
         $cnt = (strtotime($toDate) - strtotime($fromDate)) / 3600 / 24 + 1;
         $workTime = new Hra_Model_Worktime();
         for ($i = 0; $i < $cnt; $i++) {
             $date = date('Y-m-d', strtotime($fromDate . "+" . $i . " day"));
             // 获取工作日设置(暂时统一工人、员工的工作日设置)
             //$workDayRes = $this->fetchAll("employment_type = ".$userType." and day = '".$date."'");
             $workDayRes = $this->fetchAll("employment_type = 1 and day = '" . $date . "'");
             if ($workDayRes->count() > 0) {
                 $workDayInfo = $workDayRes->toArray();
                 // 记录加班时间范围所包含的工作日
                 array_push($workDayArr, $date);
                 // 获取工作时间设置
                 $workTimeRes = $workTime->fetchAll("type = " . $userType . " and active_from <= '" . $date . "' and active_to >= '" . $date . "'");
                 //$workTimeRes = $workTime->fetchAll("type = 0 and active_from <= '".$date."' and active_to >= '".$date."'");
                 if ($workTimeRes->count() > 0) {
                     $workTimeInfo = $workTimeRes->toArray();
                     $work_from = $from;
                     $work_to = $to;
                     $c_work_from = $date . ' ' . substr($workTimeInfo[0]['work_from'], 11);
                     $c_work_to = $date . ' ' . substr($workTimeInfo[0]['work_to'], 11);
                     $c_rest_from = $date . ' ' . substr($workTimeInfo[0]['rest_from'], 11);
                     $c_rest_to = $date . ' ' . substr($workTimeInfo[0]['rest_to'], 11);
                     // 加班时间是否超过1天
                     if ($cnt > 1) {
                         if ($i == 0 || $i == $cnt - 1) {
                             if ($i == 0) {
                                 // 第一天:下班时间为公司规定下班时间
                                 $work_to = $date . ' 23:59:59';
                             } else {
                                 if ($i == $cnt - 1) {
                                     // 最后一天:上班时间为公司规定上班时间
                                     $work_from = $date . ' 00:00:00';
                                 }
                             }
                             $qty = $this->getWorkdayQty($work_from, $work_to, $c_work_from, $c_work_to, $c_rest_from, $c_rest_to, 'overtime', $workDayInfo[0]['type']);
                             $workDayQty += $qty['qty'];
                             $workDayQty_hours += $qty['qty_hours'];
                         } else {
                             // 没设置午休时间的情况设置为0
                             $c_rest_to_sec = $c_rest_to ? strtotime($c_rest_to) : 0;
                             $c_rest_from_sec = $c_rest_from ? strtotime($c_rest_from) : 0;
                             // 规定工作小时数:用于根据小时数计算天数
                             $c_hours = round((strtotime($c_work_to) - strtotime($c_work_from) - ($c_rest_to_sec - $c_rest_from_sec)) / 3600, 4);
                             $qty_hours = 0;
                             if ($workDayInfo[0]['type'] == 1) {
                                 $qty_hours = 24 - $c_hours - ($c_rest_to_sec - $c_rest_from_sec) / 3600;
                             } else {
                                 $qty_hours = 24;
                             }
                             $workDayQty_hours += $qty_hours;
                             $workDayQty += round($qty_hours / $c_hours, 4);
                         }
                     } else {
                         $qty = $this->getWorkdayQty($work_from, $work_to, $c_work_from, $c_work_to, $c_rest_from, $c_rest_to, 'overtime', $workDayInfo[0]['type']);
                         $workDayQty = $qty['qty'];
                         $workDayQty_hours = $qty['qty_hours'];
                     }
                 }
             }
         }
     }
     $result['qty'] = $workDayQty;
     $result['qty_hours'] = $workDayQty_hours;
     $result['work_day'] = $workDayArr;
     return $result;
 }
 /**
  * 编辑工作时间设置
  */
 public function editworktimeAction()
 {
     // 返回值数组
     $result = array('success' => true, 'info' => '编辑成功');
     $request = $this->getRequest()->getParams();
     $now = date('Y-m-d H:i:s');
     $user_session = new Zend_Session_Namespace('user');
     $user_id = $user_session->user_info['user_id'];
     $json = json_decode($request['json']);
     $updated = $json->updated;
     $inserted = $json->inserted;
     $deleted = $json->deleted;
     $worktime = new Hra_Model_Worktime();
     if (count($updated) > 0) {
         foreach ($updated as $val) {
             if ($worktime->fetchAll("id != " . $val->id . " and type = " . $val->type)->count() == 0) {
                 $data = array('type' => $val->type, 'active_from' => $val->active_from, 'active_to' => $val->active_to, 'work_from' => str_replace('T', ' ', $val->work_from), 'work_to' => str_replace('T', ' ', $val->work_to), 'rest_from' => str_replace('T', ' ', $val->rest_from), 'rest_to' => str_replace('T', ' ', $val->rest_to), 'limit_late' => $val->limit_late, 'limit_leave' => $val->limit_leave, 'limit_truancy_half' => $val->limit_truancy_half, 'limit_truancy' => $val->limit_truancy, 'remark' => $val->remark, 'update_time' => $now, 'update_user' => $user_id);
                 $where = "id = " . $val->id;
                 try {
                     $worktime->update($data, $where);
                 } catch (Exception $e) {
                     $result['success'] = false;
                     $result['info'] = $e->getMessage();
                     echo Zend_Json::encode($result);
                     exit;
                 }
             } else {
                 $result['success'] = false;
                 $result['info'] = '用工形式数据已存在,请勿重复添加!';
                 echo Zend_Json::encode($result);
                 exit;
             }
         }
     }
     if (count($inserted) > 0) {
         foreach ($inserted as $val) {
             if ($worktime->fetchAll("type = " . $val->type)->count() == 0) {
                 $data = array('type' => $val->type, 'active_from' => $val->active_from, 'active_to' => $val->active_to, 'work_from' => $val->work_from, 'work_to' => $val->work_to, 'rest_from' => $val->rest_from, 'rest_to' => $val->rest_to, 'limit_late' => $val->limit_late, 'limit_leave' => $val->limit_leave, 'limit_truancy_half' => $val->limit_truancy_half, 'limit_truancy' => $val->limit_truancy, 'remark' => $val->remark, 'create_time' => $now, 'create_user' => $user_id, 'update_time' => $now, 'update_user' => $user_id);
                 try {
                     $worktime->insert($data);
                 } catch (Exception $e) {
                     $result['success'] = false;
                     $result['info'] = $e->getMessage();
                     echo Zend_Json::encode($result);
                     exit;
                 }
             } else {
                 $result['success'] = false;
                 $result['info'] = '用工形式数据已存在,请勿重复添加!';
                 echo Zend_Json::encode($result);
                 exit;
             }
         }
     }
     if (count($deleted) > 0) {
         foreach ($deleted as $val) {
             try {
                 $worktime->delete("id = " . $val->id);
             } catch (Exception $e) {
                 $result['success'] = false;
                 $result['info'] = $e->getMessage();
                 echo Zend_Json::encode($result);
                 exit;
             }
         }
     }
     echo Zend_Json::encode($result);
     exit;
 }