Sunday, October 21, 2007

Update Routines for PA_C02

ODS - Employee (PA_C02)
Info Source : HR_PA_0
Info Objects: Age Range, Gender, Nationality, Language, Age in years, Country Key, Country Code, Region, Postal Code, Capacity Utilization level, Seniority


* global Data Declarations for all the routines.

DATA: employee_md LIKE /bi0/memployee,
employee_wa LIKE /bi0/memployee,
person_md LIKE /bi0/mperson,
person_wa LIKE /bi0/mperson.

DATA: g_record_no LIKE sy-tabix.


INCLUDE rs_bct_hr_update_rules_general.
INCLUDE rs_bct_hr_papa_update_rules.

*$*$ begin of routine - insert your code only below this line *-*
* ---------------------------------------
* Start of Age Range Routine

DATA: ULTIMO LIKE SY-DATUM,
AGE TYPE I.

IF G_RECORD_NO <> RECORD_NO.
G_RECORD_NO = RECORD_NO.
CLEAR: EMPLOYEE_MD, PERSON_MD.
CLEAR: EMPLOYEE_WA, PERSON_WA.
ENDIF.

PERFORM CALCULATE_ULTIMO
using COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING ULTIMO
RETURNCODE.

PERFORM READ_MD_PERSON
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING EMPLOYEE_WA
PERSON_WA
RETURNCODE.
EMPLOYEE_MD = EMPLOYEE_WA.
PERSON_MD = PERSON_WA.

IF NOT PERSON_MD-DATEBIRTH IS INITIAL.
AGE = ULTIMO+0(4) - PERSON_MD-DATEBIRTH+0(4).
IF ULTIMO+4(4) LT PERSON_MD-DATEBIRTH+4(4).
AGE = AGE - 1.
ENDIF.

* IF AGE LT 20.
* RESULT = 1.
* ELSEIF AGE LT 30.
* RESULT = 2.
* ELSEIF AGE LT 40.
* RESULT = 3.
* ELSEIF AGE LT 50.
* RESULT = 4.
* ELSEIF AGE LT 60.
* RESULT = 5.
* ELSEIF AGE LT 70.
* RESULT = 6.
* ELSE.
* RESULT = 7.
* ENDIF.

IF AGE LT 25. "under 25
RESULT = 1.
ELSEIF AGE LE 34. "between 25 - 34
RESULT = 2.
ELSEIF AGE LE 44. "between 35 - 44
RESULT = 3.
ELSEIF AGE LE 54. "between 45 - 54
RESULT = 4.
ELSEIF AGE LE 64. "between 55 - 64
RESULT = 5.
ELSE.
RESULT = 6. "Over 65
ENDIF.

ELSE.
CLEAR RESULT.
ENDIF.

RETURNCODE = 0.
* End of Age Range routine
*------------------------------------------

* Routine for Gender

IF G_RECORD_NO <> RECORD_NO.
G_RECORD_NO = RECORD_NO.
CLEAR: EMPLOYEE_MD, PERSON_MD.
CLEAR: EMPLOYEE_WA, PERSON_WA.
ENDIF.
PERFORM READ_MD_PERSON
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING EMPLOYEE_WA
PERSON_WA
RETURNCODE.
EMPLOYEE_MD = EMPLOYEE_WA.
PERSON_MD = PERSON_WA.
RESULT = PERSON_MD-GENDER.

RETURNCODE = 0.
* End of Gender Routine
*---------------------------------------------

* Routine for Nationality

IF G_RECORD_NO <> RECORD_NO.
G_RECORD_NO = RECORD_NO.
CLEAR: EMPLOYEE_MD, PERSON_MD.
CLEAR: EMPLOYEE_WA, PERSON_WA.
ENDIF.

PERFORM READ_MD_PERSON
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING EMPLOYEE_WA
PERSON_WA
RETURNCODE.
EMPLOYEE_MD = EMPLOYEE_WA.
PERSON_MD = PERSON_WA.
RESULT = PERSON_MD-NATION.
RETURNCODE = 0.
* End of Nationality Routine
*------------------------------------------

* Routine for Language
IF G_RECORD_NO <> RECORD_NO.
G_RECORD_NO = RECORD_NO.
CLEAR: EMPLOYEE_MD, PERSON_MD.
CLEAR: EMPLOYEE_WA, PERSON_WA.
ENDIF.
PERFORM READ_MD_PERSON
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING EMPLOYEE_WA
PERSON_WA
RETURNCODE.
EMPLOYEE_MD = EMPLOYEE_WA.
PERSON_MD = PERSON_WA.
RESULT = PERSON_MD-PERSLANGU.

RETURNCODE = 0.
* End of Language Routine
*-----------------------------------------

*Routine for Age in Years

DATA: ULTIMO LIKE SY-DATUM.

IF G_RECORD_NO <> RECORD_NO.
G_RECORD_NO = RECORD_NO.
CLEAR: EMPLOYEE_MD, PERSON_MD.
CLEAR: EMPLOYEE_WA, PERSON_WA.
ENDIF.

PERFORM CALCULATE_ULTIMO
using COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING ULTIMO
RETURNCODE.

PERFORM READ_MD_PERSON
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
CHANGING EMPLOYEE_WA
PERSON_WA
RETURNCODE.
EMPLOYEE_MD = EMPLOYEE_WA.
PERSON_MD = PERSON_WA.

IF NOT PERSON_MD-DATEBIRTH IS INITIAL.
RESULT = ULTIMO+0(4) - PERSON_MD-DATEBIRTH+0(4).
IF ULTIMO+4(4) LT PERSON_MD-DATEBIRTH+4(4).
RESULT = RESULT - 1.
ENDIF.
ENDIF.

RETURNCODE = 0.
* End of Age in Years Routine
*----------------------------------------------

* Routine for Country Key

if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_person
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
person_wa
RETURNCODE.
employee_md = employee_wa.
person_md = person_wa.
RESULT = PERSON_MD-COUNTRY.

RETURNCODE = 0.
* End of Country key Routine
*---------------------------------------------

* Routine for Contry Code

if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_person
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
person_wa
RETURNCODE.
employee_md = employee_wa.
person_md = person_wa.
RESULT = PERSON_MD-COUNTY_CDE.

RETURNCODE = 0.

* End of Country Code Routine
*------------------------------------------

* Routine for Region

if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_person
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
person_wa
RETURNCODE.
employee_md = employee_wa.
person_md = person_wa.
RESULT = PERSON_MD-REGION.

RETURNCODE = 0.
* End of Region Routine
* --------------------------------------------

* Routine for Postal Code
if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_person
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
person_wa
RETURNCODE.
employee_md = employee_wa.
person_md = person_wa.
RESULT = PERSON_MD-POSTAL_CD.

RETURNCODE = 0.

*End of Postal Code Routine
*------------------------------------------

* Routine for Capacity Utilization Lvl

DATA: TMP_PAYPCT TYPE I.
if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_employee
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
RETURNCODE.
employee_md = employee_wa.
* fill the internal table "MONITOR", to make monitor entries

* result value of the routine
* rounded
TMP_PAYPCT = EMPLOYEE_MD-PAYPCT.
RESULT = TMP_PAYPCT.

* End of Routine Capacity Utilization Lvl
*------------------------------------------------

* Routine for Length of Service

data: ultimo like sy-datum.

if g_RECORD_NO <> RECORD_NO.
g_RECORD_NO = RECORD_NO.
clear: employee_md, person_md.
clear: employee_wa, person_wa.
endif.

perform read_md_employee
using COMM_STRUCTURE-employee
COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing employee_wa
RETURNCODE.
employee_md = employee_wa.

perform calculate_ultimo
using COMM_STRUCTURE-calmonth
RECORD_NO
RECORD_ALL
SOURCE_SYSTEM
changing ultimo
RETURNCODE.

IF NOT EMPLOYEE_WA-ENTRYDATE IS INITIAL.
RESULT = ULTIMO+0(4) - EMPLOYEE_WA-ENTRYDATE+0(4).
IF ULTIMO+4(4) LT EMPLOYEE_WA-ENTRYDATE+4(4).
RESULT = RESULT - 1.
endif.
ENDIF.

IF RESULT LT 1.
RESULT = 1.
ELSEIF RESULT LT 2.
RESULT = 2.
ELSEIF RESULT LT 5.
RESULT = 3.
ELSEIF RESULT LT 10.
RESULT = 4.
ELSE.
RESULT = 5.
ENDIF.

* End of Length of service routine
*-----------------------------------------

No comments: