0% found this document useful (0 votes)
946 views12 pages

Fast Formula Backup 29112020

The document contains default values and settings for various time-related fields for scheduling and payroll purposes. It defines default values such as start and end dates, times, and text codes to represent null or empty values. It also contains logic to calculate work schedules and handle exceptions such as holidays and elapsed shifts.

Uploaded by

AbdullahJamal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
946 views12 pages

Fast Formula Backup 29112020

The document contains default values and settings for various time-related fields for scheduling and payroll purposes. It defines default values such as start and end dates, times, and text codes to represent null or empty values. It also contains logic to calculate work schedules and handle exceptions such as holidays and elapsed shifts.

Uploaded by

AbdullahJamal
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 12

DEFAULT FOR HWM_CTXARY_RECORD_POSITIONS IS EMPTY_TEXT_NUMBER

DEFAULT FOR HWM_CTXARY_HWM_MEASURE_DAY IS EMPTY_NUMBER_NUMBER


DEFAULT FOR MEASURE IS EMPTY_NUMBER_NUMBER
DEFAULT FOR STARTTIME IS EMPTY_DATE_NUMBER
DEFAULT FOR STOPTIME IS EMPTY_DATE_NUMBER
DEFAULT FOR PayrollTimeType is EMPTY_TEXT_NUMBER
DEFAULT FOR AbsenceType is EMPTY_NUMBER_NUMBER

DEFAULT_DATA_VALUE FOR HWM_PUB_HOLIDAY_START_TIME IS '01-JAN-1900'(DATE)


DEFAULT_DATA_VALUE FOR HWM_PUB_HOLIDAY_END_TIME IS '01-JAN-1900'(DATE)

DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_IS_ELAPSED_SHIFT IS '--NULL--'


DEFAULT_DATA_VALUE FOR HWM_DTL_SCHD_SCHEDULED_DURATION IS 0
DEFAULT_DATA_VALUE FOR HWM_PUB_HOLIDAY_DATE_SOURCE IS '**FF_NULL**'
DEFAULT_DATA_VALUE FOR HWM_PUB_HOLIDAY_OBJECT_CATEGORY IS '**FF_NULL**'

/****************************************/
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)

DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_START_DATE_TIME IS '1900-01-01 00:00:00'(DATE)


DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_END_DATE_TIME IS '4712-12-31 00:00:00' (DATE)

DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_AVAILABILITY_CODE IS '--NULL--'

DEFAULT_DATA_VALUE FOR HWM_EMP_SCHD_PERSON_ID IS 0

DEFAULT FOR HWM_PER_ASG_AVAILABILITY_WORKDAY_PATTERN IS '--NULL--'


DEFAULT FOR HWM_PER_ASG_WORK_SCH_WORKDAY_PATTERN IS '--NULL--'

ALIAS HWM_EMP_SCHD_START_TIME AS WS_START_TIME


ALIAS HWM_EMP_SCHD_END_TIME AS WS_END_TIME
ALIAS HWM_EMP_SCHD_START_DATE_TIME AS WS_START_DATE_TIME
ALIAS HWM_EMP_SCHD_END_DATE_TIME AS WS_END_DATE_TIME
ALIAS HWM_EMP_SCHD_PERSON_ID AS WS_END_PERSON_ID

ALIAS HWM_PER_ASG_AVAILABILITY_WORKDAY_PATTERN AS AVAILABILITY_WORKDAY_PATTERN


ALIAS HWM_PER_ASG_WORK_SCH_WORKDAY_PATTERN AS WORK_SCH_WORKDAY_PATTERN

ALIAS HWM_EMP_SCHD_AVAILABILITY_CODE AS EMP_SCHD_AVAILABILITY

DEFAULT FOR HWM_CTXARY_RECORD_POSITIONS IS EMPTY_TEXT_NUMBER


DEFAULT FOR HWM_CTXARY_HWM_MEASURE_DAY IS EMPTY_NUMBER_NUMBER

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--'

/* Variables for R13*/

RecPositoinDetail = 'DETAIL'

/* GET CONTEXT, INORDER TO MAKT AVAILABLE FOR UTIL FORMULA) */


CTX_PERSONID = GET_CONTEXT(HWM_RESOURCE_ID, 0)
CTX_SUBRESOURCE = GET_CONTEXT(HWM_SUBRESOURCE_ID, 0)
CTX_START_DATE = GET_CONTEXT(HWM_CTX_SEARCH_START_DATE, NULLDATE)
CTX_END_DATE = GET_CONTEXT(HWM_CTX_SEARCH_END_DATE, NULLDATE)

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]*/

IF TO_CHAR(STARTTIME[L_NDIX],'YYYYMMDD') <> L_DATE THEN


(
V_DATE = STARTTIME[L_NDIX]
E_DATE = STOPTIME[L_NDIX]
L_DATE = TO_CHAR(STARTTIME[L_NDIX],'YYYYMMDD')
/* ) Feras 26122019*/
/* Check if V_DATE is holiday */

/* Feras 26122019*/
PH_START_DATE = to_Date('01011900','DDMMYYYY')
PH_END_DATE = to_Date('01011900','DDMMYYYY')

if (pubCount > 0 ) Then


(

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]

if (SDate != NullDate and objCat <> NULLTEXT) THEN (

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))
)

if V_DATE >= SDate and V_DATE <=EDate then


(
Exit
)
PH_NDIX = PH_NDIX + 1

)
)
)

L_PD_SHIFT_END = NULLDATE
L_ND_SHIFT_START = NULLDATE

V_SHIFT_START = NULLDATE
V_SHIFT_END = NULLDATE

OVRD_CTX_START_DATE = ADD_DAYS(V_DATE , -2)


OVRD_CTX_END_DATE = ADD_DAYS(V_DATE , 2)

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')

/*l_sl_grace = HWM_EMP_SCHD_START_LATE_GRACE_PERIOD[I] /* Time in minute


for flexible time */

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_SHIFT_END_TIME = ROUND(TIME_HHMM_TO_DEC (SHIFT_END_TIME ),2)

L_DAY_OFF = 'N'
)
)
I = WS_START_DATE_TIME.NEXT(I,-1)
) /* END LOOP */
)
)

IF L_DAY_OFF = 'N' THEN /* Check if the day is not off*/


(
IF L_PD_DAY_OFF = 'Y' OR L_PD_SHIFT_END = NULLDATE THEN /* check if
previous day is off*/
(
L_PD_SHIFT_END = ADD_DAYS(V_SHIFT_START,-1) /* default previous day shift
end as one daye before current day shift start*/
)

IF L_ND_DAY_OFF = 'Y' OR L_ND_SHIFT_START = NULLDATE THEN /* check if next


day is off*/
(
L_ND_SHIFT_START = ADD_DAYS(V_SHIFT_END,1) /* default next day shift
start as one day after current day shift end*/
)

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

L_PUNCH_START_D = ADD_DAYS(V_SHIFT_START , L_PUNCH_START )


L_PUNCH_END_D = ADD_DAYS(V_SHIFT_END , L_PUNCH_END )
)
/* ELSE
(

IF L_PD_DAY_OFF = 'Y' OR L_PD_SHIFT_END = NULLDATE THEN


(
L_PUNCH_START_D =
TO_DATE(TO_CHAR(V_DATE,'YYYYMMDD')||'00:00','YYYYMMDDHH24:MI')
)
ELSE
(
L_PUNCH_START_D = ADD_DAYS(L_PD_SHIFT_END,0.5)
)

IF L_ND_DAY_OFF = 'Y' OR L_ND_SHIFT_START = NULLDATE THEN


(
L_PUNCH_END_D =
TO_DATE(TO_CHAR(V_DATE,'YYYYMMDD')||'23:59','YYYYMMDDHH24:MI')
)
ELSE
(
L_PUNCH_END_D = ADD_DAYS(L_ND_SHIFT_START,-0.5)
)
) */

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

IF L_RECPOSITION = RecPositoinDetail /*AND V_DATE <> L_FOUND_DATE*/ AND AIMEASURE


> 0 THEN
(
/*OUT_MEASURE_REGULAR[L_NDIX] = 0 */
if (V_DATE <> L_FOUND_DATE) then
(

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]
)

IF (STARTTIME[NIDX] >= L_PUNCH_START_D AND STARTTIME[NIDX] <= L_PUNCH_END_D)


AND
(STOPTIME[NIDX] >= L_PUNCH_START_D AND STOPTIME[NIDX] <= L_PUNCH_END_D )
THEN
(
IF ( AIRECPOSITION = RecPositoinDetail AND AIMEASURE > 0 ) THEN
(

/*IF (STARTTIME.EXISTS(NIDX) AND STARTTIME[NIDX] < AISTARTTIME ) THEN


( */
AISTARTTIME = STARTTIME[NIDX]
AISTOPTIME = STOPTIME[NIDX]
IF PAYROLLTIMETYPE.exists(NIDX) then
(
L_PAY_TIME_TYPE = PAYROLLTIMETYPE[NIDX]
)
IF L_IS_ELAPSED = 'N' Then
(
IF AbsenceType.exists(NIDX) then
(
L_Absence_Type = AbsenceType[NIDX]
/*L_Absence_MEASURE = L_Absence_MEASURE + MEASURE[NIDX]*/
/*L_NDIX = L_NDIX + 1*/
)
)
/*------------------------------- Overtime
----------------------------------------------------*/
IF AISTARTTIME < SDate OR AISTARTTIME > EDate THEN
(
L_ADDITIONAL_HOURS_AFTER = 0
IF AISTARTTIME < V_SHIFT_START AND TO_CHAR(V_SHIFT_START) <>
'1900/01/01 00:00:00' THEN
(
L_ADDITIONAL_HOURS_BEFORE =
ROUND(DAYS_BETWEEN(V_SHIFT_START,AISTARTTIME) * 24,2)
V_ADDITIONAL_HOURS_BEFORE = V_ADDITIONAL_HOURS_BEFORE +
L_ADDITIONAL_HOURS_BEFORE
OUT_ADDITIONAL_HOURS_BEFORE[NIDX] = L_ADDITIONAL_HOURS_BEFORE
)
IF AISTARTTIME < V_SHIFT_START AND AISTOPTIME < V_SHIFT_START AND
TO_CHAR(V_SHIFT_START) <> '1900/01/01 00:00:00' THEN
(
L_ADDITIONAL_HOURS_BEFORE =
ROUND(DAYS_BETWEEN(AISTOPTIME,AISTARTTIME) * 24,2)
V_ADDITIONAL_HOURS_BEFORE = V_ADDITIONAL_HOURS_BEFORE +
L_ADDITIONAL_HOURS_BEFORE
OUT_ADDITIONAL_HOURS_BEFORE[NIDX] = L_ADDITIONAL_HOURS_BEFORE
)

IF AISTOPTIME > 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

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 )
)
)

/
*----------------------------------------------------------------------------------
--------------*/

REC_POSITION = GET_CONTEXT(HWM_RECORD_POSITION, 'DETAIL')


/*FIXED VALUES FROM RULE HEADER */
SUM_LVL= GET_HDR_TEXT(RULE_ID, 'RUN_SUMMATION_LEVEL', 'TIMECARD')
EXEC_TYPE = GET_HDR_TEXT(RULE_ID,'RULE_EXEC_TYPE', 'CREATE')
REC_POSITION = GET_CONTEXT(HWM_RECORD_POSITION, 'DETAIL')
L_COUNTER = 1
WK_HRS_TOTAL_DAY = GET_WRK_NUM (FFS_ID , 'WK_HRS_TOTAL_DAY' , 0, 0 )

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

REC_POSITION = GET_CONTEXT(HWM_RECORD_POSITION, 'DETAIL')


CTX_PRD_STARTDATE = GET_CONTEXT(HWM_CTX_PERIOD_START_DATE, NULLDATETIME)
CTX_PRD_ENDDATE = GET_CONTEXT(HWM_CTX_PERIOD_END_DATE, NULLDATETIME)

CTX_PERSONID = GET_CONTEXT(HWM_RESOURCE_ID, 0)
CTX_SUBRESOURCE = GET_CONTEXT(HWM_SUBRESOURCE_ID, 0)

IF (AISTARTTIME != NULLDATE ) THEN (


WSTART_DATE = AISTARTTIME
)

IF (AISTOPTIME != NULLDATE ) THEN (


WEND_DATE = AISTOPTIME
)

V_COUNTER = 0

CTX_SEARCHSTARTDATE = GET_CONTEXT(HWM_CTX_SEARCH_START_DATE, NULLDATE)


CTX_SEARCHENDDATE = GET_CONTEXT(HWM_CTX_SEARCH_END_DATE, NULLDATE)

WSTART_DATE = CTX_SEARCHSTARTDATE
WEND_DATE = CTX_SEARCHENDDATE

OVRD_CTX_START_DATE = ADD_DAYS(V_DATE , -1)


OVRD_CTX_END_DATE = ADD_DAYS(V_DATE , 1)

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')

/* IMPORTANT TO USE THE ARRAY INFO */


CHANGE_CONTEXTS(HWM_CTX_SEARCH_START_DATE = OVRD_CTX_START_DATE )
(
CHANGE_CONTEXTS(HWM_CTX_SEARCH_END_DATE = OVRD_CTX_END_DATE)
(
AISTARTTIMECOUNT = WS_START_DATE_TIME.COUNT
AISTOPTIMECOUNT = WS_END_DATE_TIME.COUNT

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)

IF L_DAY_OFF = 'N' THEN /* If the day is not off*/


(
IF (AISTARTTIME = NULLDATE OR AISTOPTIME = NULLDATE) /* IF THE START PUNCH OR
END PUNCH NOT EXISTS */
THEN
IF L_IS_ELAPSED = 'N' THEN
(
L_NO_PUNCH = round(DAYS_BETWEEN(V_SHIFT_END,V_SHIFT_START) * 24,2)
OUT_MEASURE_SHORTAGE[L_NDIX] = L_NO_PUNCH
)

) /* END IF */

) /* END CHANGE CONTEXT */


)
)
)
/* END LARG IF*/
) /* END LARG LOOP*/
OUT_MEASURE_SHORTAGE=OUT_ADDITIONAL_HOURS_AFTER

/*OUT_MEASURE_REGULAR, OUT_MEASURE_SHORTAGE,
OUT_MEASURE_HOLIDAY_OVERTIME, OUT_ADDITIONAL_HOURS_BEFORE,
OUT_ADDITIONAL_HOURS_AFTER,
OUT_ELAPSED_OVERTIME, , , */

RETURN OUT_MEASURE_REGULAR, OUT_MEASURE_SHORTAGE,


OUT_ADDITIONAL_HOURS_BEFORE

You might also like