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; }
/** * 获取加班时长 * @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; }