You are on page 1of 26

ZEWB_GEN_UDPATE_MODE

FUNCTION zewb_gen_udpate_mode.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*" TABLES
*" GT_VBRP STRUCTURE VBRP
*" GT_VBRK STRUCTURE VBRK
*" GT_KOMV STRUCTURE KONV
*"----------------------------------------------------------------------

* *eWay Bill Generation Code.

DATA:gt_return TYPE TABLE OF bapireturn1.


DATA: "gt_vbrk TYPE TABLE OF vbrk,
gs_vbrk TYPE vbrk,
gt_header TYPE TABLE OF zewb_inv,
gt_header1 TYPE TABLE OF zewb_inv,
gs_header TYPE zewb_inv,
gs_req TYPE zewb_req,
gs_header1 TYPE zewb_inv,
lv_json_char TYPE tbx_string,
token_message(100),
lv_payload TYPE string,
json_out TYPE string,
lv_payload_x TYPE xstring,
lv_response TYPE tbx_string,
token TYPE tbx_string,
requestid(100),
gt_item TYPE TABLE OF zewb_invitem,
gs_item TYPE zewb_invitem,
gs_item1 TYPE zewb_invitem,
gt_item1 TYPE TABLE OF zewb_invitem.
DATA: it_inv TYPE zewb_str_inv OCCURS 0 WITH HEADER LINE.
DATA: lv_fgstin TYPE zzfgstin.
DATA: itemlist TYPE zewb_str_invitem OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF it_error,
error TYPE string,
error_description TYPE string,
END OF it_error.
DATA: BEGIN OF it_alv OCCURS 0,
docno TYPE vbrk-vbeln,
ewbno TYPE zzewbno,
ewbdt(30),
icon TYPE char4,
bukrs TYPE bukrs,
ttype(10),
dmessage(100), "Invoice Data Validity Message
dvalid(1), "Invoice Data Valid or not
status(10),
validfrom(30),
tmode(10),
validto(30),
tdocdate TYPE sy-datum,
field_style TYPE lvc_t_styl,
message(100).
DATA: END OF it_alv.

DATA: BEGIN OF result,


ewaybilldate TYPE string,
ewaybillno TYPE string,
validupto TYPE string,
END OF result.

DATA: BEGIN OF it_result,


success TYPE string,
result LIKE result,
message TYPE string,
END OF it_result.

READ TABLE gt_vbrk INTO gs_vbrk INDEX 1.


*LV_VBELN = GS_VBRK-VBELN.

DATA: gs_log TYPE zewb_log.


gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = gs_vbrk-vbeln.
gs_log-tcode = sy-tcode.

IF gt_vbrp[] IS NOT INITIAL.


IF gt_vbrp[] IS INITIAL AND gt_vbrk[] IS INITIAL AND gt_komv[] IS INITI
AL.
gs_log-message = 'Invoice details missing.'.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.
CALL FUNCTION 'ZEWB_GET_INV_DETAILS'
TABLES
gt_vbrp = gt_vbrp
gt_vbrk = gt_vbrk
gt_komv = gt_komv
gt_header = gt_header
gt_item = gt_item.
READ TABLE gt_header INTO gs_header WITH KEY dvalid = 'N'.
IF sy-subrc = 0.
gs_log-message = gs_header-dmessage.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.

IF gt_header[] IS INITIAL OR gt_item[] IS INITIAL.


gs_log-message = 'Invoice Header details not extracted.'.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.
ENDIF.

**********************************************************************
* Preparing Invoice Data.
LOOP AT gt_header INTO gs_header.

it_inv-supplytype = 'O'.
it_inv-subsupplytype = '1'.
it_inv-doctype = gs_header-zdoctyp. "'INV'.
it_inv-docno = gs_header-vbeln.

CONCATENATE gs_header-fkdat+6(2) gs_header-fkdat+4(2) gs_header-


fkdat+0(4) INTO it_inv-docdate SEPARATED BY '/'.
* it_inv-docdate = '15/12/2017'.
* it_inv-fromgstin = '05AAACG2115R1ZN'. " gs_header-f_gstin. "'05AAACG21
15R1ZN'. "gs_header-f_gstin.

IF sy-sysid = 'OCP'. "Production


it_inv-fromgstin = gs_header-f_gstin.
it_inv-togstin = gs_header-t_gstin.
ELSE.
it_inv-fromgstin = '05AAACG2115R1ZN'.
it_inv-togstin = '05AAACG2140A1ZL'.
ENDIF.

it_inv-fromtrdname = 'ORIENT CEMENT LTD'. "gs_header-f_name1.


it_inv-fromaddr1 = gs_header-f_adline1.
it_inv-fromaddr2 = gs_header-f_adline2.
it_inv-fromplace = gs_header-f_ort01.
it_inv-frompincode = gs_header-f_pstlz.
it_inv-actfromstatecode = gs_header-f_regio.
it_inv-fromstatecode = gs_header-f_regio.
it_inv-totrdname = gs_header-t_name.
it_inv-toaddr1 = gs_header-t_str_suppl1.
it_inv-toaddr2 = gs_header-t_str_suppl2.
it_inv-toplace = gs_header-t_ort01.
it_inv-topincode = gs_header-t_pstlz.
it_inv-acttostatecode = gs_header-t_regio.
it_inv-tostatecode = gs_header-t_regio.
it_inv-totalvalue = gs_header-totnetval." Net Value "gs_header-totval.
"Net + Tax

CONDENSE it_inv-totalvalue.
it_inv-cgstvalue = gs_header-cgstval.
CONDENSE it_inv-cgstvalue.
it_inv-sgstvalue = gs_header-sgstval.
CONDENSE it_inv-sgstvalue.
it_inv-igstvalue = gs_header-igstval.
CONDENSE it_inv-igstvalue.
it_inv-cessvalue = gs_header-cessval.
CONDENSE it_inv-cessvalue.
it_inv-totinvvalue = gs_header-totval. "Net + Tax "gs_header-
totnetval." Net Value "'435678'.
CONDENSE it_inv-totinvvalue.

it_inv-transporterid = ''.
it_inv-transportername = gs_header-ztransname.
it_inv-transdocno = gs_header-ztransdoc.
it_inv-transmode = gs_header-transmode. "'1'.
it_inv-transdistance = gs_header-ztransdist. "'25'. "
CONCATENATE gs_header-ztransdt+6(2) gs_header-ztransdt+4(2) gs_header-
ztransdt+0(4) INTO it_inv-transdocdate SEPARATED BY '/'.
* it_inv-transdocdate = gs_header-ztransdt.

it_inv-vehicleno = gs_header-signi. "'PVC1234'.


it_inv-vehicletype = 'R'.

DATA: lv_dec TYPE char10.


LOOP AT gt_item INTO gs_item WHERE vbeln = gs_header-vbeln.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = gs_item-matnr
IMPORTING
output = gs_item-matnr.
itemlist-productname = gs_item-arktx. "gs_item-matnr.
itemlist-productdesc = gs_item-arktx.
itemlist-hsncode = gs_item-steuc.
itemlist-quantity = gs_item-fkimg.
* SPLIT itemlist-quantity AT '.' INTO itemlist-quantity lv_dec.
CONDENSE itemlist-quantity NO-GAPS.
SELECT SINGLE ewb_uom
FROM zewb_uom
INTO itemlist-qtyunit
* WHERE sap_uom = 'MT' .
WHERE sap_uom = gs_item-vrkme.
* itemlist-qtyunit = 'MTS'. "gs_item-vrkme.
itemlist-cgstrate = gs_item-cgst.
CONDENSE itemlist-cgstrate.
itemlist-sgstrate = gs_item-sgst.
CONDENSE itemlist-sgstrate.
itemlist-igstrate = gs_item-igst.
CONDENSE itemlist-igstrate.
itemlist-cessrate = '0'.
CONDENSE itemlist-cessrate.
itemlist-cessadvol = '0'.
CONDENSE itemlist-cessadvol.
itemlist-taxableamount = gs_item-totval.
CONDENSE itemlist-taxableamount.
APPEND itemlist TO it_inv-itemlist.
CLEAR:gs_item.
ENDLOOP.

CALL FUNCTION 'ZEWB_GET_TOKEN'


IMPORTING
token = token
message = token_message.

IF token IS INITIAL.
IF token_message IS NOT INITIAL.
gs_log-message = token_message.
ELSE.
gs_log-message = 'Token not Valid'.
ENDIF.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.

CLEAR: lv_json_char.
CALL FUNCTION 'ZEWB_INV_TO_JSON'
EXPORTING
it_inv = it_inv
IMPORTING
json_out = lv_json_char.
IF lv_json_char IS INITIAL.
gs_log-message = 'JSON Conversion failed'.
gs_log-status = 'F'.
MODIFY zewb_log FROM gs_log.
EXIT.
ENDIF.
* gs_log-JSON = lv_json_char.
lv_fgstin = it_inv-fromgstin.
CALL FUNCTION 'ZEWB_GEN_FROM_JSON'
EXPORTING
json_in = lv_json_char
vbeln = gs_vbrk-vbeln
token = token
f_gstin = lv_fgstin
IMPORTING
response = lv_response
requestid = requestid.
it_alv-docno = gs_vbrk-vbeln.
***************************************************************************
*********************************
************************************************Json to Itab***************
*********************************
***************************************************************************
*********************************
json_out = lv_response.
DATA: res_len(10) TYPE n.
res_len = strlen( lv_response ).
gs_req-requestid = requestid.
gs_req-apitype = 'GEN'.
* gs_req-json = lv_json_char.
* gs_req-response = lv_response.
IF res_len GT 1000.
gs_req-response = lv_response+0(1000).
ELSE.
gs_req-response = lv_response.
ENDIF.
gs_req-cdate = sy-datum.
gs_req-ctime = sy-uzeit.
MODIFY zewb_req FROM gs_req.

IF json_out+0(1) = '{'.
* gs_log-RESPONSE = lv_response.
CLEAR: it_result.
cl_fdt_json=>json_to_data( EXPORTING iv_json = json_out
CHANGING ca_data = it_result ).
IF it_result-success IS NOT INITIAL. "No error for Authorizations.

IF it_result-success = 'true'.
it_alv-status = 'Success'.
ELSE.
it_alv-status = 'Failed'.
ENDIF.
it_alv-ewbno = it_result-result-ewaybillno.
it_alv-ewbdt = it_result-result-ewaybilldate.
it_alv-validfrom = it_result-result-ewaybilldate.
it_alv-validto = it_result-result-validupto.
it_alv-message = it_result-message.

IF it_alv-status = 'Success'. "Update the Logs if success.

REFRESH:gt_header1[].
gt_header1 = gt_header[].
* DELETE gt_header1 WHERE vbeln NE it_alv-docno. "Addition.
CLEAR:gs_header1.
READ TABLE gt_header1 INTO gs_header1 WITH KEY vbeln = it_alv-
docno.
IF sy-subrc EQ 0.
gs_header1-ewbno = it_alv-ewbno.
*it_alv-ewbdt = '12/06/2018 12:57:00 PM'. "Actual Format.
CONCATENATE it_alv-ewbdt+6(4) it_alv-ewbdt+3(2) it_alv-
ewbdt+0(2) INTO gs_header1-ewbdt.

CONCATENATE it_alv-ewbdt+11(2) it_alv-ewbdt+14(2) it_alv-


ewbdt+17(2) INTO gs_header1-ewbtm.

gs_header1-validfrom = it_alv-validfrom.
gs_header1-validto = it_alv-validto.
IF it_alv-status = 'Success'.
gs_header1-status = 'S'.
ELSE.
gs_header1-status = 'F'.
ENDIF.
gs_header1-message = it_alv-message.
* gs_header1-bukrs = it_alv-bukrs.
gs_header1-ewbby = sy-uname.
* SELECT SINGLE ewbno FROM zewb_inv INTO lv_ewbno WHERE vbeln = it
_alv-docno.
* IF sy-subrc = 0.
* gs_header1-ewbtype = 'REGEN'.
* ELSE.
gs_header1-ewbtype = 'NEW'.
* ENDIF.
gs_header1-requestid = requestid.
MODIFY zewb_inv FROM gs_header1.
* UPDATE zewb_inv FROM gs_header1.
ENDIF.
*Item
REFRESH:gt_item1[].
gt_item1 = gt_item[].
DELETE gt_item1 WHERE vbeln NE it_alv-docno.
CLEAR:gs_item1.
READ TABLE gt_item1 INTO gs_item1 WITH KEY vbeln = it_alv-docno.
IF sy-subrc EQ 0.
gs_item1-ewbno = it_alv-ewbno.
MODIFY zewb_invitem FROM gs_item1.
ENDIF.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'S'.
gs_log-ewbno = it_result-result-ewaybillno.
gs_log-ewbdt = gs_header1-ewbdt.
gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.

***************************************************************************
*****************************************************************
ELSE.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.

***************************************************************************
*****************************************************************

ENDIF.
ELSE.
CLEAR: it_error.
cl_fdt_json=>json_to_data( EXPORTING iv_json = json_out
CHANGING ca_data = it_error ).
* error_description
CONCATENATE it_error-error ':' it_error-error_description INTO it_
alv-message.
* it_alv-message = it_result-message.
***************************************************************************
*****************************************************************
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = it_alv-message.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.
* gs_log-MESSAGE = it_result-MESSAGE.

***************************************************************************
*****************************************************************
*End of Coding as per program
***************************************************************************
*****************************************************************
**********************************************************************
ENDIF.
ELSE.
* Update zewb_log.
gs_log-cdate = sy-datum.
gs_log-ctime = sy-uzeit.
gs_log-vbeln = it_alv-docno.
gs_log-tcode = sy-tcode.
gs_log-message = 'Response not in JSON format.'.
gs_log-status = 'F'.
* gs_log-ewbno = it_result-result-ewaybillno.
* gs_log-ewbdt = gs_header1-ewbdt.
* gs_log-ewbtm = gs_header1-ewbtm.
IF res_len GT 1000.
gs_log-response = lv_response+0(1000).
ELSE.
gs_log-response = lv_response.
ENDIF.
* gs_log-json = lv_json_char.
MODIFY zewb_log FROM gs_log.
CLEAR: gs_log.

ENDIF.
CLEAR: it_inv.
REFRESH: it_inv-itemlist.
REFRESH: itemlist.
CLEAR: itemlist.

ENDLOOP.

* ENDIF.
* ENDIF.

ENDFUNCTION.
ZEWB_GEN_FROM_JSON

FUNCTION zewb_gen_from_json.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(JSON_IN) TYPE TBX_STRING
*" REFERENCE(VBELN) TYPE VBRK-VBELN
*" REFERENCE(TOKEN) TYPE TBX_STRING
*" REFERENCE(F_GSTIN) TYPE ZZFGSTIN
*" EXPORTING
*" REFERENCE(RESPONSE) TYPE TBX_STRING
*" REFERENCE(REQUESTID) TYPE CHAR100
*"----------------------------------------------------------------------

DATA: lv_http_code TYPE i,


lv_http_reason TYPE string.
DATA: token2 TYPE string.
DATA: lv_url TYPE string . "VALUE 'https://gsp.adaequare.com/test/enriche
d/ewb/ewayapi?action=GENEWAYBILL'.
DATA: lv_payload TYPE string.
DATA: reqid TYPE string.
DATA: lv_payload_x TYPE xstring.
DATA: lo_http_client TYPE REF TO if_http_client.
DATA:
uname TYPE string,
password TYPE string,
gstin TYPE string,
lv_uname TYPE zzuname,
lv_password TYPE zzpwd.

*Generate E Way Bill.


CLEAR: lv_payload_x, lv_payload.

lv_payload = json_in.

CLEAR: lv_url.
SELECT SINGLE url FROM zewb_url INTO lv_url WHERE apitype = 'GEN' AND sys
id = sy-sysid.
IF sy-subrc <> 0.
* MESSAGE 'URL not maintained in ZEWB_URL.' TYPE 'E'.
EXIT.
ENDIF.
CLEAR: lo_http_client.
cl_http_client=>create_by_url(
EXPORTING
url = lv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
RETURN.
ENDIF.

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'


EXPORTING
text = lv_payload
IMPORTING
buffer = lv_payload_x.

IF sy-sysid = 'OCP'.

CLEAR: lv_uname, lv_password, uname, gstin, password.


CALL FUNCTION 'ZEWB_USER_PASSWORD'
EXPORTING
f_gstin = f_gstin
IMPORTING
uname = lv_uname
password = lv_password.

gstin = f_gstin.
uname = lv_uname.
password = lv_password.

CALL METHOD lo_http_client->request->set_header_field


EXPORTING
name = 'username'
value = uname.

CALL METHOD lo_http_client->request->set_header_field


EXPORTING
name = 'password'
value = password.

CALL METHOD lo_http_client->request->set_header_field


EXPORTING
name = 'gstin'
value = gstin.
ELSE.
CALL METHOD lo_http_client->request->set_header_field
EXPORTING
name = 'username'
value = '05AAACG2115R1ZN'.

CALL METHOD lo_http_client->request->set_header_field


EXPORTING
name = 'password'
value = 'abc123@@'.

CALL METHOD lo_http_client->request->set_header_field


EXPORTING
name = 'gstin'
value = '05AAACG2115R1ZN'.
ENDIF.

CONCATENATE 'EWB_GEN_' vbeln '_' sy-datum sy-uzeit INTO reqid.


CALL METHOD lo_http_client->request->set_header_field
EXPORTING
name = 'requestid'
value = reqid.
token2 = token.
requestid = reqid.
CALL METHOD lo_http_client->request->set_header_field
EXPORTING
name = 'Authorization'
value = token2.

lo_http_client->request->set_method( 'POST' ).
lo_http_client->request->set_content_type( 'application/json' ).
lo_http_client->request->set_data( lv_payload_x ).

* Sending the request


lo_http_client->send(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2 ).

* Receiving the response


lo_http_client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).

IF sy-subrc <> 0.
ENDIF.
SKIP.
response = lo_http_client->response->get_cdata( ).

*get the status of the response


CALL METHOD lo_http_client->response->get_status
IMPORTING
code = lv_http_code
reason = lv_http_reason.

ENDFUNCTION.
ZEWB_GET_INV_DETAILS

FUNCTION zewb_get_inv_details.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" GT_VBRP STRUCTURE VBRP
*" GT_VBRK STRUCTURE VBRK
*" GT_KOMV STRUCTURE KONV
*" GT_HEADER STRUCTURE ZEWB_INV
*" GT_ITEM STRUCTURE ZEWB_INVITEM
*"----------------------------------------------------------------------

TYPES:BEGIN OF ty_vbpa,
vbeln TYPE vbeln_va,
kunnr TYPE kunnr,
adrnr TYPE adrnr,
xcpdk TYPE xcpdk,
END OF ty_vbpa.

TYPES: BEGIN OF ty_vbfa,


vbelv TYPE vbfa-vbelv,
posnv TYPE vbfa-posnv,
vbeln TYPE vbfa-vbeln,
posnn TYPE vbfa-posnn,
vbtyp_n TYPE vbfa-vbtyp_n,
vbtyp_v TYPE vbfa-vbtyp_v,
END OF ty_vbfa.

DATA: BEGIN OF gs_return,


slno(2),
type(1),
message(100),
END OF gs_return.

DATA: gt_return LIKE gs_return OCCURS 0 WITH HEADER LINE,


it_ewb LIKE zewb_inv OCCURS 0 WITH HEADER LINE,
it_eitem LIKE zewb_invitem OCCURS 0 WITH HEADER LINE,
gt_vttp TYPE TABLE OF vttp,
gt_vbfa TYPE TABLE OF ty_vbfa,
gt_vttk TYPE TABLE OF vttk.

DATA: gs_item TYPE zewb_invitem,


lv_kstbm TYPE kstbm,
lv_knumh TYPE knumh,
lv_var TYPE char4,
lv_temp TYPE char15,
count(2) TYPE n,
gs_vbpa TYPE ty_vbpa,
gs_adrc TYPE adrc,
gs_t001w TYPE t001w,
gs_vbrk TYPE vbrk,
gs_header TYPE zewb_inv,
gs_vbfa TYPE ty_vbfa,
gs_komv TYPE komv,
gs_vttk TYPE vttk,
gs_vbrp TYPE vbrp,
lv_vsart TYPE vsart,
lv_depot(1) TYPE c,
lv_factory(1) TYPE c.

DATA: e_lrno TYPE zlrno.


CONSTANTS: c_jocg TYPE char4 VALUE 'JOCG',
c_josg TYPE char4 VALUE 'JOSG',
c_joig TYPE char4 VALUE 'JOIG',
c_zfrt TYPE char4 VALUE 'ZFRT',
c_x TYPE c VALUE 'X',
c_j TYPE char1 VALUE 'J',
c_8 TYPE char1 VALUE '8'.

CLEAR: gs_item,
lv_kstbm,
lv_knumh,
lv_var,
lv_temp,
count(2),
gs_vbpa,
gs_adrc,
gs_t001w,
gs_vbrk,
gs_header,
gs_vbfa,
gs_komv,
gs_vttk,
gs_vbrp,
lv_vsart,
lv_depot,
lv_factory.

REFRESH: gt_vttk,
gt_vttp,
gt_vbfa,
gt_return,
it_ewb,
it_eitem,
gt_header[],
gt_item[].

*---Read Item
READ TABLE gt_vbrp INTO gs_vbrp INDEX 1.

IF gs_vbrp-werks = '1000' OR
gs_vbrp-werks = '2000' OR
gs_vbrp-werks = '3000'.
lv_factory = 'X'.
ELSE.
lv_depot = 'X'.
ENDIF.

SELECT vbelv
posnv
vbeln
posnn
vbtyp_n
vbtyp_v
FROM vbfa
INTO TABLE gt_vbfa
FOR ALL ENTRIES IN gt_vbrp
WHERE vbelv = gt_vbrp-vgbel
AND vbtyp_n = c_8
AND vbtyp_v = c_j.
IF sy-subrc EQ 0.
IF gt_vbfa[] IS NOT INITIAL.
SELECT * FROM vttk
INTO TABLE gt_vttk
FOR ALL ENTRIES IN gt_vbfa
WHERE tknum = gt_vbfa-vbeln.
ENDIF.
ENDIF.

CLEAR:gs_vbrp.
REFRESH:gt_header[].
LOOP AT gt_vbrk INTO gs_vbrk.

gs_header-vbeln = gs_vbrk-vbeln.
gs_header-bukrs = gs_vbrk-bukrs.
gs_header-fkdat = gs_vbrk-fkdat.

REFRESH: gt_return.
CLEAR: count.
LOOP AT gt_vbrp INTO gs_vbrp. " WHERE vbeln = gs_vbrk-vbeln.
gs_header-werks = gs_vbrp-werks.
SELECT SINGLE vsart FROM likp
INTO lv_vsart
WHERE vbeln = gs_vbrp-vgbel.
IF sy-subrc EQ 0.
IF sy-tcode = 'VF01'.
IF lv_vsart = '03'. "Rail not to be included in VF01.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Rail mode not allowed.'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


CONTINUE.
ENDIF.
ENDIF.
IF lv_vsart EQ '03' OR lv_vsart EQ '01'. " 01 Truck. 03. Rail.
IF lv_vsart = '03'. "Rail.
gs_header-transmode = '2'.
ENDIF.

IF lv_vsart = '01'. "Truck.


gs_header-transmode = '1'.
ENDIF.

CLEAR:gs_vbpa.
SELECT SINGLE
vbeln
kunnr
adrnr
xcpdk
FROM vbpa INTO gs_vbpa
WHERE vbeln = gs_vbrp-vgbel
AND parvw = 'WE'. "Ship to Party.
IF sy-subrc EQ 0.
IF gs_vbpa-adrnr IS NOT INITIAL.
SELECT SINGLE * FROM adrc
INTO gs_adrc
WHERE addrnumber = gs_vbpa-adrnr.
IF sy-subrc EQ 0.
gs_header-t_name = gs_adrc-name1.
IF gs_vbrk-kunag NE gs_vbpa-kunnr. "Sold to and Ship to di
fferent
gs_header-t_str_suppl1 = gs_adrc-name1.
gs_header-t_str_suppl2 = gs_adrc-str_suppl1.
ELSE.
gs_header-t_str_suppl1 = gs_adrc-str_suppl1.
gs_header-t_str_suppl2 = gs_adrc-str_suppl2.
ENDIF.

gs_header-t_pstlz = gs_adrc-post_code1.
* Destination from Invoice Item.
SELECT SINGLE bezei
FROM tmfgt
INTO gs_header-t_ort01
WHERE mfrgr = gs_vbrp-mfrgr.

SELECT SINGLE gov_reg_code FROM zsd_state_gov


INTO gs_header-t_regio
WHERE sap_reg_code = gs_adrc-region.
IF gs_header-t_pstlz IS INITIAL.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'To Pincode not maintained'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDIF.
ELSE.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Shipping Address not Maintained'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.

SELECT SINGLE
stcd3
name1
FROM kna1
INTO (gs_header-t_gstin,gs_header-t_name)
WHERE kunnr = gs_vbrk-kunag.
IF sy-subrc <> 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'To GSTIN not maintained'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDIF.

SELECT SINGLE
gstin
FROM j_1bbranch
INTO gs_header-f_gstin
WHERE branch = gs_vbrk-bupla.
IF sy-subrc EQ 0.
SELECT SINGLE *
FROM t001w
INTO gs_t001w
WHERE werks = gs_vbrp-werks.
IF gs_t001w-pstlz IS INITIAL.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Postal Code not Maintained for Source Pl
ant'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.

ELSE.
gs_header-f_name1 = gs_t001w-name1.
gs_header-f_adline1 = gs_t001w-stras.
gs_header-f_ort01 = gs_t001w-ort01.
gs_header-f_pstlz = gs_t001w-pstlz.
SELECT SINGLE gov_reg_code FROM zsd_state_gov
INTO gs_header-f_regio
WHERE sap_reg_code = gs_t001w-regio.
* gs_header-fregio = gs_t001w-regio.
ENDIF.
ELSE.
CLEAR: gs_return.
gs_return-type = 'E'.
CONCATENATE 'From GSTIN missed for Bus. Place:' gs_vbrk-bupla I
NTO gs_return-message.
* gs_return-MESSAGE = 'PL'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.
*** Ship to Address.

* Item details
gs_item-vbeln = gs_vbrk-vbeln.
gs_item-posnr = gs_vbrp-posnr.
gs_item-matnr = gs_vbrp-matnr.
gs_item-arktx = gs_vbrp-arktx.
gs_item-fkimg = gs_vbrp-fkimg.
gs_item-vrkme = gs_vbrp-vrkme.
gs_item-totval = gs_vbrp-netwr.
LOOP AT gt_komv INTO gs_komv.
CASE gs_komv-kschl.
WHEN c_jocg.
gs_item-cgst = gs_komv-kbetr / 10.
gs_header-cgstval = gs_komv-kwert.
WHEN c_josg.
gs_item-sgst = gs_komv-kbetr / 10.
gs_header-sgstval = gs_komv-kwert.
WHEN c_joig.
gs_item-igst = gs_komv-kbetr / 10.
gs_header-igstval = gs_komv-kwert.
ENDCASE.
CLEAR:gs_komv.
ENDLOOP.

SELECT SINGLE steuc FROM marc INTO gs_item-steuc WHERE matnr = gs


_vbrp-matnr AND werks = gs_vbrp-werks.
IF sy-subrc <> 0.
* WRITE:/ 'HSN Code not maintained for Material:', gs_vbrp-
matnr.
CLEAR: gs_return.
gs_return-type = 'E'.
CONCATENATE 'HSN Code missed in Material:' gs_vbrp-matnr INTO g
s_return-message.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.

ENDIF.
gs_header-totnetval = gs_vbrk-netwr.
gs_header-totval = gs_vbrk-netwr + gs_vbrk-mwsbk.
APPEND gs_item TO gt_item.
CLEAR: gs_item, gs_vttk.
READ TABLE gt_vbfa INTO gs_vbfa WITH KEY vbelv = gs_vbrp-vgbel.
IF sy-subrc EQ 0.
READ TABLE gt_vttk INTO gs_vttk WITH KEY tknum = gs_vbfa-vbeln.
IF sy-subrc EQ 0.
SELECT SINGLE name1
FROM lfa1
INTO gs_header-ztransname
WHERE lifnr = gs_vttk-tdlnr.
IF sy-subrc EQ 0.
gs_header-signi = gs_vttk-signi.
ENDIF.
IF lv_factory = 'X'.
SELECT SINGLE lrno FROM zsdtinout INTO gs_header-ztransdoc
WHERE sno = gs_vttk-tndr_trkid.
ELSE.
gs_header-ztransdoc = gs_vttk-text4.
CONDENSE gs_header-ztransdoc NO-GAPS.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Transport Mode is not feasible'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.
ELSE.
gs_return-type = 'E'.
gs_return-message = 'Transport Mode Not maintained.'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDLOOP.

gs_header-zsupplytyp = 'O'.
gs_header-zsubsupptyp = '01'.
gs_header-ztransdt = gs_vbrk-fkdat.

*Distance.
DATA: distance(10).
READ TABLE gt_vbrp INTO gs_vbrp INDEX 1.
CALL FUNCTION 'ZEWB_GET_TRANS_DIST'
EXPORTING
ls_vbrk = gs_vbrk
ls_vbrp = gs_vbrp
IMPORTING
e_kstbm = distance.

CONDENSE distance.
gs_header-ztransdist = distance.

* *Check for Doc Type Tax Invoice or Delivery Challan.


IF gs_vbrk-fkart = 'ZF8' OR gs_vbrk-fkart = 'ZGS1' OR gs_vbrk-fkart = '
ZGS2'. "STO
IF gs_header-f_regio = gs_header-t_regio.
gs_header-zdoctyp = 'CHL'.
ELSE.
gs_header-zdoctyp = 'INV'.
ENDIF.
ELSE.
gs_header-zdoctyp = 'INV'.
ENDIF.

IF gs_header-ztransdoc IS INITIAL OR gs_header-ztransdt IS INITIAL.


CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Transport Doc. Details missing'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.

IF gs_header-transmode = '1'.
IF gs_header-signi IS INITIAL.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Vehicle No. Missing.'.
count = count + 1.
gs_return-slno = count.
APPEND gs_return TO gt_return.
ENDIF.
ENDIF.

IF gs_header-f_regio = gs_header-t_regio.
gs_header-ttype = 'INTRA'.
IF gs_vbrk-vtweg <> '30'. "SEZ Case.
IF gs_header-igstval NE 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Invalid Tax Rate for Intra State Transaction
'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.
ENDIF.
ELSE.
gs_header-ttype = 'INTER'.
IF gs_vbrk-vtweg <> '30'. "SEZ Case.
IF gs_header-igstval = 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Invalid Tax Rate for Inter State Transaction
'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.
ENDIF.
ENDIF.

IF gs_header-ztransdist = 0.
CLEAR: gs_return.
gs_return-type = 'E'.
gs_return-message = 'Transport Distance missing'.
count = count + 1.
gs_return-slno = count.

APPEND gs_return TO gt_return.


ENDIF.

DELETE gt_return WHERE type NE 'E'.


SORT gt_return ASCENDING BY slno.

READ TABLE gt_return INTO gs_return WITH KEY type = 'E'.


IF sy-subrc = 0.
* MESSAGE ID gs_return-id TYPE gs_return-type NUMBER gs_return-
number
* INTO gs_header-dmessage.
gs_header-dmessage = gs_return-message.
gs_header-dvalid = 'N'. "Data Not Valid.
ELSE.
gs_header-dvalid = 'Y'.
gs_header-dmessage = 'Data Valid'.
ENDIF.
APPEND gs_header TO gt_header.
CLEAR:gs_header.
ENDLOOP.

ENDFUNCTION.
ZEWB_GET_TOKEN

FUNCTION zewb_get_token.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXPORTING
*" REFERENCE(TOKEN) TYPE TBX_STRING
*" REFERENCE(MESSAGE) TYPE CHAR100
*"----------------------------------------------------------------------

DATA: wa_token TYPE zewb_token.


DATA: lv_mdate TYPE sy-datum,
lv_mtime TYPE sy-uzeit.
DATA: c_stamp(14), "Current Time Stamp.
t_stamp(14). "Token Time Stamp.
CLEAR: token.
CLEAR: wa_token.

SELECT MAX( cdate ) FROM zewb_token INTO lv_mdate.


SELECT MAX( ctime ) FROM zewb_token INTO lv_mtime WHERE cdate = lv_mdate
.
SELECT SINGLE * FROM zewb_token INTO wa_token WHERE cdate = lv_mdate AND
ctime = lv_mtime.
IF sy-subrc = 0.
CONCATENATE sy-datum sy-uzeit INTO c_stamp.
CONCATENATE wa_token-vdate wa_token-vtime INTO t_stamp.
IF c_stamp GT t_stamp.
message = 'Token Expired.'.
EXIT.
ELSE.
token = wa_token-token.
ENDIF.
ELSE.
message = 'Token not Generated.'.
EXIT.
ENDIF.

CONCATENATE 'Bearer' token INTO token SEPARATED BY space.


************************************************************************
***Hardcoded Testing.
** DATA: text1(100), text2(100), text3(100), text4(100).
** IF sy-sysid = 'OCD'.
** text1 = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZSI6WyJnc3AiXSw
iZXhwIjoxNTMwMDA3MjM2LC'.
** text2 = 'JhdXRob3JpdGllcyI6WyJST0xFX0FTUF9TQl9BUFAiLCJST0xFX1NCX0VfQV
BJX0VXQiJdLCJqdGkiOiIxNjgxNDM0Zi1lY2FiLT'.
** text3 = 'Q5OTYtYjA2Ni1hZmNlODQ1MjRmMjMiLCJjbGllbnRfaWQiOiJERkUwNTlBOE
VFODc0QTA2QjJCNjYyMzREMkM2NUYyQSJ9.SXwtN'.
** text4 = '3rYi9rCR-ZD9M3X356O7dGc6fEsCUrqzcRnqdw'.
** CONCATENATE text1 text2 text3 text4 INTO token.
** CONCATENATE 'Bearer' token INTO token SEPARATED BY space.
** ENDIF
ENDFUNCTION.
ZEWB_INV_TO_JSON

FUNCTION ZEWB_INV_TO_JSON.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IT_INV) TYPE ZEWB_STR_INV
*" EXPORTING
*" REFERENCE(JSON_OUT) TYPE TBX_STRING
*"----------------------------------------------------------------------

*convert data to JSON


DATA: lo_writer TYPE REF TO cl_sxml_string_writer,
lo_conv TYPE REF TO cl_abap_conv_in_ce,
lv_json_string TYPE string,
lv_json_in TYPE xstring.
DATA: len(5).
lo_writer = cl_sxml_string_writer=>create( TYPE = if_sxml=>co_xt_json ).

CALL TRANSFORMATION ID SOURCE routes = it_inv


* routes = it_inv
* initial_components = 'suppress'
RESULT XML lo_writer.

lv_json_in = lo_writer->get_output( ).

*get JSON text in string format for testing


CALL METHOD cl_abap_conv_in_ce=>create
EXPORTING
INPUT = lv_json_in
ENCODING = 'UTF-8'
replacement = '?'
ignore_cerr = abap_true
RECEIVING
conv = lo_conv.

CALL METHOD lo_conv->read


IMPORTING
DATA = lv_json_string.
JSON_OUT = lv_json_string.

len = STRLEN( lv_json_string ).

JSON_OUT = JSON_OUT+10(len).

len = STRLEN( JSON_OUT ).


len = len - 1.
JSON_OUT = JSON_OUT+0(len).

ENDFUNCTION.
ZSD_SMS2

FUNCTION ZSD_SMS2.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(MOBILE) TYPE AD_TLNMBR1
*" TABLES
*" GIT_SMS STRUCTURE SOLISTI1
*"----------------------------------------------------------------------

DATA: ld_error TYPE sy-subrc,


ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp,
ld_attdescription TYPE so_obj_nam,
ld_attfilename TYPE so_obj_des,
ld_sender_address LIKE soextreci1-receiver VALUE 'noreply@or
ientcement.com',
ld_sender_address_type LIKE soextreci1-adr_typ VALUE 'SMTP',
ld_receiver LIKE sy-subrc.
" mobile TYPE zmobns.
*
DATA: doc_data LIKE sodocchgi1,
git_pack_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
git_content LIKE solisti1 OCCURS 0 WITH HEADER LINE,
"git_sms LIKE solisti1 OCCURS 0 WITH HEADER LINE,
gfl_sms TYPE solisti1 , " OCCURS 0 WITH HEADER LINE,
git_recive LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
it_lfa1 TYPE lfa1 OCCURS 0 WITH HEADER LINE.

DATA: lv_text TYPE char255.

"CLEAR: gfl_sms.

"lv_text = input.
"CONCATENATE 'Text:' lv_text into gfl_sms SEPARATED BY space.
"APPEND gfl_sms TO git_sms.CLEAR: gfl_sms.
"CLEAR: gfl_sms.

doc_data-doc_size = 1.
doc_data-obj_langu = sy-langu.
doc_data-obj_name = 'SMS'.
******************
CLEAR git_pack_list.
REFRESH git_pack_list.
git_pack_list-transf_bin = space.
git_pack_list-head_start = 1.
git_pack_list-head_num = 1.
git_pack_list-body_start = 1.
DESCRIBE TABLE git_sms LINES git_pack_list-body_num.
git_pack_list-doc_type = 'RAW'.
APPEND git_pack_list.

******************
"mobile = '9177692333'.
CONCATENATE '0000 SMS 0091' mobile INTO git_recive-receiver.
git_recive-rec_type = 'K'.
git_recive-com_type = 'PAG'.
git_recive-notif_del = ''.
git_recive-notif_ndel = ''.
git_recive-express = 'X'.
APPEND git_recive.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_data
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = git_pack_list
contents_txt = git_sms
receivers = git_recive
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
*ENDIF.

ENDFUNCTION.

You might also like