FUNCTION ZBPM Update Generic Form Data.

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

FUNCTION zbpm_update_generic_form_data.

*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IV_ID) TYPE CHAR20
*" VALUE(IV_DOCUMENT_STATUS) TYPE CHAR20 OPTIONAL
*" VALUE(IV_PROCESS_INSTANCE_ID) TYPE CHAR50 OPTIONAL
*" VALUE(IV_FORM_TYPE) TYPE CHAR10
*" VALUE(IV_MATRIX_APP) TYPE CHAR255 OPTIONAL
*" EXPORTING
*" VALUE(EV_STATUS) TYPE CHAR1
*"----------------------------------------------------------------------
DATA: lv_status TYPE char100,
ls_ovet_req TYPE zbpm_ovt_reqdat,
ls_allowance_req TYPE zbpm_allo_req,
ls_ggp_header TYPE zbpm_ggp_header,
ls_incident TYPE zbpm_incident,
lv_doc_status TYPE char20,
lv_lifnr TYPE lifnr,
lt_ven_err TYPE bapiret2_t,
lt_ven_log TYPE STANDARD TABLE OF zbpm_vend_err,
lv_index TYPE i,
lt_pr_vendor TYPE zbpm_tt_vendor_pr,
lv_banfn TYPE banfn,
lv_prupstatus TYPE flag,
lv_err_msg TYPE char255,
lv_ven_doc_status TYPE char20,
lt_ref TYPE STANDARD TABLE OF string,
lv_doc_id TYPE zdtmg_docid,
lv_lifn_temp TYPE lifnr,
lv_entity_type TYPE zbpm_plant-entity_type,
lv_return TYPE flag.

IF iv_form_type IS NOT INITIAL.


TRANSLATE iv_form_type TO UPPER CASE.
ENDIF.

IF iv_form_type EQ 'OVERTIME'.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'OT' " Document Type
* iv_doc_number = ls_allowance_req-docid
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
UPDATE zbpm_ovt_req SET document_status = iv_document_status
process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

ls_ovet_req-id = iv_id.
ls_ovet_req-transactionid = iv_id.
ls_ovet_req-document_status = iv_document_status.
ls_ovet_req-process_instance_id = iv_process_instance_id.
ls_ovet_req-matrix_approvers = iv_matrix_app.
MODIFY zbpm_ovt_reqdat FROM ls_ovet_req.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.
ELSEIF iv_form_type EQ 'ALLOWANCE'.

SELECT SINGLE *
FROM zbpm_allo_req INTO ls_allowance_req
WHERE docid EQ iv_id.
IF sy-subrc EQ 0.

SELECT SINGLE processflow INTO @DATA(lv_process_flow)


FROM zbpm_allo_pro_ty
WHERE type EQ @ls_allowance_req-type.

SELECT SINGLE b~im_manager INTO @DATA(lv_imm_id)


FROM zbpm_allo_req AS a
INNER JOIN zbpm_user_detail AS b
ON a~requested_by EQ b~user_name
WHERE docid EQ @iv_id.

IF lv_process_flow IS INITIAL OR lv_imm_id IS INITIAL.


ev_status = abap_true.
ENDIF.
ENDIF.
** Start of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'AL' " Document Type
* iv_doc_number = ls_allowance_req-docid
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_allo_req SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

* ls_ovet_req-id = iv_id.
* ls_ovet_req-transactionid = iv_id.
* ls_ovet_req-document_status = iv_document_status.
* ls_ovet_req-process_instance_id = iv_process_instance_id.
* ls_ovet_req-matrix_approvers = iv_matrix_app.
* modify zbpm_ovt_reqdat from ls_ovet_req.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'GGP'.

UPDATE zbpm_ggp_header SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'MRF'.

lv_doc_status = iv_document_status.
IF iv_document_status EQ 'Cancelled'.

SELECT SINGLE gi_done INTO @DATA(lv_gi)


FROM zbpm_idmmat_itm
WHERE id EQ @iv_id.

IF lv_gi EQ abap_true.
lv_doc_status = 'Partially Delivered'.
ENDIF.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Delivere
d' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'MR' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_idmmat SET document_status = lv_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'IR'.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Resolved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'IR' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_incident SET document_status = iv_document_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ELSE.
IF iv_document_status = 'Need More Info'.
"Send notification email to Department PICs
CLEAR: ls_incident.
ls_incident-id = iv_id.
ls_incident-process_instance_id = iv_process_instance_id.

CALL FUNCTION 'ZBPM_NOTIFY_INCIDENT'


EXPORTING
iv_docid = ls_incident-id
iv_processid = ls_incident-process_instance_id.
ENDIF.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'IDMMRP'. "IDM MRP

* If status is Approved, try to post ERP changes first


IF iv_document_status = 'Approved'.
CALL FUNCTION 'ZBPM_POST_IDMMRP_APPROVED'
EXPORTING
iv_id = iv_id
iv_werks = '3300'
IMPORTING
ev_status = ev_status.

IF ev_status = abap_true.
lv_doc_status = 'Pending Update'.
ev_status = 'F'. "Failed to update all materials
ENDIF.
ENDIF.

IF lv_doc_status IS INITIAL.
lv_doc_status = iv_document_status.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF iv_document_status EQ 'Rejected' OR iv_document_status EQ 'Approved
' OR iv_document_status EQ 'Cancelled'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'IM' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_idmmrp_hdr SET document_status = lv_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
ev_status = abap_true.
ENDIF.
ENDIF.

ELSEIF iv_form_type EQ 'VENPR' OR iv_form_type EQ 'VENER'.


lv_ven_doc_status = iv_document_status.

IF iv_document_status EQ 'Verified'.
SELECT SINGLE *
FROM zbpm_vendor_req INTO @DATA(ls_vendor)
WHERE docid EQ @iv_id.

IF sy-subrc EQ 0.

"Addition by Leo, FRDK903661 BPMCI_1891


"Add logic to stop process if company code is non-SAP
CLEAR lv_entity_type.
IF iv_form_type = 'VENPR' AND iv_document_status = 'Verified'.
SELECT SINGLE entity_type
INTO lv_entity_type
FROM zbpm_plant
WHERE werks = ls_vendor-company.
ENDIF.
"End of addition by Leo FRDK903661

IF ls_vendor-existing EQ abap_false.
lv_lifnr = ls_vendor-lifnr.
ELSE.
lv_lifnr = ls_vendor-ex_lifnr.
ENDIF.

IF lv_lifnr IS INITIAL.
ev_status = abap_true.

ELSE.

SELECT SINGLE *
FROM zbpm_vend_err
INTO @DATA(ls_error)
WHERE docid EQ @iv_id AND
message NE @space.
IF sy-subrc NE 0.

IF iv_form_type EQ 'VENPR'.

SELECT *
FROM zbpm_pur_req_itm
INTO TABLE @DATA(lt_pur_itm)
WHERE banfn EQ @ls_vendor-refid AND
lifnr EQ @iv_id.

lv_banfn = ls_vendor-refid.

LOOP AT lt_pur_itm ASSIGNING FIELD-SYMBOL(<fs_pur_itm>).


APPEND INITIAL LINE TO lt_pr_vendor ASSIGNING FIELD-
SYMBOL(<fs_pr_vendo>).
<fs_pr_vendo>-bnfpo = <fs_pur_itm>-bnfpo.
<fs_pr_vendo>-lifnr = lv_lifnr.
ENDLOOP.

IF lt_pr_vendor IS NOT INITIAL.

CALL FUNCTION 'ZBPM_UPDATE_PR_VENDOR' DESTINATION 'Z_PI_COM


MON_CONNECTION_PRPO'
EXPORTING
iv_banfn = lv_banfn
it_vendor = lt_pr_vendor
IMPORTING
ev_status = lv_prupstatus
es_err_msg = lv_err_msg.

"Addition by Leo, FRDK903663 BPMCI_1891


IF lv_entity_type = 'NONSAP'.
"NON SAP will not have PR in ERP, Mimic update in ERP is
success.
lv_prupstatus = 'S'.
ENDIF.
"End of addition by Leo FRDK903663

IF lv_prupstatus EQ 'S'.
lv_prupstatus = abap_true.
ELSE.
UPDATE zbpm_pur_req_itm SET bapierr = lv_err_msg
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ENDIF.

ELSE.
lv_prupstatus = abap_true.
ENDIF.

IF lv_prupstatus EQ abap_true.

IF ls_vendor-existing EQ abap_true.

UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr


name1 = ls_vendor-ex_name1
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ELSE.

UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr


bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ iv_id.
ENDIF.

COMMIT WORK AND WAIT.

CALL FUNCTION 'ZFM_BPM_RESUME_PR_PROCESS' IN BACKGROUND TAS


K DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
EXPORTING
iv_docid = ls_vendor-refid
iv_vender_id = lv_lifnr.

COMMIT WORK AND WAIT.

ELSE.
ev_status = abap_true.
ENDIF.

ELSEIF iv_form_type EQ 'VENER'.

* CALL FUNCTION 'ZFM_BPM_RESUME_ER_PROCESS' IN BACKGROUND TASK


DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
* EXPORTING
* iv_docid = ls_vendor-refid
* iv_vender_id = lv_lifnr.
*
* COMMIT WORK AND WAIT.
ENDIF.

IF ev_status IS INITIAL AND ls_vendor-multi_ref IS NOT INITIAL.


SPLIT ls_vendor-multi_ref AT ';' INTO TABLE lt_ref.
IF sy-subrc EQ 0.
LOOP AT lt_ref ASSIGNING FIELD-SYMBOL(<fs_ref>).
CLEAR: lv_banfn,lt_pr_vendor,lv_prupstatus,lv_err_msg,lv_
doc_id,lv_lifn_temp.

SPLIT <fs_ref> AT ':' INTO lv_banfn lv_lifn_temp.

IF lv_lifn_temp IS INITIAL.
SELECT SINGLE *
FROM zbpm_vendor_req INTO @DATA(ls_vendor_temp)
WHERE refid EQ @lv_banfn.

IF sy-subrc EQ 0.
lv_lifn_temp = ls_vendor_temp-docid.
ENDIF.
ENDIF.

SELECT *
FROM zbpm_pur_req_itm
INTO TABLE @DATA(lt_pur_itm_ref)
WHERE banfn EQ @lv_banfn AND
lifnr EQ @lv_lifn_temp.

* lv_banfn = <fs_ref>.
IF sy-subrc EQ 0.
LOOP AT lt_pur_itm_ref ASSIGNING FIELD-
SYMBOL(<fs_pur_itm_ref>).
APPEND INITIAL LINE TO lt_pr_vendor ASSIGNING FIELD-
SYMBOL(<fs_pr_vendo_ref>).
<fs_pr_vendo_ref>-bnfpo = <fs_pur_itm_ref>-bnfpo.
<fs_pr_vendo_ref>-lifnr = lv_lifnr.
ENDLOOP.
ENDIF.

IF lt_pr_vendor IS NOT INITIAL.

CALL FUNCTION 'ZBPM_UPDATE_PR_VENDOR' DESTINATION 'Z_PI


_COMMON_CONNECTION_PRPO'
EXPORTING
iv_banfn = lv_banfn
it_vendor = lt_pr_vendor
IMPORTING
ev_status = lv_prupstatus
es_err_msg = lv_err_msg.

"Addition by Leo, FRDK903663 BPMCI_1891


IF lv_entity_type = 'NONSAP'.
"NON SAP will not have PR in ERP, Mimic update in ERP
is success.
lv_prupstatus = 'S'.
ENDIF.
"End of addition by Leo FRDK903663

IF lv_prupstatus EQ 'S'.
lv_prupstatus = abap_true.
ELSE.
UPDATE zbpm_pur_req_itm SET bapierr = lv_err_msg
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ENDIF.

ELSE.
lv_prupstatus = abap_true.
ENDIF.

IF lv_prupstatus EQ abap_true.

IF ls_vendor_temp-existing EQ abap_true.
UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr
name1 = ls_vendor_temp-
ex_name1
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ELSE.
UPDATE zbpm_pur_req_itm SET lifnr = lv_lifnr
bapierr = space
WHERE banfn EQ lv_banfn AND
lifnr EQ lv_lifn_temp.
ENDIF.

COMMIT WORK AND WAIT.

lv_doc_id = lv_banfn.
CALL FUNCTION 'ZFM_BPM_RESUME_PR_PROCESS' IN BACKGROUND
TASK DESTINATION 'Z_PI_COMMON_CONNECTION_PRPO'
EXPORTING
iv_docid = lv_doc_id
iv_vender_id = lv_lifnr.

COMMIT WORK AND WAIT.

ELSE.
ev_status = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ELSE.
ev_status = 'E'.
lv_ven_doc_status = 'Pending Verification'.
ENDIF.
ENDIF.
ELSE.
ev_status = abap_true.
ENDIF.
ENDIF.

** Start of Addition: VN0147: SBI-


1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)
** Send Process Termination notification
* IF lv_ven_doc_status EQ 'Cancelled' OR iv_document_status EQ 'Rejected
' OR iv_document_status EQ 'Verified'.
* CALL METHOD zcl_zbpm_process_term_notif=>send_process_termination_no
tf
* EXPORTING
* iv_doc_type = 'VN' " Document Type
* iv_doc_number = iv_id
* IMPORTING
* ev_return = lv_return. " Boolean Variable (X=True, -
=False, Space=Unknown)
* ENDIF.
** End of Addition: VN0147: SBI-
1332: Process Termination Notification (Approved, Rejected, Canceled, etc..
)

UPDATE zbpm_vendor_req SET document_status = lv_ven_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
IF ev_status IS INITIAL.
ev_status = abap_true.
ENDIF.
ENDIF.
ENDIF.

"Addition by Leo, Supplier phase 2 ==> handle VENUI *******************


***************************************************************************
********
ELSEIF iv_form_type EQ 'VENUI' OR iv_form_type EQ 'VENCC'.

lv_ven_doc_status = iv_document_status.

IF iv_document_status EQ 'Verified'.
SELECT SINGLE *
FROM zbpm_vendor_req INTO ls_vendor
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.

IF ls_vendor-existing EQ abap_false.
lv_lifnr = ls_vendor-lifnr.
ELSE.
lv_lifnr = ls_vendor-ex_lifnr.
ENDIF.

IF lv_lifnr IS INITIAL.
ev_status = abap_true.
ELSE.

SELECT SINGLE *
FROM zbpm_vend_err
INTO ls_error
WHERE docid EQ iv_id AND
message NE space.

IF sy-subrc NE 0.
CLEAR ev_status.
ELSE.
ev_status = 'E'.
lv_ven_doc_status = 'Pending Verification'.
ENDIF.
ENDIF.
ELSE.
ev_status = abap_true.
ENDIF.
ENDIF.

UPDATE zbpm_vendor_req SET document_status = lv_ven_doc_status


process_instance_id = iv_process_instance_id
matrix_approvers = iv_matrix_app
updateddate = sy-datum
updatedby = sy-uname
WHERE docid EQ iv_id.

IF sy-subrc EQ 0.
COMMIT WORK AND WAIT.
IF sy-subrc NE 0.
IF ev_status IS INITIAL.
ev_status = abap_true.
ENDIF.
ENDIF.
ENDIF.
"End of addition by Leo <TRLEO>
ENDIF.

CALL FUNCTION 'ZBPM_GET_TASK_DETAILS_UPDATE'


EXPORTING
iv_process_id = iv_process_instance_id
IMPORTING
ev_status = lv_status.

ENDFUNCTION.

You might also like