Technical Specification - Function - Vanguard
Technical Specification - Function - Vanguard
CLEAR WA_ZINT_PA0014.
***********************************************************************************
**
***********************************************************************************
**
* There're Vanguards records -> Split the line and add to IT0014
LOOP AT ITSTRING.
CHECK NOT ITSTRING-LINE IS INITIAL.
CLEAR : WA_PA0014,
LV_SSN,
LV_LINE.
MOVE ITSTRING-LINE TO LV_LINE.
IF LV_LINE(7) EQ '2093292'.
* It's a deduction !!!!
MOVE : LV_LINE+37(9) TO LV_SSN,
LV_LINE+61(8) TO WA_PA0014-BEGDA,
'USD' TO WA_PA0014-WAERS.
IF LV_LINE CS 'AAA'.
LV_FDPOS = SY-FDPOS + 3.
MOVE : '4430' TO WA_PA0014-LGART,
LV_LINE+LV_FDPOS(5) TO WA_PA0014-ANZHL,
'4430' TO WA_PA0014-SUBTY,
'030' TO WA_PA0014-ZEINH.
ENDIF.
IF LV_LINE CS 'GGG'.
LV_FDPOS = SY-FDPOS + 3.
MOVE : '4405' TO WA_PA0014-LGART,
'4405' TO WA_PA0014-SUBTY,
LV_LINE+LV_FDPOS(5) TO WA_PA0014-ANZHL,
'030' TO WA_PA0014-ZEINH.
ENDIF.
IF LV_LINE CS 'DDE'.
LV_FDPOS = SY-FDPOS + 3.
MOVE : '5000' TO WA_PA0014-LGART,
'5000' TO WA_PA0014-SUBTY,
LV_LINE+LV_FDPOS(5) TO WA_PA0014-BETRG.
ENDIF.
IF SY-SUBRC EQ 0.
APPEND WA_PA0014 TO IT0014.
ELSE.
* There's no employee with that SSN
CLEAR WA_ZINT_PA0014.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
Page 2 of 13
EV_GUID_16 = WA_ZINT_PA0014-GUID.
MOVE-CORRESPONDING WA_PA0014 TO WA_ZINT_PA0014.
MOVE : LV_SSN TO WA_ZINT_PA0014-PERID,
SY-DATUM TO WA_ZINT_PA0014-DATUM,
SY-UZEIT TO WA_ZINT_PA0014-UZEIT.
CONCATENATE 'There''s no employee for that SSN:' LV_SSN INTO WA_ZINT_PA0014-
MESSAGE.
MODIFY ZINT_PA0014 FROM WA_ZINT_PA0014.
COMMIT WORK.
CLEAR WX_RETURN.
MOVE WA_ZINT_PA0014-MESSAGE TO WX_RETURN-MESSAGE.
APPEND WX_RETURN TO RETURN.
ENDIF.
IF LV_LINE+171(1) EQ 'D'.
* Closed -> Clear amount !!
CLEAR WA_PA0014-BETRG.
ENDIF.
IF LV_LINE+178(1) EQ '0'.
CONCATENATE '19'
LV_LINE+57(6)
INTO WA_PA0014-BEGDA.
ELSE.
CONCATENATE '20'
LV_LINE+57(6)
INTO WA_PA0014-BEGDA.
ENDIF.
IF SY-SUBRC EQ 0.
APPEND WA_PA0014 TO IT0014.
ELSE.
* There's no employee with that SSN
CLEAR WA_ZINT_PA0014.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
EV_GUID_16 = WA_ZINT_PA0014-GUID.
MOVE-CORRESPONDING WA_PA0014 TO WA_ZINT_PA0014.
MOVE : LV_SSN TO WA_ZINT_PA0014-PERID,
SY-DATUM TO WA_ZINT_PA0014-DATUM,
SY-UZEIT TO WA_ZINT_PA0014-UZEIT.
CONCATENATE 'There''s no employee for that SSN:' LV_SSN INTO WA_ZINT_PA0014-
MESSAGE.
Page 3 of 13
MODIFY ZINT_PA0014 FROM WA_ZINT_PA0014.
COMMIT WORK.
CLEAR WX_RETURN.
MOVE WA_ZINT_PA0014-MESSAGE TO WX_RETURN-MESSAGE.
APPEND WX_RETURN TO RETURN.
ENDIF.
ENDIF.
ENDLOOP.
FREE ITSTRING.
***********************************************************************************
**
***********************************************************************************
**
* Loop at the inbound information for IT0014
LOOP AT IT0014
INTO WA_PA0014.
* Lock employee
CLEAR WA_RETURN.
CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
EXPORTING
NUMBER = WA_PA0014-PERNR
IMPORTING
RETURN = WA_RETURN.
* Save if the employee cann't be locked
IF NOT WA_RETURN IS INITIAL.
MOVE-CORRESPONDING WA_RETURN TO WA_ZINT_PA0014.
MESSAGE ID WA_RETURN-ID
TYPE WA_RETURN-TYPE
NUMBER WA_RETURN-NUMBER
INTO WA_ZINT_PA0014-MESSAGE
WITH WA_RETURN-MESSAGE_V1 WA_RETURN-MESSAGE_V2
WA_RETURN-MESSAGE_V3 WA_RETURN-MESSAGE_V4.
CLEAR WX_RETURN.
MOVE-CORRESPONDING WA_RETURN TO WX_RETURN.
MOVE WA_ZINT_PA0014-MESSAGE TO WX_RETURN-MESSAGE.
APPEND WX_RETURN TO RETURN.
MOVE : SY-DATUM TO WA_ZINT_PA0014-DATUM,
SY-UZEIT TO WA_ZINT_PA0014-UZEIT.
MODIFY ZINT_PA0014 FROM WA_ZINT_PA0014.
COMMIT WORK.
CONTINUE.
ENDIF.
Page 4 of 13
** & 1/1/2020 for the Semi-Monthly & Monthly.
*
* CLEAR: LV_FREQUENCY,
* LV_PAY_FREQUENCY,
* LV_RATE.
* CASE LV_PAY_FREQUENCY.
* WHEN '01'. "Monthly
* IF WA_PA0014-BEGDA LT '20200101'.
* WA_PA0014-BEGDA = '20200101'.
* ENDIF.
* WHEN '02'. "Semi-Monthly
* IF WA_PA0014-BEGDA LT '20200101'.
* WA_PA0014-BEGDA = '20200101'.
* ENDIF.
* WHEN '03'. "Weekly
* IF WA_PA0014-BEGDA LT '20191223'.
* WA_PA0014-BEGDA = '20191223'.
* ENDIF.
* ENDCASE.
*>>>> END OF DELETION <<<<< XM0K900634 23.01.2020 MDIAZ
IF WA_PA0014-BEGDA LT GV_LAST_PAY_PERIOD_BEGDA or
WA_PA0014-BEGDA GT GV_LAST_PAY_PERIOD_ENDDA.
* change the start date to following open pay period
* Read open pay period
CLEAR: GV_OPEN_PAY_PERIOD_BEGDA,
GV_OPEN_PAY_PERIOD_ENDDA.
PERFORM F_GET_OPEN_PAY_PERIOD USING GV_PABRP
GV_PABRJ
Page 5 of 13
GV_FREQUENCY
CHANGING GV_OPEN_PAY_PERIOD_BEGDA
GV_OPEN_PAY_PERIOD_ENDDA.
* Change start date in the file by open pay period
WA_PA0014-BEGDA = GV_OPEN_PAY_PERIOD_BEGDA.
ENDIF.
IF WA_PA0014-ANZHL IS INITIAL
AND WA_PA0014-BETRG IS INITIAL.
* There's no new value -> Cut the previous one
SELECT *
FROM PA0014
INTO TABLE IT_PREV_P0014
WHERE PERNR = WA_PA0014-PERNR
AND SUBTY = WA_PA0014-SUBTY
AND ENDDA = '99991231'.
IF SY-SUBRC IS INITIAL.
READ TABLE IT_PREV_P0014 INDEX 1 INTO WA_PREV_P0014.
* cut previous record
CLEAR: WA_RETURN,
WA_RECORD.
MOVE-CORRESPONDING WA_PREV_P0014 TO WA_RECORD.
* If begda informed is not equal to begda loaded in infotype, then endda = be
gda informed -1 day.Else,
* IF begda informed is equal to begda loaded in infotype, then endda = begda
WA_RECORD-ENDDA = L_DATE.
ELSE.
WA_RECORD-ENDDA = WA_PA0014-BEGDA.
ENDIF.
WA_RECORD-INFTY = '0014'.
Page 6 of 13
* NOCOMMIT =
* VIEW_IDENTIFIER =
* SECONDARY_RECORD =
IMPORTING
RETURN = WA_RETURN.
Page 7 of 13
INTO WA_ZINT_PA0014-MESSAGE
WITH WA_RETURN-MESSAGE_V1 WA_RETURN-MESSAGE_V2
WA_RETURN-MESSAGE_V3 WA_RETURN-MESSAGE_V4.
MOVE : SY-DATUM TO WA_ZINT_PA0014-DATUM,
SY-UZEIT TO WA_ZINT_PA0014-UZEIT.
MODIFY ZINT_PA0014 FROM WA_ZINT_PA0014.
COMMIT WORK.
CLEAR WX_RETURN. MOVE-CORRESPONDING WA_RETURN TO WX_RETURN. APPEND WX_RETUR
N TO RETURN.
ELSE.
CLEAR WX_RETURN.
CONCATENATE 'Process ok: '
WA_PA0014-PERNR ', '
WA_PA0014-SUBTY
INTO WX_RETURN-MESSAGE.
APPEND WX_RETURN TO RETURN.
ENDIF.
ENDIF.
*"----- Benefits Focus - Wage Type 6010 ----------------
CLEAR: LV_PLAN_TYPE,
LV_BENEFIT_PLAN,
LV_COVERAGE.
* 1) Determine Employer rate from the custom table based on the criterion
SELECT SINGLE *
FROM ZER_BN_RATES
INTO WA_ER_BN_RATES
WHERE PLANT_TYPE EQ LV_PLAN_TYPE
AND BENEFIT_PLAN EQ LV_BENEFIT_PLAN
AND COVRG_CD EQ LV_COVERAGE
AND BEGDA LE SY-DATUM
AND ENDDA GE SY-DATUM.
IF SY-SUBRC IS INITIAL.
CLEAR: LV_FREQUENCY,
LV_PAY_FREQUENCY,
LV_RATE.
Page 8 of 13
CASE LV_PAY_FREQUENCY.
WHEN '01'. "Monthly
LV_FREQUENCY = 12.
WHEN '02'. "Semi-Monthly
LV_FREQUENCY = 24.
WHEN '03'. "Weekly
LV_FREQUENCY = 52.
ENDCASE.
* 4) Assign the rate to WT-6010 and populate the info type 0014 with this new rat
e for the effective start and end dates.
CLEAR WA_RETURN.
WA_RECORD-SUBTY = '6010'.
WA_RECORD-LGART = '6010'.
WA_RECORD-BETRG = LV_RATE.
WA_PA0014-SUBTY = '6010'.
CLEAR WA_RECORD-ANZHL. "The WT 6010 only save amount, not number
Page 9 of 13
ELSE.
CLEAR WX_RETURN.
CONCATENATE 'Process ok: '
WA_PA0014-PERNR ', '
WA_PA0014-SUBTY
INTO WX_RETURN-MESSAGE.
APPEND WX_RETURN TO RETURN.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* Unlock Employee
CALL FUNCTION 'BAPI_EMPLOYEET_DEQUEUE'
EXPORTING
NUMBER = WA_PA0014-PERNR
VALIDITYBEGIN = WA_PA0014-BEGDA.
ENDLOOP.
COMMIT WORK.
ENDFUNCTION.
**&---------------------------------------------------------------------*
**& Form F_GET_LAST_PAY_PERIOD
**&---------------------------------------------------------------------*
** Get LAST PAY PERIOD
**----------------------------------------------------------------------*
FORM F_GET_LAST_PAY_PERIOD USING P_PERNR
CHANGING P_PAY_BEGDA
P_PAY_ENDDA
P_PABRP "Period
P_PABRJ "Payroll Year
P_FREQUENCY.
CLEAR: L_ABKRS,
WA_T569V,
WA_T549Q.
CASE P_FREQUENCY.
Page 10 of 13
WHEN '01'. "Monthly
L_ABKRS = 'ZM'.
WHEN '02'. "Semi-Monthly
L_ABKRS = 'ZS'.
WHEN '03'. "Weekly
L_ABKRS = 'ZW'.
ENDCASE.
SELECT SINGLE *
FROM T569V
INTO WA_T569V
WHERE ABKRS = L_ABKRS AND
VWSAZ = '01'.
IF SY-SUBRC = 0.
SELECT SINGLE *
FROM T549Q
INTO WA_T549Q
WHERE PERMO = P_FREQUENCY AND
PABRJ = WA_T569V-PABRJ AND
PABRP = WA_T569V-PABRP.
IF SY-SUBRC IS INITIAL.
P_PAY_BEGDA = WA_T549Q-BEGDA.
P_PAY_ENDDA = WA_T549Q-ENDDA.
ENDIF.
ENDIF.
ENDFORM.
**&---------------------------------------------------------------------*
**& Form F_GET_OPEN_PAY_PERIOD
**&---------------------------------------------------------------------*
** Get OPEN PAY PERIOD
**----------------------------------------------------------------------*
FORM F_GET_OPEN_PAY_PERIOD USING P_PABRP
P_PABRJ
P_FREQUENCY
CHANGING P_OPENPAY_BEGDA
P_OPENPAY_ENDDA.
DATA: WA_T549Q TYPE T549Q.
CLEAR: WA_T549Q.
P_PABRP = P_PABRP + 1.
IF P_FREQUENCY = '01' AND P_PABRP > '12' . "Monthly
P_PABRP = '01'.
ELSEIF P_FREQUENCY = '02' AND P_PABRP > '24' . "Semi-Monthly
P_PABRP = '01'.
ELSEIF P_FREQUENCY = '03' AND P_PABRP > '52' . "Weekly
P_PABRP = '01'.
ENDIF.
SELECT SINGLE *
FROM T549Q
INTO WA_T549Q
WHERE PERMO = P_FREQUENCY AND
Page 11 of 13
PABRJ = P_PABRJ AND
PABRP = P_PABRP.
IF SY-SUBRC IS INITIAL.
P_OPENPAY_BEGDA = WA_T549Q-BEGDA.
P_OPENPAY_ENDDA = WA_T549Q-ENDDA.
ENDIF.
ENDFORM.
Resul
Page 12 of 13
Page 13 of 13