From 822c2e8af94f31be28182e6ef01e45d787a1d92a Mon Sep 17 00:00:00 2001 From: asansal Date: Fri, 27 Jun 2025 08:06:49 +0700 Subject: [PATCH] Enhance attendance logging: add shift code handling and update duration calculations for specific departments --- getattsyncbydate.php | 64 ++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/getattsyncbydate.php b/getattsyncbydate.php index a073864..fe80404 100644 --- a/getattsyncbydate.php +++ b/getattsyncbydate.php @@ -100,6 +100,10 @@ class LogController if($rs){ echo "start time : ".date("Y-m-d H:i:s")."\n"; while($rw=$rs->fetch()){ + $swhereshiftcode=""; + if($rw['shiftcode']&&$rw['idxdept']==22){ + $swhereshiftcode="and shiftcode='".$rw['shiftcode']."'"; + } if($rw['idxdept']==30){ // === only call center department if($rw['attendancename']=='IN'){ $qry="insert into tbl_attendancelist @@ -108,13 +112,13 @@ class LogController officename='".$rw['officename']."',idxdept='".$rw['idxdept']."',divisiname='".$rw['divisiname']."', serviconame='".$rw['serviconame']."',dates='".$rw['dates']."',checkin='".$rw['datestimes']."', islates='".$rw['islates']."',months='".$rw['months']."',years='".$rw['years']."', - shiftcode='".$rw['shiftcode']."',lateperemployee='".$rw['lateperemployee']."', - deviceidcheckin='".$rw['deviceidcheckin']."',deviceidcheckout='".$rw['deviceidcheckout']."', + shiftcode='".$rw['shiftcode']."',lateperemployee='".$rw['lateperemployee']."',lateperemployeer2='".$rw['lateperemployeer2']."', + deviceidcheckin='".$rw['deviceidcheckin']."', iby='svc',idt='".$rw['datestimes']."'"; $qrychk="select _idx from tbl_attendancelist where idxemployee='".$rw['idxemployee']."' and cast(dates as date)=cast('".date("Y-m-d",strtotime($rw['dates']))."' as date) - and isdeleted=0 order by _idx desc limit 1"; + $swhereshiftcode and isdeleted=0 order by _idx desc limit 1"; if($this->fn_rowisexists($qrychk)){ $qry=""; } @@ -125,7 +129,7 @@ class LogController $qrychk="select _idx from tbl_attendancelist where idxemployee='".$rw['idxemployee']."' and cast(checkin as date)=cast('".date("Y-m-d",strtotime($rw['datestimes']))."' as date) - and (checkout is null) + $swhereshiftcode and (checkout is null) and isdeleted=0 order by _idx desc limit 1"; // echo $qrychk;//return false; @@ -133,13 +137,13 @@ class LogController if($_idx){ $qry="update tbl_attendancelist set checkout='".$rw['datestimes']."',deviceidcheckout='".$rw['deviceidcheckout']."' - where _idx='$_idx' "; + where _idx='$_idx' and UNIX_TIMESTAMP('".date("Y-m-d H:i:s",strtotime($rw['datestimes']))."')>UNIX_TIMESTAMP(checkin)"; $qryduration="update tbl_attendancelist set duration=SEC_TO_TIME(TIMESTAMPDIFF(SECOND,checkin,checkout)) where _idx='$_idx'"; $qrychk="select _idx from tbl_attendancelist where cast(checkout as date)=cast('".date("Y-m-d",strtotime($rw['datestimes']))."' as date) - and idxemployee='".$rw['idxemployee']."' and isdeleted=0 + $swhereshiftcode and idxemployee='".$rw['idxemployee']."' and isdeleted=0 order by _idx desc limit 1"; if($this->fn_rowisexists($qrychk)){ $qry="";$qryduration=""; @@ -152,19 +156,21 @@ class LogController $qrychk="select _idx from tbl_attendancelist where idxemployee='".$rw['idxemployee']."' and cast(checkin as date)=date_sub('".date("Y-m-d",strtotime($rw['datestimes']))."', INTERVAL 1 day) and checkout is null - and isdeleted=0 order by _idx desc limit 1"; + $swhereshiftcode and isdeleted=0 order by _idx desc limit 1"; // echo $qrychk;return false; $_idx=$this->fn_getfieldvalue("_idx",$qrychk); if($_idx){ - $qry="update tbl_attendancelist set checkout='".$rw['datestimes']."' where _idx='$_idx' and checkout is null"; + $qry="update tbl_attendancelist + set checkout='".$rw['datestimes']."',deviceidcheckout='".$rw['deviceidcheckout']."' + where _idx='$_idx' and (UNIX_TIMESTAMP('".date("Y-m-d H:i:s",strtotime($rw['datestimes']))."')>UNIX_TIMESTAMP(checkin)) and checkout is null"; // $qry="update tbl_attendancelist set checkout='".$rw['datestimes']."' where _idx='$_idx'"; $qryduration="update tbl_attendancelist set duration=SEC_TO_TIME(TIMESTAMPDIFF(SECOND,checkin,checkout)) where _idx='$_idx'"; $qrychk="select _idx from tbl_attendancelist where cast(checkout as date)=cast('".date("Y-m-d",strtotime($rw['datestimes']))."' as date) - and idxemployee='".$rw['idxemployee']."' and isdeleted=0 + $swhereshiftcode and idxemployee='".$rw['idxemployee']."' and isdeleted=0 order by _idx desc limit 1"; if($this->fn_rowisexists($qrychk)){ $qry="";$qryduration=""; @@ -192,7 +198,7 @@ class LogController else{ // === Non call center dept if($rw['attendancename']=='IN'){$attfield="checkin='".$rw['datestimes']."',";} if($rw['attendancename']=='R1'){$attfield="R1='".$rw['datestimes']."',";} - if($rw['attendancename']=='R2'){$attfield="R2='".$rw['datestimes']."',";} + if($rw['attendancename']=='R2'){$attfield="R2='".$rw['datestimes']."',lateperemployeer2='".$rw['lateperemployeer2']."',";} if($rw['attendancename']=='OUT'){$attfield="checkout='".$rw['datestimes']."',";} $qry="insert into tbl_attendancelist @@ -201,36 +207,48 @@ class LogController officename='".$rw['officename']."',idxdept='".$rw['idxdept']."',divisiname='".$rw['divisiname']."', serviconame='".$rw['serviconame']."',dates='".$rw['dates']."',".$attfield." islates='".$rw['islates']."',months='".$rw['months']."',years='".$rw['years']."', - shiftcode='".$rw['shiftcode']."',lateperemployee='".$rw['lateperemployee']."', - deviceidcheckin='".$rw['deviceidcheckin']."',deviceidcheckout='".$rw['deviceidcheckout']."', + shiftcode='".$rw['shiftcode']."',lateperemployee='".$rw['lateperemployee']."',lateperemployeer2='".$rw['lateperemployeer2']."', + deviceidcheckin='".$rw['deviceidcheckin']."', iby='svc',idt='".$rw['datestimes']."'"; $qrychk="select _idx,checkin,checkout,lateperemployee from tbl_attendancelist - where idxemployee='".$rw['idxemployee']."' and cast(dates as date)=cast('".date("Y-m-d",strtotime($rw['dates']))."' as date) and isdeleted=0 order by _idx desc limit 1"; + where idxemployee='".$rw['idxemployee']."' and cast(dates as date)=cast('".date("Y-m-d",strtotime($rw['dates']))."' as date) + $swhereshiftcode and isdeleted=0 order by _idx desc limit 1"; if($this->fn_rowisexists($qrychk)){ + // $_idx=$this->fn_getfieldvalue("_idx",$qrychk); $sp=$this->fn_getfieldsvalues("_idx,checkin,checkout,lateperemployee", $qrychk); $_idx=$sp[0];$checkin=$sp[1];$checkout=$sp[2];$lateperemployee=$sp[3]; $laterperemployeefield=""; - if(!$lateperemployee){ - $laterperemployeefield="lateperemployee='".$rw['lateperemployee']."',"; - } + // if(!$lateperemployee){ + // $laterperemployeefield="lateperemployee='".$rw['lateperemployee']."',"; + // } $qry="update tbl_attendancelist set ".$attfield.$laterperemployeefield."uby='svc',udt='".$rw['datestimes']."' where _idx='$_idx'"; if($rw['attendancename']=='IN'&&$checkin!=null){ $qry="update tbl_attendancelist - set uby='svc',udt='".$rw['datestimes']."' - where _idx='$_idx'"; + set uby='svc',udt='".$rw['datestimes']."' + where _idx='$_idx'"; } if($rw['attendancename']=='OUT'){ $qry="update tbl_attendancelist - set ".$attfield."uby='svc',udt='".$rw['datestimes']."',deviceidcheckout='".$rw['deviceidcheckout']."' - where _idx='$_idx' and UNIX_TIMESTAMP('".date("Y-m-d H:i:s",strtotime($rw['datestimes']))."')>UNIX_TIMESTAMP(checkin)"; - $qryduration="update tbl_attendancelist - set duration=SEC_TO_TIME(TIMESTAMPDIFF(SECOND,checkin,checkout)) - where _idx='$_idx'"; + set ".$attfield."uby='svc',udt='".$rw['datestimes']."',deviceidcheckout='".$rw['deviceidcheckout']."' + where _idx='$_idx' and UNIX_TIMESTAMP('".date("Y-m-d H:i:s",strtotime($rw['datestimes']))."')>UNIX_TIMESTAMP(checkin)"; + + $idxdept=$rw['idxdept']; + if($idxdept==33||$idxdept==34||$idxdept==30||$idxdept==22){ + $qryduration="update tbl_attendancelist + set duration=SEC_TO_TIME(TIMESTAMPDIFF(SECOND,checkin,checkout)) + where _idx='$_idx'"; + } + else{ + $qryduration="update tbl_attendancelist + set duration=SEC_TO_TIME(TIMESTAMPDIFF(SECOND,checkin,R1)+TIMESTAMPDIFF(SECOND,R2,checkout)) + where _idx='$_idx'"; + + } } }