File manager - Edit - /home/wwwroot/camplus.hk/master.camplus.hk/public_html/application/modules/attendance/models/Attendance_model.php
Back
<?php Class Attendance_model extends CI_Model { function getAttendanceReport($date) { $attendancereport=[]; $todaysattendance = $this->db->query("SELECT `users`.`id`,`users`.`username`, users.name_chinese, users.name_english FROM users WHERE users.status='ACTIVE'")->result_array(); for ($i = 0; $i < count($todaysattendance); $i++) { $name = $todaysattendance[$i][$_COOKIE['language'] == 'en' ? 'name_english' : 'name_chinese']; $uid['id'] = $todaysattendance[$i]['id']; $uid['name'] = $name; // Get approval group the user belongs to $apg = $this->db ->select('GROUP_CONCAT(ls_approval_group_user.ag_id) as ap_group') ->group_by('uid') ->get_where('ls_approval_group_user', array('uid' => $uid['id'])) ->row_array(); $attendancereport = array_merge($attendancereport, $this->calculate_report($date, $uid, $apg)); } return $attendancereport; } function getGroupAttendanceReport($date,$end_date) { $attendancereport=[]; $start_date = date ("Y-m-d", strtotime("-1 day", strtotime($date))); $date = $start_date; $apg_users = $this->db->query('SELECT GROUP_CONCAT(ls_approval_group_user.uid) as uid_group FROM `ls_approval_group_level` LEFT JOIN ls_approval_group_user on ls_approval_group_user.ag_id = ls_approval_group_level.gid where ls_approval_group_level.uid = ' . $this->session->userdata('id') . ' group by ls_approval_group_level.uid' )->row_array(); if (!empty($apg_users)) { $todaysattendance = "SELECT `users`.`id`,`users`.`username`, users.name_chinese, users.name_english FROM users WHERE users.id in (" .$apg_users['uid_group'].") and users.status='ACTIVE'"; $todaysattendance = $this->db->query($todaysattendance); $todaysattendance_list = $todaysattendance->result_array(); for($i=0;$i<count($todaysattendance_list);$i++) { $date = $start_date; $name = $todaysattendance_list[$i][$_COOKIE['language']==='en' ? 'name_english' : 'name_chinese']; $uid['id']=$todaysattendance_list[$i]['id']; $uid['name']=$name; //Get approval group the user belongs to $apg = $this->db->select('GROUP_CONCAT(ls_approval_group_user.ag_id) as ap_group')->group_by('uid')->get_where('ls_approval_group_user',array('uid' => $uid['id']))->row_array(); while (strtotime($date) < strtotime($end_date)) { $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); $attendancereport = array_merge($attendancereport, $this->calculate_report($date,$uid,$apg)); } } return $attendancereport; } else { show_error('You do not belongs to any groups'); } } function getMyAttendanceReport($date,$end_date) { $attendancereport=[]; $todaysattendance = $this->db->query("SELECT `users`.`id`,`users`.`username`, users.name_chinese, users.name_english FROM users WHERE users.id=" . $this->session->userdata('id')); $user= $todaysattendance->row_array(); $date = date ("Y-m-d", strtotime("-1 day", strtotime($date))); if($_COOKIE['language']=='en') $name = $user['name_english']; else $name = $user['name_chinese']; $uid['id']=$user['id']; $uid['name']=$name; //Get approval group the user belongs to $apg = $this->db->select('GROUP_CONCAT(ls_approval_group_user.ag_id) as ap_group')->group_by('uid')->get_where('ls_approval_group_user',array('uid' => $uid['id']))->row_array(); while (strtotime($date) <= strtotime($end_date)) { $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); $attendancereport = array_merge($attendancereport, $this->calculate_report($date,$uid,$apg)); } return $attendancereport; } function getRangedAttendanceReport($startDate, $endDate) { $attendancereport = []; $endDate = date ("Y-m-d", strtotime("+1 day", strtotime($endDate))); $date = $startDate; while (strtotime($date) < strtotime($endDate)) { $attendancereport = array_merge($attendancereport, $this->getAttendanceReport($date)); $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); } return $attendancereport; } function getRangedAttendanceRecord($startDate, $endDate) { $attendancereport = []; $endDate = date ("Y-m-d", strtotime("+1 day", strtotime($endDate))); $date = $startDate; $this->db->join('at_user_card','at_user_card.card = at_record.card'); $this->db->join('users','at_user_card.uid = users.id'); $attendancereport = $this->db->get_where('at_record','at_record.date_time < "' . $endDate . '" and at_record.date_time > "' . $date . '"')->result_array(); return $attendancereport; } function saveAttendanceReport($data) { $this->db->insert('at_attendance_report',$data); return $this->db->insert_id(); } function calculate_report($date,$uid,$apg) { $attendancereports=[]; $user_card_result = $this->db->get_where('at_user_card',array('uid'=>$uid['id']))->result_array(); if(!empty($user_card_result)) { $user_cards = array_map (function($value){ return $value['card']; } , $user_card_result); $strule = "select time_in, time_out from at_special_attendance_timeset join at_special_attendance on at_special_attendance.sat_id=at_special_attendance_timeset.sa_id where FIND_IN_SET('" . $date."',dates)>0 and uid=".$uid['id']; $checkSpecialincheckouttime = $this->db->query($strule)->row_array(); if(empty($checkSpecialincheckouttime)) { //Get REQUIRED time and and time out for user $trule="SELECT `at_daily_attendance_timeset`.`time_in`, `at_daily_attendance_timeset`.`time_out` FROM `at_attendance_rule_dates` inner join `at_daily_attendance` on `at_daily_attendance`.`id`=`at_attendance_rule_dates` .`da_id` inner join `at_daily_attendance_timeset` on `at_daily_attendance_timeset`.`da_id`=`at_daily_attendance`.`id` where day='".$date."' and uid=".$uid['id']; $checkincheckouttimes = $this->db->query($trule)->result_array(); } else { $checkincheckouttimes[0]['time_in']=$checkSpecialincheckouttime['time_in']; $checkincheckouttimes[0]['time_out']=$checkSpecialincheckouttime['time_out']; } //Check if user took leave $remarks_leave="SELECT from_time, to_time, reason, half_day, status, lt_id FROM `ls_leave_application` where `uid`=".$uid['id']." and FIND_IN_SET('" . $date."',dates)>0 and (status = 'A' AND status != 'R') order by id desc "; $remarks_leave_satus = $this->db->query($remarks_leave)->result_array(); foreach($checkincheckouttimes as $checkincheckouttime) { //Check uesr check in & check out record $card_record ="SELECT `at_record`.`date_time` FROM `at_record` where TRIM(LEADING '0' FROM ltrim(at_record.card)) IN (". implode(',',$user_cards) .") and DATE(`at_record`.`date_time`) ='".$date . "'"; /* // 1 hour limit if(!empty($checkincheckouttime['time_in'])){ $timestamp = strtotime($checkincheckouttime['time_in']) + 120*60; $time = date('H:i', $timestamp); $checkin .= " and at_record.date_time < '" . $date . " " . $time . "'"; }*/ $card_record.=" order by date_time asc"; $card_record_result = $this->db->query($card_record)->result_array(); foreach($card_record_result as $k=>$result) { if($k==0) $checkin_record_time = $result; if($k!=0 && $k==count($card_record_result)-1) $checkout_record_time = $result; } if (!empty($checkin_record_time['date_time'])) { $datetime = new DateTime($checkin_record_time['date_time']); $checkintime = $datetime->format('H:i:s'); } else $checkintime=""; if (!empty($checkout_record_time['date_time'])) { $datetime = new DateTime($checkout_record_time['date_time']); $checkouttime = $datetime->format('H:i:s'); } else $checkouttime=""; //Get confirmed check_in and check_out time perticuler user eg. uid=1 $confirmed = $this->db->get_where('at_attendance_report',array('uid' => $uid['id'],'date'=>$date))->result_array(); if(empty($confirmed)) { if($checkintime =="") $checkin_status= "ABSENT"; else if($checkincheckouttime['time_in'] > $checkintime) $checkin_status='NORMAL'; else { $checkin_status="LATE"; } if($checkouttime =="") $checkout_status= "ABSENT"; else if($checkincheckouttime['time_out'] < $checkouttime) $checkout_status='Normal'; else { $checkout_status="EARLY"; } $remarks = 'None'; if (!empty($remarks_leave_satus)) { //Case: User took leave $remarks = ''; foreach($remarks_leave_satus as $leave_remark) { if($leave_remark['from_time']!="00:00:00")$leave_from = $leave_remark['from_time']; if($leave_remark['to_time']!="00:00:00")$leave_to = $leave_remark['to_time']; $remarks .= $leave_remark['reason']; if(!empty($leave_from)&&!empty($leave_to)) { $remarks.= ' (' . $leave_from .' - ' . $leave_to . ')'; } $remarks .= '<br/>'; } } // check current date overtime reason $ot_remarks="None"; $remarks_ottime="SELECT from_time, to_time, remarks, status FROM `ot_overtime` where `uid`=".$uid['id']." and DATE(`date`) ='".$date."' order by id desc limit 0,1 "; $remarks_ottime = $this->db->query($remarks_ottime); $remarks_ottime_satus= $remarks_ottime->row_array(); if(!empty($remarks_ottime_satus)) { $ot_remarks= $remarks_ottime_satus['remarks']; }else { $ot_remarks="None"; } //echo $uid['name'] . ' | ' . $date . PHP_EOL; //print_r($checkincheckouttime); //print_r($apg); $attendancereport=array('uid'=>$uid['id'],'date'=>$date,'agp'=>!empty($apg)?$apg['ap_group']:'','name'=>$uid['name'],'in_time'=>$checkincheckouttime['time_in'],'check_in'=>$checkintime ,'in_status'=>$checkin_status,'out_time'=>$checkincheckouttime['time_out'],'check_out'=> $checkouttime,'out_status'=>$checkout_status,'in_remarks'=>$remarks,'out_remarks'=>$remarks,'overtime'=>$ot_remarks); } else { foreach($confirmed as $row){ if($row['direction']=='IN') $confirmed_in = $row; else $confirmed_out = $row; } $leave_remarks = ''; if (!empty($remarks_leave_satus)) { //Case: User took leave foreach($remarks_leave_satus as $leave_remark) { if($leave_remark['from_time']!="00:00:00")$leave_from = $leave_remark['from_time']; if($leave_remark['to_time']!="00:00:00")$leave_to = $leave_remark['to_time']; $leave_remarks .= $leave_remark['reason']; if(!empty($leave_from)&&!empty($leave_to)) { $leave_remarks.= ' (' . $leave_from .' - ' . $leave_to . ')'; } } if($confirmed_out['remarks']!= "None") { $confirmed_out['remarks'] . '\n' . $leave_remarks; } else { $confirmed_out['remarks'] = $leave_remarks; } } // check current date overtime reason $ot_remarks="None"; $remarks_ottime="SELECT from_time, to_time, remarks, status FROM `ot_overtime` where `uid`=".$uid['id']." and DATE(`date`) ='".$date."' order by id desc limit 0,1 "; $remarks_ottime = $this->db->query($remarks_ottime); $remarks_ottime_satus= $remarks_ottime->row_array(); if(!empty($remarks_ottime_satus)) { $ot_remarks= $remarks_ottime_satus['remarks']; }else { $ot_remarks="None"; } $attendancereport=array('uid'=>$uid['id'],'date'=>$date,'agp'=>$apg['ap_group'],'name'=>$uid['name'],'in_time'=>$checkincheckouttime['time_in'],'check_in'=>$checkintime ,'in_status'=>$confirmed_in['status'],'in_remarks'=>$confirmed_in['remarks'],'out_time'=>$checkincheckouttime['time_out'],'check_out'=> $checkouttime,'out_status'=>$confirmed_out['status'],'out_remarks'=>$confirmed_out['remarks'],'overtime'=>$ot_remarks,'confirmed'=>allUsers($confirmed_out['updatedby']),'time'=>$confirmed_out['time']); } $attendancereports[] = $attendancereport; } return $attendancereports; } else { return array(); } } }
| ver. 1.4 |
Github
|
.
| PHP 7.2.34 | Generation time: 0.77 |
proxy
|
phpinfo
|
Settings