Commented Code
Commented Code
LV_BEGIN_IDX TYPE I,
LV_END_IDX TYPE I,
LT_POD_BAD TYPE TABLE OF ZSSD_DELIVERY_POST_STRUC.
* Delivery Item
DATA: LT_VBPOK TYPE TABLE OF VBPOK,
LS_VBPOK TYPE VBPOK.
ENDLOOP.
SORT IT_POD_LIST BY DELIVERY LINE.
* if there is no text update or qty update then just update the z-table
LOOP AT IT_POD_LIST INTO LS_POD WHERE ITEM_NOTE IS INITIAL AND
POD_QTY IS INITIAL.
data: ls_qty TYPE char20.
ls_qty = ls_pod-pod_Qty.
clear: la_body.
CONCATENATE '2' 'Item' ls_pod-line ls_qty ls_pod-item_note INTO la_body SEPARATED
BY space.
append la_body to lt_body.
CLEAR: LT_MOB_DELIV_I.
LT_MOB_DELIV_I-VBELN_VL = LS_POD-DELIVERY.
LT_MOB_DELIV_I-POSNR_VL = LS_POD-LINE.
LT_MOB_DELIV_I-ITEM_TEXT_STATUS = 'C'.
LT_MOB_DELIV_I-QTY_CHANGE = 'C'.
LT_MOB_DELIV_I-DEL_QTY = LS_POD-SALE_QTY.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = LS_POD-SALE_UOM
LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = LT_MOB_DELIV_I-DEL_UOM
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LT_MOB_DELIV_I.
MODIFY ZSD_MOB_DELIV_I FROM TABLE LT_MOB_DELIV_I.
ENDLOOP.
LT_LINES-TDFORMAT = '*'.
LT_LINES-TDLINE = <LFS_POD_LINE>-ITEM_NOTE(132).
APPEND LT_LINES.
LT_LINES-TDLINE = <LFS_POD_LINE>-ITEM_NOTE+132.
APPEND LT_LINES.
CLEAR: LV_TEXTNAME.
CONCATENATE <LFS_POD_LINE>-DELIVERY <LFS_POD_LINE>-LINE
INTO LV_TEXTNAME.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
FID = '0002'
FLANGUAGE = SY-LANGU
FNAME = LV_TEXTNAME
FOBJECT = 'VBBP'
SAVE_DIRECT = 'X'
* FFORMAT = '*'
TABLES
FLINES = LT_LINES
EXCEPTIONS
NO_INIT = 1
NO_SAVE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
* update Z table with error flag
LT_MOB_DELIV_I-ITEM_TEXT_STATUS = 'B'.
* assume no qty change. this will be updated later if qty is changed
LT_MOB_DELIV_I-QTY_CHANGE = 'C'.
ET_RETURN-ID = 'ZSD_MOB'.
ET_RETURN-NUMBER = 000.
ET_RETURN-MESSAGE_V1 = <LFS_POD_LINE>-DELIVERY.
ET_RETURN-MESSAGE_V2 = <LFS_POD_LINE>-LINE.
ET_RETURN-TYPE = 'E'.
APPEND ET_RETURN.
ELSE.
* update Z table with success flag
LT_MOB_DELIV_I-ITEM_TEXT_STATUS = 'A'.
* assume no qty change. this will be updated later if qty is changed
LT_MOB_DELIV_I-QTY_CHANGE = 'C'.
ENDIF.
APPEND LT_MOB_DELIV_I.
ENDLOOP.
* exit if there are any errors. do not update qty until text are uploaded
successfully
IF ET_RETURN[] IS NOT INITIAL.
EXIT.
ENDIF.
* before updating the qty get all the entries for item from Z-table
* so qty flag can be updated correctly.
IF IT_POD_LIST[] IS NOT INITIAL.
SELECT *
INTO TABLE LT_MOB_DELIV_I
FROM ZSD_MOB_DELIV_I
FOR ALL ENTRIES IN IT_POD_LIST
WHERE VBELN_VL = IT_POD_LIST-DELIVERY
AND POSNR_VL = IT_POD_LIST-LINE.
ENDIF.
clear: la_body.
CONCATENATE '4' 'Item' ls_pod-line ls_qty ls_pod-item_note INTO la_body SEPARATED
BY space.
append la_body to lt_body.
* LS_VBPOK-VRKME = LS_POD-SALE_UOM.
* if Qty is Zero then delete the line item
IF LS_VBPOK-LFIMG = 0.
LS_VBPOK-LIPS_DEL = 'X'.
ENDIF.
* LS_VBPOK-LGMNG = LS_POD-STOCK_QTY.
* LS_VBPOK-MEINS = LS_POD-STOCK_UOM.
LV_END_IDX = SY-TABIX.
APPEND LS_VBPOK TO LT_VBPOK.
LV_NB_RECORD = LV_NB_RECORD + 1.
READ TABLE LT_MOB_DELIV_I WITH KEY VBELN_VL = LS_POD-DELIVERY
POSNR_VL = LS_POD-LINE.
IF SY-SUBRC = 0.
CLEAR: LV_NB_UPD_INDX.
LV_NB_UPD_INDX = SY-TABIX.
LT_MOB_DELIV_I-QTY_CHANGE = 'B'.
LT_MOB_DELIV_I-DEL_QTY = LS_POD-SALE_QTY.
LT_MOB_DELIV_I-DEL_UOM = LS_VBPOK-VRKME.
MODIFY LT_MOB_DELIV_I INDEX LV_NB_UPD_INDX.
ELSE.
LT_MOB_DELIV_I-VBELN_VL = LS_POD-DELIVERY.
LT_MOB_DELIV_I-POSNR_VL = LS_POD-LINE.
LT_MOB_DELIV_I-QTY_CHANGE = 'B'.
LT_MOB_DELIV_I-ITEM_TEXT_STATUS = 'C'.
LT_MOB_DELIV_I-DEL_QTY = LS_POD-SALE_QTY.
LT_MOB_DELIV_I-DEL_UOM = LS_VBPOK-VRKME.
APPEND LT_MOB_DELIV_I.
ENDIF.
* ENDIF.
ENDLOOP.
clear: la_body.
CONCATENATE '5' lv_post_pgi INTO la_body SEPARATED BY space.
append la_body to lt_body.
e_delivery = lv_delivery.
IF i_update = 'X'.
SELECT SINGLE *
INTO lt_mob_deliv_h
FROM zsd_mob_deliv_h
WHERE vbeln_vl = lv_delivery.
*
** check signature upload is successful first
* IF SY-SUBRC <> 0 OR
* LT_MOB_DELIV_H-SIGN_STATUS <> 'Y'.
* ET_RETURN-ID = 'ZSD_MOB'.
* ET_RETURN-TYPE = 'E'.
* ET_RETURN-NUMBER = 004.
* ET_RETURN-MESSAGE_V1 = LV_DELIVERY.
* APPEND ET_RETURN.
* EXIT.
* ELSE.
* set the data to update the table
lt_mob_deliv_h-vbeln_vl = lv_delivery.
lt_mob_deliv_h-longitude = c_longitude.
lt_mob_deliv_h-latitude = c_latitude.
lt_mob_deliv_h-signed_by = c_signed_by.
* Enhancements to app 2017 March
lt_mob_deliv_h-loaded_by = c_loaded_by.
lt_mob_deliv_h-cartons = c_cartons.
lt_mob_deliv_h-coils = c_coils.
lt_mob_deliv_h-pieces = c_pieces.
lt_mob_deliv_h-reels = c_reels.
lt_mob_deliv_h-pallets = c_pallets.
lt_mob_deliv_h-bundles = c_bundles.
lt_mob_deliv_h-ship_description = c_ship_description.
lt_mob_deliv_h-manifest_id = c_manifestid.
lv_date = c_signed_date.
lv_time = c_signed_time.
* Time coming in is in UTC timezone. Convert to System timezone
lv_tzone = 'UTC'.
CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE
lv_tzone.
SELECT SINGLE tzonesys
INTO lv_tzone
FROM ttzcu.
CONVERT TIME STAMP lv_timestamp TIME ZONE lv_tzone INTO DATE lv_date TIME
lv_time.
c_signed_date = lv_date.
c_signed_time = lv_time.
lt_mob_deliv_h-signed_date = c_signed_date.
lt_mob_deliv_h-signed_time = c_signed_time.
* ENDIF.
CLEAR: la_body.
CONCATENATE '3-PGI' 'at line 161' c_pgi_upd_status INTO la_body SEPARATED BY
space.
APPEND la_body TO lt_body.
ls_vbkok-vbeln_vl = lv_delivery.
ls_vbkok-wabuc = 'X'.
CLEAR: la_body.
CONCATENATE '4-PGI' 'at line 179' 'Before call func' INTO la_body SEPARATED BY
space.
APPEND la_body TO lt_body.
PERFORM message_to_bapiret2
TABLES et_return
USING lv_error_id
lv_error_type
lv_error_no
lv_error_v1
lv_error_v2
lv_error_v3
lv_error_v4.
* there was an error, update the table with fail status
lt_mob_deliv_h-pgi_status = 'N'.
APPEND lt_mob_deliv_h.
MODIFY zsd_mob_deliv_h FROM TABLE lt_mob_deliv_h.
ELSE.
* no error, update the table with success status
lt_mob_deliv_h-pgi_status = 'Y'.
APPEND lt_mob_deliv_h.
MODIFY zsd_mob_deliv_h FROM TABLE lt_mob_deliv_h.
ENDIF.
ENDIF.
clear: la_body.
CONCATENATE '5-PGI' 'at line 236' INTO la_body SEPARATED BY space.
append la_body to lt_body.
ENDFUNCTION.
check ZSD_MOB function modules and add more email code. Later check if there is
something that can be changed to not PGI.