LAPTOP-V9RRD1TL\Michelle's Computer f8f8fcaf96 first commit
2025-07-21 21:38:17 +08:00

183 lines
7.7 KiB
PHP

<?php
$must_login = true ;
$require_path = '../../' ;
$require_sub = '../' ;
require( $require_path.'plugins/geoPHP/geoPHP.inc' ) ;
require( $require_sub.'header.php' ) ;
$boolean_access = false ;
$input_type = $array['input_type'] ;
$qrcode = $array['qrcode'] ;
$latitude = $array['latitude'] ;
$longitude = $array['longitude'] ;
$mac_address = '' ;
$ip_address = '' ;
$staff_settings = [] ;
$staff_id = '' ;
$branch_id = '' ;
if ( $input_type == 'selfpunch' ){
$status = '290' ;
$select_qrcode = $mysqli->query( "SELECT staff_id, branch_id, staff_settings FROM staff
WHERE staff_idno = '".$qrcode."' AND ( staff_date_resigned IS NULL || staff_date_resigned = '0000-00-00' || staff_date_resigned >= '".TODAYDATE."' ) AND deleted_at IS NULL " ) ;
if ( $select_qrcode->num_rows > 0 ){
$boolean_access = true ;
$data_qrcode = $select_qrcode->fetch_assoc() ;
$staff_id = $data_qrcode['staff_id'] ;
$branch_id = $data_qrcode['branch_id'] ;
$staff_settings = $data_qrcode['staff_settings'] ;
}
}else{
if ( $boolean_login ){
$boolean_access = true ;
$staff_id = $staff_info['staff_id'] ;
$branch_id = $staff_info['branch_id'] ;
$staff_settings = $staff_info['staff_settings'] ;
}
}
if ( $boolean_access ){
$status = '300' ;
if ( ( $input_type == 'qrcode' && $qrcode != '' ) || $input_type == 'button' || $input_type == 'selfpunch' ){
$status = '272' ;
$first_string = substr( $qrcode, 0, 1 ) ;
$boolean_qr = false ;
if ( $input_type == 'button' || $input_type == 'selfpunch' ){
$boolean_qr = true ;
$date_code = TODAYDATE ;
$code_status = '0' ;
}else{
$check = $mysqli->query( "SELECT qrcode_id, status, created_at FROM qrcodes
WHERE deleted_at IS NULL AND type = 'checkin' AND code = '".$qrcode."' LIMIT 1" ) ;
if ( $check->num_rows > 0 ){
$get = $check->fetch_assoc() ;
$boolean_qr = true ;
$date_code = $get['created_at'] ;
$code_status = $get['status'] ;
}
}
if ( $boolean_qr ){
$status = '277' ;
$date_current = TODAYDATE ;
$date_time = date('Y-m-d H:i:s', strtotime($date_current . ' -5 minutes')) ;
$date_time_res = date('Y-m-d H:i:s', strtotime($date_current . ' -15 minutes')) ;
$date_group = date('Y-m-d', strtotime($date_current)) ;
// check if code not yet expired.
if ( $date_code > $date_time ){
$status = '276' ;
// check code status
if ( $code_status == '0' ){
$status = '275' ;
// check last check in out time
// get previous check in & out type
$last_attendance_q = $mysqli->query("SELECT type, check_group, created_at FROM staff_attendance
WHERE deleted_at IS NULL AND staff_id = '".$staff_id."' ORDER BY created_at DESC LIMIT 1") ;
$boolean_last = false ;
$boolean_last_att = false ;
if ( $last_attendance_q->num_rows > 0 ){
$last_attendance = $last_attendance_q->fetch_assoc() ;
if ( $date_time_res > $last_attendance['created_at'] ){
$boolean_last = true ;
$boolean_last_att = true ;
}
}else{
$boolean_last = true ;
}
if ( $boolean_last ){
$status = '270' ;
$check_area = 'out' ;
if ( $latitude != '' && $longitude != '' ){
// get this staff branch
$get_branch = $mysqli->query("SELECT branch_geometry FROM branch
WHERE deleted_at IS NULL AND branch_id = '".$branch_id."' LIMIT 1") ;
if ( $get_branch->num_rows > 0 ){
$branch = $get_branch->fetch_assoc() ;
$branch_geometry = $branch['branch_geometry'] ;
if ( $branch_geometry != '' ){
$pointLatLng = geoPHP::load("POINT(".$longitude." ".$latitude.")","wkt") ;
$polygon = geoPHP::load($branch_geometry,'wkt') ;
$inpolygon = $polygon->pointInPolygon($pointLatLng) ;
if ( $inpolygon ){
$check_area = 'in' ;
}
}
}
}
if ( $check_area == 'in' || $staff_settings['without_geometry'] == 'yes' || $input_type == 'selfpunch' ){
// start commit
$error = 0 ;
$mysqli->autocommit( false ) ;
if ( $input_type == 'qrcode' ){
// update qrcode
if ( $mysqli->query("UPDATE qrcodes SET
staff_id = '".$staff_id."',
status = '1',
updated_at = '".TODAYDATE."'
WHERE qrcode_id = '".$get['qrcode_id']."'") ){ }else{
$error++ ;
}
}
$check_type = 'in' ;
if ( $boolean_last_att ){
// check if last attendance is in
if ( $last_attendance['type'] == 'in' ){
$date_group = $last_attendance['check_group'] ;
$check_type = 'out' ;
}
}
// insert new attendance record
if ( $mysqli->query("INSERT INTO staff_attendance
( staff_id, check_group, type, code, record_from, mac_address, ip_address, latitude, longitude, check_area, created_at, updated_at ) VALUES
( '".$staff_id."', '".$date_group."', '".$check_type."', '".$qrcode."', '".$input_type."', '".$mac_address."', '".$ip_address."', '".$latitude."', '".$longitude."', '".$check_area."', '".TODAYDATE."', '".TODAYDATE."' )") ){ }else{
$error++ ;
}
if ( $error == 0 ) {
$mysqli->commit() ;
$status = '200' ;
}else{
$mysqli->rollback() ;
$status = '304' ;
}
}
}
}
}
}
}
}
require( $require_sub.'footer.php' ) ;
?>