*& Object Name : FS-HCM-REP-030 &* *& Program Name : YH_WORKFLOW_LEVEL &* *& Transaction Code: N/A &* *& Author : Kedar Prasad &* *& Module Name : HR &* *& Sub-Module : HCM &* *& Program Type : Function Module Create Date : 16.06.2009 &* *& SAP Release : 5.0 Transport No : RD1K929338 &* *& Description : This function module is being called in YHRADMIN &* *& report to give workflow pending level &* *&********************************************************************&* *& &* *& H I S T O R Y O F R E V I S I O N S &* *&____________________________________________________________________&* *& Date Programmer Request Description &* *& 06/08/2009 Kedar Prasad RD1K930162 Bug fixing for leave &* *& (KP01) ECC HR-HO#159 workflow level &* *& &* *&********************************************************************&*
FUNCTION yh_workflow_level. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(WI_ID) TYPE SWW_WIID *" REFERENCE(PERNR) TYPE PERSNO *" REFERENCE(AGENT) TYPE SYUNAME *" EXPORTING *" REFERENCE(WF_LEVEL) TYPE CHAR20 *"---------------------------------------------------------------------- INCLUDE <cntn01>.
TYPES: BEGIN OF ty_details, wi_id TYPE sww_wiid, wi_cd TYPE sww_cd, wi_aagent TYPE sww_aagent, wi_forw_by TYPE sww_forwby, END OF ty_details,
BEGIN OF ts_swwwhead, wi_id TYPE sww_wiid, END OF ts_swwwhead,
BEGIN OF ts_approver, approver TYPE hrp1001-sobid, email TYPE adr6-smtp_addr, END OF ts_approver.
**INTERNAL TABLES******************** DATA:it_details TYPE TABLE OF ty_details.
**WORK AREAS*************************
DATA: is_details TYPE ty_details.
** VARIABLES*************************
DATA: v_werks TYPE pa0001-werks, v_yyjlevel TYPE pa0001-yyjlevel, is_shead TYPE ts_swwwhead, frstapp_usrid TYPE pa0001-pernr, scndapp_usrid TYPE pa0001-pernr, unithd_usrid TYPE pa0001-pernr, hohradmn_usrid TYPE pa0001-pernr, v_sglvl, w_endda TYPE p9050-endda, w_sobid TYPE hrp1001-sobid, v_mltlvl, v_persg TYPE pa0001-persg, w_approver TYPE hrp1001-sobid, wa_yyemps TYPE pa9050-yyemps, v_ansvh TYPE pa0001-ansvh, w_unithead_p TYPE pa0001-pernr, w_unithead_u TYPE pa0001-pernr, w_fapp_p TYPE pa0001-pernr, w_fapp_u TYPE pa0001-pernr, w_sapp_p TYPE pa0001-pernr, w_sapp_u TYPE pa0001-pernr, w_return TYPE sy-subrc, it_work TYPE swrtwiid, w_tlevel TYPE numc1, w_clevel TYPE numc1, w_fa TYPE p0105-usrid, w_sa TYPE p0105-usrid, w_ta TYPE p0105-usrid, w_fourtha TYPE p0105-usrid, wi_agent1 TYPE swrtwiagent, wi_user TYPE swr_wiagent, wi_agent TYPE pa0001-pernr, w_forwarded TYPE sy-uname, w_userid_fa TYPE pa0001-pernr, w_userid_sa TYPE pa0001-pernr, w_userid_ta TYPE pa0001-pernr, w_userid_fourtha TYPE pa0001-pernr, w_flag_1 TYPE char1, w_wihead TYPE sww_wiid, w_wf_id TYPE swfrdguid, w_wfno TYPE char10, w_usrid TYPE p0105-usrid, w_date TYPE sy-datum, w_lines TYPE i.
DATA: is_loan TYPE char255, w_object_key TYPE swr_struct-object_key, w_loan TYPE swc_object.
DATA: w_hr_admin TYPE wfsyst-initiator, w_unit_head TYPE wfsyst-initiator, w_unit_hr TYPE wfsyst-initiator, w_level TYPE char1.
SELECT SINGLE top_wi_id def_guid INTO (w_wihead, w_wf_id) FROM swwwihead WHERE wi_id = wi_id.
IF sy-subrc = 0.
w_wfno = w_wf_id+0(10).
SELECT wi_id wi_cd wi_aagent wi_forw_by INTO TABLE it_details FROM swwwihead WHERE top_wi_id = w_wihead AND wi_type = 'W'.
IF sy-subrc = 0.
SORT it_details BY wi_id.
READ TABLE it_details INTO is_details INDEX 1.
IF sy-subrc = 0. w_date = is_details-wi_cd. ENDIF.
SORT it_details BY wi_id DESCENDING.
READ TABLE it_details INTO is_details INDEX 1.
IF sy-subrc = 0. w_forwarded = is_details-wi_forw_by. ENDIF.
CASE:w_wfno.
WHEN 'WS90100026'.
* **************Get all the approver of the leave as on the date leave has been applied********************
SELECT SINGLE werks yyjlevel persg ansvh FROM pa0001 INTO (v_werk s, v_yyjlevel, v_persg, v_ansvh) WHERE pernr EQ pernr AND begda LE w_date AND endda GE w_date AND bukrs EQ 'ITD'.
IF sy-subrc EQ 0.
SELECT SINGLE yyemps INTO wa_yyemps FROM pa9050 WHERE pernr EQ pernr AND begda LE w_date AND endda GE w_date.
IF sy-subrc = 0.
IF ( v_werks = 'HOTD' OR v_werks = 'CPOG' OR v_werks = 'NBD C' OR v_werks = 'NDIS' OR v_werks = 'SDIS' OR v_werks = 'EDIS' OR v_werks = 'WDIS' ) AND ( v_yyjlevel = '60000001' OR v_yyjlevel = '60000002' O R v_yyjlevel = '60000003' OR v_yyjlevel = '60000004' OR v_yyjlevel = '60000005' OR v_yyjlevel = '60000006' ). v_sglvl = 'X'. " 1 n 2
ELSEIF ( v_werks = 'MBLR' OR v_werks = 'IRDC' OR v_werks = 'M KDP' OR v_werks = 'MMGR' OR v_werks = 'MPUN' OR v_werks = 'MSRE' OR v_werks = 'OATC' OR v_werks = 'PCUT' ) AND ( v_yyjlevel EQ '60000003' ). v_sglvl = 'X'. " 3
ELSEIF ( v_werks = 'MBLR' OR v_werks = 'IRDC' OR v_werks = 'M KDP' OR v_werks = 'MMGR' OR v_werks = 'MPUN' OR v_werks = 'MSRE' OR v_werks = 'OATC' OR v_werks = 'PCUT' ) AND ( v_yyjlevel = '60000004' OR v_yyjlevel = '60000005' O R v_yyjlevel = '60000006' ). v_mltlvl = 'X'. " 5
ELSEIF ( v_werks = 'AECU' OR v_werks = 'AEGA' OR v_werks = 'A EPA' OR v_werks = 'AEVI' OR v_werks = 'AWAH' OR v_werks = 'AWBH' OR v_werks = 'AWMU' OR v_werks = 'AWNA' OR v _werks = 'AWPU' OR v_werks = 'ASBL' OR v_werks = 'ASCH' OR v_werks = 'ASCO' OR v_werks = 'ASER' OR v_werks = 'ASHY' OR v _werks = 'ANCH' OR v_werks = 'ANDE' OR v_werks = 'ANJA' OR v_werks = 'ANJP' OR v_werks = 'ANLU' OR v_werks = 'ANSA') AND ( v_yyjlevel EQ '60000004' ). " 4 v_sglvl = 'X'. ELSEIF ( v_werks = 'AECU' OR v_werks = 'AEGA' OR v_werks = 'A EPA' OR v_werks = 'AEVI' OR v_werks = 'AWAH' OR v_werks = 'AWBH' OR v_werks = 'AWMU' OR v_werks = 'AWNA' OR v _werks = 'AWPU' OR v_werks = 'ASBL' OR v_werks = 'ASCH' OR v_werks = 'ASCO' OR v_werks = 'ASER' OR v_werks = 'ASHY' OR v _werks = 'ANCH' OR v_werks = 'ANDE' OR v_werks = 'ANJA' OR v_werks = 'ANJP' OR v_werks = 'ANLU' OR v_werks = 'ANSA') AND ( v_yyjlevel = '60000005' OR v_yyjlevel = '600000 06' ). " 5 v_mltlvl = 'X'. ENDIF. ENDIF.
IF v_sglvl EQ 'X'.
* Start of change by KP01 on 06.08.2009 CALL FUNCTION 'SWW_WI_CONTAINER_READ' EXPORTING wi_id = w_wihead TABLES wi_container = it_event_container EXCEPTIONS container_does_not_exist = 1 read_failed = 2 OTHERS = 3.
IF sy-subrc = 0.
CLEAR: w_tlevel,w_clevel.
LOOP AT it_event_container.
CASE: it_event_container-element.
WHEN 'VARIABLE'. w_tlevel = it_event_container-value.
WHEN 'VARIABLE1'.
w_clevel = it_event_container-value.
WHEN 'OTHERS'. * No action
ENDCASE.
ENDLOOP.
ENDIF.
IF w_tlevel = 1 .
wf_level = 'FIRST APPRAISER'.
ELSEIF w_tlevel = 2 .
IF w_clevel = 1 .
wf_level = 'FIRST APPRAISER'.
ELSEIF w_clevel = 2.
wf_level = 'HO HR ADMIN'.
ENDIF.
ENDIF. * wf_level = 'FIRST APPRAISER'. * End of change by KP01 on 06.08.2009
ELSEIF v_mltlvl EQ 'X'.
CASE wa_yyemps.
WHEN '1'. SELECT SINGLE yylfapp yylsapp yyluhead endda FROM pa9050 INTO (frstapp_usrid , scndapp_ usrid ,unithd_usrid , w_endda) WHERE pernr EQ pernr AND begd a LE w_date AND endd a GE w_date.
SELECT SINGLE yydevp yyprown yyauhead endda FROM pa9050 INTO (frstapp_usrid , scndapp_ usrid ,unithd_usrid , w_endda) WHERE pernr EQ pernr AND begd a LE w_date AND endd a GE w_date.
SELECT SINGLE yyrfapyp yyrsapp yyruhead endda FROM pa9050 INTO (frstapp_usrid , scndapp_u srid ,unithd_usrid , w_endda) WHERE pernr E Q pernr AND begda LE w_date AND endda GE w_date. IF sy-subrc = 0.
IF frstapp_usrid IS NOT INITIAL. SELECT SINGLE sobid FROM hrp1001 INTO w_approver WHERE otype = 'S' AND objid = frstapp_usrid AND plvar = '01' AND rsign = 'A' AND relat = '008' AND istat = '1' AND endda >= w_endda AND sclas = 'P'.
IF sy-subrc = 0. frstapp_usrid = w_approver. w_fapp_u = w_approver.
ELSE. CLEAR frstapp_usrid. ENDIF. ENDIF.
SELECT SINGLE sobid FROM hrp1001 INTO w_approver WHERE otype = 'S' AND objid = scndapp_usrid AND plvar = '01' AND rsign = 'A' AND relat = '008' AND istat = '1' AND endda >= w_endda AND sclas = 'P'.
IF sy-subrc = 0. scndapp_usrid = w_approver. w_sapp_u = w_approver.
ELSE. CLEAR scndapp_usrid. ENDIF.
CLEAR w_approver.
SELECT SINGLE sobid FROM hrp1001 INTO w_approver WHERE otype = 'S' AND objid = unithd_usrid AND plvar = '01' AND rsign = 'A' AND relat = '008' AND istat = '1' AND endda >= w_endda AND sclas = 'P'.
SELECT SINGLE sobid FROM hrp1001 INTO w_approver WHERE otype = 'ZH' AND begda LE w_date AND endda GE w_date.
IF sy-subrc = 0.
SELECT SINGLE sobid FROM hrp1001 INTO w_sobid WHERE otype = 'S' AND objid = w_approver AND plvar = '01' AND rsign = 'A' AND relat = '008' AND istat = '1' AND endda >= w_endda AND sclas = 'P'.
READ TABLE wi_agent1 INTO wi_user INDEX 1. IF sy-subrc = 0. w_usrid = wi_user-user. ENDIF.
IF w_usrid IS NOT INITIAL. CALL FUNCTION 'RP_GET_PERNR_FROM_USERID' EXPORTING begda = w_date endda = w_date usrid = w_usrid usrty = '010' IMPORTING usr_pernr = wi_agent EXCEPTIONS retcd = 1 OTHERS = 2. IF sy-subrc <> 0. " NO action ENDIF. ENDIF. **If workflow is pending with some agent then compare that agent with all t he possible agents ** To know in which level workflow is pending
LOOP AT it_event_container WHERE element = 'YLOAN'.
is_loan = it_event_container-value. SHIFT is_loan LEFT DELETING LEADING space . SHIFT is_loan LEFT DELETING LEADING 'YHRLOAN' . SHIFT is_loan LEFT DELETING LEADING space . w_object_key = is_loan. swc_create_object w_loan 'YHRLOAN' w_object_key. w_hr_admin = w_object_key+33(12) . swc_get_property w_loan 'W_UNIT_HEAD' w_unit_head."#EC * swc_get_property w_loan 'W_UNIT_HR' w_unit_hr."#EC *
EXIT. ENDLOOP. ENDIF. * Checking for workflow level IF w_forwarded IS INITIAL. " If workitem has not been forwarded b ut gone to the agent by WF IF agent IS NOT INITIAL.
IF agent = w_hr_admin.
wf_level = 'HR ADMIN'.
ELSEIF agent = w_unit_head+2(12).
wf_level = 'UNIT HEAD'.
ELSEIF agent = w_unit_hr+2(12).
wf_level = 'UNIT HR'. ENDIF. ELSE. " Only in this case workflow will be pending with no agen t wf_level = 'UNIT HR'. ENDIF.
ELSE. " If workitem has been forwarded manually
wf_level = w_forwarded. " The person who has forwarded the WI
Power of Habit: The Ultimate Guide to Forming Positive Daily Habits, Learn How to Effectively Break Your Bad Habits For Good and Start Creating Good Ones
The Complete HVAC BIBLE for Beginners: The Most Practical & Updated Guide to Heating, Ventilation, and Air Conditioning Systems | Installation, Troubleshooting and Repair | Residential & Commercial