You are on page 1of 6

*&---------------------------------------------------------------------*

*& Report ZHCM_FPRINT_INTEGRATION


*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZHCM_FPRINT_DATE_EMP .

PARAMETERS : date TYPE SY-DATUM OBLIGATORY .


*emp TYPE pa0001-pernr OBLIGATORY..
*TABLES : SAPCheckInOut.
DATA :C TYPE CURSor , currDate TYPE sy-datum ."VALUE '1900-01-01'.

DATA : wai TYPE ZFPRINT_INTRF ,

itab TYPE TABLE OF ZFPRINT_INTRF2 ,

wa TYPE ZFPRINT_INTRF2 .
data: ls_message type scx_t100key.
DATA : RETURN2 TYPE BAPIRETURN1,
KEY TYPE BAPIPAKEY .
DATA : lv_dbs,
PA0007_WA TYPE PA0007,
T508A_WA TYPE T508A,
T551A_WA TYPE T551A,
T550A_WA TYPE T550A,
Row_count TYPE char2,
Modls TYPE char2 ,
teven_it TYPE TABLE OF teven ,
s_p2011 type P2011,
ch_count TYPE char2,
* tmp_prnr TYPE pa0001-pernr ,
PDSNR TYPE teven-PDSNR ,
DURATION TYPE SYTABIX ,
TEVEN_WA TYPE TEVEN.

lv_dbs = 'HCMATT'.

EXEC SQL.
CONNECT TO :'HCMATT'
ENDEXEC.

EXEC SQL.
OPEN CURSOR FOR
SELECT Id,
EmplyeeId,
Name,
CheckTime,
CheckDate,
CheckType,
MachineNumber,
MachineIP,
Status

FROM SAPCheckInOut
WHERE CHECKDATE = :DATE and Status is NULL
ENDEXEC.
"and EmplyeeId = :EMP
. "EmplyeeId = :EMP
*WHERE Status is NULL AND CHECKDATE = :sy-datum ORDER BY EmplyeeId
"Status is NULL AND CHECKDATE = :sy-datum Id = '001_2018-02-03_06:04:15'
*
" this cursor to get data record by record to work area .
DO.
EXEC SQL.
FETCH NEXT CURSOR INTO :wai-ID,
:wai-EMPLYEEID,
:wai-NAME,
:wai-CHECKTIME,
:wai-CHECKDATE,
:wai-CHECKTYPE,
:wai-MACHINENUMBER,
:wai-MACHINEIP,
:wai-STATUS

ENDEXEC.
IF sy-subrc <> 0.
EXIT.
ELSE.

REPLACE ALL OCCURRENCES OF '-' IN wai-CHECKDATE WITH space. CONDENSE wai-


CHECKDATE.
REPLACE ALL OCCURRENCES OF ':' IN wai-CHECKTIME WITH space. CONDENSE wai-
CHECKTIME.

wa-ID = wai-ID .
*wa-EMPLYEEID = wai-EMPLYEEID.
wa-NAME = wai-NAME.

wa-CHECKTIME = wai-CHECKTIME .
wa-CHECKTIME+5(1) = '0'.
wa-CHECKDATE = wai-CHECKDATE.
wa-CHECKTYPE = wai-CHECKTYPE.
wa-MACHINENUMBER = wai-MACHINENUMBER.
wa-MACHINEIP = wai-MACHINEIP .
wa-STATUS = wai-STATUS.
UNPACK wai-EMPLYEEID to wa-EMPLYEEID.

APPEND wa TO ITAB.
ENDIF.
ENDDO.
CLEAR wa.

*BREAK-POINT .

LOOP AT ITAB INTO WA.

s_p2011-pernr = wa-EMPLYEEID." '00000004'."


s_p2011-infty = '2011'.
s_p2011-ldate = wa-CHECKDATE. "sy-datum. "
s_p2011-ltime = wa-CHECKTIME. "sy-uzeit. "
s_p2011-erdat = sy-datum.
s_p2011-ertim = sy-uzeit.
* s_p2011-satza = 'P10'.
s_p2011-origf = 'E'.

s_p2011-begda = wa-CHECKDATE."wa-CHECKDATE.sy-datum."
s_p2011-endda = wa-CHECKDATE."wa-CHECKDATE.

SELECT SINGLE * FROM PA0007 INTO PA0007_WA WHERE PERNR = wa-EMPLYEEID AND beg
da <= sy-datum AND endda >= sy-datum .
SELECT SINGLE * FROM T508A INTO T508A_WA WHERE SCHKZ = PA0007_WA-SCHKZ .
SELECT SINGLE * FROM T551A INTO T551A_WA WHERE ZMODN = T508A_WA-ZMODN AND MOT
PR = T508A_WA-MOTPR .
SELECT SINGLE * FROM T550A INTO T550A_WA WHERE TPROG = T551A_WA-TPRG1 AND MOTP
R = T551A_WA-MOTPR .

CH_count = 0 .
IF T550A_WA-SOBEG IS NOT INITIAL .
CH_count = CH_count + 1.
ENDIF.
IF T550A_WA-SOEND IS NOT INITIAL .
CH_count = CH_count + 1.
ENDIF.

IF T550A_WA-PAMOD IS NOT INITIAL .


CH_count = CH_count + 2.
ENDIF.

SELECT * FROM teven INTO teven_WA WHERE LDATE eq wa-CHECKDATE AND PERNR eq w
a-EMPLYEEID and STOKZ ne 'X' AND LTIME < s_p2011-ltime . "wa-EMPLYEEID.
APPEND TEVEN_WA TO TEVEN_IT.
ENDSELECT.

DESCRIBE TABLE teven_it lines row_count .


modls = row_count mod 2.
IF ROW_COUNT NE '0'.
CALL FUNCTION 'SWI_DURATION_DETERMINE'
EXPORTING
START_DATE = wa-CHECKDATE
END_DATE = wa-CHECKDATE
START_TIME = TEVEN_WA-LTIME
END_TIME = s_p2011-ltime
IMPORTING
DURATION = DURATION
.
ELSE .
DURATION = 122.
ENDIF.

IF DURATION > 121 .

IF modls eq 0.
s_p2011-satza = 'P10'.
wa-CHECKTYPE = 'P10'.
ELSE.
s_p2011-satza = 'P20'.
wa-CHECKTYPE = 'P20'.
ENDIF.

CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'


EXPORTING
NUMBER = wa-EMPLYEEID "tmp_prnr ."wa-EMPLYEEID. "'00000004'
* IMPORTING
* RETURN =
.
SELECT SINGLE PDSNR FROM TEVEN INTO PDSNR WHERE PERNR eq wa-EMPLYEEID AND LDAT
E eq s_p2011-ldate and LTIME eq s_p2011-ltime AND STOKZ ne 'X' .
IF sy-subrc <> 0.

CALL FUNCTION 'HR_INFOTYPE_OPERATION'


EXPORTING
infty = '2011'
number = wa-EMPLYEEID "tmp_prnr "wa-
EMPLYEEID"'00000004'"s_p2011-pernr
* SUBTYPE =
* OBJECTID =
* LOCKINDICATOR =
validityend = s_p2011-begda
validitybegin = s_p2011-endda
* recordnumber = f_recordnumber
record = s_p2011
operation = 'INS'
tclas = 'A'
dialog_mode = '0'
* NOCOMMIT = 'X'
* VIEW_IDENTIFIER =
* SECONDARY_RECORD =
IMPORTING
return = RETURN2
key = KEY.
" BREAK-POINT.
COMMIT WORK.
WAIT UP TO 1 SECONDS .

IF PA0007_WA-KZTIM eq '01' AND s_p2011-satza = 'P10' .


* s_p2011-ltime = wa-CHECKTIME + 14400. "sy-uzeit. "
IF CH_count eq '4'.
s_p2011-ltime = wa-CHECKTIME + 14400. "sy-uzeit. "
ELSEIF CH_count eq '2'.
s_p2011-ltime = wa-CHECKTIME + 28800. "sy-uzeit. "
ENDIF.

s_p2011-satza = 'P20' .
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '2011'
number = wa-EMPLYEEID "tmp_prnr "wa-
EMPLYEEID"'00000004'"s_p2011-pernr
* SUBTYPE =
* OBJECTID =
* LOCKINDICATOR =
validityend = s_p2011-begda
validitybegin = s_p2011-endda
* recordnumber = f_recordnumber
record = s_p2011
operation = 'INS'
tclas = 'A'
dialog_mode = '0'
* NOCOMMIT = 'X'
* VIEW_IDENTIFIER =
* SECONDARY_RECORD =
IMPORTING
return = RETURN2
key = KEY.
" BREAK-POINT.
COMMIT WORK.

WAIT UP TO 1 SECONDS .
ENDIF.
ENDIF.
** BREAK-POINT.
SELECT SINGLE PDSNR FROM TEVEN INTO PDSNR WHERE PERNR eq wa-EMPLYEEID AND LDAT
E eq s_p2011-ldate and LTIME eq s_p2011-ltime AND STOKZ ne 'X' .

IF return2-type NE 'E' and PDSNR ne '0' .


EXEC SQL.
UPDATE SAPCheckInOut
SET STATUS = 1
WHERE Id = :wa-ID

ENDEXEC .
wa-status = '1' .
INSERT INTO ZFPRINT_INTRF2 VALUES wa.

ELSE .

wa-status = '0' .
INSERT INTO ZFPRINT_INTRF2 VALUES wa.

ENDIF.

CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'


EXPORTING
NUMBER = wa-EMPLYEEID"tmp_prnr "wa-EMPLYEEID"'00000004'
* IMPORTING
* RETURN =
.

ENDIF.
CLEAR: Wa .
CLEAR s_p2011.
clear PA0007_WA .
CLEAR T508A_WA.
CLEAR T551A_WA .
CLEAR T550A_WA .
CLEAR TEVEN_WA.
FREE teven_it.
ch_count = 0 .
row_count = 0.
modls = 0.
*tmp_prnr = 0.
PDSNR = '' .
DURATION = 0.

ENDLOOP.

You might also like