Fast Formula Backup 29112020
Fast Formula Backup 29112020
/****************************************/
DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_START_TIME IS '1900-01-01 00:00:00'(DATE)
DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_END_TIME IS '4712-12-31 00:00:00' (DATE)
INPUTS ARE
HWM_CTXARY_RECORD_POSITIONS,
HWM_CTXARY_HWM_MEASURE_DAY,
MEASURE ,
STARTTIME,
STOPTIME,
PayrollTimeType,
AbsenceType
/* FOLLOWING 2 LINES ARE REQUIRED RIGHT AFTER INPUTS FOR ALL OTL AND HWM
FORMULAS */
FFS_ID = GET_CONTEXT(HWM_FFS_ID, 0)
RULE_ID = GET_CONTEXT(HWM_RULE_ID, 0)
NULLDATE = '01-JAN-1900'(DATE)
NULLDATEMAX = '31-DEC-2417'(DATE)
NULLTEXT = '--NULL--'
RecPositoinDetail = 'DETAIL'
pubCount = -1
WMAARY = HWM_CTXARY_RECORD_POSITIONS.COUNT
pubCount = HWM_PUB_HOLIDAY_DATE_SOURCE.count
OUT_MEASURE_REGULAR = EMPTY_NUMBER_NUMBER
OUT_MEASURE_HOLIDAY_OVERTIME = EMPTY_NUMBER_NUMBER
V_DATE = NULLDATE
L_DATE = NULLTEXT
L_FOUND_DATE = NULLDATE
PH_START_DATE = NULLDATE
PH_END_DATE = NULLDATE
L_NDIX = 0
PH_NDIX = 1
AIMEASURE = 0
oIdx = 0
SDate = NULLDATE
EDate = NULLDATE
l_sl_grace = 0
L_IS_ELAPSED = 'N'
L_ELAPSED_DURATION = 0
WHILE L_NDIX < WMAARY LOOP /* Loop for the time card days*/
(
L_NDIX = L_NDIX + 1
L_RECPOSITION = HWM_CTXARY_RECORD_POSITIONS[L_NDIX]
/*L_IS_ELAPSED = HWM_EMP_SCHD_IS_ELAPSED_SHIFT[1]
L_ELAPSED_DURATION = HWM_DTL_SCHD_SCHEDULED_DURATION[1]*/
IF (HWM_EMP_SCHD_IS_ELAPSED_SHIFT.EXISTS(L_NDIX) ) THEN (
L_IS_ELAPSED = HWM_EMP_SCHD_IS_ELAPSED_SHIFT[1]
)
IF (HWM_DTL_SCHD_SCHEDULED_DURATION.EXISTS(L_NDIX) ) THEN (
L_ELAPSED_DURATION = HWM_DTL_SCHD_SCHEDULED_DURATION[1]
)
/*L_PUB_HOLIDAY_START_TIME = HWM_PUB_HOLIDAY_START_TIME[1]
L_PUB_HOLIDAY_END_TIME = HWM_PUB_HOLIDAY_END_TIME[1]*/
/* Feras 26122019*/
PH_START_DATE = to_Date('01011900','DDMMYYYY')
PH_END_DATE = to_Date('01011900','DDMMYYYY')
PH_NDIX = 1
WHILE (HWM_PUB_HOLIDAY_DATE_SOURCE.EXISTS(PH_NDIX))LOOP (
objCat = HWM_PUB_HOLIDAY_OBJECT_CATEGORY[PH_NDIX]
SDate = HWM_PUB_HOLIDAY_START_TIME[PH_NDIX]
EDate = HWM_PUB_HOLIDAY_END_TIME[PH_NDIX]
oIdx = oIdx + 1
PH_START_DATE = SDate
PH_END_DATE = EDate
l_status = add_rlog (ffs_id , rule_id , '
,FERAS objCat= ' || objCat ||
' ,PH_START_DATE= ' || TO_CHAR(PH_START_DATE)
||
' , PH_END_DATE= ' || TO_CHAR(PH_END_DATE) ||
' , V_DATE= ' || TO_CHAR(V_DATE))
)
)
)
)
L_PD_SHIFT_END = NULLDATE
L_ND_SHIFT_START = NULLDATE
V_SHIFT_START = NULLDATE
V_SHIFT_END = NULLDATE
CHANGE_CONTEXTS(HWM_CTX_SEARCH_START_DATE = OVRD_CTX_START_DATE )
(
CHANGE_CONTEXTS(HWM_CTX_SEARCH_END_DATE = OVRD_CTX_END_DATE)
(
I = WS_START_DATE_TIME.FIRST(-1)
L_PD_DAY_OFF = 'Y'
L_ND_DAY_OFF = 'Y'
L_DAY_OFF = 'Y'
L_PUNCH_START = 0
L_PUNCH_END = 0
/* Below loop to get the punch start and end time based on mid day
approach*/
WHILE WS_START_DATE_TIME.EXISTS(I) LOOP
(
L_SHIFT_START = TO_CHAR(WS_START_DATE_TIME[I],'DDMMYYYY HH24:MI')
L_SHIFT_END = TO_CHAR(WS_END_DATE_TIME[I],'DDMMYYYY HH24:MI')
IF TO_CHAR(WS_START_DATE_TIME[I],'YYYYMMDD') = TO_CHAR(ADD_DAYS(V_DATE ,
-1) ,'YYYYMMDD') THEN
(
IF ADD_DAYS(V_DATE , -1) < SDate OR ADD_DAYS(V_DATE , -1) > EDATE
THEN
(
L_PD_SHIFT_END = WS_END_DATE_TIME[I] /* PREVOIUS DAY SHIFT END */
L_PD_DAY_OFF = 'N'
)
)
IF TO_CHAR(WS_START_DATE_TIME[I],'YYYYMMDD') = TO_CHAR(ADD_DAYS(V_DATE ,
1) ,'YYYYMMDD') THEN
(
/* check if next day is holiday */
IF ADD_DAYS(V_DATE , 1) < SDate OR ADD_DAYS(V_DATE , 1/* -1*/) >
EDATE THEN
(
L_ND_SHIFT_START = WS_START_DATE_TIME[I] /* NEXT DAY SHIFT START */
L_ND_DAY_OFF = 'N'
)
)
IF TO_CHAR(WS_START_DATE_TIME[I],'YYYYMMDD') = TO_CHAR(V_DATE,'YYYYMMDD')
THEN
(
/*IF V_DATE < SDate OR V_DATE > EDATE THEN FERAS 26122018
*/
IF V_DATE < PH_START_DATE OR V_DATE > PH_END_DATE THEN
(
L_STATUS = ADD_RLOG (FFS_ID , RULE_ID , 'FERAS3 V_DATE='||
TO_CHAR(V_DATE))
V_SHIFT_START = WS_START_DATE_TIME[I] /* Current day shift start*/
V_SHIFT_END = WS_END_DATE_TIME[I] /* Current day shift end*/
SHIFT_START_TIME = TO_NUMBER(TO_CHAR(V_SHIFT_START,'HH24.MI'))
SHIFT_END_TIME = TO_NUMBER(TO_CHAR(V_SHIFT_END,'HH24.MI'))
L_SHIFT_START_TIME = ROUND(TIME_HHMM_TO_DEC (SHIFT_START_TIME ),2)
L_DAY_OFF = 'N'
)
)
I = WS_START_DATE_TIME.NEXT(I,-1)
) /* END LOOP */
)
)
L_PUNCH_START = DAYS_BETWEEN(V_SHIFT_START,L_PD_SHIFT_END) / 2
L_PUNCH_END = DAYS_BETWEEN(L_ND_SHIFT_START,V_SHIFT_END) / 2
L_PUNCH_START = -1 * L_PUNCH_START
L_PUNCH_END = L_PUNCH_END
IF (MEASURE.EXISTS(L_NDIX) ) THEN (
AIMEASURE = MEASURE[L_NDIX]
)
/* OUT_MEASURE_REGULAR[L_NDIX] = 0*/
AISTARTTIME = NULLDATEMAX
AISTOPTIME = NULLDATE
AIRECPOSITION = NULLTEXT
L_PAY_TIME_TYPE = NULLTEXT
L_Absence_Type = 0
L_FOUND_DATE = V_DATE
AIMEASURE = 0
NIDX = 0
L_COUNT = L_NDIX
L_REGULAR_HOURS = 0
V_REGULAR_HOURS = 0
TOTAL_REGULAR_HOURS = 0
L_SHORTAGE = 0
L_HOLIDAY_OVERTIME = 0
HOLIDAY_OVERTIME = 0
L_ADDITIONAL_HOURS_BEFORE = 0
V_ADDITIONAL_HOURS_BEFORE = 0
L_ADDITIONAL_HOURS_AFTER = 0
V_ADDITIONAL_HOURS_AFTER = 0
SUM_ELAPSED = 0
L_REG_RIFF = 0
L_TOT = 0
L_ADDITIONAL_HOURS = 0
V_ADDITIONAL_HOURS = 0
L_NULL_REGULAR = 0
L_Absence_MEASURE = 0
DAYS_STATTIME_ENDTIME=0
WHILE NIDX < WMAARY LOOP /* Loop to get first in last out in the punch start and
end times */
(
NIDX = NIDX + 1
AIRECPOSITION = HWM_CTXARY_RECORD_POSITIONS[NIDX]
L_Absence_Type = 0
IF (MEASURE.EXISTS(NIDX) ) THEN (
AIMEASURE = MEASURE[NIDX]
)
L_ADDITIONAL_HOURS_AFTER = ROUND(DAYS_BETWEEN(AISTOPTIME,
V_SHIFT_END) * 24,2)
V_ADDITIONAL_HOURS_AFTER = V_ADDITIONAL_HOURS_AFTER +
L_ADDITIONAL_HOURS_AFTER*/
OUT_ADDITIONAL_HOURS_AFTER[NIDX] = L_ADDITIONAL_HOURS_AFTER
)
IF AISTARTTIME >= V_SHIFT_END AND TO_CHAR(V_SHIFT_START) <>
'1900/01/01 00:00:00' THEN
(
DAYS_STATTIME_ENDTIME=
DAYS_BETWEEN(AISTOPTIME,AISTARTTIME)*24
if ( DAYS_STATTIME_ENDTIME > 8 )then
L_ADDITIONAL_HOURS_AFTER= (DAYS_STATTIME_ENDTIME - 8)-
L_ADDITIONAL_HOURS_BEFORE
/*lll_xxx= ROUND(DAYS_BETWEEN(AISTOPTIME,AISTARTTIME)* 24,2) +12
if ( lll_xxx > 8 )then
MMMM= lll_xxx - 8
L_ADDITIONAL_HOURS_AFTER = ROUND(DAYS_BETWEEN(AISTOPTIME,
AISTARTTIME) * 24,2)
V_ADDITIONAL_HOURS_AFTER = V_ADDITIONAL_HOURS_AFTER +
L_ADDITIONAL_HOURS_AFTER*/
OUT_ADDITIONAL_HOURS_AFTER[NIDX] = L_ADDITIONAL_HOURS_AFTER
)
)
/
*----------------------------------------------------------------------------------
-----------*/
/*------------------------------- Holiday Overtime
--------------------------------------------*/
IF (AISTOPTIME <> NULLDATE AND AISTARTTIME <> NULLDATE AND
L_DAY_OFF = 'Y') THEN
(
L_HOLIDAY_OVERTIME = ROUND(DAYS_BETWEEN(AISTOPTIME, AISTARTTIME)
* 24,2)
/*HOLIDAY_OVERTIME = HOLIDAY_OVERTIME + L_HOLIDAY_OVERTIME*/
OUT_MEASURE_HOLIDAY_OVERTIME[NIDX] = L_HOLIDAY_OVERTIME
)
/
*----------------------------------------------------------------------------------
-----------*/
/*------------------------------- Regular
-----------------------------------------------------*/
IF L_Absence_Type = 0 THEN
(
IF L_IS_ELAPSED = 'N' THEN
(
IF AISTARTTIME < SDATE OR AISTARTTIME > EDATE THEN
(
IF AISTARTTIME <= V_SHIFT_END THEN
(
L_REGULAR_HOURS = 0
/*OUT_MEASURE_REGULAR[NIDX] = 0*/
IF ( AISTARTTIME <= V_SHIFT_START AND AISTOPTIME >= V_SHIFT_END)
THEN
(
L_REGULAR_HOURS = ROUND(DAYS_BETWEEN(V_SHIFT_END, V_SHIFT_START)
* 24,2)
V_REGULAR_HOURS = V_REGULAR_HOURS + L_REGULAR_HOURS
OUT_MEASURE_REGULAR[NIDX] = L_REGULAR_HOURS
)
ELSE IF (AISTARTTIME > V_SHIFT_START AND AISTOPTIME < V_SHIFT_END )
THEN
(
/*L_REGULAR_HOURS = ROUND(DAYS_BETWEEN(AISTOPTIME, AISTARTTIME)
* 24,2)
V_REGULAR_HOURS = V_REGULAR_HOURS + L_REGULAR_HOURS */
L_REGULAR_HOURS = ROUND(DAYS_BETWEEN(AISTOPTIME, AISTARTTIME) *
24,2)
OUT_MEASURE_REGULAR[NIDX] = L_REGULAR_HOURS
)
ELSE IF ( AISTARTTIME > V_SHIFT_START AND AISTOPTIME >=
V_SHIFT_END) THEN
(
L_REGULAR_HOURS = ROUND(DAYS_BETWEEN(AISTOPTIME, AISTARTTIME) *
24,2)
IF ( L_REGULAR_HOURS > 8)
THEN (
L_REGULAR_HOURS = L_REGULAR_HOURS -
L_ADDITIONAL_HOURS_AFTER)ELSE
IF (L_REGULAR_HOURS < 8 ) THEN (
L_REGULAR_HOURS = ROUND(DAYS_BETWEEN(AISTOPTIME, AISTARTTIME) *
24,2)
)
OUT_MEASURE_REGULAR[NIDX] = L_REGULAR_HOURS
)
ELSE IF ( AISTARTTIME <= V_SHIFT_START AND AISTOPTIME < V_SHIFT_END
AND AISTOPTIME > V_SHIFT_START) THEN
(
L_REGULAR_HOURS = ROUND(DAYS_BETWEEN( AISTOPTIME, V_SHIFT_START)
* 24,2)
V_REGULAR_HOURS = V_REGULAR_HOURS + L_REGULAR_HOURS
OUT_MEASURE_REGULAR[NIDX] = L_REGULAR_HOURS
)
)
)
)
/
*----------------------------------------------------------------------------------
-----------*/
)
)
) /* End Loop First in Last Out*/
/
*----------------------------------------------------------------------------------
--------------*/
IF L_IS_ELAPSED = 'N' THEN
(
IF TOTAL_REGULAR_HOURS < ROUND(DAYS_BETWEEN( V_SHIFT_END,
V_SHIFT_START) * 24,2) THEN
(
L_SHORTAGE = ROUND(DAYS_BETWEEN( V_SHIFT_END, V_SHIFT_START) * 24,2) -
(V_REGULAR_HOURS )
)
)
/
*----------------------------------------------------------------------------------
--------------*/
CREATE_YN = 'N'
IF (UPPER(EXEC_TYPE) = 'CREATE' ) THEN (
CREATE_YN = 'Y'
)
WMAARY = HWM_CTXARY_RECORD_POSITIONS.COUNT
WMASTARTTIME = STARTTIME.COUNT
WMASTOPTIME = STOPTIME.COUNT
STARTHM = TO_NUMBER(TO_CHAR(AISTARTTIME,'HH24.MI'))
STOPHM = TO_NUMBER(TO_CHAR(AISTOPTIME,'HH24.MI'))
/*STARTD = TO_CHAR(AISTARTTIME, 'DAY')*/
NULLDATE = '01-JAN-1900'(DATE)
NULLDATETIME = '1900/01/01 00:00:00' (DATE)
NULLTEXT = '--NULL--'
EMPSCHDATESTART = '01-JAN-1900'(DATE)
EMPSCHDATEEND = '01-JAN-1900'(DATE)
START_DATE_OVERRIDE = '01-JAN-1900'(DATE)
END_DATE_OVERRIDE = '01-JAN-1900'(DATE)
TOT_DAY = 0
CTX_PERSONID = GET_CONTEXT(HWM_RESOURCE_ID, 0)
CTX_SUBRESOURCE = GET_CONTEXT(HWM_SUBRESOURCE_ID, 0)
V_COUNTER = 0
WSTART_DATE = CTX_SEARCHSTARTDATE
WEND_DATE = CTX_SEARCHENDDATE
OFF_DAY_BEFORE = TO_CHAR(OVRD_CTX_START_DATE,'YYYYMMDD')
OFF_DAY_AFTER = TO_CHAR(OVRD_CTX_END_DATE,'YYYYMMDD')
STARTYMD = TO_CHAR(AISTARTTIME,'YYYYMMDD')
STOPYMD = TO_CHAR(AISTOPTIME,'YYYYMMDD')
STARTHM = TO_NUMBER(TO_CHAR(AISTARTTIME,'HH24.MI'))
STOPHM = TO_NUMBER(TO_CHAR(AISTOPTIME,'HH24.MI'))
CALLSTARTHM = ROUND(TIME_HHMM_TO_DEC (STARTHM ),2)
CALLSTOPHM = ROUND(TIME_HHMM_TO_DEC (STOPHM),2)
) /* END IF */
/*OUT_MEASURE_REGULAR, OUT_MEASURE_SHORTAGE,
OUT_MEASURE_HOLIDAY_OVERTIME, OUT_ADDITIONAL_HOURS_BEFORE,
OUT_ADDITIONAL_HOURS_AFTER,
OUT_ELAPSED_OVERTIME, , , */