You are on page 1of 38

METHOD APPROVE_REQUEST .

* declarations for context navigation


DATA lo_zhr_approve_travel TYPE REF TO if_wd_context_node.
DATA lo_importing TYPE REF TO if_wd_context_node.

DATA : lv_workitem_id TYPE swr_struct-workitemid,


lv_zopmode TYPE zopmode,
lv_n_advance TYPE ptrv_sum_advanc,
LV_COMMENTS TYPE CHAR255.

* get all involved child nodes


lo_zhr_approve_travel = wd_context->get_child_node( wd_this-
>wdctx_zhr_approve_travel ).

lo_importing = lo_zhr_approve_travel->get_child_node( wd_this-


>wdctx_importing ).

* get input from context


lo_importing->get_attribute(
EXPORTING
name = `WORKITEM_ID`
IMPORTING
value = lv_workitem_id ).

lo_importing->get_attribute(
EXPORTING
name = `ZOPMODE`
IMPORTING
value = lv_zopmode ).

lo_importing->get_attribute(
EXPORTING
name = `N_ADVANCE`
IMPORTING
value = lv_n_advance ).

lo_importing->get_attribute(
EXPORTING
name = `COMMENTS`
IMPORTING
value = lv_COMMENTS ).

* the invocation - errors are always fatal !!!


CALL FUNCTION 'ZHRESSF_TRAVEL_RQUEST_APPROVE'
EXPORTING
workitem_id = lv_workitem_id
zopmode = lv_zopmode
n_advance = lv_n_advance
COMMENTS = LV_COMMENTS.

ENDMETHOD.
FUNCTION zhressf_travel_rquest_approve.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WORKITEM_ID) TYPE SWR_STRUCT-WORKITEMID
*" REFERENCE(ZOPMODE) TYPE ZOPMODE
*" REFERENCE(N_ADVANCE) TYPE PTRV_SUM_ADVANC OPTIONAL
*" REFERENCE(COMMENTS) TYPE CHAR255 OPTIONAL
*" EXPORTING
*" VALUE(PERNR) TYPE PERNR_D
*" VALUE(ENAME) TYPE EMNAM
*" VALUE(TRIPNO) TYPE REINR
*" VALUE(BEGDA) TYPE BEGDA
*" VALUE(ENDDA) TYPE ENDDA
*" VALUE(REASON) TYPE RKUNDE
*" VALUE(LOCATION) TYPE RZIELORT
*" VALUE(COUNTRY) LIKE T706O-TEXT25
*" VALUE(ADVANCE) TYPE PTRV_SUM_ADVANC
*" VALUE(CURRENCY) TYPE WAERS
*" VALUE(ADD_DEST) TYPE ZHRESS_ADD_DEST
*" VALUE(FLAG) TYPE CHAR1
*" VALUE(TRIP_HISTORY) TYPE ZTEMP_TRIP_HISTORY
*" VALUE(HIDE_FLAG) TYPE WDUI_VISIBILITY
*" VALUE(REQUEST_EXPENSE) TYPE CHAR1
*" VALUE(EXPENSE_DETAIL) TYPE ZTRAV_EXP_TAB
*"----------------------------------------------------------------------

TABLES : pcl1.

DATA: BEGIN OF te-key. "Schlüssel TE-Cluster


INCLUDE STRUCTURE ptp00.
DATA: END OF te-key.

DATA: BEGIN OF ote-version. "TE-Version auf PCL1


INCLUDE STRUCTURE ptk01.
DATA: END OF ote-version.

DATA: BEGIN OF te-version, "TE-Version Datenbeschreibung


saprl LIKE ote-version-saprl,
* numbr like ote-version-numbr value '01', "version till 2.2Z
* numbr like ote-version-numbr value '02', "version till 3.1Z
numbr LIKE ote-version-numbr VALUE '03', "version for 4.0
END OF te-version.
* advances
DATA: BEGIN OF vsch OCCURS 5. "Tabelle Vorschüsse
INCLUDE STRUCTURE ptk08.
DATA: END OF vsch.

* history of trip
DATA: BEGIN OF aend OCCURS 10. "Tabelle Status/Änderer
INCLUDE STRUCTURE ptk11.
DATA: END OF aend.
* status of trip
DATA: BEGIN OF statu . "Status der Reise
INCLUDE STRUCTURE ptk12.
DATA: END OF statu.

DATA : rp-imp-te-subrc LIKE sy-subrc.


*data for cluster updation

DATA :lv_perio TYPE ptrv_perio-perio,


lv_pdvrs TYPE ptrv_perio-pdvrs.

DATA : lwa_vsch TYPE ptk08,


lwa_statu TYPE ptk12,
lwa_aend TYPE ptk11.

DATA : gw_shdr TYPE ptrv_shdr.


DEFINE rp-exp-c1-te.
set extended check off. "MAWK070411
pcl1-aedtm = sy-datum.
pcl1-uname = sy-uname.
pcl1-pgmid = sy-repid.
unpack te-version-numbr to pcl1-versn.
export te-version
vsch
aend
statu
to database pcl1(te)
id te-key.
set extended check on. "MAWK070411
END-OF-DEFINITION.

DEFINE rp-imp-c1-te.
set extended check off. "MAWK070411
import te-version to ote-version
vsch
from database pcl1(te)
* Begin of note 980127
* id te-key.
id te-key
accepting padding
accepting truncation.
* End of note 980127
rp-imp-te-subrc = sy-subrc.
set extended check on. "MAWK070411
END-OF-DEFINITION.

DATA : lwa_ptrv_perio TYPE ptrv_perio.

DATA : lv_pernr TYPE pernr_d,


lv_ename TYPE emnam,
lv_tripno TYPE reinr,
lv_begda TYPE begda,
lv_endda TYPE endda,
lv_reason TYPE rkunde,
lv_location TYPE rzielort,
lv_country TYPE t706o-text25,
lv_advance TYPE ptrv_sum_advanc,
lv_currency TYPE waers,
lv_flag TYPE char1,
lv_hide_flag TYPE wdui_visibility,
lwa_trip_history TYPE zsemp_trip_history,
lv_request_expense TYPE char1.

DATA : wa_expense_detail TYPE ztrav_exp.


DATA : lt_expense_detail TYPE ztrav_exp_tab.

DATA : swt_cont TYPE TABLE OF swr_cont,


wa TYPE swr_cont,
lwa_container TYPE swr_cont,
ltab_container TYPE TABLE OF swr_cont.

DATA : lv_temp TYPE string,


lv_temp1 TYPE string.

CASE zopmode.
WHEN 'READ'.
CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
EXPORTING
workitem_id = workitem_id
language = sy-langu
user = sy-uname
TABLES
simple_container = swt_cont.

IF sy-subrc = 0.
READ TABLE swt_cont INTO wa WITH KEY element = 'PERNR'.
IF sy-subrc = 0.
lv_pernr = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'TRIPNO'.


IF sy-subrc = 0.
lv_tripno = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'BEGDA'.


IF sy-subrc = 0.
lv_begda = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'ENDDA'.


IF sy-subrc = 0.
lv_endda = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'REASON'.


IF sy-subrc = 0.
lv_reason = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'LOCATION'.


IF sy-subrc = 0.
lv_location = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'COUNTRY'.


IF sy-subrc = 0.
lv_country = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'ADVANCE'.


IF sy-subrc = 0.
lv_advance = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'CURRENCY'.


IF sy-subrc = 0.
lv_currency = wa-value.
ENDIF.

LOOP AT swt_cont INTO wa WHERE element = 'ADD_DEST'.

APPEND wa-value TO add_dest.

ENDLOOP.

READ TABLE swt_cont INTO wa WITH KEY element = 'REQUEST_EXPENSE'.

IF sy-subrc = 0.
lv_request_expense = wa-value.
ENDIF.

IF lv_request_expense <> 'E'.

LOOP AT swt_cont INTO wa WHERE element = 'TRIP_HISTORY'.

CLEAR lwa_trip_history.
*VORSC
*WAERS

MOVE wa-value(10) TO lwa_trip_history-reinr.


MOVE wa-value+10 TO lv_temp.
SPLIT lv_temp AT '.' INTO : lv_temp lv_temp1.
MOVE lv_temp1+2 TO lwa_trip_history-waers.
CONCATENATE lv_temp '.' lv_temp1(2) INTO lv_temp.
MOVE lv_temp TO lwa_trip_history-vorsc.

APPEND lwa_trip_history TO trip_history.

ENDLOOP.

READ TABLE swt_cont INTO wa WITH KEY element = 'FLAG'.


IF sy-subrc = 0.
lv_flag = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'HIDE_FLAG'.


IF sy-subrc = 0.
lv_hide_flag = wa-value.
ENDIF.

ENDIF.

IF lv_request_expense = 'E'.

SELECT * FROM ptrv_srec INTO CORRESPONDING FIELDS OF TABLE lt_exp


ense_detail
WHERE pernr = lv_pernr
AND reinr = lv_tripno.

LOOP AT lt_expense_detail INTO wa_expense_detail.

SELECT SINGLE sptxt FROM t706b5 INTO wa_expense_detail-sptxt


WHERE spras = 'EN'
AND spkzl = wa_expense_detail-exp_type.

APPEND wa_expense_detail TO expense_detail.


ENDLOOP.
ENDIF.

SELECT SINGLE ename


FROM pa0001
INTO lv_ename
WHERE pernr = lv_pernr
AND begda <= sy-datum
AND endda >= sy-datum.

pernr = lv_pernr.
ename = lv_ename.
tripno = lv_tripno.
begda = lv_begda.
endda = lv_endda.
reason = lv_reason.
location = lv_location.
country = lv_country.
advance = lv_advance.
currency = lv_currency.
flag = lv_flag.
hide_flag = lv_hide_flag.
request_expense = lv_request_expense.

ENDIF.

WHEN 'APPR'.

CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'


EXPORTING
workitem_id = workitem_id
language = sy-langu
user = sy-uname
TABLES
simple_container = swt_cont.

IF sy-subrc = 0.

READ TABLE swt_cont INTO wa WITH KEY element = 'PERNR'.


IF sy-subrc = 0.
lv_pernr = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'TRIPNO'.


IF sy-subrc = 0.
lv_tripno = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'ADVANCE'.


IF sy-subrc = 0.
lv_advance = wa-value.
ENDIF.

READ TABLE swt_cont INTO wa WITH KEY element = 'REQUSET_EXPENSE'.

IF sy-subrc = 0.
lv_request_expense = wa-value.
ENDIF.

ENDIF.

IF lv_request_expense <> 'E'.


IF lv_advance <> n_advance.

SELECT SINGLE perio pdvrs


FROM ptrv_perio
INTO (lv_perio, lv_pdvrs)
WHERE pernr = lv_pernr
AND reinr = lv_tripno.

*Update Cluster
*key of cluster
te-key-pernr = lv_pernr.
te-key-reinr = lv_tripno.
te-key-perio = lv_perio.
te-key-pdvrs = lv_pdvrs.

*import cluster

rp-imp-c1-te.

SELECT SINGLE * FROM ptrv_perio


INTO lwa_ptrv_perio
WHERE pernr = lv_pernr
AND reinr = lv_tripno.
* modify advance
READ TABLE vsch INDEX '1' INTO lwa_vsch.

lwa_vsch-vorsc = lv_advance * '-1'.


lwa_vsch-vorhw = lwa_vsch-vorsc.
lwa_vsch-datvs = sy-datum.
APPEND lwa_vsch TO vsch.

lwa_vsch-vorsc = n_advance.
lwa_vsch-vorhw = lwa_vsch-vorsc.
lwa_vsch-datvs = sy-datum.
APPEND lwa_vsch TO vsch.

* vsch-VORSC = '500'.
* vsch-VORHW = vsch-vorsc.
* l_sum = l_sum + vsch-VORSC.
* MODIFY vsch TRANSPORTING vorsc vorhw.
* ENDLOOP.
CLEAR lwa_statu.
*update trip status in cluster
* lwa_statu-druck = lwa_ptrv_perio-druck.
* lwa_statu-antrg = lwa_ptrv_perio-antrg.
* lwa_statu-abrec = lwa_ptrv_perio-abrec.
* lwa_statu-ueblg = lwa_ptrv_perio-ueblg.
* lwa_statu-uebrf = lwa_ptrv_perio-uebrf.
* lwa_statu-uebdt = lwa_ptrv_perio-uebdt.

statu-druck = lwa_ptrv_perio-druck.
statu-antrg = lwa_ptrv_perio-antrg.
statu-abrec = lwa_ptrv_perio-abrec.
statu-ueblg = lwa_ptrv_perio-ueblg.
statu-uebrf = lwa_ptrv_perio-uebrf.
statu-uebdt = lwa_ptrv_perio-uebdt.
*APPEND lwa_statu TO statu.
CLEAR lwa_aend.
* update trip chnages

lwa_aend-datum = sy-datum.
lwa_aend-uzeit = sy-uzeit.
lwa_aend-uname = sy-uname.
lwa_aend-repid = sy-repid.
lwa_aend-druck = lwa_ptrv_perio-druck.
lwa_aend-antrg = lwa_ptrv_perio-antrg.
lwa_aend-abrec = lwa_ptrv_perio-abrec.
lwa_aend-ueblg = lwa_ptrv_perio-ueblg.
lwa_aend-uebrf = lwa_ptrv_perio-uebrf.
lwa_aend-uebdt = lwa_ptrv_perio-uebdt.
lwa_aend-runid = '0000000000'.
lwa_aend-statu = ''.

APPEND lwa_aend TO aend.


*export cluster
rp-exp-c1-te.

*update table
SELECT SINGLE * FROM ptrv_shdr INTO gw_shdr WHERE pernr = te-key-
pernr
AND reinr = te-key-reinr
AND perio = te-key-perio
AND seqno = '01'.

IF sy-subrc EQ 0.
gw_shdr-sum_advanc = n_advance.
gw_shdr-sum_payout = n_advance.
MODIFY ptrv_shdr FROM gw_shdr. "TRANSPORTING SUM_ADVANC.
ENDIF.
ENDIF.

ENDIF.

lwa_container-element = 'STATUS'.
lwa_container-value = '1'.

APPEND lwa_container TO ltab_container.

lwa_container-element = 'COMMENT'.
lwa_container-value = comments.

APPEND lwa_container TO ltab_container.

CALL FUNCTION 'SAP_WAPI_WORKITEM_COMPLETE'


EXPORTING
workitem_id = workitem_id
actual_agent = sy-uname
language = sy-langu
set_obsolet = ' '
do_commit = 'X'
do_callback_in_background = 'X'
* IFS_XML_CONTAINER =
* IMPORTING
* RETURN_CODE =
* NEW_STATUS =
TABLES
simple_container = ltab_container
* MESSAGE_LINES =
* MESSAGE_STRUCT =
.

WHEN 'REJ'.

lwa_container-element = 'STATUS'.
lwa_container-value = '2'.

APPEND lwa_container TO ltab_container.

lwa_container-element = 'COMMENT'.
lwa_container-value = comments.

APPEND lwa_container TO ltab_container.

CALL FUNCTION 'SAP_WAPI_WORKITEM_COMPLETE'


EXPORTING
workitem_id = workitem_id
actual_agent = sy-uname
language = sy-langu
set_obsolet = ' '
do_commit = 'X'
do_callback_in_background = 'X'
* IFS_XML_CONTAINER =
* IMPORTING
* RETURN_CODE =
* NEW_STATUS =
TABLES
simple_container = ltab_container
* MESSAGE_LINES =
* MESSAGE_STRUCT =
.

WHEN 'SBFC'.

lwa_container-element = 'STATUS'.
lwa_container-value = '3'.
APPEND lwa_container TO ltab_container.

lwa_container-element = 'COMMENT'.
lwa_container-value = comments.

APPEND lwa_container TO ltab_container.

CALL FUNCTION 'SAP_WAPI_WORKITEM_COMPLETE'


EXPORTING
workitem_id = workitem_id
actual_agent = sy-uname
language = sy-langu
set_obsolet = ' '
do_commit = 'X'
do_callback_in_background = 'X'
* IFS_XML_CONTAINER =
* IMPORTING
* RETURN_CODE =
* NEW_STATUS =
TABLES
simple_container = ltab_container
* MESSAGE_LINES =
* MESSAGE_STRUCT =
.
ENDCASE.

ENDFUNCTION.
METHOD display_request .
* declarations for context navigation
DATA lo_zhr_disp_request TYPE REF TO if_wd_context_node.
DATA lo_exporting TYPE REF TO if_wd_context_node.
DATA lo_importing_1 TYPE REF TO if_wd_context_node.

DATA lo_advance TYPE REF TO if_wd_context_node.


DATA lo_table_node TYPE REF TO if_wd_context_node.

DATA lo_table TYPE REF TO if_wd_context_node.


DATA lo_trip_history TYPE REF TO if_wd_context_node.
DATA lo_expense_detail TYPE REF TO if_wd_context_node.

DATA : lv_pernr TYPE pernr_d,


lv_ename TYPE emnam,
lv_tripno TYPE reinr,
lv_begda TYPE begda,
lv_endda TYPE endda,
lv_reason TYPE rkunde,
lv_location TYPE rzielort,
lv_country TYPE t706o-text25,
lv_advance TYPE ptrv_sum_advanc,
lv_currency TYPE waers,
lt_add_dest TYPE wd_this->elements_table,
lt_trip_history TYPE wd_this->elements_trip_history,
lv_flag TYPE char1,
lv_hide_flag TYPE wdui_visibility,
lv_request_expense TYPE char1,
lwa_add_dest like line of lt_add_dest,
lt_add_dest_f type zhress_add_dest,
wa_add_dest_f like line of lt_add_dest_f.

DATA : lwa_trip_history LIKE LINE OF lt_trip_history,


lt_trip_history_f TYPE ztemp_trip_history,
wa_trip_history_f LIKE LINE OF lt_trip_history_f.

DATA : lt_expense_detail TYPE wd_this->elements_expense_detail,


lwa_expense_detail LIKE LINE OF lt_expense_detail,
lt_expense_detail_f TYPE ztrav_exp_tab,
wa_expense_detail_f LIKE LINE OF lt_expense_detail_f.

DATA : lv_workitem_id TYPE swr_struct-workitemid,


lv_zopmode TYPE zopmode.

* get all involved child nodes


lo_zhr_disp_request = wd_context->get_child_node( wd_this-
>wdctx_zhr_disp_request ).
lo_exporting = lo_zhr_disp_request->get_child_node( wd_this-
>wdctx_exporting ).
lo_importing_1 = lo_zhr_disp_request->get_child_node( wd_this-
>wdctx_importing_1 ).
lo_advance = wd_context->get_child_node( wd_this->wdctx_advance_node ).
lo_table = lo_zhr_disp_request->get_child_node( wd_this->wdctx_table ).
lo_trip_history = lo_zhr_disp_request->get_child_node( wd_this-
>wdctx_trip_history ).
lo_table_node = wd_context->get_child_node( wd_this->wdctx_table_node ).
lo_expense_detail = lo_zhr_disp_request->get_child_node( wd_this-
>wdctx_expense_detail ).

* get input from context


lo_importing_1->get_attribute(
EXPORTING
name = `WORKITEM_ID`
IMPORTING
value = lv_workitem_id ).

CALL FUNCTION 'ZHRESSF_TRAVEL_RQUEST_APPROVE'


EXPORTING
workitem_id = lv_workitem_id
zopmode = 'READ'
IMPORTING
pernr = lv_pernr
ename = lv_ename
tripno = lv_tripno
begda = lv_begda
endda = lv_endda
reason = lv_reason
location = lv_location
country = lv_country
advance = lv_advance
currency = lv_currency
add_dest = lt_add_dest_f
flag = lv_flag
trip_history = lt_trip_history_f
hide_flag = lv_hide_flag
request_expense = lv_request_expense
expense_detail = lt_expense_detail_f.

* store output to context


lo_exporting->set_attribute(
EXPORTING
name = `PERNR`
value = lv_pernr ).
lo_exporting->set_attribute(
EXPORTING
name = `ENAME`
value = lv_ename ).
lo_exporting->set_attribute(
EXPORTING
name = `TRIPNO`
value = lv_tripno ).
lo_exporting->set_attribute(
EXPORTING
name = `ENDDA`
value = lv_endda ).
lo_exporting->set_attribute(
EXPORTING
name = `BEGDA`
value = lv_begda ).
lo_exporting->set_attribute(
EXPORTING
name = `REASON`
value = lv_reason ).
lo_exporting->set_attribute(
EXPORTING
name = `LOCATION`
value = lv_location ).
lo_exporting->set_attribute(
EXPORTING
name = `COUNTRY`
value = lv_country ).
lo_exporting->set_attribute(
EXPORTING
name = `ADVANCE`
value = lv_advance ).
lo_exporting->set_attribute(
EXPORTING
name = `CURRENCY`
value = lv_currency ).

LOOP AT lt_add_dest_f INTO wa_add_dest_f.


MOVE wa_add_dest_f TO lwa_add_dest-add_dest.
APPEND lwa_add_dest TO lt_add_dest.
ENDLOOP.

CALL METHOD lo_table->bind_table


EXPORTING
new_items = lt_add_dest
set_initial_elements = abap_true
.

IF lv_request_expense <> 'E'.


LOOP AT lt_trip_history_f INTO wa_trip_history_f.

MOVE wa_trip_history_f-reinr TO lwa_trip_history-reinr.


MOVE wa_trip_history_f-vorsc TO lwa_trip_history-vorsc.
MOVE wa_trip_history_f-waers TO lwa_trip_history-waers.

APPEND lwa_trip_history TO lt_trip_history.


ENDLOOP.

CALL METHOD lo_trip_history->bind_table


EXPORTING
new_items = lt_trip_history
set_initial_elements = abap_true
.

lo_table_node->set_attribute(
name = 'HIDE_TRIP_HISTORY'
value = '02' ).
lo_table_node->set_attribute(
name = 'HIDE_EXPENSE_DETAIL'
value = '01' ).

ENDIF.

IF lv_request_expense = 'E'.
LOOP AT lt_expense_detail_f INTO wa_expense_detail_f.

MOVE wa_expense_detail_f-seqno TO lwa_expense_detail-seqno.


MOVE wa_expense_detail_f-exp_type TO lwa_expense_detail-exp_type.
MOVE wa_expense_detail_f-sptxt TO lwa_expense_detail-sptxt.
MOVE wa_expense_detail_f-rec_amount TO lwa_expense_detail-rec_amount.
MOVE wa_expense_detail_f-rec_curr TO lwa_expense_detail-rec_curr.
MOVE wa_expense_detail_f-rec_rate TO lwa_expense_detail-rec_rate.
MOVE wa_expense_detail_f-loc_amount TO lwa_expense_detail-loc_amount.
MOVE wa_expense_detail_f-loc_curr TO lwa_expense_detail-loc_curr.

APPEND lwa_expense_detail TO lt_expense_detail.


ENDLOOP.

CALL METHOD lo_expense_detail->bind_table


EXPORTING
new_items = lt_expense_detail
set_initial_elements = abap_true
.

lo_table_node->set_attribute(
name = 'HIDE_TRIP_HISTORY'
value = '01' ).

lo_table_node->set_attribute(
name = 'HIDE_EXPENSE_DETAIL'
value = '02' ).

ENDIF.

IF lv_country <> 'Ind' AND lv_country <> 'India'.


lo_advance->set_attribute(
name = 'ENABLE_ADVANCE'
value = abap_false ).
ELSEIF lv_flag = 1.
lo_advance->set_attribute(
name = 'ENABLE_ADVANCE'
value = abap_true ).
ENDIF.
ENDMETHOD.

You might also like