980 lines
58 KiB
PHP
Executable File
980 lines
58 KiB
PHP
Executable File
#!/usr/bin/php
|
|
<?php
|
|
include('zklib/ZKLib.php');
|
|
|
|
class LogController
|
|
{
|
|
// $ppHCMTT#2024
|
|
|
|
public function fn_getconn(){
|
|
$pdo = new PDO("mysql:host=localhost;dbname=dbhcm", "apphcm", "\$ppHCMTT#2024");
|
|
return $pdo;
|
|
}
|
|
public function selectquerySP($sql){
|
|
// $pdo = new PDO("mysql:host=".DB_HOST_NAME.";dbname=".DB_IMS, DB_USER_NAME, DB_USER_PASS);
|
|
$pdo = $this->fn_getconn(); //new PDO("mysql:host=localhost;dbname=dbhcm", "apphcm", "\$pp");
|
|
$q = $pdo->query($sql);
|
|
$q->setFetchMode(PDO::FETCH_ASSOC);
|
|
return $q;
|
|
}
|
|
|
|
public function executeSP($qry){
|
|
$rtn=false;
|
|
$pdo = $this->fn_getconn();
|
|
$statement = $pdo->prepare($qry);
|
|
if($statement->execute()){
|
|
$rtn=true;
|
|
}
|
|
return $rtn;
|
|
}
|
|
|
|
public function fn_getfieldvalue($fieldname,$qry){
|
|
$rs=$this->selectquerySP($qry);
|
|
$rtn="";
|
|
if($rs){
|
|
// $rw=$rs->fetch();
|
|
// $rtn=$rw[$fieldname];
|
|
while($rw=$rs->fetch()){
|
|
$rtn=$rw[$fieldname];
|
|
}
|
|
}
|
|
return $rtn;
|
|
}
|
|
|
|
public function fn_getfieldsvalues($fieldname,$qry){
|
|
$rs=$this->selectquerySP($qry);
|
|
$rtn="";
|
|
if($rs){
|
|
// $rw=$rs->fetch();
|
|
// $rtn=$rw[$fieldname];
|
|
while($rw=$rs->fetch()){
|
|
$d=explode(",",$fieldname);
|
|
for($i=0;$i<count($d);$i++){
|
|
$rtn.=$rw[$d[$i]].",";
|
|
}
|
|
|
|
}
|
|
// echo $rtn;return false;
|
|
$rtn=substr($rtn,0,strlen($rtn)-1);
|
|
}
|
|
return explode(",",$rtn);
|
|
}
|
|
|
|
|
|
public function index()
|
|
{
|
|
$argv=$_SERVER['argv'];
|
|
// echo $argv[1];return false;
|
|
$date=(isset($argv[1]) ? $argv[1] : "");
|
|
|
|
if(!$date){
|
|
echo "Parameter tanggal belum dimasukkan \n";return false;
|
|
}
|
|
//echo $date;return false;
|
|
echo "Date Reprocess : ".$date."\n";
|
|
$qry="select * from tbl_deviceinfo where isdeleted=0 order by _idx asc";
|
|
#echo $qry;
|
|
$rs=$this->selectquerySP($qry);
|
|
if($rs){
|
|
while($rw=$rs->fetch()){
|
|
$ip=$rw['deviceip'];
|
|
$zk = new ZKLib($ip);
|
|
echo "Start time : ".date("Y-m-d H:i:s")."\n";
|
|
echo $ip."\n";
|
|
// die();
|
|
$allData = [];
|
|
$connectStatus = $zk->connect();
|
|
|
|
// echo $connectStatus;
|
|
if ($connectStatus) {
|
|
try {
|
|
$zk->disableDevice();
|
|
// $zk->clearAttendance();
|
|
$users = $zk->getUser();
|
|
$getData = $zk->getAttendance();
|
|
// echo json_encode($getData);
|
|
$data = [];
|
|
foreach ($getData as $att) {
|
|
// echo date("Y-m-d", strtotime($att['timestamp']));
|
|
if (date("Y-m-d", strtotime($att['timestamp'])) == $date) {
|
|
// $data[] = [
|
|
// "idUser" => $att['id'],
|
|
// "name" => isset($users[$att['id']]) ? $users[$att['id']]['name'] : $att['id'],
|
|
// "state" => ZK\Util::getAttState($att['state']),
|
|
// "date" => date("Y-m-d", strtotime($att['timestamp'])),
|
|
// "time" => date("H:i:s", strtotime($att['timestamp'])),
|
|
// "deviceIP" => $ip
|
|
// ];
|
|
// echo json_encode($att)."\n";
|
|
//echo "Process dates : ".date("Y-m-d", strtotime($att['timestamp']))."\n";
|
|
$res=$this->fn_setattendance($att, $ip);
|
|
$reslog=$this->fn_setattendancelogs($att, $ip);
|
|
$data[] = [
|
|
"fingerid" => $att['id'],
|
|
"time" => date("Y-m-d H:i:s", strtotime($att['timestamp'])),
|
|
"status" => $res
|
|
];
|
|
}
|
|
}
|
|
$allData = array_merge($allData, $data);
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage();
|
|
} finally {
|
|
$zk->disconnect();
|
|
}
|
|
}
|
|
echo "End time : ".date("Y-m-d H:i:s")."\n\n";
|
|
}
|
|
}
|
|
// === Rekon deviceid
|
|
$qry="update tbl_attendanceemployee a, tbl_deviceinfo d set a.deviceid=d.deviceid where d.deviceip=a.fingerip and a.deviceid is null or a.deviceid=''";
|
|
$this->executeSP($qry);
|
|
|
|
$qry="update tbl_attendanceemployee a, tbl_deviceinfo d set a.deviceidcheckout=d.deviceid where d.deviceip=a.fingerip and a.deviceidcheckout is null or a.deviceidcheckout=''";
|
|
$this->executeSP($qry);
|
|
return true;
|
|
// header('Content-Type: application/json');
|
|
// return json_encode($allData);
|
|
}
|
|
|
|
public function fn_setattendancelogs($data, $ip){
|
|
$rtn=false;
|
|
$dates=date("Y-m-d", strtotime($data['timestamp']));
|
|
$times=date("H:i:s", strtotime($data['timestamp']));
|
|
$qry="insert into tbl_attendancelogs
|
|
set fingerid='".$data['id']."',username='".$data['id']."',dates='$dates',times='$times',deviceip='$ip',iby='svc',idt=now()";
|
|
$qryexists="select _idx from tbl_attendancelogs
|
|
where trim(fingerid)=trim('".$data['id']."')
|
|
and dates='$dates' and times='$times' and isdeleted=0
|
|
order by _idx desc limit 1";
|
|
$idx=$this->fn_getfieldvalue("_idx",$qryexists);
|
|
if($idx){
|
|
$qry="update tbl_attendancelogs
|
|
set udt=now()
|
|
where _idx='$idx'";
|
|
}
|
|
|
|
if($this->executeSP($qry)){
|
|
$rtn=true;
|
|
}
|
|
return $rtn;
|
|
}
|
|
|
|
public function fn_setattendance($data, $ip){
|
|
$rtn=false;
|
|
$months=(int)date("m", strtotime($data['timestamp']));
|
|
$years=(int)date("Y", strtotime($data['timestamp']));
|
|
$timestamp=(int)date("Hi", strtotime($data['timestamp']));
|
|
$timestampH=(int)date("H", strtotime($data['timestamp']));
|
|
$timestampstr=date("H:i", strtotime($data['timestamp']));
|
|
$datestimes=date("Y-m-d H:i:s", strtotime($data['timestamp']));
|
|
$dates=date("Y-m-d", strtotime($data['timestamp']));
|
|
$datesadd1=date("Y-m-d", strtotime($data['timestamp'].' +1 day'));
|
|
$totallateperemp=0;
|
|
$totallateperempr2=0;
|
|
$swhereshift="";
|
|
$shiftcodenonreg="";
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."'
|
|
and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
order by t._idx asc limit 1";
|
|
if($timestamp>2300){
|
|
$timestampH=0;
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."'
|
|
and (unix_timestamp(concat('".$dates."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".$dates."',' ','$timestampstr'))<=unix_timestamp(concat('".$datesadd1."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
|
|
}
|
|
|
|
// if($data['id']==78){
|
|
// echo $qry."\n\n";
|
|
// }
|
|
// echo $qry;return false;
|
|
$sp=$this->fn_getfieldsvalues("idxdept,idxemployee,attendancename", $qry);
|
|
//$idxdeptemp=$sp[0];$idxemployee=$sp[1];
|
|
$idxdeptemp=(isset($sp[0]) ? $sp[0] : 0);$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
$attendancenameemp=(isset($sp[2]) ? $sp[2] : '');
|
|
if($idxdeptemp==33||$idxdeptemp==34){
|
|
// $sp=$this->fn_getfieldsvalues("shiftcategory,idxemployee","select shiftcategory,idxemployee from tbl_lojaschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0");
|
|
// $shiftcode=(isset($sp[0]) ? $sp[0] : "");$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' and t.shiftcode='$shiftcode'
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qryshift="select shiftcategory,idxemployee from tbl_lojaschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0";
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcodenonreg="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcodenonreg.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcodenonreg){
|
|
$shiftcodenonreg=substr($shiftcodenonreg,0,strlen($shiftcodenonreg)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcodenonreg){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcodenonreg)";
|
|
}
|
|
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
order by t._idx asc limit 1";
|
|
if($timestamp>=2300){
|
|
$timestampH=0;
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".$dates."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".$dates."',' ','$timestampstr'))<=unix_timestamp(concat('".$datesadd1."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
}
|
|
}
|
|
|
|
if($idxdeptemp==30){
|
|
// $sp=$this->fn_getfieldsvalues("shiftcategory,idxemployee","select shiftcategory,idxemployee from tbl_callcenterschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0");
|
|
// $shiftcode=(isset($sp[0]) ? $sp[0] : "");$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' and t.shiftcode='$shiftcode'
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qryshift="select shiftcategory,idxemployee from tbl_callcenterschedule
|
|
where (cast(dates as date)=cast('$dates' as date) or cast(datesout as date)=cast('$dates' as date)) and idxemployee='$idxemployee' and isdeleted=0";
|
|
|
|
// if($idxemployee==115){
|
|
// echo $qryshift."\n";
|
|
// }
|
|
// if($attendancenameemp=='OUT'){
|
|
// $qryshift="select shiftcategory,idxemployee from tbl_callcenterschedule
|
|
// where (cast(datesout as date)=cast('$dates' as date)) and idxemployee='$idxemployee' and isdeleted=0";
|
|
|
|
// }
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcodenonreg="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcodenonreg.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcodenonreg){
|
|
$shiftcodenonreg=substr($shiftcodenonreg,0,strlen($shiftcodenonreg)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcodenonreg){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcodenonreg)";
|
|
}
|
|
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
order by t._idx asc limit 1";
|
|
|
|
if($timestamp>=2300){
|
|
$timestampH=0;
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".$dates."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".$dates."',' ','$timestampstr'))<=unix_timestamp(concat('".$datesadd1."',' ',t.thresholdtimestr)))
|
|
|
|
order by t._idx desc limit 1";
|
|
}
|
|
|
|
// if($idxemployee==115){
|
|
// echo $qry."\n";
|
|
// }
|
|
}
|
|
|
|
if($idxdeptemp==22){
|
|
$qryshift="select shiftcategory,idxemployee from tbl_supervisaoschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0";
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcodenonreg="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcodenonreg.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcodenonreg){
|
|
$shiftcodenonreg=substr($shiftcodenonreg,0,strlen($shiftcodenonreg)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcodenonreg){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcodenonreg)";
|
|
}
|
|
// if($idxemployee==42){
|
|
// echo $shiftcodenonreg."\n";
|
|
// }
|
|
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
order by t.idxshift desc limit 1";
|
|
if($timestamp>=2300){
|
|
$timestampH=0;
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".$dates."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".$dates."',' ','$timestampstr'))<=unix_timestamp(concat('".$datesadd1."',' ',t.thresholdtimestr)))
|
|
order by t.idxshift desc limit 1";
|
|
}
|
|
|
|
}
|
|
|
|
// echo $qry."\n\nnndd";
|
|
$rs=$this->selectquerySP($qry);
|
|
if($rs){
|
|
while($rw=$rs->fetch()){
|
|
$islate=0;
|
|
$shiftcode=$rw['shiftcode'];
|
|
|
|
// if($rw['idxdept']==30||$rw['idxdept']==22){
|
|
if((int)$rw['idxdept']==30){
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_callcenterschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='IN'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimestrcc=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
$date1=strtotime($dates." ".$endtimestrcc);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimestrcc);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
}
|
|
}
|
|
}
|
|
elseif((int)$rw['idxdept']==22){
|
|
// $qrysc="select distinct t.*
|
|
// from tbl_attendancethreshold t inner join tbl_supervisaoschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
// where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='".$rw['attendancename']."'
|
|
// and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_supervisaoschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='".$rw['attendancename']."'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
$swhereshiftcode and t.isdeleted=0 and s.isdeleted=0 order by t.idxshift desc limit 1";
|
|
// if($rw['idxemployee']==42){
|
|
// echo $qrysc."\n";
|
|
// }
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimeccstr=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
elseif((int)$rw['idxdept']==33||(int)$rw['idxdept']==34){
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_lojaschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='IN'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimeccstr=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
// if($data['id']=='329'){
|
|
// echo (int)$timestamp." ".$endtimecc." ".$rw['attendancename']."\n";
|
|
// }
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if((int)$timestamp>(int)$rw['endtime']&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$rw['endtime']&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
// $qryexists="select _idx,deviceid,deviceidcheckout from tbl_attendanceemployee
|
|
// where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and isdeleted=0 and attendancename='".$rw['attendancename']."'
|
|
// order by _idx asc limit 1";
|
|
// $idx=$this->fn_getfieldvalue("_idx",$qryexists);
|
|
$qryexists="select _idx,deviceid,deviceidcheckout,datestimes from tbl_attendanceemployee
|
|
where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and isdeleted=0 and attendancename='".$rw['attendancename']."' and shiftcode='".$rw['shiftcode']."'
|
|
order by _idx asc limit 1";
|
|
if($rw['idxdept']==22){
|
|
// $qryexists="select _idx,deviceid,deviceidcheckout,datestimes from tbl_attendanceemployee
|
|
// where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and isdeleted=0 and attendancename='".$rw['attendancename']."' and shiftcode in(".$shiftcodenonreg.")
|
|
// order by _idx idxshift desc limit 1";
|
|
if($rw['idxemployee']==42){
|
|
echo $qryexists."\n";
|
|
}
|
|
|
|
}
|
|
$sp=$this->fn_getfieldsvalues("_idx,deviceid,deviceidcheckout,datestimes",$qryexists);
|
|
//$idx=$sp[0];$deviceidcheckin=$sp[1];$deviceidcheckout=$sp[2];
|
|
$idx=(isset($sp[0]) ? $sp[0] : 0);$deviceidcheckin=(isset($sp[1]) ? $sp[1] : '');
|
|
$deviceidcheckout=(isset($sp[2]) ? $sp[2] : '');
|
|
$timesexists=(isset($sp[3]) ? (int)date("Hi",strtotime($sp[3])) : 0);
|
|
$timesexistsstr=(isset($sp[3]) ? date("H:i",strtotime($sp[3])) : 0);
|
|
// echo $idx." ".$deviceidcheckin." ".$deviceidcheckout."\n";return false;
|
|
|
|
// $deviceidcheckin="";$deviceidcheckout="";
|
|
// $qry="select deviceid from tbl_deviceinfo where trim(deviceip)=trim('$ip') and isdeleted=0 order by _idx desc limit 1";
|
|
// $deviceid=$this->fn_getfieldvalue("deviceid",$qry);
|
|
|
|
if($idx){
|
|
$islate=0;
|
|
if((int)$timesexists>(int)$rw['endtime']&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timesexists-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timesexistsstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timesexists>(int)$rw['endtime']&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timesexists-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timesexistsstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
}
|
|
|
|
if(!$totallateperemp){$totallateperemp=0;}
|
|
if(!$totallateperempr2){$totallateperempr2=0;}
|
|
|
|
// $qry="update tbl_attendanceemployee
|
|
// set udt=now(),islates='$islate',totallateperemp='$totallateperemp'
|
|
// where _idx='$idx' and deviceid<>'MANUAL'";
|
|
// $qry="update tbl_attendanceemployee
|
|
// set udt=now(),islates='$islate',totallateperemp='$totallateperemp',totallateperempr2='$totallateperempr2'
|
|
// where _idx='$idx' and deviceid<>'MANUAL'";
|
|
$qry="update tbl_attendanceemployee
|
|
set udt=now(),islates='$islate'
|
|
where _idx='$idx' and deviceid<>'MANUAL'";
|
|
}
|
|
else{
|
|
// if(!$deviceidcheckin||is_null($deviceidcheckin)){$deviceidcheckin=$deviceid;}
|
|
|
|
// $swheredeviceid="deviceid='".$deviceid."',";
|
|
// if($rw['attendancename']=='OUT'){
|
|
// if(!$deviceidcheckout||is_null($deviceidcheckout)){$deviceidcheckout=$deviceid;}
|
|
// $swheredeviceid="deviceidcheckout='".$deviceidcheckout."',";
|
|
// // ==== Get Device ID Checkin
|
|
// $qrygetdevicecheckin="select deviceid from tbl_attendanceemployee
|
|
// where idxemployee='".$rw['idxemployee']."' and attendancename='IN'
|
|
// and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// order by _idx desc limit 1";
|
|
// $deviceidcheckin=$this->fn_getfieldvalue("deviceid",$qrygetdevicecheckin);
|
|
// }
|
|
$swheredeviceid="";
|
|
// $qry="insert into tbl_attendanceemployee
|
|
// set fingerid='".$data['id']."',fingerip='".$ip."',".$swheredeviceid."idxemployee='".$rw['idxemployee']."',
|
|
// nik='".$rw['nik']."',employeename='".$rw['employeename']."',dates='".date("Y-m-d", strtotime($data['timestamp']))."',
|
|
// times='".date("H:i:s", strtotime($data['timestamp']))."',datestimes='$datestimes',attendancename='".$rw['attendancename']."',thresholdtime='".$rw['thresholdtime']."',
|
|
// thresholdtimestr='".$rw['thresholdtimestr']."',endtime='".$rw['endtime']."',shiftcode='".$shiftcode."',totallateperemp='$totallateperemp',
|
|
// totallateperempr2='$totallateperempr2',months='$months',years='$years',islates='$islate',iby='".$rw['nik']."',idt=now()";
|
|
$qry="insert into tbl_attendanceemployee
|
|
set fingerid='".$data['id']."',fingerip='".$ip."',".$swheredeviceid."idxemployee='".$rw['idxemployee']."',
|
|
nik='".$rw['nik']."',employeename='".$rw['employeename']."',dates='".date("Y-m-d", strtotime($data['timestamp']))."',
|
|
times='".date("H:i:s", strtotime($data['timestamp']))."',datestimes='$datestimes',attendancename='".$rw['attendancename']."',thresholdtime='".$rw['thresholdtime']."',
|
|
thresholdtimestr='".$rw['thresholdtimestr']."',endtime='".$rw['endtime']."',shiftcode='".$shiftcode."',months='$months',years='$years',islates='$islate',iby='".$rw['nik']."',idt=now()";
|
|
|
|
}
|
|
// echo $qry."\n";
|
|
// if($deviceid=='172.16.110.251'){
|
|
//echo $qry."\n";
|
|
// }
|
|
if($this->executeSP($qry)){
|
|
// if($rw['attendancename']=='OUT'){
|
|
// $qry="update tbl_attendanceemployee set deviceid='$deviceidcheckin',deviceidcheckout='$deviceidcheckout'
|
|
// where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and isdeleted=0";
|
|
// //$this->executeSP($qry);
|
|
// }
|
|
$rtn=true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return $rtn;
|
|
}
|
|
|
|
public function fn_setattendanceold($data, $ip){
|
|
$rtn=false;
|
|
$months=(int)date("m", strtotime($data['timestamp']));
|
|
$years=(int)date("Y", strtotime($data['timestamp']));
|
|
$timestamp=(int)date("Hi", strtotime($data['timestamp']));
|
|
$timestampH=(int)date("H", strtotime($data['timestamp']));
|
|
$timestampstr=date("H:i", strtotime($data['timestamp']));
|
|
$datestimes=date("Y-m-d H:i:s", strtotime($data['timestamp']));
|
|
$dates=date("Y-m-d", strtotime($data['timestamp']));
|
|
$datesadd1=date("Y-m-d", strtotime($data['timestamp'].' +1 day'));
|
|
$totallateperemp=0;
|
|
$totallateperempr2=0;
|
|
$swhereshift="";
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."'
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."'
|
|
and (unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))<=unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
|
|
if($data['id']==78){
|
|
echo $qry."\n\n";
|
|
}
|
|
// echo $qry;return false;
|
|
$sp=$this->fn_getfieldsvalues("idxdept,idxemployee,attendancename", $qry);
|
|
//$idxdeptemp=$sp[0];$idxemployee=$sp[1];
|
|
$idxdeptemp=(isset($sp[0]) ? $sp[0] : 0);$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
$attendancenameemp=(isset($sp[2]) ? $sp[2] : '');
|
|
if($idxdeptemp==33||$idxdeptemp==34){
|
|
// $sp=$this->fn_getfieldsvalues("shiftcategory,idxemployee","select shiftcategory,idxemployee from tbl_lojaschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0");
|
|
// $shiftcode=(isset($sp[0]) ? $sp[0] : "");$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' and t.shiftcode='$shiftcode'
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qryshift="select shiftcategory,idxemployee from tbl_lojaschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0";
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcode="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcode.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcode){
|
|
$shiftcode=substr($shiftcode,0,strlen($shiftcode)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcode){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcode)";
|
|
}
|
|
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))<=unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
}
|
|
|
|
if($idxdeptemp==30){
|
|
// $sp=$this->fn_getfieldsvalues("shiftcategory,idxemployee","select shiftcategory,idxemployee from tbl_callcenterschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0");
|
|
// $shiftcode=(isset($sp[0]) ? $sp[0] : "");$idxemployee=(isset($sp[1]) ? $sp[1] : 0);
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' and t.shiftcode='$shiftcode'
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qryshift="select shiftcategory,idxemployee from tbl_callcenterschedule
|
|
where (cast(dates as date)=cast('$dates' as date) or cast(datesout as date)=cast('$dates' as date)) and idxemployee='$idxemployee' and isdeleted=0";
|
|
|
|
if($idxemployee==115){
|
|
echo $qryshift."\n";
|
|
}
|
|
// if($attendancenameemp=='OUT'){
|
|
// $qryshift="select shiftcategory,idxemployee from tbl_callcenterschedule
|
|
// where (cast(datesout as date)=cast('$dates' as date)) and idxemployee='$idxemployee' and isdeleted=0";
|
|
|
|
// }
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcode="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcode.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcode){
|
|
$shiftcode=substr($shiftcode,0,strlen($shiftcode)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcode){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcode)";
|
|
}
|
|
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))<=unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
|
|
if($idxemployee==115){
|
|
echo $qry."\n";
|
|
}
|
|
}
|
|
|
|
if($idxdeptemp==22){
|
|
$qryshift="select shiftcategory,idxemployee from tbl_supervisaoschedule where cast(dates as date)=cast('$dates' as date) and idxemployee='$idxemployee' and isdeleted=0";
|
|
$rsshift=$this->selectquerySP($qryshift);
|
|
$shiftcode="";$limit="limit 1";
|
|
if($rsshift){
|
|
while($rwshift=$rsshift->fetch()){
|
|
$shiftcode.="'".$rwshift['shiftcategory']."',";
|
|
}
|
|
if($shiftcode){
|
|
$shiftcode=substr($shiftcode,0,strlen($shiftcode)-1);
|
|
}
|
|
}
|
|
|
|
$swhereshiftcode="and t.shiftcode=''";
|
|
if($shiftcode){
|
|
$swhereshiftcode="and t.shiftcode in($shiftcode)";
|
|
}
|
|
|
|
// $qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
// t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
// from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
// where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
// and ('$timestamp'>=t.starttime and '$timestamp'<=t.thresholdtime)
|
|
// order by t._idx asc limit 1";
|
|
$qry="select e._idx idxemployee,e.nik,e.employeename,e.fingerid,t.idxdept,t.deptname,t.attendancename,t.starttimestr,t.starttime,
|
|
t.endtimestr,t.endtime,t.thresholdtimestr,t.thresholdtime,t.shiftcode
|
|
from tbl_employee e inner join tbl_attendancethreshold t on e.idxdept=t.idxdept
|
|
where e.isdeleted=0 and t.isdeleted=0 and e.fingerid='".$data['id']."' $swhereshiftcode
|
|
and (unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))>=unix_timestamp(concat('$dates',' ',t.starttimestr))
|
|
and unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ','$timestampstr'))<=unix_timestamp(concat('".($timestampH==0 ? $datesadd1 : $dates)."',' ',t.thresholdtimestr)))
|
|
order by t._idx desc limit 1";
|
|
|
|
}
|
|
|
|
// echo $qry."\n\nnndd";
|
|
$rs=$this->selectquerySP($qry);
|
|
if($rs){
|
|
while($rw=$rs->fetch()){
|
|
$islate=0;$shiftcode=$rw['shiftcode'];
|
|
// if($rw['idxdept']==30||$rw['idxdept']==22){
|
|
if((int)$rw['idxdept']==30){
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_callcenterschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='IN'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimestrcc=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
$date1=strtotime($dates." ".$endtimestrcc);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimestrcc);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
}
|
|
}
|
|
}
|
|
elseif((int)$rw['idxdept']==22){
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_supervisaoschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='IN'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimeccstr=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
elseif((int)$rw['idxdept']==33||(int)$rw['idxdept']==34){
|
|
$qrysc="select distinct t.*
|
|
from tbl_attendancethreshold t inner join tbl_lojaschedule s on t.idxshift=s.idxshift and t.idxdept='".$rw['idxdept']."'
|
|
where s.idxemployee='".$rw['idxemployee']."' and t.attendancename='IN'
|
|
and cast(s.dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and t.shiftcode='".$rw['shiftcode']."' and t.isdeleted=0 and s.isdeleted=0 order by t._idx desc limit 1";
|
|
$endtimecc=$this->fn_getfieldvalue("endtime",$qrysc);
|
|
$endtimeccstr=$this->fn_getfieldvalue("endtimestr",$qrysc);
|
|
if($endtimecc){
|
|
// if($data['id']=='329'){
|
|
// echo (int)$timestamp." ".$endtimecc." ".$rw['attendancename']."\n";
|
|
// }
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$endtimecc&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$endtimecc;
|
|
$date1=strtotime($dates." ".$endtimeccstr);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if((int)$timestamp>(int)$rw['endtime']&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timestamp-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timestamp>(int)$rw['endtime']&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timestamp-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timestampstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
|
|
}
|
|
}
|
|
// $qryexists="select _idx,deviceid,deviceidcheckout from tbl_attendanceemployee
|
|
// where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and isdeleted=0 and attendancename='".$rw['attendancename']."'
|
|
// order by _idx asc limit 1";
|
|
// $idx=$this->fn_getfieldvalue("_idx",$qryexists);
|
|
$qryexists="select _idx,deviceid,deviceidcheckout,datestimes from tbl_attendanceemployee
|
|
where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
and isdeleted=0 and attendancename='".$rw['attendancename']."' and shiftcode='".$rw['shiftcode']."'
|
|
order by _idx asc limit 1";
|
|
$sp=$this->fn_getfieldsvalues("_idx,deviceid,deviceidcheckout,datestimes",$qryexists);
|
|
//$idx=$sp[0];$deviceidcheckin=$sp[1];$deviceidcheckout=$sp[2];
|
|
$idx=(isset($sp[0]) ? $sp[0] : 0);$deviceidcheckin=(isset($sp[1]) ? $sp[1] : '');
|
|
$deviceidcheckout=(isset($sp[2]) ? $sp[2] : '');
|
|
$timesexists=(isset($sp[3]) ? (int)date("Hi",strtotime($sp[3])) : 0);
|
|
$timesexistsstr=(isset($sp[3]) ? date("H:i",strtotime($sp[3])) : 0);
|
|
// echo $idx." ".$deviceidcheckin." ".$deviceidcheckout."\n";return false;
|
|
|
|
// $deviceidcheckin="";$deviceidcheckout="";
|
|
// $qry="select deviceid from tbl_deviceinfo where trim(deviceip)=trim('$ip') and isdeleted=0 order by _idx desc limit 1";
|
|
// $deviceid=$this->fn_getfieldvalue("deviceid",$qry);
|
|
|
|
if($idx){
|
|
$islate=0;
|
|
if((int)$timesexists>(int)$rw['endtime']&&$rw['attendancename']=='IN'){
|
|
// $totallateperemp=(int)$timesexists-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timesexistsstr);
|
|
$totallateperemp=round(abs($date2 - $date1) / 60,2);
|
|
|
|
$islate=1;
|
|
}
|
|
if((int)$timesexists>(int)$rw['endtime']&&$rw['attendancename']=='R2'){
|
|
// $totallateperempr2=(int)$timesexists-(int)$rw['endtime'];
|
|
$date1=strtotime($dates." ".$rw['endtimestr']);
|
|
$date2=strtotime($dates." ".$timesexistsstr);
|
|
$totallateperempr2=round(abs($date2 - $date1) / 60,2);
|
|
|
|
}
|
|
|
|
if(!$totallateperemp){$totallateperemp=0;}
|
|
if(!$totallateperempr2){$totallateperempr2=0;}
|
|
|
|
// $qry="update tbl_attendanceemployee
|
|
// set udt=now(),islates='$islate',totallateperemp='$totallateperemp'
|
|
// where _idx='$idx' and deviceid<>'MANUAL'";
|
|
$qry="update tbl_attendanceemployee
|
|
set udt=now(),islates='$islate',totallateperemp='$totallateperemp',totallateperempr2='$totallateperempr2'
|
|
where _idx='$idx' and deviceid<>'MANUAL'";
|
|
}
|
|
else{
|
|
// if(!$deviceidcheckin||is_null($deviceidcheckin)){$deviceidcheckin=$deviceid;}
|
|
|
|
// $swheredeviceid="deviceid='".$deviceid."',";
|
|
// if($rw['attendancename']=='OUT'){
|
|
// if(!$deviceidcheckout||is_null($deviceidcheckout)){$deviceidcheckout=$deviceid;}
|
|
// $swheredeviceid="deviceidcheckout='".$deviceidcheckout."',";
|
|
// // ==== Get Device ID Checkin
|
|
// $qrygetdevicecheckin="select deviceid from tbl_attendanceemployee
|
|
// where idxemployee='".$rw['idxemployee']."' and attendancename='IN'
|
|
// and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// order by _idx desc limit 1";
|
|
// $deviceidcheckin=$this->fn_getfieldvalue("deviceid",$qrygetdevicecheckin);
|
|
// }
|
|
$swheredeviceid="";
|
|
$qry="insert into tbl_attendanceemployee
|
|
set fingerid='".$data['id']."',fingerip='".$ip."',".$swheredeviceid."idxemployee='".$rw['idxemployee']."',
|
|
nik='".$rw['nik']."',employeename='".$rw['employeename']."',dates='".date("Y-m-d", strtotime($data['timestamp']))."',
|
|
times='".date("H:i:s", strtotime($data['timestamp']))."',datestimes='$datestimes',attendancename='".$rw['attendancename']."',thresholdtime='".$rw['thresholdtime']."',
|
|
thresholdtimestr='".$rw['thresholdtimestr']."',endtime='".$rw['endtime']."',shiftcode='".$shiftcode."',totallateperemp='$totallateperemp',months='$months',years='$years',islates='$islate',iby='".$rw['nik']."',idt=now()";
|
|
|
|
}
|
|
// echo $qry."\n";
|
|
// if($deviceid=='172.16.110.251'){
|
|
//echo $qry."\n";
|
|
// }
|
|
if($this->executeSP($qry)){
|
|
// if($rw['attendancename']=='OUT'){
|
|
// $qry="update tbl_attendanceemployee set deviceid='$deviceidcheckin',deviceidcheckout='$deviceidcheckout'
|
|
// where trim(fingerid)=trim('".$data['id']."') and cast(dates as date)=cast('".date("Y-m-d", strtotime($data['timestamp']))."' as date)
|
|
// and isdeleted=0";
|
|
// //$this->executeSP($qry);
|
|
// }
|
|
$rtn=true;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return $rtn;
|
|
}
|
|
|
|
public function fn_curl()
|
|
{
|
|
$url="http://localhost/tthcm/getdatadevices.php?isgetdata=1";
|
|
$method="GET";
|
|
$contenttype="application/json";
|
|
// $data=array("")
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0");
|
|
// if($method=='POST')curl_setopt($ch, CURLOPT_POST, true);
|
|
if ($method == 'POST' || $method == 'PUT') curl_setopt($ch, CURLOPT_POST, true);
|
|
if ($method == 'DELETE') curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
|
if ($method == 'GET') curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
|
// if($data)curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
|
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
|
|
// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
|
'Content-Type: ' . $contenttype,
|
|
'x-token: '
|
|
));
|
|
|
|
$res = curl_exec($ch);
|
|
curl_close($ch);
|
|
return $res;
|
|
// $arr = json_decode($res, true);
|
|
// return $arr;
|
|
}
|
|
}
|
|
|
|
$cl = new LogController();
|
|
$rtn =$cl->index();
|
|
|
|
#if(isset($_REQUEST['isgetdata'])){
|
|
# echo "indx";
|
|
# $rtn = $cl->index();
|
|
#}
|
|
#else{
|
|
# $rtn = $cl->fn_curl();
|
|
#}
|
|
|
|
echo $rtn;
|