0% found this document useful (0 votes)
417 views11 pages

GLB Earn Proration Anytime

This document describes the GLB_EARN_PRORATION_ANYTIME predefined formula used to calculate prorated Anytime Pay amounts for salaried employees. The formula takes inputs like prorate start and end dates, pay value, hours worked, and proration unit. It then calculates the prorated pay amount, hours, and days worked based on the period of time worked within the payroll period.

Uploaded by

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

GLB Earn Proration Anytime

This document describes the GLB_EARN_PRORATION_ANYTIME predefined formula used to calculate prorated Anytime Pay amounts for salaried employees. The formula takes inputs like prorate start and end dates, pay value, hours worked, and proration unit. It then calculates the prorated pay amount, hours, and days worked based on the period of time worked within the payroll period.

Uploaded by

ajay kumar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

GLB_EARN_PRORATION_ANYTIME Formula

The following is the GLB_EARN_PRORATION predefined formula, augmented to calculate


Anytime Pay amounts for salaried employees.

/********************************************************************************
* *
* FORMULA NAME: GLB_EARN_PRORATION_ANYTIME *
* *
* FORMULA TYPE:Payroll Run Proration *
* *
*Description : Formula to calculate prorated Anytime Pay amounts for salaried *
* employees. *
* *
* A typical example *
* of proration would be when a new employee starts work in the middle of a *
* monthly payroll period and your payroll department makes a pro-rata payment *
* to reflect the proportion of monthly pay to which the employee is entitled. *
* *
*********************************************************************************/

/* Database Item Defaults */


default for prorate_start is '0001/01/01 [Link]' (date)
default for prorate_end is '0001/01/01 [Link]' (date)
default for PAY_EARN_PERIOD_START is '0001/01/01 [Link]' (date)
default for PAY_EARN_PERIOD_END is '0001/01/01 [Link]' (date)
default for pay_value is 0.0
default for hours_worked is 0.0
default for days_worked is 0.0
default for proration_unit is 'Hourly'

Default for ee_id is 0


default for PAYROLL_PERIOD_TYPE is 'PRD'

inputs are prorate_start (date),


prorate_end (date),
pay_value (number),
hours_worked (number),
days_worked(number),
proration_unit(text)
/*Anytime Pay Code*/

if (PAYROLL_ACTION_RUN_TYPE_SHORTNAME = 'EODNOR') OR
(PAYROLL_ACTION_RUN_TYPE_SHORTNAME= 'EODREG')
and GET_SYSDATE() < prorate_End and GET_SYSDATE() > prorate_start then
( l_prorate_end_sys = GET_SYSDATE())
ELSE
( l_prorate_end_sys = prorate_end)

l_log = PAY_INTERNAL_LOG_WRITE('GPAYZZZZZ')
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT)run type='||
PAYROLL_ACTION_RUN_TYPE_SHORTNAME)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT)sysdate ='|| to_char(GET_SYSDATE()))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT)l_prorate_end_sys ='||
to_char(l_prorate_end_sys))

l_calculated_rate = 0
l_multiple = 0
l_proration_method = 'X'

l_prorate_rate_formula = 'X'
l_workunit_rate_formula = 'X'
l_target_periodicity = 'X' /* to cover for existing element formulas, that don't
pass these values */
l_source_periodicity = 'X'
l_unit_type = 'X'
l_ee_units_entered = 0 /* units entered by end user in the EE, applicable only for
Unit Rate element */

if (proration_unit='Hourly') then
(
proration_unit='ORA_WORKHOUR'
)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT)Entered the Proration Formula')
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) pay value= '||to_char(pay_value))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial hours : '||TO_CHAR(hours_worked))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial days : '||TO_CHAR(days_worked))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial proration unit : '||
proration_unit)
/* Key Variable values retrival*/

l_payroll_rel_action_id = GET_CONTEXT(PAYROLL_REL_ACTION_ID, 0)

IF l_payroll_rel_action_id = 0 THEN
(
l_msg =
GET_MESG('HRX','HRX_USETE_CONTEXT_NOT_SET','CONTEXT','PAYROLL_REL_ACTION_ID')
l_dummy = PAY_LOG_ERROR(l_msg)
/* dummy = 1 */
/* Formula must error out at this point */
)

ee_id = GET_CONTEXT(ELEMENT_ENTRY_ID,0)
IF ee_id = 0 THEN
(
log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) - Element Entry Id context not set')
mesg = 'Element Entry Id context is not set.'
Return mesg
)

IF (WSA_EXISTS('unit_type','TEXT_NUMBER')) THEN
(
wsa_unit_type = WSA_GET('unit_type', EMPTY_TEXT_NUMBER)
IF wsa_unit_type.EXISTS(ee_Id) THEN
( l_unit_type = wsa_unit_type[ee_Id] )
)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) unit type is : '|| l_unit_type)
IF (WSA_EXISTS('proration_method','TEXT_NUMBER')) THEN
(
wsa_proration_method = WSA_GET('proration_method', EMPTY_TEXT_NUMBER)
IF wsa_proration_method.EXISTS(ee_Id) THEN
( l_proration_method = wsa_proration_method[ee_Id] )
)

/* for ADD REPORT WORK UNIT CHECK BEFORE REDUCE REGULAR */


GLB_REPORT_UNIT_KEY = 'REPORT_UNIT_'||entry_level||'-'||TO_CHAR(ee_Id)||'-'||
TO_CHAR(l_payroll_rel_action_id)
l_report_unit = WSA_GET(GLB_REPORT_UNIT_KEY, 'X')
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) l_report_unit is : '|| l_report_unit)

IF (WSA_EXISTS('PRORATION_CONVERSION_RULE','TEXT_NUMBER')) THEN
(
was_proration_rate_formula = WSA_GET('PRORATION_CONVERSION_RULE',
EMPTY_TEXT_NUMBER)
IF was_proration_rate_formula.EXISTS(ee_Id) THEN
( l_prorate_rate_formula = was_proration_rate_formula[ee_Id] )
)

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) proration rate conversion formula: '||


l_prorate_rate_formula)

IF (WSA_EXISTS('WORK_UNITS_CONVERSION_RULE','TEXT_NUMBER')) THEN
(
was_workunit_rate_formula = WSA_GET('WORK_UNITS_CONVERSION_RULE',
EMPTY_TEXT_NUMBER)
IF was_workunit_rate_formula.EXISTS(ee_Id) THEN
( l_workunit_rate_formula = was_workunit_rate_formula[ee_Id] )
)

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) workunit rate conversion formula: '||


l_workunit_rate_formula)

if (l_unit_type <> 'X' ) then /* for Unit X Rate element, get the inputs */
( IF (WSA_EXISTS('multiple','NUMBER_NUMBER')) THEN
(
wsa_multiple = WSA_GET('multiple',EMPTY_NUMBER_NUMBER)
IF wsa_multiple.EXISTS(ee_Id) THEN
( l_multiple = wsa_multiple[ee_Id] )
)

IF (WSA_EXISTS('calculated_rate','NUMBER_NUMBER')) THEN
(
wsa_calculated_rate = WSA_GET('calculated_rate',EMPTY_NUMBER_NUMBER)
IF wsa_calculated_rate.EXISTS(ee_Id) THEN
( l_calculated_rate = wsa_calculated_rate[ee_Id] )
)
IF (WSA_EXISTS('ee_units_entered','NUMBER_NUMBER')) THEN
(
wsa_ee_units_entered = WSA_GET('ee_units_entered',EMPTY_NUMBER_NUMBER)
IF wsa_ee_units_entered.EXISTS(ee_Id) THEN
( l_ee_units_entered = wsa_ee_units_entered[ee_Id] )
)
IF (WSA_EXISTS('source_periodicity','TEXT_NUMBER')) THEN
(
wsa_source_periodicity = WSA_GET('source_periodicity', EMPTY_TEXT_NUMBER)
IF wsa_source_periodicity.EXISTS(ee_Id) THEN
( l_source_periodicity = wsa_source_periodicity[ee_Id] )
)

IF (WSA_EXISTS('target_periodicity','TEXT_NUMBER')) THEN
(
wsa_target_periodicity = WSA_GET('target_periodicity', EMPTY_TEXT_NUMBER)
IF wsa_target_periodicity.EXISTS(ee_Id) THEN
( l_target_periodicity = wsa_target_periodicity[ee_Id] )
)
)

l_hours = 0.0
l_days_worked=0
l_value = pay_value

IF (prorate_start was not defaulted) then


(
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Porate start :
'||to_char(prorate_start))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Porate end : '||to_char(prorate_end))

/* to cover for payroll transfer case */


l_prorate_start = greatest(prorate_start, pay_earn_period_start)
l_prorate_end = least(l_prorate_end_sys, pay_earn_period_end)
if (l_prorate_rate_formula = 'ORA_ANNUAL_STD_WORK_HOURS' or
l_prorate_rate_formula = 'ORA_ANNUAL_WORK_HOURS' or l_prorate_rate_formula =
'ORA_PERIOD_WORK_SCHED_RATE' or l_prorate_rate_formula = 'ANNUALIZED RATE
CONVERSION' or l_prorate_rate_formula = 'DAILY RATE CONVERSION') then
(

l_prorate_name='ORA_RATE_CONV_PRORATE'
)

else
(
l_prorate_name=l_prorate_rate_formula||'_PRORATE'
if (IS_EXECUTABLE(l_prorate_name)) THEN
(
l_prorate_name=l_prorate_rate_formula||'_PRORATE'
)
else
(

l_prorate_name = 'ORA_RATE_CONV_PRORATE'
)

IF(l_prorate_rate_formula <> 'X' ) then (


/* for new created element proration calculation */
l_source_periodicity=PAYROLL_PERIOD_TYPE

CALL_FORMULA(l_prorate_name,
prorate_start > 'PRORATE_START_DATE',
l_prorate_end > 'PRORATE_END_DATE',
l_source_periodicity > 'SOURCE_PERIODICITY',
l_prorate_rate_formula>'RATE_CONV_FORMULA',
l_workunit_rate_formula > 'WORKUNIT_CONV_FORMULA',
hours_worked > 'HOURS_WORKED',
days_worked > 'DAYS_WORKED',
pay_value > 'IN_AMOUNT',
proration_unit>'PRORATION_UNIT',
l_unit_type > 'UNIT_TYPE',
l_value < 'PRORATE_AMOUNT' DEFAULT 0,
l_hours < 'PRO_HOURS' DEFAULT 0,
l_days_worked < 'PRO_DAYS' DEFAULT 0)

)
else (
/* for existing element deal with proration calculation */
IF (l_unit_type = 'X' ) THEN
( /* Flat amount and Percentage formula */
if (l_proration_method = 'CDAYS_VRATE' or l_proration_method = 'X' ) THEN
/* either it is Calendar days variable rate proration, or existing
element
without proration method specified */
(
l_total_days = days_between(PAY_EARN_PERIOD_END, PAY_EARN_PERIOD_START ) +
1
l_days = days_between(prorate_end , prorate_start) + 1
l_days_worked=l_days
l_value = (l_value / l_total_days) * l_days
l_hours = round((l_days / l_total_days) * hours_worked,3)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Proration formula called from
FLAT or PERCENTAGE')
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) calculated pay_value :
'||TO_CHAR(l_value))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) l_total_days :
'||TO_CHAR(l_total_days))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) calculated days :
'||TO_CHAR(l_days))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) calculated hours :
'||TO_CHAR(l_hours))
)
else
( /* l_source_periodicity, l_target_periodicty are separate between
unit_rate element
and flat and percentage element logic */
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) FLAT or PERCENTAGE,
proration_method = ' || l_proration_method)
l_source_periodicity = PAYROLL_PERIOD_TYPE
if (l_proration_method = 'CDAYS_FRATE') THEN
(
l_proration_units = days_between(prorate_end , prorate_start) + 1
l_target_periodicity = 'DAILY'
)
else ( if (l_proration_method = 'WH_FRATE') THEN
(
l_target_periodicity = 'WORKHOUR'
l_prorate_unit_type = 'H'
)
else if (l_proration_method = 'WD_FRATE') THEN
(
l_target_periodicity = 'WORKDAY'
l_prorate_unit_type = 'D'
)

if ( entry_level = 'AP') then


( l_term_assignment_id = term_hr_term_id
set_input('HR_ASSIGN_ID',l_term_assignment_id)
)
else if ( entry_level = 'PA') then
( l_term_assignment_id = ASG_HR_ASG_ID
set_input('HR_ASSIGN_ID',l_term_assignment_id)
)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) FLAT OR PERCENTAGE
calling GET_PAY_AVAILIBILITY')
CALL_FORMULA('GET_PAY_AVAILABILITY',
prorate_start > 'ACTUAL_START_DATE',
prorate_end > 'ACTUAL_END_DATE',
l_prorate_unit_type > 'UNIT_TYPE',
entry_level > 'ENTRY_LEVEL',
l_term_assignment_id > 'HR_ASSIGN_ID',
l_proration_units < 'L_UNITS' DEFAULT 0)
)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) FLAT OR PERCENTAGE calling
RATE_CONVERTER')
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) source_periodicity and target
periodicity =' ||payroll_period_type || ' and '||l_target_periodicity)
CALL_FORMULA( 'RATE_CONVERTER',
pay_value > 'SOURCE_AMOUNT',
payroll_period_type > 'SOURCE_PERIODICITY',
l_target_periodicity > 'TARGET_PERIODICITY',
'ANNUALIZED RATE CONVERSION' > 'method',
l_prorate_rate < 'TARGET_AMOUNT' DEFAULT 0)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) l_prorate_rate :
'||TO_CHAR(l_prorate_rate))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) hours_worked :
'||TO_CHAR(hours_worked))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) proration_units :
'||TO_CHAR(l_proration_units))

if l_proration_method = 'WH_FRATE' then


( l_hours = l_proration_units )
else if l_proration_method = 'WD_FRATE' then
(
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Get hours worked for
WD_FRATE')
CALL_FORMULA('GET_PAY_AVAILABILITY',
prorate_start > 'ACTUAL_START_DATE',
prorate_end > 'ACTUAL_END_DATE',
'H' > 'UNIT_TYPE',
entry_level > 'ENTRY_LEVEL',
l_term_assignment_id > 'HR_ASSIGN_ID',
l_hours < 'L_UNITS' DEFAULT 0)
)
else
(l_hours = hours_worked * l_value /pay_value
l_hours = round(l_hours,3))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) l_hours : '||TO_CHAR(l_hours))

/** if proration units are not full, then prorate, otherwise pay the
whole amount */
if (l_proration_method = 'WD_FRATE' OR l_proration_method = 'WH_FRATE')
then
( l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) hours_worked, l_hours ='
|| to_char(hours_worked)||' ,'||to_char(l_hours))

/** Percentage element hours worked had been removed, so there no


need to check l_hours < hours_worked , and l_value didn't calculated by l_hours, it
is save to comment below code */
/** if (l_hours < hours_worked ) then */
/** l_value = l_prorate_rate * l_proration_units */
/** else */
/** (l_value = pay_value) */

if (l_hours=hours_worked ) then
(l_value = pay_value)
else
l_value = l_prorate_rate * l_proration_units

)
else /** CDAYS_FRATE **/
( l_value = l_prorate_rate * l_proration_units
l_hours = hours_worked * l_value /pay_value
l_hours = round(l_hours,3))
)
)
ELSE
(
if (pay_value != 0 and pay_value was not defaulted) then
(
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) unit type= '||l_unit_type)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) multiple = '||to_char(l_multiple))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) cal_rate =
'||to_char(l_calculated_rate))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) HR_ENTRY_LEVEL : '||ENTRY_LEVEL)

if ( entry_level = 'AP') then


( l_term_assignment_id = term_hr_term_id
set_input('HR_ASSIGN_ID',l_term_assignment_id)
)
else if ( entry_level = 'PA') then
( l_term_assignment_id = ASG_HR_ASG_ID
set_input('HR_ASSIGN_ID',l_term_assignment_id)
)

if (l_calculated_rate = 0 and l_target_periodicity <> 'X') then


( /* Possibly Mid hire - User did not give Rate value and it was not
derived in the base Unit X Rate formula */

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initialize the call for


GET_PAY_SALARY_BASIS')

CALL_FORMULA('GET_PAY_SALARY_BASIS',
l_term_assignment_id > 'HR_ASSIGN_ID',
l_term_assignment_id > 'HR_TRM_ID',
prorate_start > 'HR_EFFECTIVE_DATE',
entry_level > 'HR_ENTRY_LEVEL',
l_salary < 'L_SALARY' DEFAULT 0,
l_salary_basis_code < 'L_SALARY_BASIS_CODE' DEFAULT ' ',
l_full_time_salary < 'L_FULL_TIME_SALARY' DEFAULT 0)

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) SALARY : '||TO_CHAR(l_salary))


l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) SALARY_BASIS_CODE :
'||l_salary_basis_code)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) FULL TIME SALARY :
'||TO_CHAR(l_full_time_salary))

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Parameter


Initialization for Rate Converter Call')
CALL_FORMULA( 'RATE_CONVERTER',
l_full_time_salary > 'SOURCE_AMOUNT',
l_source_periodicity > 'SOURCE_PERIODICITY',
l_target_periodicity > 'TARGET_PERIODICITY',
'ANNUALIZED RATE CONVERSION' > 'method',
l_calculated_rate < 'TARGET_AMOUNT' DEFAULT 0)

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Rate Converter


Executed ')

) /* mid hire end */


if (l_ee_units_entered = 0 ) then
(
CALL_FORMULA('GET_PAY_AVAILABILITY',
prorate_start > 'ACTUAL_START_DATE',
l_prorate_end > 'ACTUAL_END_DATE',
'H' > 'UNIT_TYPE',
entry_level > 'ENTRY_LEVEL',
l_term_assignment_id > 'HR_ASSIGN_ID',
l_prorate_hours < 'L_UNITS' DEFAULT 0)
l_hours = l_prorate_hours
if l_unit_type = 'H' then
(l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) hours for the chunk :
'||TO_CHAR(l_prorate_hours))
Calculated_Hours = l_hours
l_value = l_hours * l_calculated_rate * l_multiple )
else
( CALL_FORMULA('GET_PAY_AVAILABILITY',
prorate_start > 'ACTUAL_START_DATE',
l_prorate_end > 'ACTUAL_END_DATE',
'D' > 'UNIT_TYPE',
entry_level > 'ENTRY_LEVEL',
l_term_assignment_id > 'HR_ASSIGN_ID',
l_prorate_days < 'L_UNITS' DEFAULT 0)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) days for the chunk :
'||TO_CHAR(l_prorate_days))
l_value = l_prorate_days * l_calculated_rate * l_multiple
calculated_days = l_prorate_days
)
)
else /* user entered units in the EE, those are prorated based on days in the
chunk */
(
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) units are entered
'||TO_CHAR(l_ee_units_entered))
l_total_days = days_between(PAY_EARN_PERIOD_END, PAY_EARN_PERIOD_START )
+ 1
l_days = days_between(l_prorate_end , prorate_start) + 1
l_value = l_ee_units_entered * l_calculated_rate * l_multiple * l_days /
l_total_days
if l_unit_type = 'H' then
( l_hours = l_ee_units_entered * l_days /l_total_days )
else
( l_hours = 0
calculated_days = l_ee_units_entered * l_days/ l_total_days

)
Calculated_Hours = l_hours
)
calculated_rate = l_calculated_rate
)
)
)
)
/*Do Reduce in Proration */

GLB_EARN_REDUCE_KEY = ENTRY_LEVEL||'-'||TO_CHAR(ee_id)||'-'||
TO_CHAR(l_payroll_rel_action_id)
l_log =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_EARN_REDUCE_KEY
'||GLB_EARN_REDUCE_KEY)

GLB_EARN_REDUCE_EARNING_KEY = 'EARNING_'||GLB_EARN_REDUCE_KEY
l_log =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_EARN_REDUCE_EARNING_KEY
'||GLB_EARN_REDUCE_EARNING_KEY)

GLB_EARN_REDUCE_HOURS_KEY = 'HOUR_'|| GLB_EARN_REDUCE_KEY


l_log =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_EARN_REDUCE_HOURS_KEY
'||GLB_EARN_REDUCE_HOURS_KEY)

GLB_EARN_REDUCE_DAYS_KEY = 'DAY_'|| GLB_EARN_REDUCE_KEY


l_log =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_EARN_REDUCE_DAYS_KEY
'||GLB_EARN_REDUCE_DAYS_KEY)

l_reduce=WSA_GET(GLB_EARN_REDUCE_EARNING_KEY,0)
l_reduce_hours=WSA_GET(GLB_EARN_REDUCE_HOURS_KEY,0)
l_reduce_days=WSA_GET(GLB_EARN_REDUCE_DAYS_KEY,0)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial reduce regular earning :
'||TO_CHAR(l_reduce))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial reduce regular hours:
'||TO_CHAR(l_reduce_hours))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial reduce regular days:
'||TO_CHAR(l_reduce_days))

GLB_ABS_EARN_REDUCE_KEY = ENTRY_LEVEL||'-'||TO_CHAR(ee_id)||'-'||
TO_CHAR(l_payroll_rel_action_id)||'_ABSENCE'
l_dummy =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_ABS_EARN_REDUCE_KEY
'||GLB_ABS_EARN_REDUCE_KEY)

GLB_ABS_EARN_REDUCE_EARNING_KEY = 'EARNING_'||GLB_ABS_EARN_REDUCE_KEY
l_dummy =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_ABS_EARN_REDUCE_EARNING_KEY '
||GLB_ABS_EARN_REDUCE_EARNING_KEY)

GLB_ABS_EARN_REDUCE_HOURS_KEY = 'HOUR_'|| GLB_ABS_EARN_REDUCE_KEY


l_dummy =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_ABS_EARN_REDUCE_HOURS_KEY '
||GLB_ABS_EARN_REDUCE_HOURS_KEY)

GLB_ABS_EARN_REDUCE_DAYS_KEY = 'DAY_'|| GLB_ABS_EARN_REDUCE_KEY


l_dummy =PAY_INTERNAL_LOG_WRITE('(GLBPRT) GLB_ABS_EARN_REDUCE_DAYS_KEY '
||GLB_ABS_EARN_REDUCE_DAYS_KEY)

l_reduce_abs=WSA_GET(GLB_ABS_EARN_REDUCE_EARNING_KEY,0)
l_reduce_abs_hours=WSA_GET(GLB_ABS_EARN_REDUCE_HOURS_KEY,0)
l_reduce_abs_days=WSA_GET(GLB_ABS_EARN_REDUCE_DAYS_KEY,0)
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial absence reduce regular earning :
'||TO_CHAR(l_reduce_abs))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial absence reduce regular hours:
'||TO_CHAR(l_reduce_abs_hours))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Initial absence reduce regular days:
'||TO_CHAR(l_reduce_abs_days))
if (l_reduce_abs_hours > 0 and l_hours > 0) OR (l_report_unit='ORA_HOURSWORK')
then
(
If l_reduce_abs_hours <= l_hours Then
(
l_hours = l_hours - l_reduce_abs_hours
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Hour:
'||TO_CHAR(l_reduce_abs_hours))
)
Else
(
l_reduce_abs_hours = l_hours
l_hours = 0
if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient absence hours to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)
)
)
if (l_reduce_abs_days > 0 and l_days_worked > 0) OR (l_report_unit =
'ORA_WORKDAYS') then
(
If l_reduce_abs_days <= l_days_worked Then
(
l_days_worked = l_days_worked - l_reduce_abs_days
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Day:
'||TO_CHAR(l_reduce_abs_days))
)
Else
(
l_reduce_abs_days = l_days_worked
l_days_worked = 0
if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient absence days to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)
)
)
If l_reduce_abs <= l_value then
(
l_value = l_value - l_reduce_abs
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Earning:
'||TO_CHAR(l_reduce_abs))
)
Else
(
l_reduce_abs = l_value
l_value = 0
if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient absence value to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)
)
if (l_reduce_hours > 0 and l_hours > 0) OR (l_report_unit='ORA_HOURSWORK') then
(
If l_reduce_hours <= l_hours Then
(
l_hours = l_hours - l_reduce_hours
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Hour:
'||TO_CHAR(l_reduce_hours))
)
Else
(
l_reduce_hours = l_hours
l_hours = 0

if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient hours to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)
)
)
if (l_reduce_days > 0 and l_days_worked > 0) OR (l_report_unit = 'ORA_WORKDAYS')
then
(
If l_reduce_days <= l_days_worked Then
(
l_days_worked = l_days_worked - l_reduce_days
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Day: '||TO_CHAR(l_reduce_days))
)
Else
(
l_reduce_days = l_days_worked
l_days_worked = 0
if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient days to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)
)
)
If l_reduce <= l_value then
(
l_value = l_value - l_reduce
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Earning: '||TO_CHAR(l_reduce))
)
Else
(
l_reduce = l_value
l_value = 0
if(prorate_end=PAY_EARN_PERIOD_END) then (
mesg = 'Insufficient earnings to reduce'
l_log = PAY_LOG_WARNING('PAY:PAY_RED_REG_LIMIT')
)

l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) hours worked: '||TO_CHAR(L_HOURS))


l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) pay value : '||TO_CHAR(l_value))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) days worked :
'||TO_CHAR(l_days_worked))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Hour:
'||TO_CHAR(l_reduce_abs_hours))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Day:
'||TO_CHAR(l_reduce_abs_days))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Absence Reduce Earning:
'||TO_CHAR(l_reduce_abs))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Hour:
'||TO_CHAR(l_reduce_hours))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Day: '||TO_CHAR(l_reduce_days))
l_log = PAY_INTERNAL_LOG_WRITE('(GLBPRT) Reduce Earning: '||TO_CHAR(l_reduce))
pay_value = l_value
HOURS_WORKED = L_HOURS
DAYS_WORKED = l_days_worked
reduce_regular_earnings=l_reduce
Reduce_Regular_Days=l_reduce_days
reduce_regular_hours=l_reduce_hours
Reduce_Regular_Absence_Earnings=l_reduce_abs
Reduce_Regular_Absence_Days=l_reduce_abs_days
Reduce_Regular_Absence_Hours=l_reduce_abs_hours

return pay_value,
hours_worked,Calculated_Hours,calculated_days,calculated_rate,days_worked,reduce_re
gular_earnings,
reduce_regular_hours,Reduce_Regular_Days,Reduce_Regular_Absence_Days,Reduce_Regular
_Absence_Earnings,Reduce_Regular_Absence_Hours

You might also like