0% found this document useful (0 votes)
198 views

STD Analysis

The document contains PeopleCode functions that: 1) Validate employment actions and status changes by checking for valid status transitions and action-status combinations. 2) Calculate various employment dates like hire date, termination date, and last increase date by analyzing action and status history. 3) Check that a benefit program participation record is in effect as of an employee's hire date.

Uploaded by

kool_prince06
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
198 views

STD Analysis

The document contains PeopleCode functions that: 1) Validate employment actions and status changes by checking for valid status transitions and action-status combinations. 2) Calculate various employment dates like hire date, termination date, and last increase date by analyzing action and status history. 3) Check that a benefit program participation record is in effect as of an employee's hire date.

Uploaded by

kool_prince06
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 44

[FUNCLIB_GVT_HR.ACTION.

FieldFormula] Declare Function det_empl_status PeopleCode EMPL_STATUS FieldFormula; Declare Function prior_effdt_row PeopleCode EFFDT FieldFormula; Local date &NULLDATE; Function det_employment_dt; &LAST_INC_DT = FetchValue(GVT_JOB.EMPLID, CurrentRowNumber(), GVT_EMPLOYMENT. LAST_INCREASE_DT, 1); &ACTIVE_ROW = ActiveRowCount(GVT_JOB.EMPLID); For &I = 1 To &ACTIVE_ROW; &EFFDT = FetchValue(GVT_JOB.EFFDT, &I); &ACTION = FetchValue(GVT_JOB.ACTION, &I); &ACTION_REASON = FetchValue(GVT_JOB.ACTION_REASON, &I); &EMPL_STATUS = FetchValue(GVT_JOB.EMPL_STATUS, &I); &JOB_COMPRATE = FetchValue(GVT_JOB.GVT_COMPRATE, &I); prior_effdt_row(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &PRIOR_ROW); &LAST_ROW = &PRIOR_ROW; If All(&LAST_ROW) Then &PRIOR_COMPRATE = FetchValue(GVT_JOB.GVT_COMPRATE, &LAST_ROW); End-If; Evaluate &ACTION When = "HIR" If %Mode = "A" Or FieldChanged(Record.GVT_JOB, CurrentRowNumber(), GVT_PERS_DATA.PE R_STATUS, 1) Then If FetchValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.EMP L_RCD, 1) = 0 Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_PERS_DATA.ORI G_HIRE_DT, 1, &EFFDT); End-If; End-If; If &EFFDT >= &HIRE_DT Then &HIRE_DT = &EFFDT End-If; Break; When = "REH" If &EFFDT >= &REHIRE_DT Then &REHIRE_DT = &EFFDT End-If; Break; When = "TER" If &ACTION_REASON = "DEA" Then If FetchValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.EMP L_RCD, 1) = 0 Then &DT_OF_DEATH = &EFFDT - 1; End-If; End-If; When = "RET" When = "TER" When = "RWP" When = "TWP" When = "TWB" If &EFFDT >= &TERMINATION_DT Then &TERMINATION_DT = &EFFDT End-If; Break; When = "PRO" If &EFFDT >= &LAST_INCREASE_DT Then If &JOB_COMPRATE > &PRIOR_COMPRATE Then &LAST_INCREASE_DT = &EFFDT;

End-If; End-If; Break; When = "PAY" Evaluate &ACTION_REASON When = "MER" When = "PRO" When = "SPG" When = "WGI" When "" If &EFFDT >= &LAST_INCREASE_DT Then If &JOB_COMPRATE > &PRIOR_COMPRATE Then &LAST_INCREASE_DT = &EFFDT; End-If; End-If; When-Other; End-Evaluate; Break; When-Other; End-Evaluate; det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &I, &OTHER, &PER_TY PE); If &OTHER = 0 And &EMPL_STATUS <> "A" And &EFFDT >= &LAST_DATE_WORKED Then &LAST_DATE_WORKED = &EFFDT End-If; If &EMPL_STATUS = "A" And &EFFDT >= &ACTIVE_DATE Then &ACTIVE_DATE = &EFFDT; End-If; End-For; If All(&HIRE_DT) Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.HIRE_DT, 1, &HIRE_DT); End-If; If All(&REHIRE_DT) Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.REHIRE_DT, 1, &REHIRE_DT); End-If; If All(&DT_OF_DEATH) Then &PD_DT_OF_DEATH = FetchValue(Record.GVT_JOB, CurrentRowNumber(), GVT_PERS_ DATA.DT_OF_DEATH, 1); If None(&PD_DT_OF_DEATH) Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_PERS_DATA.DT_OF_DEA TH, 1, &DT_OF_DEATH); End-If; End-If; /* Note: If an employee is terminated while on LOA, the last_date_worked will retain the orginal LOA date, not the termination date */ If All(&TERMINATION_DT) Then If &TERMINATION_DT <= &HIRE_DT Or &TERMINATION_DT <= &REHIRE_DT Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.TERMINAT ION_DT, 1, &NULLDATE); Else &TERMINATION_DT_2 = &TERMINATION_DT - 1; UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.TERMINAT ION_DT, 1, &TERMINATION_DT_2); End-If;

End-If; If All(&LAST_DATE_WORKED) Then If &LAST_DATE_WORKED <= &ACTIVE_DATE Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.LAST_DAT E_WORKED, 1, &NULLDATE); Else &EMP_LAST_WORKED = FetchValue(Record.GVT_JOB, CurrentRowNumber(), GVT_E MPLOYMENT.LAST_DATE_WORKED, 1); If None(&EMP_LAST_WORKED) Then &EMP_LAST_WORKED2 = &LAST_DATE_WORKED - 1; UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.LAST_ DATE_WORKED, 1, &EMP_LAST_WORKED2); End-If; End-If; End-If; If All(&LAST_INCREASE_DT) And RecordNew(GVT_JOB.EMPLID) Then UpdateValue(Record.GVT_JOB, CurrentRowNumber(), GVT_EMPLOYMENT.LAST_INCREA SE_DT, 1, &LAST_INCREASE_DT); End-If; End-Function; Function validate_action; If EMPLOYMENT.HOME_HOST_CLASS = "M" Then If GVT_JOB.ACTION = "ASG" Or GVT_JOB.ACTION = "ASC" Then Error MsgGet(1000, 57, "Assignment action and Completion of Assignment action allowed only for Host record."); End-If; Else If %PanelGroup = PanelGroup.HOME_HOST_DATA Then If GVT_JOB.ACTION <> "ASG" And GVT_JOB.ACTION <> "ASC" Then Error MsgGet(1000, 59, "Only Assignment and Completion of Assignment actions allowed on Home Host Data panel.") End-If; End-If; End-If; &PRIOR_STATUS = PriorEffdt(GVT_JOB.EMPL_STATUS); &PRIOR_ACTION = PriorEffdt(GVT_JOB.ACTION); Evaluate GVT_JOB.ACTION When <> "HIR" If %Mode = "A" And %PanelGroup <> PanelGroup.HOME_HOST_DATA Then Warning MsgGet(1000, 13, "You are hiring an employee and Action is not set to Hire.") End-If; When <> "ASG" If %Mode = "A" And %PanelGroup = PanelGroup.HOME_HOST_DATA Then Warning MsgGet(1000, 91, "You are adding host data and Action is not se t to Assignment.") End-If; When = "HIR" When = "REH" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "T" Or &PRIOR_STATUS = "R" Or &PRIOR_STATUS = "Q" Or &PRIOR_STATUS = "U") Then

Error MsgGet(1000, 14, "Hire or Rehire action is valid only if employee status is Terminated or Retired.") End-If; Break; When = "ASC" If All(&PRIOR_ACTION) And (&PRIOR_ACTION = "ASC") Then Error MsgGet(1000, 125, "Completion of Assignment action cannot follow another completion action."); End-If; Break; When = "PAY" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "R" Or &PRIOR_STATUS = "Q") Then Error MsgGet(1000, 15, "Pay Rate Change action is valid only if employe e status is Active, On Leave, Suspended, or Retired.") End-If; Break; When = "PRO" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 16, "Promotion action is valid only if employee stat us is Active or On Leave.") End-If; Break; When = "DEM" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 17, "Demotion action is valid only if employee statu s is Active or On Leave.") End-If; Break; When = "JRC" When = "XFR" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 18, "Job Reclassification or Transfer action is vali d only if employee status is Active or On Leave.") End-If; Break; When = "LOA" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 19, "Leave of Absence action is valid only if employ ee status is Active or Suspended or On Paid Leave.") End-If; Break;

When = "PLA" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L") Then Error MsgGet(1000, 20, "Paid Leave of Absence action is valid only if e mployee status is Active or On Unpaid Leave.") End-If; Break; When = "RFL" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 21, "Return from Leave action is valid only if emplo yee status is On Leave.") End-If; Break; When = "RFD" If All(&PRIOR_STATUS) And Not ((&PRIOR_STATUS = "L" And (&PRIOR_ACTION = "STO" Or &PRIOR_ACTION = "LTO")) Or (&PRIOR_STATUS = "P" And (&PRIOR_ACTION = "STD" Or &PRIOR_ACTION = "LTD"))) Then Error MsgGet(1000, 188, "Return from Disability Leave action is valid o nly if employee status is On Disability Leave.") End-If; Break; When = "LOF" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 22, "Layoff action is valid only if employee status is Active or On Leave.") End-If; Break; When = "SUS" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 23, "Suspension action is valid only if employee sta tus is Active or On Leave.") End-If; Break; When = "REC" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "S") Then Error MsgGet(1000, 24, "Recall action is valid only if employee status is Suspended.") End-If; Break; When = "RWP" When = "RET" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or &PRIOR_STATUS = "Q" Or

&PRIOR_STATUS = "S" Or &PRIOR_STATUS = "T") Then Error MsgGet(1000, 25, "Retirement action is valid only if employee sta tus is Active, On Leave, Terminated or Suspended.") End-If; Break; When = "TWP" When = "TER" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or &PRIOR_STATUS = "U" Or &PRIOR_STATUS = "Q" Or &PRIOR_STATUS = "R") Then Error MsgGet(1000, 26, "Termination action is valid only if employee st atus is Active, On Leave, Suspended, or Retired.") End-If; Break; When = "LTD" When = "LTO" When = "STD" When = "STO" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 189, "Disability action is valid only if employee st atus is Active, On Leave, or Suspended.") End-If; Break; When-Other; End-Evaluate; End-Function; Function validate_ben_prog; &ACTION = FetchValue(GVT_JOB.ACTION, CurrentRowNumber()); If INSTALLATION.BENEFIT_ADMINISTRN = "Y" And JOB.PAY_SYSTEM_FLG <> "GP" And EMPLOYMENT.EMPL_RCD = EMPLOYMENT.BENEFIT_RCD_NBR Then If &ACTION = "HIR" Then &JOB_EFFDT = FetchValue(GVT_JOB.EFFDT, CurrentRowNumber()); &BPPROWCT = ActiveRowCount(BEN_PROG_PARTIC.EFFDT); For &I = 1 To &BPPROWCT &BPP_EFFDT = FetchValue(BEN_PROG_PARTIC.EFFDT, &I); If &BPP_EFFDT <= &JOB_EFFDT Then Break; End-If; End-For; If &BPP_EFFDT > &JOB_EFFDT Or None(&BPP_EFFDT) Then Warning MsgGet(1000, 287, "A Benefit Program Participation record is not in effect as of the Hire Date."); End-If; End-If; End-If; End-Function;

[FUNCLIB_GVT_HR.EMPL_STATUS.FieldFormula] Declare Function det_effdt_row PeopleCode EFFDT FieldFormula; Declare Function prior_same_effdt PeopleCode EFFDT FieldFormula; /* Get prior EMPL_STATUS based on Date passed */ Function prior_empl_status(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_STATUS); det_effdt_row(&EFFDT, &EFFSEQ, &CURRENT_ROW); prior_same_effdt(&EFFDT, &EFFSEQ, &CURRENT_ROW, &PRIORDT, &PRIORSEQ, &PRIOR_R OW); If &PRIOR_ROW > 0 Then &EMPL_STATUS = FetchValue(GVT_JOB.EMPL_STATUS, &PRIOR_ROW); End-If; If None(&PRIORDT) Then &PRIORDT = &EFFDT; &PRIORSEQ = &EFFSEQ; End-If; End-Function; /* Determines Employee Status */ Function det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &ROW, &OTHER, &P ER_TYPE); &OTHER = 0; Evaluate &ACTION When = "HIR" When = "REH" When = "RFL" When = "RFD" When = "ADL" When = "REC" When = "ASG" When = "TAS" /* Added for Staff Movement */ When = "RFA" /* Added for Staff Movement */ &EMPL_STATUS = "A"; Break; When = "LOA" When = "STO" When = "LTO" &EMPL_STATUS = "L"; Break; When = "PLA" When = "STD" When = "LTD" &EMPL_STATUS = "P"; Break; When = "RWP" &EMPL_STATUS = "Q"; Break; When = "TWB" When = "TWP" &EMPL_STATUS = "U"; Break; When = "LOF" When = "SUB" /* Added for Staff Movement */ &EMPL_STATUS = "S"; Break; When = "SUS" &EMPL_STATUS = "S"; Break;

When = "RTS" /* Added for Staff Movement */ &EMPL_STATUS = "T"; Break; When = "RET" If &PER_TYPE = "P" Then &EMPL_STATUS = "X"; Else &EMPL_STATUS = "R"; End-If; Break; When = "ASC" When = "TER" Evaluate &ACTION_REASON When = "DEA" &EMPL_STATUS = "D"; Break; When-Other If &PER_TYPE = "P" Then &EMPL_STATUS = "V"; Else &EMPL_STATUS = "T"; End-If; End-Evaluate; Break; When-Other &EMPL_STATUS = "A"; prior_empl_status(GVT_JOB.EFFDT, GVT_JOB.EFFSEQ, &PRIORDT, &PRIORSEQ, &EMP L_STATUS); &OTHER = 1; End-Evaluate; End-Function; /* Loop through buffer to get next closest date that is greater than date being passed. EMPL_STATUS of next closest date must also be specifically set. */ Function next_empl_status(&EFFDT, &EFFSEQ, &NEXTDT, &NEXTSEQ); &NEXTDT = Date(30001231); &NEXTSEQ = 0; &OTHERDT = Date(30001231); &OTHERSEQ = 0; &ACTIVE_ROW = ActiveRowCount(GVT_JOB.EMPLID); For &I = 1 To &ACTIVE_ROW; &FETCH_STATUS_TYPE = FetchValue(GVT_JOB.GVT_STATUS_TYPE, &I); If &FETCH_STATUS_TYPE = "COM" Or &FETCH_STATUS_TYPE = "COR" Then &ACTION = FetchValue(GVT_JOB.ACTION, &I); &ACTION_REASON = FetchValue(GVT_JOB.ACTION_REASON, &I); det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &I, &OTHER, &PER _TYPE); &FETCH_EFFDT = FetchValue(GVT_JOB.EFFDT, &I); &FETCH_EFFSEQ = FetchValue(GVT_JOB.EFFSEQ, &I); If (&FETCH_EFFDT > &EFFDT Or (&FETCH_EFFDT = &EFFDT And &FETCH_EFFSEQ > &EFFSEQ)) And (&FETCH_EFFDT < &NEXTDT Or (&FETCH_EFFDT = &NEXTDT And &FETCH_EFFSEQ < &NEXTSEQ)) Then If (&OTHER = 0) Then &NEXTDT = &FETCH_EFFDT; &NEXTSEQ = &FETCH_EFFSEQ; End-If;

If &OTHER = 0 And (&NEXTDT < &OTHERDT Or (&NEXTDT = &OTHERDT And &NEXTSEQ < &OTHERSEQ)) Then &OTHERDT = &NEXTDT; &OTHERSEQ = &NEXTSEQ; End-If; End-If; End-If; End-For; &NEXTDT = &OTHERDT; &NEXTSEQ = &OTHERSEQ; End-Function; /* Loop through buffer and reset EMPL_STATUS of all rows between the NEXTDT,NEXT SEQ and EFFDT,EFFSEQ to EMPL_STATUS of row being processed. */ Function empl_status_update(&EFFDT, &EFFSEQ, &NEXTDT, &NEXTSEQ, &EMPL_STATUS); &ACTIVE_ROW = ActiveRowCount(GVT_JOB.EMPLID); For &I = 1 To &ACTIVE_ROW; &FETCH_STATUS_TYPE = FetchValue(GVT_JOB.GVT_STATUS_TYPE, &I); If &FETCH_STATUS_TYPE = "COM" Or &FETCH_STATUS_TYPE = "COR" Then &FETCH_EFFDT = FetchValue(GVT_JOB.EFFDT, &I); &FETCH_EFFSEQ = FetchValue(GVT_JOB.EFFSEQ, &I); If (&FETCH_EFFDT > &EFFDT Or (&FETCH_EFFDT = &EFFDT And &FETCH_EFFSEQ > &EFFSEQ)) And (&FETCH_EFFDT < &NEXTDT Or (&FETCH_EFFDT = &NEXTDT And &FETCH_EFFSEQ < &NEXTSEQ)) Then UpdateValue(GVT_JOB.EMPL_STATUS, &I, &EMPL_STATUS); End-If; End-If; End-For; End-Function;

[FUNCLIB_HR.EMPL_STATUS.FieldFormula] /*************************************************************************** ENTERGY MODIFICATION LOG 01 09/18/2002 Initial logging effort for existing customizations. Added function to determine prior empl_class. Added empl_class to the parameter list passed into delivered function det_empl_status. Added logic for assigning empl_status to custom action/reasons. 02 03/20/2008 A.Lastrapes - update the det_empl_status function to appropriately set the empl class for phased retirement (POS/PHR) 03 06/11/2009 GPC - update the det_empl_status function to set the empl class to a value of 'SU' (Suspended) for action/reason combination LOA/SUS. ***************************************************************************/ Declare Function calc_fte PeopleCode FTE FieldFormula; Declare Function recalc_fte_comp PeopleCode FTE FieldFormula; Declare Function calc_compa_ratio PeopleCode COMPA_RATIO FieldFormula; remark ! declare function calc_compa_rng_pct peoplecode COMPA_RANGE_PCT fieldfor mula;

Declare Function prior_effdt_row PeopleCode EFFDT FieldFormula; Declare Function prior_same_effdt PeopleCode EFFDT FieldFormula; Declare Function det_effdt_row PeopleCode EFFDT FieldFormula; /* Get prior EMPL_STATUS based on Date passed */ Function prior_empl_status(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_STATUS); det_effdt_row(&EFFDT, &EFFSEQ, &CURRENT_ROW); prior_same_effdt(&EFFDT, &EFFSEQ, &CURRENT_ROW, &PRIORDT, &PRIORSEQ, &PRIOR_R OW); If &PRIOR_ROW > 0 Then &EMPL_STATUS = FetchValue(JOB.EMPL_STATUS, &PRIOR_ROW); End-If; If None(&PRIORDT) Then &PRIORDT = &EFFDT; &PRIORSEQ = &EFFSEQ; End-If; End-Function; /*** PSMOD01 Begin ***/ /* Get prior EMPL_CLASS based on Date passed */ Function prior_empl_class(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_CLASS); det_effdt_row(&EFFDT, &EFFSEQ, &CURRENT_ROW); prior_same_effdt(&EFFDT, &EFFSEQ, &CURRENT_ROW, &PRIORDT, &PRIORSEQ, &PRIOR_R OW); If &PRIOR_ROW > 0 Then &EMPL_CLASS = FetchValue(JOB.EMPL_CLASS, &PRIOR_ROW); End-If; If None(&PRIORDT) Then &PRIORDT = &EFFDT; &PRIORSEQ = &EFFSEQ; End-If; End-Function; /*** PSMOD01 End ***/ /* Determines Employee Status */ /******************************** PSMOD01 BEGIN **************************** Added &EMPL_CLASS to parameter list, logic for custom action/reasons and logic for assigning &EMPL_CLASS values. ****************************************************************************/ Function det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &EMPL_CLASS, &RO W, &OTHER, &PER_TYPE); &OTHER = 0; Evaluate &ACTION When = "HIR" When = "REH" When = "RFL" When = "RFD" When = "ADL" When = "REC" When = "ASG" /* Public Sector Extension */ When = "RWB" /* ends Public Sector Extension */ When = "ADD" /* Non Employee Solution */ When = "RNW" /* Non Employee Solution */ When = "TAS" /* Staff Movement */ When = "RFA" /* Staff Movement */ &EMPL_STATUS = "A"; &EMPL_CLASS = "A";

Break; When = "LOA" &EMPL_STATUS = "L"; Evaluate &ACTION_REASON When = "FML" &EMPL_CLASS = "F"; Break; When = "MIL" &EMPL_CLASS = "M"; Break; /** mod 03 begin **/ When = "SUS" &EMPL_CLASS = "SU"; Break; /** mod 03 end **/ When-Other &EMPL_CLASS = "A"; Break; End-Evaluate; Break; When = "STO" &EMPL_STATUS = "L"; Break; When = "LTO" &EMPL_STATUS = "L"; &EMPL_CLASS = "D"; Break; When = "PLA" &EMPL_STATUS = "P"; Evaluate &ACTION_REASON When = "MIL" &EMPL_CLASS = "M"; Break; When-Other &EMPL_CLASS = "A"; Break; End-Evaluate; Break; When = "STD" &EMPL_STATUS = "P"; Break; When = "LTD" &EMPL_STATUS = "P"; &EMPL_CLASS = "D"; Break; When = "RWP" &EMPL_STATUS = "Q"; &EMPL_CLASS = "A"; Break; When = "RTS" /* Staff Movement */ &EMPL_STATUS = "T"; Break; When = "TWB" When = "TWP" &EMPL_STATUS = "U"; &EMPL_CLASS = "A"; Break; When = "LOF" When = "SUB" /* Staff Movement */ &EMPL_STATUS = "S";

Break; When = "SUS" &EMPL_STATUS = "S"; &EMPL_CLASS = "A"; Break; When = "RET" If &PER_TYPE = "P" Then &EMPL_STATUS = "X"; Else &EMPL_STATUS = "R"; End-If; &EMPL_CLASS = "A"; Break; When = "COM" /* Non Employee Solution */ Evaluate &ACTION_REASON When = "DEA" &EMPL_STATUS = "D"; Break; When = "RET" &EMPL_STATUS = "R"; Break; When-Other &EMPL_STATUS = "T"; End-Evaluate; Break; When = "ASC" When = "TER" Evaluate &ACTION_REASON When = "DEA" &EMPL_STATUS = "D"; Break; When-Other If &PER_TYPE = "P" Then &EMPL_STATUS = "V"; Else &EMPL_STATUS = "T"; End-If; End-Evaluate; &EMPL_CLASS = "A"; Break; /* Public Sector Extension - Short Work Break */ When = "SWB" &EMPL_STATUS = "W"; Break; /* Ends Public Sector Extension */ When = "BNN" When = "BNP" If &ACTION = "BNN" Then &EMPL_STATUS = "2"; Else &EMPL_STATUS = "3"; End-If; Evaluate &ACTION_REASON When = "ALT" &EMPL_CLASS = "P"; Break; When = "BEN" &EMPL_CLASS = "B"; Break; When = "BOA"

&EMPL_CLASS = "X"; Break; When = "OTH" &EMPL_CLASS = "H"; Break; When = "SUR" &EMPL_CLASS = "U"; Break; When = "WID" &EMPL_CLASS = "W"; Break; End-Evaluate; Break; Break; When = "DEC" &EMPL_STATUS = "D"; &TEMP_CLASS = PriorEffdt(JOB.EMPL_CLASS); If &TEMP_CLASS = "F" Then &EMPL_CLASS = "A"; End-If; If &TEMP_CLASS = "M" Then &EMPL_CLASS = "A"; End-If; If &TEMP_CLASS = "D" Then &EMPL_CLASS = "A"; End-If; Break; When = "ENP" Evaluate &ACTION_REASON When = "BNP" &EMPL_STATUS = "2"; Break; When = "RWP" &EMPL_STATUS = "R"; Break; When = "TWP" &EMPL_STATUS = "T"; Break; When = "PLA" &EMPL_STATUS = "L"; Break; End-Evaluate; Break; When = "TWO" &EMPL_STATUS = "1"; &EMPL_CLASS = "A"; Break; /** mod 02 begin **/ When = "POS" Evaluate &ACTION_REASON When = "PHR" &EMPL_CLASS = "PR"; Break; When-Other /* if an action other than phr, keep prior values **/ &EMPL_STATUS = "A"; prior_empl_status(JOB.EFFDT, JOB.EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_STA TUS); &OTHER = 1; &EMPL_CLASS = "A"; prior_empl_class(JOB.EFFDT, JOB.EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_CLAS

S); End-Evaluate; Break; /** mod 02 end **/ When-Other &EMPL_STATUS = "A"; prior_empl_status(JOB.EFFDT, JOB.EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_STATUS ); &OTHER = 1; &EMPL_CLASS = "A"; prior_empl_class(JOB.EFFDT, JOB.EFFSEQ, &PRIORDT, &PRIORSEQ, &EMPL_CLASS); End-Evaluate; End-Function; /******************************** PSMOD01 END ******************************/ /* Loop through buffer to get next closest date that is greater than date being passed. EMPL_STATUS of next closest date must also be specifically set. */ Function next_empl_status(&EFFDT, &EFFSEQ, &NEXTDT, &NEXTSEQ); &NEXTDT = Date(30001231); &NEXTSEQ = 0; &OTHERDT = Date(30001231); &OTHERSEQ = 0; &ACTIVE_ROW = ActiveRowCount(JOB.EMPLID); For &I = 1 To &ACTIVE_ROW; &ACTION = FetchValue(JOB.ACTION, &I); &ACTION_REASON = FetchValue(JOB.ACTION_REASON, &I); det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &EMPL_CLASS, &I, &O THER, &PER_TYPE); &FETCH_EFFDT = FetchValue(JOB.EFFDT, &I); &FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I); If (&FETCH_EFFDT > &EFFDT Or (&FETCH_EFFDT = &EFFDT And &FETCH_EFFSEQ > &EFFSEQ)) And (&FETCH_EFFDT < &NEXTDT Or (&FETCH_EFFDT = &NEXTDT And &FETCH_EFFSEQ < &NEXTSEQ)) Then If (&OTHER = 0) Then &NEXTDT = &FETCH_EFFDT; &NEXTSEQ = &FETCH_EFFSEQ; End-If; If &OTHER = 0 And (&NEXTDT < &OTHERDT Or (&NEXTDT = &OTHERDT And &NEXTSEQ < &OTHERSEQ)) Then &OTHERDT = &NEXTDT; &OTHERSEQ = &NEXTSEQ; End-If; End-If; End-For; &NEXTDT = &OTHERDT; &NEXTSEQ = &OTHERSEQ; End-Function; /* Loop through buffer and reset EMPL_STATUS of all rows between the NEXTDT,NEXT SEQ and EFFDT,EFFSEQ to EMPL_STATUS of row being processed. Recalculate FTE if EMPL_STATUS is reset */ Function empl_status_update(&EFFDT, &EFFSEQ, &NEXTDT, &NEXTSEQ, &EMPL_STATUS); &ACTIVE_ROW = ActiveRowCount(JOB.EMPLID); For &I = 1 To &ACTIVE_ROW;

&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I); &FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I); If (&FETCH_EFFDT > &EFFDT Or (&FETCH_EFFDT = &EFFDT And &FETCH_EFFSEQ > &EFFSEQ)) And (&FETCH_EFFDT < &NEXTDT Or (&FETCH_EFFDT = &NEXTDT And &FETCH_EFFSEQ < &NEXTSEQ)) Then UpdateValue(JOB.EMPL_STATUS, &I, &EMPL_STATUS); If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then /* HP00001 HP-FED merge - add public sector indicator */ /* calc_fte(&I); Public Sector Extension */ calc_fte(&I); recalc_fte_comp(&I); remark ! Swap following based on use of Ratio or % range; &HOURLY_RT = FetchValue(JOB.HOURLY_RT, &I); &JOB_CURRENCY = FetchValue(JOB.CURRENCY_CD, &I); &JOB_EFFDT = FetchValue(JOB.EFFDT, &I); calc_compa_ratio(&I, &EMPL_STATUS, &HOURLY_RT, &JOB_CURRENCY, &JOB_E FFDT); remark! &ANNUAL_RT = FetchValue(JOB.ANNUAL_RT, &I); remark! calc_compa_rng_pct(&I, &EMPL_STATUS, &ANNUAL_RT, &JOB_CURREN CY, &JOB_EFFDT); End-If; End-If; End-For; End-Function; /* Get prior values for fields that have Entry Dates from previous row*/ Function prior_entry_dt(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &BU, &DEPTID, &JOB CODE, &POSITION, &PLAN, &GRADE, &STEP); det_effdt_row(&EFFDT, &EFFSEQ, &CURRENT_ROW); prior_same_effdt(&EFFDT, &EFFSEQ, &CURRENT_ROW, &PRIORDT, &PRIORSEQ, &PRIOR_R OW); If &PRIOR_ROW > 0 Then &BU = FetchValue(JOB.BUSINESS_UNIT, &PRIOR_ROW); &DEPTID = FetchValue(JOB.DEPTID, &PRIOR_ROW); &JOBCODE = FetchValue(JOB.JOBCODE, &PRIOR_ROW); &POSITION = FetchValue(JOB.POSITION_NBR, &PRIOR_ROW); &PLAN = FetchValue(JOB.SAL_ADMIN_PLAN, &PRIOR_ROW); &GRADE = FetchValue(JOB.GRADE, &PRIOR_ROW); &STEP = FetchValue(JOB.STEP, &PRIOR_ROW); End-If; If None(&PRIORDT) Then &PRIORDT = &EFFDT; &PRIORSEQ = &EFFSEQ; End-If; End-Function;

[FUNCLIB_HR_JOB.ACTION.FieldFormula] /**************************************************************************** ENTERGY MODIFICATIONS LOG 02 01/01/1994 Ellie Champagne Add code to always display the Job Family - per Reni Doby 03 06/27/1996 Ellie Champagne

Add code to base Action_Reason on Employee status 04 08/04/1996 Ellie Champagne Code added for Flex Implementation. Check Last_Date_Worked plus 1 05 12/01/1996 Daphne Swanier Add code for position related field defaulting 06 07/10/1996 Ellie Champagne Original Code would allow a Hire or Rehire of Statuses Q & R (Retired with and w ithout Pay). We don't want to allow Retirees to be Rehired. Also, we will allow Hires and Rehires of Statuses 1, 2 and 3 (Outplaced without Pay, and Benefit Participants with and without Pay). 07 07/10/1996 Ellie Champagne Only allow PAY records when the person is in a Paid Status. Also, Do not edit the RFL Action if it is "old". 08 09/30/2002 Gill Cutchen Initial logging effort for custom code that was never documented. Added TWO action to evaluate statement and change error message. Determine the days since Termination to be used by the LTD and LTO validations. If their prior status was "T" or "U" and it was within the last 6 months then they may be put on Long Term Disability. 09 06/04/09 Vincent Tortorich Added empl_status "R" and "Q" as elgible for "REH" action ****************************************************************************/ /****************************/ /* Beg Function Declaration */ /****************************/ Declare Function det_empl_status PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormula; Declare Function next_empl_status PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormula ; Declare Function empl_status_update PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormu la; Declare Function det_ben_status PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormula; Declare Function next_ben_status PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormula; Declare Function ben_status_update PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormul a; Declare Function calc_fte PeopleCode FUNCLIB_HR.FTE FieldFormula; Declare Function recalc_fte_comp PeopleCode FUNCLIB_HR.FTE FieldFormula; remark ! declare function calc_compa_rng_pct peoplecode FUNCLIB_HR.COMPA_RANGE_P CT FieldFormula; Declare Function calc_compa_ratio PeopleCode FUNCLIB_HR.COMPA_RATIO FieldFormula ; Declare Function Gray_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM FieldFormula; Declare Function UnGray_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM FieldFormula ; Declare Function Gray_Matricula_Nbr PeopleCode FUNCLIB_HR_ESP.MATRICULA_NBR Fiel dFormula; Declare Function UnGray_Matricula_Nbr PeopleCode FUNCLIB_HR_ESP.MATRICULA_NBR Fi eldFormula; Declare Function det_employment_dt PeopleCode FUNCLIB_HR.ACTION FieldFormula; /*** PSMOD05 BEGIN ***/ Declare Function refresh_position_info PeopleCode FUNCLIB_HR.POSITION_NBR FieldF ormula; /**** PSMOD05 END ****/

/* HRMS Australia additional declaration */ Local Rowset &RS; /****************************/ /* End Function Declaration */ /****************************/ /***************************************************/ /* FUNCTION: JobActionFde */ /* Inputs: none */ /* Returns: none */ /* */ /* All of the peoplecode normally entered into Job */ /* FieldEdit will reside here so it can be called */ /* whenever the Job.Action is changed by the user */ /* or by peoplecode */ /****************************************************/ Function JobActionFDE; If EMPLOYMENT.HOME_HOST_CLASS = "M" Then If JOB.ACTION = "ASG" Or JOB.ACTION = "ASC" Then Error MsgGet(1000, 57, "Assignment action and Completion of Assignment action allowed only for Host record."); End-If; Else If %PanelGroup = PanelGroup.HOME_HOST_DATA Then If JOB.ACTION <> "ASG" And JOB.ACTION <> "ASC" Then Error MsgGet(1000, 59, "Only Assignment and Completion of Assignment actions allowed on Home Host Data panel.") End-If; End-If; End-If;

If INSTALLATION.PUBLIC_SECTOR <> "Y" Then If JOB.ACTION = "RWB" Or JOB.ACTION = "SWB" Then Error MsgGet(1500, 500, "The value selected is available only to Educat ion and Government installations."); End-If; End-If; /* Non Employees */ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then &PER_STATUS = FetchValue(PERSON.PER_STATUS, 1); &ACTION = JOB.ACTION; If &PER_STATUS = "N" Then If (&ACTION = "HIR") Or (&ACTION = "RET") Or (&ACTION = "REH") Or (&ACTION = "RWP") Or (&ACTION = "STD") Or (&ACTION = "LTD") Or (&ACTION = "FSC") Then Error MsgGet(1000, 511, "This Action is not allowed for non employee s."); End-If; Else

If (&ACTION = "ADD") Or (&ACTION = "RNW") Or (&ACTION = "COM") Then Error MsgGet(1000, 508, "This Action is not allowed for employees"); End-If; End-If; End-If; /* End Non Employees */ &PRIOR_STATUS = PriorEffdt(JOB.EMPL_STATUS); &PRIOR_ACTION = PriorEffdt(JOB.ACTION); If %Mode = "A" Then If %Component = Component.JOB_DATA_CONCUR Then If (JOB.ACTION = "HIR" Or JOB.ACTION = "ADL") Then /* these are ok */ Else Error MsgGet(1000, 13, "Message not found"); End-If; Else If %Component = Component.HOME_HOST_DATA Then If JOB.ACTION <> "ASG" Then Warning MsgGet(1000, 91, "You are adding host data and Action is not set to Assignment.") End-If; End-If; End-If; End-If;

Evaluate JOB.ACTION When = "HIR" When = "REH" If All(&PRIOR_STATUS) Then /********* PSMOD06 BEGIN *********/ If Not (&PRIOR_STATUS = "T" Or &PRIOR_STATUS = "U" Or &PRIOR_STATUS = "1" Or &PRIOR_STATUS = "2" Or /**** PSMOD09 Begin *****/ &PRIOR_STATUS = "R" Or &PRIOR_STATUS = "Q" Or /**** PSMOD09 End ****/ &PRIOR_STATUS = "3") Then Error MsgGet(29000, 81, "Hire or Rehire action is valid only if empl status is Terminated, Outplaced or Benefit Participant."); /* Error MsgGet(1000, 14, "Hire or Rehire action is valid only if employee status is Terminated or Retired.") */ End-If; If &PRIOR_STATUS = "2" Or &PRIOR_STATUS = "3" Then Warning MsgGet(29000, 108, "You are Hiring or Rehiring someone who i s currently in PeopleSoft as a Benefit Participant."); End-If; End-If; /********** PSMOD06 END ***********/ Break; When = "ASC"

If All(&PRIOR_ACTION) And (&PRIOR_ACTION = "ASC") Then Error MsgGet(1000, 125, "Completion of Assignment action cannot follow another completion action."); End-If; Break; /* Public Sector Extension */ When = "PAY" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "W" Or &PRIOR_STATUS = "R" Or &PRIOR_STATUS = "Q" Or /*** PSMOD07 BEGIN ***/ &PRIOR_STATUS = "U" Or &PRIOR_STATUS = "3") Then /* HP00001 HP-FED merge - add public sector indicator */ If INSTALLATION.PUBLIC_SECTOR = "Y" Then Error MsgGet(1500, 123, "Pay Rate Change action is valid only if emp loyee status is Active, On Leave, Suspended, on Work Break or Retired.") Else Error MsgGet(29000, 82, "Pay Rate Change action is valid only if emp l status is Active, On Leave, Suspended, Retired with Pay, or Benefit Participan t with Pay.") /* Error MsgGet(1000, 15, "Pay Rate Change action is valid only if employee status is Active, On Leave, Suspended, or Retired.") */ /*** PSMOD07 END ***/ End-If; End-If; /* Public Sector Extension ends */ Break; When = "PRO" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 16, "Promotion action is valid only if employee stat us is Active or On Leave.") End-If; Break; When = "DEM" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 17, "Demotion action is valid only if employee statu s is Active or On Leave.") End-If; Break; When = "JRC" When = "XFR" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 18, "Job Reclassification or Transfer action is vali d only if employee status is Active or On Leave.")

End-If; Break; /* Public Sector Extension - for Short Work Break */ When = "LOA" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "W" Or &PRIOR_STATUS = "P") Then /* HP00001 HP-FED merge - add public sector indicator */ If INSTALLATION.PUBLIC_SECTOR = "Y" Then Error MsgGet(1500, 124, "Leave of Absence action is valid only if em ployee status is Active or Suspended, on Work Break, or On Paid Leave.") Else Error MsgGet(1000, 19, "Leave of Absence action is valid only if emp loyee status is Active or Suspended or On Paid Leave.") End-If; End-If; Break; When = "PLA" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L") Then Error MsgGet(1000, 20, "Paid Leave of Absence action is valid only if e mployee status is Active or On Unpaid Leave.") End-If; Break; When = "RFD" If &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Then /* EMPLOYEE IS ON LEAVE */ If %Mode = "U" Then /* USER IS IN UPDATE/DISPLAY ACTION */ /* CHECK ROWS IN PANEL BUFFER FOR A DISABILITY ROW */ &DISABLE_LV = "NO"; For &I = ActiveRowCount(Record.JOB) To (CurrentRowNumber() + 1) Step - 1 /* THIS LOOP CHECKS FROM THE OLDEST ROW TO THE NEWEST ROW */ /* IN ORDER TO VALIDATE THAT THE SEQUENCE OF DISABILITY LEAVE */ /* AND RETURN FROM DISABILITY LEAVE ROWS IS CORRECT */ &EMPL_STATUS = FetchValue(JOB.EMPL_STATUS, &I); &ACTION = FetchValue(JOB.ACTION, &I); If (&ACTION = "STO" Or &ACTION = "LTO" Or &ACTION = "STD" Or &ACTION = "LTD") Then /* EMPLOYEE IS ON DISABILITY LEAVE PRIOR TO THE CURRENT ROW EF FDT */ &DISABLE_LV = "YES"; Else If &ACTION = "RFD" Then /* EMPLOYEE HAS RETURNED FROM DISABILITY LEAVE */ &DISABLE_LV = "NO"; End-If; End-If; End-For; If &DISABLE_LV = "NO" Then /* NO DISABILITY ROW FOUND IN PANEL BUFFER */ /* CHECK HISTORICAL ROWS ON DB TABLE FOR A DISABILITY ROW

*/ /* THIS SQLExec RETURNS THE FIELD JOB.ACTION FROM THE MOST RECENT DISABILITY ROW */ &PEREMPLID = PERSONAL_DATA.EMPLID; &CURRENTEFFDT = FetchValue(JOB.EFFDT, CurrentRowNumber()); SQLExec("SELECT A.ACTION FROM PS_JOB A WHERE A.EMPLID=:1 AND A.EF FDT=(SELECT MAX(EFFDT) FROM PS_JOB WHERE EMPLID=:1 AND (EMPL_STATUS='L' OR EMPL_ STATUS='P') AND (ACTION='STO' OR ACTION='STD' OR ACTION='LTO' OR ACTION='LTD') A ND EFFDT < %datein(:2))", &PEREMPLID, &CURRENTEFFDT, &ACTION_REASON); If Not (&ACTION_REASON = "STO" Or &ACTION_REASON = "STD" Or &ACTION_REASON = "LTO" Or &ACTION_REASON = "LTD") Then /* EMPLOYEE IS NOT ON DISABILITY LEAVE */ /**** PSMOD07 BEGIN ****/ /* Error MsgGet(1000, 188, "Return from Disability Leave actio n is valid only if employee status is On Disability Leave."); */ /***** PSMOD07 END *****/ End-If; End-If; Else /* USER IS IN UPDATE/DISPLAY ALL OR CORRECTION ACTION */ /* CHECK ROWS IN PANEL BUFFER FOR A DISABILITY ROW */ &DISABLE_LV = "NO"; For &I = ActiveRowCount(Record.JOB) To (CurrentRowNumber() + 1) Step - 1 /* THIS LOOP CHECKS FROM THE OLDEST ROW TO THE NEWEST ROW */ /* IN ORDER TO VALIDATE THAT THE SEQUENCE OF DISABILITY LEAVE */ /* AND RETURN FROM DISABILITY LEAVE ROWS IS CORRECT */ &EMPL_STATUS = FetchValue(JOB.EMPL_STATUS, &I); &ACTION = FetchValue(JOB.ACTION, &I); If (&ACTION = "STO" Or &ACTION = "LTO" Or &ACTION = "STD" Or &ACTION = "LTD") Then /* EMPLOYEE IS ON DISABILITY LEAVE PRIOR TO THE CURRENT ROW EF FDT */ &DISABLE_LV = "YES"; Else If &ACTION = "RFD" Then /* EMPLOYEE HAS RETURNED FROM DISABILITY LEAVE */ &DISABLE_LV = "NO"; End-If; End-If; End-For; If &DISABLE_LV = "NO" Then /* NO DISABILITY ROWS FOUND */ Error MsgGet(1000, 188, "Return from Disability Leave action is v alid only if employee status is On Disability Leave."); End-If; End-If; Else /* EMPL_STATUS IS NOT EQUAL TO "P" OR "L" -- EMPLOYEE IS NOT ON LEAVE * / /**** PSMOD07 BEGIN ****/ /* Error MsgGet(1000, 188, "Return from Disability Leave action is vali d only if employee status is On Disability Leave."); */ /***** PSMOD07 END *****/ End-If;

Break; When = "RFL" /**** PSMOD07 BEGIN ****/ If RecordNew(JOB.ACTION) Or RecordChanged(JOB.ACTION) Then /***** PSMOD07 END *****/ If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 21, "Return from Leave action is valid only if em ployee status is On Leave.") End-If; End-If; Break; /**** PSMOD07 BEGIN ****/ When = "RFD" If All(&PRIOR_STATUS) And Not ((&PRIOR_STATUS = "L" And (&PRIOR_ACTION = "STO" Or &PRIOR_ACTION = "LTO")) Or (&PRIOR_STATUS = "P" And (&PRIOR_ACTION = "STD" Or &PRIOR_ACTION = "LTD"))) Then Error MsgGet(1000, 188, "Return from Disability Leave action is valid o nly if employee status is On Disability Leave."); End-If; Break; /***** PSMOD07 END *****/ When = "LOF" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 22, "Layoff action is valid only if employee status is Active or On Leave.") End-If; Break; When = "SUS" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 23, "Suspension action is valid only if employee sta tus is Active or On Leave.") End-If; Break; When = "REC" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "S") Then Error MsgGet(1000, 24, "Recall action is valid only if employee status is Suspended.") End-If; Break; /* Public Sector Extension - for Short Work Break */ When = "RWP" When = "RET" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or

&PRIOR_STATUS = "Q" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "W" Or &PRIOR_STATUS = "T") Then /* HP00001 HP-FED merge - add public sector indicator */ If INSTALLATION.PUBLIC_SECTOR = "Y" Then Error MsgGet(1500, 125, "Retirement action is valid only if employee status is Active, On Leave, Terminated, Suspended or on Work Break.") Else Error MsgGet(1000, 25, "Retirement action is valid only if employee status is Active, On Leave, Terminated or Suspended.") End-If; End-If; Break; When = "TWP" /**** PSMOD08 BEGIN ****/ When = "TWO" /***** PSMOD08 END *****/ When = "TER" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P" Or &PRIOR_STATUS = "U" Or &PRIOR_STATUS = "Q" Or &PRIOR_STATUS = "W" Or &PRIOR_STATUS = "R") Then /* HP00001 HP-FED merge - add public sector indicator */ If INSTALLATION.PUBLIC_SECTOR = "Y" Then Error MsgGet(1500, 126, "Termination action is valid only if employe e status is Active, On Leave, Suspended, on Work Break or Retired.") Else /**** PSMOD08 BEGIN ****/ Error ("Termination action is valid only if employee status is Activ e, On Leave, or Suspended.") /* Error MsgGet(1000, 26, "Termination action is valid only if empl oyee status is Active, On Leave, Suspended, or Retired.") */ /***** PSMOD08 END *****/ End-If; End-If; Break; When = "LTD" When = "LTO" /**** PSMOD08 BEGIN ****/ If All(EMPLOYMENT.TERMINATION_DT) Then &DAYS_SINCE_TERM = Days365(EMPLOYMENT.TERMINATION_DT, JOB.EFFDT); Else &DAYS_SINCE_TERM = 9999; End-If; If All(&PRIOR_STATUS) Then If (JOB.ACTION = "LTD" And &PRIOR_STATUS = "U") Or (JOB.ACTION = "LTO" And &PRIOR_STATUS = "T") Then If &DAYS_SINCE_TERM <> 9999 Then If &DAYS_SINCE_TERM < 180 Then Warning MsgGet(29000, 109, "Disability action has been entered within 6 months of the Termination Date."); Else

Error MsgGet(29000, 83, "Disability action cannot be entered m ore than 6 months after the Termination Date."); End-If; End-If; Else If Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then Error MsgGet(1000, 189, "Disability action is valid only if emplo yee status is Active, On Leave, or Suspended.") End-If; End-If; End-If; /***** PSMOD08 END *****/ When = "STD" When = "STO" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A" Or &PRIOR_STATUS = "S" Or &PRIOR_STATUS = "W" Or &PRIOR_STATUS = "L" Or &PRIOR_STATUS = "P") Then /* HP00001 HP-FED merge - add public sector indicator */ If INSTALLATION.PUBLIC_SECTOR = "Y" Then Error MsgGet(1500, 127, "Disability action is valid only if employee status is Active, On Leave, Suspended, or on Work Break.") Else Error MsgGet(1000, 189, "Disability action is valid only if employee status is Active, On Leave, or Suspended.") End-If; End-If; Break; When = "SWB" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "A") Then Error MsgGet(1500, 128, "Work Break action is valid only if employee st atus is Active.") End-If; Break; When = "RWB" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "W") Then Error MsgGet(1500, 129, "Return from Work Break action is valid only if employee status is Short Work Break.") End-If; Break; /* Public Sector Extension ends */ /* Non Employees */ When = "ADD" When = "RNW" If All(&PRIOR_STATUS) And Not (&PRIOR_STATUS = "T" Or &PRIOR_STATUS = "R" Or &PRIOR_STATUS = "Q" Or &PRIOR_STATUS = "U") Then Error MsgGet(1000, 509, "Add or Renewal action is valid only if non emp loyee status is Terminated.") End-If; Break;

When = "COM" If All(&PRIOR_ACTION) And (&PRIOR_ACTION = "COM") Then Error MsgGet(1000, 510, "Completion action cannot follow another comple tion action."); End-If; Break; /* Non Employees End */ When-Other; End-Evaluate; End-Function;

/*******************************/ /* End Function JobAction Fde */ /*******************************/

/***************************************************/ /* FUNCTION: SetEmplBenStatus */ /* Inputs: none */ /* Returns: none */ /****************************************************/ Function SetEmplBenStatus; &CURRENT_ROW = CurrentRowNumber(); /*************************************/ /* ----- Logic for EMPL_STATUS ----- */ /*************************************/ /* Update EMPL_STATUS for current row. If current row EMPL_STATUS is not specifically assigned, reset EMPL_STATUS of all rows between NEXTDT,NEXTSEQ and EFFDT,EFFSEQ to EMPL_STATUS of current row */ If %PanelGroup = PanelGroup.PA_JOB Or %PanelGroup = PanelGroup.PA_JOB_PERS Then &PER_TYPE = PERSONAL_DT_FST.PER_TYPE; End-If; det_empl_status(JOB.ACTION, JOB.ACTION_REASON, JOB.EMPL_STATUS, JOB.EMPL_CLAS S, &CURRENT_ROW, &OTHER, &PER_TYPE); next_empl_status(JOB.EFFDT, JOB.EFFSEQ, &NEXTDT, &NEXTSEQ); empl_status_update(JOB.EFFDT, JOB.EFFSEQ, &NEXTDT, &NEXTSEQ, JOB.EMPL_STATUS) ; /*************************************/ /* ----- Logic for BEN_STATUS ----- */ /*************************************/ /* Update BEN_STATUS for current row. If current row BEN_STATUS is not specifically assigned, reset BEN_STATUS of all rows between NEXTDT,NEXTSEQ and EFFDT,EFFSEQ to BEN_STATUS of current row */ det_ben_status(JOB.ACTION, JOB.ACTION_REASON, JOB.BEN_STATUS, &CURRENT_ROW, & OTHER); next_ben_status(JOB.EFFDT, JOB.EFFSEQ, &NEXTDT, &NEXTSEQ);

ben_status_update(JOB.EFFDT, JOB.EFFSEQ, &NEXTDT, &NEXTSEQ, JOB.BEN_STATUS); /* Recalculate fte, compa_ratio for current row */ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then remark ! Swap following based on use of Ratio or % range; calc_compa_ratio(&CURRENT_ROW, JOB.EMPL_STATUS, JOB.HOURLY_RT, JOB.CURRENC Y_CD, JOB.EFFDT); remark ! calc_compa_rng_pct(&CURRENT_ROW, Job.EMPL_STATUS, Job.ANNUAL_RT, Job.CURRENCY_CD, Job.EFFDT); End-If; /*************************************/ /* Reset Person.DT_OF_DEATH if the */ /* row deleted was used to set it. */ /*************************************/ If &ACTION = "TER" Then If &ACTION_REASON = "DEA" Then &DT_OF_DEATH = JOB.EFFDT - 1; &PERS_DT = FetchValue(PERSON.DT_OF_DEATH, 1); If &DT_OF_DEATH = &PERS_DT Then UpdateValue(PERSON.DT_OF_DEATH, 1, ""); End-If; End-If; End-If; End-Function; /***************************************************/ /* FUNCTION: JobActionFch */ /* Inputs: none */ /* Returns: none */ /* */ /* All of the peoplecode normally entered into Job */ /* FieldEdit will reside here so it can be called */ /* whenever the Job.Action is changed by the user */ /* or by peoplecode */ /****************************************************/ Function JobActionFch; /* Capture Prior Action Reason before setting it to null */ &ACTION_REASON = JOB.ACTION_REASON; SetDefault(JOB.ACTION_REASON); /* 03 Reason for Deceased action is dependent upon current class/status */ If JOB.ACTION <> "DEC" And JOB.ACTION <> "ENP" Then UnGray(JOB.ACTION_REASON); End-If; If JOB.ACTION = "DEC" Then &PRIORCLASS = PriorEffdt(JOB.EMPL_CLASS); &PRIORSTATUS = PriorEffdt(JOB.EMPL_STATUS); Evaluate &PRIORCLASS When = "A" Evaluate &PRIORSTATUS When = "A" When = "L" When = "P" JOB.ACTION_REASON = "ACT"; Break; When = "Q" When = "R"

JOB.ACTION_REASON = "RET"; Break; When-Other JOB.ACTION_REASON = "BNP"; Break; End-Evaluate; When-Other JOB.ACTION_REASON = "BNP"; Break; End-Evaluate; Gray(JOB.ACTION_REASON); End-If; /* 03 Reason for Action of ENP is dependent upon STATUS */ If JOB.ACTION = "ENP" Then &PRIORSTATUS = PriorEffdt(JOB.EMPL_STATUS); Evaluate &PRIORSTATUS When = "Q" JOB.ACTION_REASON = "RWP"; Break; When = "U" JOB.ACTION_REASON = "TWP"; Break; When = "3" JOB.ACTION_REASON = "BNP"; Break; When = "P" JOB.ACTION_REASON = "PLA"; Break; When-Other Break; End-Evaluate; Gray(JOB.ACTION_REASON); End-If; /* 03 End Customization */ SetEmplBenStatus(); /***********************************/ /* Logic to reset Employment Dates to null if prior Action was used to set the dates. ***********************************/ &ACTION = PriorValue(JOB.ACTION, &CURRENT_ROW); Evaluate &ACTION When = "ADD" /* Non Employee Solution */ When = "HIR" If JOB.EFFDT = EMPLOYMENT.HIRE_DT Then SetDefault(EMPLOYMENT.HIRE_DT); /****************************************************************/ /* For Gromit 6174301: When a Seniority Rate Code is processed */ /* by Hire Date, then the HIRE_DT has to be determined before */ /* the Job Data component is saved. Otherwises, adding/updating */ /* a Seniority Rate Code can cause an error message because the */ /* Hire Date is missing when calculating the Seniority Level. */ /****************************************************************/ det_employment_dt(); End-If; Break; When = "RNW" /* Non Employee Solution */ When = "REH"

If JOB.EFFDT = EMPLOYMENT.REHIRE_DT Then SetDefault(EMPLOYMENT.REHIRE_DT) End-If; Break; When = "COM" /* Non Employee Solution */ When = "RET" When = "RWP" When = "TER" When = "TWO" When = "TWP" If JOB.EFFDT = EMPLOYMENT.TERMINATION_DT Then SetDefault(EMPLOYMENT.TERMINATION_DT) End-If; Break; When = "PRO" If JOB.EFFDT = EMPLOYMENT.LAST_INCREASE_DT Then SetDefault(EMPLOYMENT.LAST_INCREASE_DT); End-If; Break; When = "PAY" Evaluate &ACTION_REASON When = "MER" When = "PRO" When = "SPG" When = "" If JOB.EFFDT = EMPLOYMENT.LAST_INCREASE_DT Then SetDefault(EMPLOYMENT.LAST_INCREASE_DT); End-If; When-Other; End-Evaluate; Break; When-Other; End-Evaluate;

det_empl_status(&ACTION, &ACTION_REASON, &EMPL_STATUS, &EMPL_CLASS, &I, &OTHE R, &PER_TYPE); /* 04 Customization for Last_Date_Worked plus 1 */ If &OTHER = 0 And &EMPL_STATUS <> "A" And JOB.EFFDT = EMPLOYMENT.LAST_DATE_WORKED + 1 Then SetDefault(EMPLOYMENT.LAST_DATE_WORKED); JOB.DEPTID = E_POSITION_TBL.DEPTID; JOB.COMPANY = E_POSITION_TBL.COMPANY; JOB.SAL_ADMIN_PLAN = JOBCODE_TBL.SAL_ADMIN_PLAN; JOB.GRADE = JOBCODE_TBL.GRADE; End-If; /* 04 End Customization */ /* 02 Always display the Job Family */ If (JOB.EMPL_STATUS = "A" Or JOB.EMPL_STATUS = "L" Or JOB.EMPL_STATUS = "P" Or JOB.EMPL_STATUS = "S") Then If None(JOB.JOBCODE) Then UnHide(E_POSITION_TBL.JOB_FAMILY); Else UnHide(E_POSITION_TBL.JOB_FAMILY); If %Mode = "A" Or JOB.JOBCODE <> PriorEffdt(JOB.JOBCODE) Then

JOB.JOB_ENTRY_DT = JOB.EFFDT; End-If; End-If; End-If; /* 02 End Customization */ /* 05 Modification */ refresh_position_info(JOB.ACTION, JOB.ACTION_REASON, DERIVED_HR.JOB_PANEL_MSG , JOB.POSITION_NBR, JOB.EFFDT, JOB.FULL_PART_TIME, JOB.REG_TEMP); /* 05 End Modification */ /*************************/ /* Contract Logic */ /*************************/ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then If REG_REGION_TBL.COUNTRY = "FRA" Or REG_REGION_TBL.COUNTRY = "ESP" Then If INSTALLATION.FP_FLAG <> "Y" Then Evaluate JOB.ACTION When = "HIR" When = "REH" When = "XFR" When = "DTA" When = "ADL" UnGray_Contract(); When-Other Gray_Contract(); End-Evaluate; If None(JOB.CONTRACT_NUM) Then UnGray_Contract(); End-If; Evaluate JOB.ACTION When = "REH" When = "XFR" If RecordNew(Record.JOB) Then SetDefault(JOB.CONTRACT_NUM); DERIVED_HR.CONTRACT_NUM = JOB.CONTRACT_NUM; End-If; End-Evaluate; Else Evaluate JOB.ACTION When = "REH" If RecordNew(Record.JOB) Then SetDefault(JOB.CONTRACT_NUM); DERIVED_HR.CONTRACT_NUM = JOB.CONTRACT_NUM; End-If; End-Evaluate; End-If; End-If; End-If; /*************************************************/ /*Pay System Flag */

/*************************************************/ /* is grayed out on Job except */ /* when ACTION is New Hire/Rehire/Add Concurrent */ /* Job/Change of Pay System */ /*************************************************/ Evaluate JOB.ACTION When = "HIR" When = "REH" When = "PSF" When = "ADL" UnGray(JOB.PAY_SYSTEM_FLG, CurrentRowNumber()); When-Other Gray(JOB.PAY_SYSTEM_FLG, CurrentRowNumber()); Break; End-Evaluate; /*********************/ /* Matricula Number */ /*********************/ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then If REG_REGION_TBL.COUNTRY = "ESP" Then Evaluate JOB.ACTION When = "HIR" When = "REH" When = "XFR" When = "DTA" When = "ADL" UnGray_Matricula_Nbr(); When-Other Gray_Matricula_Nbr(); End-Evaluate; End-If; End-If; /*******************************/ /* Employment Dates for MEX */ /*******************************/ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then If REG_REGION_TBL.COUNTRY = "MEX" Then Evaluate JOB.ACTION When = "REH" EMPLOYMENT.CMPNY_SENIORITY_DT = JOB.EFFDT; EMPLOYMENT.SERVICE_DT = JOB.EFFDT; EMPLOYMENT.LAST_DATE_WORKED = Date(""); End-Evaluate; End-If; End-If; /* HRMS Mexico FHQ APR 2001 Sets the default date values for JOB_JR.IMS_TERM _DT_MEX*/ If REG_REGION_TBL.COUNTRY = "MEX" Then Evaluate JOB.ACTION When = "COM" When = "LOF" When = "TER"

UpdateValue(Record.JOB, CurrentRowNumber(), Record.JOB_JR, CurrentRowNu mber(), JOB_JR.IMS_TERM_DT_MEX, JOB.EFFDT); End-Evaluate; End-If; /* HRMS Australia. Sets the default value of the JOB_JR.BALANCE_GRP_NUM for Re-Hires */ If REG_REGION_TBL.COUNTRY = "AUS" Then If Substring(%PanelGroup, 1, 8) = "JOB_DATA" And JOB.PAY_SYSTEM_FLG = "GP" And JOB.ACTION = "REH" Then &RS = GetRowset(Scroll.JOB_JR); &BALANCE_GRP_NUM = "000"; SQLExec("SELECT A.PAY_ENTITY FROM PS_GP_PYGRP A WHERE A.GP_PAYGROUP = : 1", JOB.GP_PAYGROUP, &GP_PYENT); SQLExec("SELECT COUNT(*), MAX(A.BALANCE_GRP_NUM) FROM PS_JOB_JR A, PS_J OB B, PS_GP_PYGRP C WHERE A.EMPLID = :1 AND A.EFFDT = (SELECT MAX(AA.EFFDT) FROM PS_JOB_JR AA WHERE AA.EMPLID = A.EMPLID AND AA.EMPL_RCD = A.EMPL_RCD AND AA.EFF DT <= %DateIn(:2)) AND A.EFFSEQ = (SELECT MAX(AB.EFFSEQ) FROM PS_JOB_JR AB WHERE AB.EMPLID = A.EMPLID AND AB.EMPL_RCD = A.EMPL_RCD AND AB.EFFDT = A.EFFDT) AND B .EMPLID = A.EMPLID AND B.EMPL_RCD = A.EMPL_RCD AND B.EFFDT = A.EFFDT AND B.EFFSE Q = A.EFFSEQ AND C.GP_PAYGROUP = B.GP_PAYGROUP AND B.ACTION NOT IN ('TER','RET') AND C.PAY_ENTITY = :3", EMPLOYMENT.EMPLID, JOB.EFFDT, &GP_PYENT, &EMPL_CNT, &BA LANCE_GRP_NUM); If &EMPL_CNT = 0 Then SQLExec("SELECT MAX(A.BALANCE_GRP_NUM) FROM PS_JOB_JR A, PS_JOB B, P S_GP_PYGRP C WHERE A.EMPLID = :1 AND A.EFFDT = (SELECT MAX(AA.EFFDT) FROM PS_JOB _JR AA WHERE AA.EMPLID = A.EMPLID AND AA.EMPL_RCD = A.EMPL_RCD AND AA.EFFDT <= % DateIn(:2)) AND A.EFFSEQ = (SELECT MAX(AB.EFFSEQ) FROM PS_JOB_JR AB WHERE AB.EMP LID = A.EMPLID AND AB.EMPL_RCD = A.EMPL_RCD AND AB.EFFDT = A.EFFDT) AND B.EMPLID = A.EMPLID AND B.EMPL_RCD = A.EMPL_RCD AND B.EFFDT = A.EFFDT AND B.EFFSEQ = A.E FFSEQ AND C.GP_PAYGROUP = B.GP_PAYGROUP AND C.PAY_ENTITY = :3", EMPLOYMENT.EMPLI D, JOB.EFFDT, &GP_PYENT, &BALANCE_GRP_NUM); &BALANCE_GRP_NUM = &BALANCE_GRP_NUM + 1; End-If; &RS(1).JOB_JR.BALANCE_GRP_NUM.Value = &BALANCE_GRP_NUM; End-If; End-If; End-Function;

[FUNCLIB_HS.DET_INC_OUTCOMECAN.FieldFormula] Function DetIncOutcomeCan() Returns string; &OUTCOME = "DO"; &ACTROWCOUNT = ActiveRowCount(INJURY_ILL_VW.INJ_OUTCOME_CAN); For &I = 1 To &ACTROWCOUNT &INJOUT = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, &I); &EMPLID = FetchValue(INJURY_ILL_VW.EMPLID, &I); If &EMPLID <> " " Then Evaluate &INJOUT When = "FAT" &CNT_FAT = &CNT_FAT + 1; Break; When = "STD" &CNT_STD = &CNT_STD + 1; Break; When = "HCO"

&CNT_HCO = &CNT_HCO + 1; Break; When = "RPO" &CNT_RPO = &CNT_RPO + 1; End-Evaluate; End-If; End-For; If &CNT_FAT > 0 Then &OUTCOME = "FAT"; Else If &CNT_STD > 0 Then &OUTCOME = "STD"; Else If &CNT_HCO > 0 Then &OUTCOME = "HCO"; Else If &CNT_RPO > 0 Then &OUTCOME = "RPO"; Else &OUTCOME = "DO"; End-If; End-If; End-If; End-If; Return &OUTCOME; End-Function;

[INC_RPTCAN_SBR.RPT_STATUS_CAN.SaveEdit] Declare Function DetIncOutcomeCan PeopleCode FUNCLIB_HS.DET_INC_OUTCOMECAN Field Formula; /* CANBC - WCB edit validation. If the status is changed to Final, then validate that all involved EMPLOYEES with inj_outcome_can of HCO, STD or FAT have at lea st one INJURY_ILL_SOI record, have at least one event cause, one contributing fa ctor, and one preventative action, claim contact address */ If Not IsModal() Then If %PanelGroup = PanelGroup.HS_INCIDENT And INCIDENT_DATA.REG_REGION = "CANBC" Then If None(INCIDENT_REPORT.REPORT_TIME) And All(INCIDENT_REPORT.REPORT_DATE) Then SetCursorPos(Panel.HS_INC_REPORT, INCIDENT_REPORT.REPORT_TIME, CurrentR owNumber(1)); Warning MsgGet(1070, 193, "The Report Time is required for the WCB Subm ittal."); End-If; /* Check for Firm # and Location # */ If None(FIRM_NBR_RPT_CAN) And All(INCIDENT_REPORT.REPORT_DATE) Then SetCursorPos(Panel.HS_INC_REPORT, INCIDENT_REPORT.REPORT_DATE, CurrentR owNumber(1)); Warning MsgGet(1070, 183, "The Reporting Firm Number is required for th e WCB Submittal."); End-If; If None(OP_LOCN_RPT_CAN) And All(INCIDENT_REPORT.REPORT_DATE) Then SetCursorPos(Panel.HS_INC_REPORT, INCIDENT_REPORT.REPORT_DATE, CurrentR owNumber(1)); Warning MsgGet(1070, 184, "The Reporting Location Number is required fo

r the WCB Submittal.") End-If; /* only do these checks if this is the last INCIDENT_REPORT record */ If CurrentRowNumber() = ActiveRowCount(INCIDENT_REPORT.INCIDENT_NBR) Then /* Check for report time # */ /* Check Consequent and Preventative Actions if this is a Dangerous Occ urance*/ If INCIDENT_DATA.INCIDENT_TYPE = "O" Then SQLExec("Select count(*) from ps_INCIDENT_CAUSE where Incident_nbr = :1 and incident_cause > ' ' ", INCIDENT_DATA.INCIDENT_NBR, &CNT_EVENT); If &CNT_EVENT = 0 Then Warning MsgGet(1070, 46, "Remember to enter a Consequent Action C ause before doing the WCB Submittal"); End-If; /******* Check Followup Action ********/ SQLExec("Select count(*) from PS_INC_ACTION_P_VW where Incident_nbr =:1 and prevent_act_cd_can > ' '", INCIDENT_DATA.INCIDENT_NBR, &CNT_FOLLOWUP); If &CNT_FOLLOWUP = 0 Then Warning MsgGet(1070, 47, "Remember to enter a Preventative Action before doing the WCB Submittal"); End-If; End-If; /* **** PERFORM CHECKS FOR EACH INJURED EMPLOYEE ****** */ &CAUSE_ERR = "N"; &ACTION_ERR = "N"; &INJCOUNT = ActiveRowCount(INJURY_ILL_VW.INJ_OUTCOME_CAN); For &I = 1 To &INJCOUNT &INJOUT = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, &I); &EMPCHK = FetchValue(INJURY_ILL_VW.EMPLID, &I); If All(&EMPCHK) Then Evaluate &INJOUT When = "FAT" When = "STD" When = "HCO" /********* Check Source of Injuries **************/ If RPT_STATUS_CAN = "F" Then &SOI = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, &I, INJURY _ILL_SOI.INJURY_SOURCE_CD, 1); If None(&SOI) Then /* SetCursorPos(Panel.HS_INJ_DETAIL, INJURY_ILL_VW.EMPLID, &I); */ Warning MsgGet(1070, 44, "All Injured Persons need to ha ve at least one Source of Injury for the Final Report. "); End-If; If &CAUSE_ERR = "N" Then /* only show this error once */ /******* Check Event Cause (only on one injured person) ********/ SQLExec("Select count(*) from ps_INCIDENT_CAUSE where In cident_nbr =:1 and incident_cause > ' ' ", INCIDENT_DATA.INCIDENT_NBR, &CNT_EVEN T); If &CNT_EVENT = 0 Then Warning MsgGet(1070, 46, "Remember to enter a Consequ ent Action Cause before doing the WCB Submittal"); &CAUSE_ERR = "Y"; End-If; End-If; /******* Check Followup Action (only on one injured person)

********/ If &ACTION_ERR = "N" Then /* only show this error once */ SQLExec("Select count(*) from PS_INC_ACTION_P_VW where I ncident_nbr =:1 and prevent_act_cd_can > ' '", INCIDENT_DATA.INCIDENT_NBR, &CNT_ FOLLOWUP); If &CNT_FOLLOWUP = 0 Then Warning MsgGet(1070, 47, "Remember to enter a Prevent ative Action before doing the WCB Submittal"); &ACTION_ERR = "Y"; End-If; End-If; End-If; /***** Check that a Claim with a contact ID exists (final and prelim rpts)*****/ SQLExec("Select count(*) from PS_INJURY_CLM_MGMT where INCIDEN T_NBR = :1 and EMPLID = :2 and CONTACT_ID > ' '", INCIDENT_DATA.INCIDENT_NBR, &E MPCHK, &CNT_CLAIM); If &CNT_CLAIM = 0 Then Warning MsgGet(1070, 48, "Remember to enter a Claim and Con tact ID for Employee %1 before running a WCB submittal", &EMPCHK); End-If; End-Evaluate; End-If; End-For; /* verify that there is at least one Investigator when report is final, in WCB Jurisdiction, and incident_outcome is not RPO */ &OUTCOME = DetIncOutcomeCan(); If RPT_STATUS_CAN = "F" And INCIDENT_DATA.WCB_JURISDICT_SW = "Y" Then If &OUTCOME <> "RPO" Then &FND_INVST = "N"; &PPLCOUNT = ActiveRowCount(INCIDENT_PEOPLE.EMPLID); For &J = 1 To &PPLCOUNT &INVEST = FetchValue(INCIDENT_PEOPLE.INCIDENT_ROLE, &J); If &INVEST = "IN" Then &FND_INVST = "Y"; Break; End-If; End-For; If &FND_INVST = "N" Then Warning MsgGet(1070, 49, "At least one Investigator must be en tered"); End-If; End-If; End-If; /******* Check Contibuting Factor if report is final and not RPO ****** **/ If RPT_STATUS_CAN = "F" And &OUTCOME <> "RPO" Then &FACTOR = FetchValue(INC_CONTFAC_CAN.CONTRIB_FACTOR_CAN, 1); If None(&FACTOR) Then Warning MsgGet(1070, 45, "At least one Contributing factor is req uired for this submittal."); End-If; End-If; End-If; End-If; End-If;

[INJURY_ILL.LAST_FULL_WORK_DAY.SaveEdit] /*** Federal ***/ Declare Function determine_opr_defaults PeopleCode OPR_DEF_TBL_HR.INDUSTRY Field Change; Global string &INDUSTRY; Global string &INDUSTRY_SECTOR; If None(&INDUSTRY, &INDUSTRY_SECTOR) Then determine_opr_defaults(); End-If; If &INDUSTRY = "GOVT" And &INDUSTRY_SECTOR = "USFG" Then If All(LAST_FULL_WORK_DAY) And All(DT_REPORTED) And DT_REPORTED < LAST_FULL_WORK_DAY Then Error MsgGet(1641, 250, "Message Not Found"); End-If; End-If; /*** Global and CHE Requirement ***/ If %PanelGroup = PanelGroup.HS_INJURY_ILL And INCIDENT_DATA.REG_REGION = "CANBC" Then /* CANBC - WCB Validation for HS_INJ_WORKCAN_SBP panel */ If All(INJURY_ILL_VW.EMPLID) Then Evaluate (INJ_OUTCOME_CAN) When = "STD" When = "HCO" When = "FAT" If None(LAST_FULL_WORK_DAY) Or None(LAST_WORKED_TM) Then If Not IsModal() Then End-If; Warning MsgGet(1070, 65, "Last day work date and time are required f or WCB Transmission."); End-If; End-Evaluate; If None(INJ_OUTCOME_CAN) And Not IsModal() Then Warning MsgGet(1070, 185, "The Injury Outcome is required."); End-If; End-If; End-If; [INJ_ILLCAN_SBR.INJ_OUTCOME_CAN.SaveEdit] /* CANBC - WCB Validation: Employer's Statement, Employer's Objection, Nature of Injury-Body Part Link, Designates, Injured Person's statement*/ If Not IsModal() Then If %PanelGroup = PanelGroup.HS_INJURY_ILL And INCIDENT_DATA.REG_REGION = "CANBC" Then If All(INJURY_ILL_VW.EMPLID) Then /* Check for First Aid Designate if First Aid Treatment */ If None(INJURY_ILL_VW.FA_DESIG_SEQNUM) Then &FND_FA = "N"; &ROW = CurrentRowNumber(1); &FACNT = ActiveRowCount(Record.INJURY_ILL_VW, &ROW, INJURY_ILL_AID.E

MPLID); For &I = 1 To &FACNT &TREATMENT = FetchValue(INJURY_ILL_VW.EMPLID, &ROW, INJURY_ILL_AI D.TREATMENT_TYPE, &I); &TREATTIME = FetchValue(INJURY_ILL_VW.EMPLID, &ROW, INJURY_ILL_AI D.TREATMENT_TM, &I); If &TREATMENT = "FA" And All(&TREATTIME) Then &FND_FA = "Y"; End-If; End-For; If &FND_FA = "Y" Then Warning MsgGet(1070, 200, "You must enter a First Aider Desiginat e Sequence Number for the Injured Person"); End-If; End-If; /* Check for Worker Schedule information */ If VAR_SHIFT_ROTATION = "N" Then Evaluate INJ_OUTCOME_CAN When = "FAT" When = "STD" SQLExec("SELECT COUNT(*) FROM PS_ABSW_SCHD_VW WHERE EMPLID = :1 a nd EMPL_RCD = :2", INJURY_ILL_VW.EMPLID, INJURY_ILL_VW.EMPL_RCD, &CNT_SCHD); If &CNT_SCHD = 0 Then /* SetCursorPos(Panel.HS_INJ_NOTIFY, INJURY_ILL_VW.EMPLID, Curren tRowNumber(1)); */ Warning MsgGet(1070, 190, "Please remember to enter the Worker s Schedule under the Monitor Absence menu."); End-If; End-Evaluate; End-If; Evaluate INJ_OUTCOME_CAN When = "FAT" When = "HCO" When = "STD" &STATEMENT = FetchValue(INJURY_ILL_VW.EMPLID, CurrentRowNumber(1), I NJ_ILL_EMPSTMT.STATEMENT, 1); /**** Employer's statement is required ****/ If None(&STATEMENT) Then /* SetCursorPos(Panel.HS_INJ_STATEMENT, INJURY_ILL_VW.EMPLOYER_OBJEC T_SW, CurrentRowNumber(1), INJ_ILL_EMPSTMT.STATEMENT, 1); */ Warning MsgGet(1070, 55, "Employer's Statement of injuries is req uired."); End-If; End-Evaluate; Evaluate INJ_OUTCOME_CAN When = "FAT" When = "HCO" When = "STD" When = "RPO" /**** At least one Nature of Injury-Body Part combination is require d ****/ &NOI_BODY = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, CurrentRowNumb er(0), INJ_ILL_BPI_CAN.INJURY_NATURE_CD, 1); If None(&NOI_BODY) Then /*

SetCursorPos(Panel.HS_INJ_NOTIFY, INJURY_ILL_VW.EMPLID, CurrentRowN umber(1)); */ Warning MsgGet(1070, 56, "All Injured Persons need to have at lea st one Nature of Injury/Body Part Link."); End-If; End-Evaluate; /**** At least one Accident Type is required ****/ &ACC_TYPE = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, CurrentRowNumber( 0), INJURY_ILL_ACC.ACCIDENT_TYPE_CD, 1); If None(&ACC_TYPE) Then SetCursorPos(Panel.HS_INJ_NOTIFY, INJURY_ILL_VW.EMPLID, CurrentRowNu mber(1)); Warning MsgGet(1070, 187, "All Injured Persons need to have at least one Accident Type."); End-If; /**** For All Injury Outcomes do the following checks ****/ /***** check that object statement is filled in if switch is Y *****/ If INJURY_ILL_VW.EMPLOYER_OBJECT_SW = "Y" Then &STATEMENT = FetchValue(INJURY_ILL_VW.EMPLID, CurrentRowNumber(1), I NJ_ILL_OBJSTMT.STATEMENT, 1); /* Employer's objection statement is required */ If None(&STATEMENT) Then /* SetCursorPos(Panel.HS_INJ_STATEMENT, INJURY_ILL_VW.EMPLOYER_OBJECT_ SW, CurrentRowNumber(1), INJ_ILL_OBJSTMT.STATEMENT, 1); */ Warning MsgGet(1070, 57, "Employer's objection text is required f or WCB Transmittal."); End-If; End-If; /*** If worker received first Aid, **** */ If (INJURY_ILL_VW.UNCONSCIOUS_SW = "Y" Or INJURY_ILL_VW.AMBULANCE_SW = "Y" Or All(WRKR_ARRIVE_FA, WRKR_LEAVE_FA)) Then /**** check that there is a injured person's statement ****/ &STATEMENT = FetchValue(INJURY_ILL_VW.EMPLID, CurrentRowNumber(1), I NJ_ILL_STMT.STATEMENT, 1); If None(&STATEMENT) Then /* SetCursorPos(Panel.HS_INJ_STATEMENT, INJURY_ILL_VW.EMPLOYER_OBJECT_ SW, CurrentRowNumber(1), INJ_ILL_STMT.STATEMENT, 1); */ Warning MsgGet(1070, 58, "Injured Worker's statement is required for WCB Transmittal."); End-If; /****check for at least one designate if the worker received first a id ***/ If None(FA_DESIG_SEQNUM) Then Warning MsgGet(1070, 59, "First Aid Designate # is required when worker recieved first aid"); End-If; End-If; /* Check that a record has been entered for this employee in HS_PERS_DA TA */ SQLExec("SELECT COUNT(*) FROM PS_HS_PERS_DATA WHERE EMPLID = :1", INJUR Y_ILL_VW.EMPLID, &CNT_PERS); If &CNT_PERS = 0 Then /*

SetCursorPos(Panel.HS_INJ_NOTIFY, INJURY_ILL_VW.EMPLID, CurrentRowNumb er(1)); */ Warning MsgGet(1070, 188, "Remember to enter Employee Details for th is Injured Worker."); End-If; /* Check that a record has been entered for this employee in HS_EMPLOYM ENT */ &SNL_SW = ""; SQLExec("SELECT EMPTYP_SNL_SW_CAN FROM PS_HS_EMPLOYMENT WHERE EMPLID = :1", INJURY_ILL_VW.EMPLID, &SNL_SW); If &SNL_SW = "" Then /* SetCursorPos(Panel.HS_INJ_NOTIFY, INJURY_ILL_VW.EMPLID, CurrentRowNumb er(1)); */ Warning MsgGet(1070, 188, "Remember to enter Employment Details for this Injured Worker."); /* check for the Date Change reason if this is a Seasonal Worker */ Else If &SNL_SW = "Y" Then &LONG_EARNS = FetchValue(INJURY_ILL_VW.EMPLID, CurrentRowNumber(1 ), LONG_EARNS_CAN.DT_CHG_REASON_CAN, 1); If None(&LONG_EARNS) Then /* SetCursorPos(Panel.HS_INJ_WORK, INJURY_ILL_VW.EMPLID, CurrentRow Number(1)); */ Warning MsgGet(1070, 191, "You must enter a Date Change Reason in the Long Term Earnings section for this Seasonal Worker."); End-If; End-If; End-If; End-If; End-If; End-If; [INJ_ILLCAN_SBR.LAST_DAY_SCHED_ST.SaveEdit] /* CANBC - WCB Validation for HS_INJ_WORKCAN_SBP panel: Last Day's Schedule Date s, Fixed Rotation Date, Payment Description */ If %PanelGroup = PanelGroup.HS_INJURY_ILL Then If INCIDENT_DATA.REG_REGION = "CANBC" And All(INJURY_ILL_VW.EMPLID) Then If INJ_OUTCOME_CAN = "STD" Then If None(LAST_DAY_SCHED_ST) Or None(LAST_DAY_SCHED_END) Then Warning MsgGet(1070, 61, "Last day scheduled dates are required for WCB Transmission."); End-If; If VAR_SHIFT_ROTATION = "N" And None(FIXED_ROTN_ST_DT) Then Warning MsgGet(1070, 75, "Fixed Rotation start date is required."); End-If; End-If; If PAYMENTS_DURING = "Y" And None(EMPR_BENEFITS_DESC) Then Warning MsgGet(1070, 62, "Payments description is required.") End-If; If INCIDENT_DATA.REG_REGION = "CANBC" And

(INJ_OUTCOME_CAN = "STD" Or INJ_OUTCOME_CAN = "FAT") And ((HS_EMPLOYMENT.EMPTYP_CSL_SW_CAN = "Y" Or HS_EMPLOYMENT.EMPTYP_SNL_SW_CAN = "Y") Or (HS_EMPLOYMENT.REL_PARTNER_SW_CAN = "Y" Or HS_EMPLOYMENT.REL_PRNCPL_SW_CAN = "Y")) Then &I = CurrentRowNumber(); &AMT = FetchValue(INJURY_ILL_VW.INJ_OUTCOME_CAN, &I, LONG_EARNS_CAN.LTE _AMOUNT_CAN, 1); If &AMT = 0 Then Warning MsgGet(1070, 63, "Long Term Earnings are required for WCB su bmittal"); End-If; End-If; End-If; End-If; [JOB.EFFDT.RowDelete] /************************************************************** ENTERGY MODIFICATION LOG 01 10/19/1999 Gill Cutchen Display warning message if there is a matching effective dated empl_incentive row. 02 12/5/2002 Gill Cutchen Reset E_DERIVED_WRK.MAIL_DROP based on the prior JOB.COMPANY value when a job row is being deleted. 03 06/05/2008 Jason Arch Display warning message if there is a matching effective dated TL_EMPL_DATA row. ***************************************************************/ /* All RowDelete Peoplecode for the JOB record should be put in this function except for Subrecord peoplecode */ Declare Function Declare Function ; Declare Function la; Declare Function Declare Function Declare Function a; Declare Function ula; Declare Function ; Declare Function eldFormula; Declare Function mula; Declare Function Formula; Declare Function eldFormula; Declare Function det_empl_status PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormula; next_empl_status PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormula empl_status_update PeopleCode FUNCLIB_HR.EMPL_STATUS FieldFormu det_ben_status PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormula; next_ben_status PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormula; ben_status_update PeopleCode FUNCLIB_BEN.BEN_STATUS FieldFormul set_job_panel_msg PeopleCode FUNCLIB_HR.JOB_PANEL_MSG FieldForm calc_next_compchg PeopleCode FUNCLIB_HR.CHANGE_PCT FieldFormula calc_compchange_flds_jobdel PeopleCode FUNCLIB_HR.CHANGE_AMT Fi Check_Used_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM FieldFor Scroll_Delete_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM Field Scroll_Sel_BegDt_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM Fi Scroll_Sel_EndDt_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM Fi

eldFormula; Declare Function eldFormula; Declare Function eldFormula; Declare Function mula; Declare Function mula;

Scroll_Upd_BegDt_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM Fi Scroll_Upd_EndDt_Contract PeopleCode FUNCLIB_HR.CONTRACT_NUM Fi Get_Oldest_Date_JOB PeopleCode FUNCLIB_HR.CONTRACT_NUM FieldFor Get_Latest_Date_JOB PeopleCode FUNCLIB_HR.CONTRACT_NUM FieldFor

Component number &SUPPR_COMP_ROW_DEL; Component number &SUPPR_EARN_ROW_DEL; If POSN_CHANGE_RECORD = "Y" Then WinMessage(MsgGet(1000, 185, "This record was created by Position Management. "), 64); End-If; /* Perform following only if row being deleted is not the last row. */ If ActiveRowCount(EMPLID) > 1 Then /* *********************************************** recalculate Job Change fields of next Job row based on prior Job row ***********************************************/ calc_next_compchg(EFFDT, EFFSEQ, 1); /*********************************************************************/ /* set the global vars SUPPR_COMP_ROW_DEL, SUPPR_EARN_ROW_DEL */ /* NOTE: these variables are used to suppress RowDelete processing */ /* of the child records COMPENSATION and JOB_EARNS_DIST */ /* at a RowDelete of a JOB row. */ /*********************************************************************/ &SUPPR_COMP_ROW_DEL = ActiveRowCount(Record.JOB, CurrentRowNumber(), Record.C OMPENSATION); &SUPPR_EARN_ROW_DEL = ActiveRowCount(Record.JOB, CurrentRowNumber(), Record.J OB_EARNS_DIST); /* *********************************************** recalculate Compensation Change fields of next Job row based on prior Job row ***********************************************/ calc_compchange_flds_jobdel(EFFDT, EFFSEQ); /* Reset job panel message for standard job panels. Pass EFFDT and EFFSEQ of row being deleted as function parameters to exclude row in function. */ If %PanelGroup <> PanelGroup.HOME_HOST_DATA Then set_job_panel_msg(EFFDT, EFFSEQ); End-If; /* ----- Logic for EMPL_STATUS ----- */ /* Update EMPL_STATUS for current row. If current row EMPL_STATUS is specific ally assigned, reset EMPL_STATUS of all rows between NEXTDT,NEXTSEQ and EFFDT,EF FSEQ to EMPL_STATUS of prior row */ /* Added for Pension */ If %PanelGroup = PanelGroup.PA_JOB Or %PanelGroup = PanelGroup.PA_JOB_PERS Then &PER_TYPE = PERSONAL_DT_FST.PER_TYPE; End-If; det_empl_status(ACTION, ACTION_REASON, EMPL_STATUS, EMPL_CLASS, CurrentRowNum

ber(), &OTHER, &PER_TYPE); If &OTHER = 0 Then &EMPL_STATUS = PriorEffdt(EMPL_STATUS); next_empl_status(EFFDT, EFFSEQ, &NEXTDT, &NEXTSEQ); empl_status_update(EFFDT, EFFSEQ, &NEXTDT, &NEXTSEQ, &EMPL_STATUS); End-If; /* ----- Logic for BEN_STATUS ----- */ /* Update BEN_STATUS for current row. If current row BEN_STATUS is specifical ly assigned, reset BEN_STATUS of all rows between NEXTDT,NEXTSEQ and EFFDT,EFFSE Q to BEN_STATUS of prior row */ det_ben_status(ACTION, ACTION_REASON, BEN_STATUS, CurrentRowNumber(), &OTHER) ; If &OTHER = 0 Then &BEN_STATUS = PriorEffdt(BEN_STATUS); next_ben_status(EFFDT, EFFSEQ, &NEXTDT, &NEXTSEQ); ben_status_update(EFFDT, EFFSEQ, &NEXTDT, &NEXTSEQ, &BEN_STATUS); End-If; Else Error MsgGet(1000, 804, "Cannot delete all rows on a person"); End-If; /* Logic to reset Employment Dates to null if row deleted was used to set the da tes. */ If EFFDT = EMPLOYMENT.HIRE_DT Then SetDefault(EMPLOYMENT.HIRE_DT) End-If; If EFFDT = EMPLOYMENT.REHIRE_DT Then SetDefault(EMPLOYMENT.REHIRE_DT) End-If; /*sree*/ /*If All(EMPLOYMENT.TERMINATION_DT) And EFFDT = EMPLOYMENT.TERMINATION_DT + 1 Then WinMessage("in termination date"); End-If; */ If All(EMPLOYMENT.TERMINATION_DT) And EFFDT = EMPLOYMENT.TERMINATION_DT + 1 Then SetDefault(EMPLOYMENT.TERMINATION_DT) End-If; If All(EMPLOYMENT.LAST_DATE_WORKED) Then SetDefault(EMPLOYMENT.LAST_DATE_WORKED); End-If; If EFFDT = EMPLOYMENT.LAST_INCREASE_DT Then SetDefault(EMPLOYMENT.LAST_INCREASE_DT); End-If; /* Reset Personal_data.DT_OF_DEATH if the row deleted was used to set it. */ If ACTION = "TER" And ACTION_REASON = "DEA" Then &DT_OF_DEATH = EFFDT - 1; &PERS_DT = FetchValue(PERSON.DT_OF_DEATH, 1); If &DT_OF_DEATH = &PERS_DT Then UpdateValue(PERSON.DT_OF_DEATH, 1, ""); End-If; End-If; If All(EMPLOYMENT.LAST_DATE_WORKED) Then Evaluate ACTION When = "TER" When = "TWP" When = "TWB"

When = "RET" When = "RWP" When = "LOA" When = "LOF" When = "LTD" When = "LTO" When = "PLA" When = "STD" When = "STO" When = "SUS" /* Public Sector Extension */ When = "SWB" /* ends Public Sector Extension */ SetDefault(EMPLOYMENT.LAST_DATE_WORKED); End-Evaluate; End-If; /* *********************** Contract *************************** */ If Substring(%PanelGroup, 1, 8) = Substring(PanelGroup.JOB_DATA, 1, 8) Then /* *** Check if the Contract is still used ... and offer to delete the Contra ct Data row *** */ If All(CONTRACT_NUM) Then Evaluate ACTION When = "TER" When = "TWB" When = "TWP" When = "RET" When = "RWP" &TER = "Y"; When-Other &TER = "N"; End-Evaluate; &EMPLID = EMPLID; &EMPL_RCD = EMPL_RCD; &CONTRACT_NUM = CONTRACT_NUM; &EFFDT = EFFDT; &EFFDT_1 = AddToDate(&EFFDT, 0, 0, - 1); Check_Used_Contract(&EMPLID, &EMPL_RCD, &CONTRACT_NUM, &CNT_USE, &PRIOR_CN T); /** &PRIOR_CNT non used in this context - forget about it ... **/ /* 0 *** The Contract is not used anywhere anymore ... ***/ If &CNT_USE <= 1 Then &RESULT = MessageBox(36, "", 1000, 603, "Do you want to delete the Cont ract %1 ?", &CONTRACT_NUM); If &RESULT = 6 Then Scroll_Delete_Contract(&CONTRACT_NUM); Else /* The contract is not deleted, so, remove the end date if equal to this Job Effdt */ If &TER = "Y" Then Scroll_Sel_EndDt_Contract(&CONTRACT_NUM, &END_DT); If All(&END_DT) And &END_DT = &EFFDT_1 Then &DATE = ""; Scroll_Upd_EndDt_Contract(&CONTRACT_NUM, &DATE);

End-If; End-If; End-If; Else /* 1 *** The Contract is still used ... offer to update the Contract Be gin Date *** */ Scroll_Sel_BegDt_Contract(&CONTRACT_NUM, &BEGIN_DT); Scroll_Sel_EndDt_Contract(&CONTRACT_NUM, &END_DT); If All(&BEGIN_DT) And &BEGIN_DT = &EFFDT Then &RESULT = MessageBox(36, "", 1000, 613, "Do you want to update Begin Date of Contract %1 with the oldest Job Effdt associated?", &CONTRACT_NUM); If &RESULT = 6 Then &DATE = &EFFDT; Get_Oldest_Date_JOB(&EMPLID, &EMPL_RCD, &CONTRACT_NUM, &DATE); If All(&DATE) And &DATE <> &EFFDT And (All(&END_DT) And &DATE < &END_DT) Then Scroll_Upd_BegDt_Contract(&CONTRACT_NUM, &DATE); End-If; End-If; End-If; /* 2 *** The Contract is still used ... offer to update the Contract En d Date *** */ If &TER = "Y" Then If All(&END_DT) And &END_DT = &EFFDT_1 Then &RESULT = MessageBox(36, "", 1000, 825, "Do you want to update th e End Date of Contract %1 with the latest Job Effdt associated?", &CONTRACT_NUM) ; If &RESULT = 6 Then &DATE = &EFFDT; Get_Latest_Date_JOB(&EMPLID, &EMPL_RCD, &CONTRACT_NUM, &DATE); If &DATE <> &EFFDT And (&DATE > &BEGIN_DT Or None(&DATE)) Then Scroll_Upd_EndDt_Contract(&CONTRACT_NUM, &DATE); End-If; End-If; End-If; End-If; End-If; End-If; End-If; /*01 Modification */ &INCENTIVE_PLAN_DT = ""; SQLExec("Select I.E_Incentve_Plan_Dt From PS_E_Empl_Incentv I Where I.Emplid = : 1 and I.E_Incentve_Plan_Dt = %datein(:2)", EMPLID, EFFDT, &INCENTIVE_PLAN_DT); If All(&INCENTIVE_PLAN_DT) Then Warning MsgGet(29000, 110, "There is a matching %1 Incentive Plan record that may need to be adjusted.", EFFDT); End-If;

/*01 End Modification */ /*** PSMOD02 BEGIN ***/ SQLExec("Select Count(*) from PS_Job A Where A.Emplid = :1 and ((A.Effdt > %date in(:2)) or (A.Effdt = %datein(:3) and A.Effseq > :4))", EMPLID, EFFDT, EFFDT, EF FSEQ, &COUNT); /* Only reset mail drop when deleting current row */ If &COUNT = 0 Then SQLExec("Select A.Company From PS_Job A Where A.Emplid = :1 and A.Effdt = (Se lect Max(A1.Effdt) from PS_Job A1 Where A1.Emplid = A.Emplid and A1.Empl_Rcd = A .Empl_Rcd and A1.Effdt < %datein(:2)) and A.Effseq = (Select Max(A2.Effseq) from PS_Job A2 Where A2.Emplid = A.Emplid and A2.Empl_Rcd = A.Empl_Rcd and A2.Effdt = A.Effdt)", EMPLID, EFFDT, &PRIOR_COMP); SQLExec("Select MAIL_DROP From PS_PAYROLL_DATA Where EMPLID = :1 And COMPANY = :2", EMPLID, &PRIOR_COMP, &MAIL_DROP); E_DERIVED_WRK.MAIL_DROP = &MAIL_DROP; End-If; /**** PSMOD02 END ****/ /*** PSMOD03 BEGIN ***/ SQLExec("SELECT 'X' FROM %TABLE(TL_EMPL_DATA) WHERE EMPLID = :1 AND EMPL_RCD = : 2 AND EFFDT = %DateIn(:3)", GetRecord().EMPLID.Value, GetRecord().EMPL_RCD.Value , GetRecord().EFFDT.Value, &x); If All(&x) Then Warning MsgGet(29000, 222, "Message Not Found", GetRecord().EFFDT.Value); End-If; /**** PSMOD03 END ****/

You might also like