*&---------------------------------------------------------------------*
*& Include ZSGTSF_RFX_BLOTTER_COMP_F01
*&---------------------------------------------------------------------*
*& Program Name : ZSGTSF_RFX_BLOTTER_COMP *&
*& Author Name : Sufyan Khan *&
*& Functional Name : Sunil Alva *&
*& Description : Blotter *&
*& Request No : TRSK900073 *&
*& Transaction Code : ZSGTSFR015 *&
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Date of Modification : 10.12.2020 *
* Change Request No : TRDK904778 *
* Reason Of Modification : MC/ BU Details required in columns *
*----------------------------------------------------------------------*
* Date of Modification : 30.12.2021 *
* Change Request No : TRDK910602 *
* Reason Of Modification : Auth obj maintenance (ZSGTSFR006) *
*----------------------------------------------------------------------*
* Date of Modification : 02.03.2022 *
* Change Request No : TRDK913534 *
* Reason Of Modification : Deal Dump Report - Buy/Sell Mapping *
*----------------------------------------------------------------------*
* Modified By : Vaishnavi Jambhale *
* Date of Modification : 22.08.2023 *
* Change Request No : TRDK917678 *
* Reason Of Modification : Additional Columns / Email Functionality *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Modified By : Aditi Macwan *
* Date of Modification : 23.10.2023 *
* Change Request No : TRDK917677 *
* Reason Of Modification : Adding Txn status *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
PERFORM check_authorization." Added by saurav on 11.08.2021 Scope 4000015805 to call subroutine for authorization object.
IF rb_b IS NOT INITIAL. "Blotter Date
DATA(lv_where) = 'ZBLOTTER_DATE IN @S_DATE'.
ELSEIF rb_t IS NOT INITIAL. "Trade Date
lv_where = 'ZT_DATE IN @S_DATE'.
IF r_fx = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants and added inline data declaration {
INNER JOIN zsgtsftr_mas_con AS b "added by sufyan(13.10.2020) to get mas cont details
ON b~zmc_ref_no = a~ztsf_mc_ref_no )
WHERE a~bukrs IN @s_bukrs
* AND a~blotter_date IN @s_date
AND a~dblfz IN @s_date "" Added by Ryan Nayak 07.08.2023 to fetch based on Trade Date
AND b~zmc_ref_no <> ''." } " Added by saurav 29.11.2021 Scope 4000015805 to avoid fetching where mc ref is initial.
" Added by kisan on 26.11.2021 Scope 4000015805 passing local internal to global internal table {
IF lt_fx IS NOT INITIAL .
gt_data1 = CORRESPONDING #( lt_fx MAPPING
blotter_date = blotter_date
assign_desc = assign_desc
int_ref_desc = int_ref_desc
ext_stat_desc = ext_stat_desc
ztsf_deal_desc = ztsf_deal_desc
ztsf_deal_id = ztsf_deal_id
ztsf_mc_ref_no = ztsf_mc_ref_no
ztsf_deal_type = ztsf_deal_type
zolam_deal_no = zolam_deal_no
ztsf_exe_co = ztsf_exe_co
zship_start = zship_start
zcom_desc_long = zcom_desc_long
zpay_terms_text = zpay_terms_text
zold_mc_ref_no = zold_mc_ref_no
zcreated_by = zcreated_by
zcreated_date = zcreated_date
zcreated_time = zcreated_time
zchanged_by = zchanged_by
zchanged_date = zchanged_date
zchanged_time = zchanged_time ).
" Added by saurav 26.11.2021 Scope 4000015805 to populate currency 1 as USD{
LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<fs_data3>) WHERE curr2 = c_usd.
IF gs_data1-curr2 = c_usd.
<fs_data3>-curr1 = gs_data1-curr2.
<fs_data3>-amt1 = gs_data1-amt2.
<fs_data3>-bs_1 = gs_data1-bs_2." Added by saurav on 02.03.2022 Scope 4000018703 to change mapping of BS1.
<fs_data3>-curr2 = gs_data1-curr1.
<fs_data3>-amt2 = gs_data1-amt1.
<fs_data3>-bs_2 = gs_data1-bs_1." Added by saurav on 02.03.2022 Scope 4000018703 to change mapping of BS2.
ELSEIF r_op = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants and added inline data declaration {
INNER JOIN zsgtsftr_mas_con AS b "added by sufyan(13.10.2020) to get mas cont details
ON b~zmc_ref_no = a~ztsf_mc_ref_no )
WHERE a~bukrs IN @s_bukrs
* AND a~blotter_date IN @s_date
AND a~dblfz IN @s_date "" Added by Ryan Nayak 07.08.2023 to fetch based on Trade Date
AND zmc_ref_no <> ''." }" Added by saurav 29.11.2021 Scope 4000015805 to avoid fetching where mc ref is initial.
" Added by kisan on 26.11.2021 Scope 4000015805 passing local internal to global internal table {
gt_data2 = CORRESPONDING #( lt_op MAPPING
blotter_date = blotter_date
int_ref_desc = int_ref_desc
assign_desc = assign_desc
ztsf_deal_id = ztsf_deal_id
ztsf_deal_desc = ztsf_deal_desc
ztsf_mc_ref_no = ztsf_mc_ref_no
ztsf_deal_type = ztsf_deal_type
ztsf_exe_co = ztsf_exe_co
zolam_deal_no = zolam_deal_no
expiry_location = expiry_location
expiry_time = expiry_time
loc_code_text = loc_code_text
ext_stat_desc = ext_stat_desc
zship_start = zship_start
zcom_desc_long = zcom_desc_long
zpay_terms_text = zpay_terms_text
zold_mc_ref_no = zold_mc_ref_no
zcreated_by = zcreated_by
zcreated_date = zcreated_date
zcreated_time = zcreated_time
zchanged_by = zchanged_by
zchanged_date = zchanged_date
zchanged_time = zchanged_time ).
DELETE gt_data1 WHERE ztrcode <> p_trd.
DELETE gt_data2 WHERE ztrcode <> p_trd.
"added by saurav 25.11.2021 Scope 4000015805 declaring variable and assignig value to lr_sfhaart {
DATA : lv_curr1 TYPE tb_wgschf1,
lv_curr2 TYPE tb_wgschf1.
DATA: ls_top LIKE LINE OF gt_data1.
DATA: lr_sfhaart TYPE RANGE OF zdt_sfhaart.
lr_sfhaart = VALUE #( sign = cs_i option = cs_o ( low = c_604 ) ( low = c_609 ) )." }
"added by saurav 25.11.2021 Scope 4000015805 fetchingDeal ID - Data Table deatils .
FROM zsgtsftr_dealid AS a
INNER JOIN zsgtsftr_rule_bt AS b
ON b~zmod_id = a~ztsf_model
INTO TABLE @DATA(lt_model)
INTO TABLE @DATA(lt_finv)
"""""" Added by Saiteja - 13.06.2023 """"""""""
WHERE prognam = @sy-repid.
"Added by saiteja (07.06.2023) deal status range
DATA: lr_cdealstat TYPE RANGE OF zdt_tsf_deal_stat.
DATA: lr_pdealstat TYPE RANGE OF zdt_tsf_deal_stat.
DATA: lr_ndealstat TYPE RANGE OF zdt_tsf_deal_stat.
DATA: lr_name TYPE c LENGTH 30.
lr_cdealstat = VALUE #( sign = cs_i option = cs_o ( low = ls_param-param4 ) ( low = ls_param-param5 ) ( low = ls_param-param6 ) ( low = ls_param-param7 ) ).
lr_pdealstat = VALUE #( sign = cs_i option = cs_o ( low = ls_param-param8 ) ).
lr_ndealstat = VALUE #( sign = cs_i option = cs_o ( low = ls_param-param9 ) ( low = ls_param-param10 ) ( low = ls_param-param11 ) ).
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
SORT gt_data1 BY ztsf_deal_id.
" Process Data "added by saurav 25.11.2021 Scope 4000015805
DATA(lt_data1) = gt_data1.
DELETE lt_data1 WHERE sfhaart IN lr_sfhaart.
DATA(lt_data) = lt_data1.
SORT lt_data BY ztsf_deal_id.
SORT lt_data1 BY ztsf_deal_id.
DELETE lt_data WHERE ztsf_deal_id IS INITIAL.
DELETE lt_data1 WHERE ztsf_deal_type IS INITIAL.
DELETE ADJACENT DUPLICATES FROM lt_data COMPARING ztsf_deal_id.
"added by saurav 25.11.2021 Scope 4000015805 perfroming loop to calculate amount {
LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
ASSIGN lt_model[ zdeal_id = <fs_data>-ztsf_deal_id ] TO FIELD-SYMBOL(<fs_model>).
IF <fs_model>-zsub_type = c_fx1." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
DATA(lv_index) = line_index( lt_data1[ ztsf_deal_id = <fs_data>-ztsf_deal_id ] ).
LOOP AT lt_data1 ASSIGNING FIELD-SYMBOL(<fs_data1>) FROM lv_index."WHERE ztsf_deal_id = <fs_data>-ztsf_deal_id .
IF <fs_data1>-ztsf_deal_id = <fs_data>-ztsf_deal_id.
IF <fs_data1>-curr1 <> c_usd.
gs_top-amt1 = <fs_data1>-amt1 + gs_top-amt1.
CATCH cx_sy_arithmetic_overflow.
gs_top-amt2 = <fs_data1>-amt2 + gs_top-amt2.
CATCH cx_sy_arithmetic_overflow.
gs_top-deal_id = <fs_data1>-ztsf_deal_id.
gs_top-curr1 = <fs_data1>-curr1.
gs_top-curr2 = <fs_data1>-curr2.
"added by saurav 25.11.2021 Scope 4000015805 added exceptional handling
gs_top-amt1 = gs_top-amt1 * 100.
CATCH cx_sy_arithmetic_overflow.
ELSEIF gs_top-curr2 = c_twd.
gs_top-amt1 = gs_top-amt1 * 100.
CATCH cx_sy_arithmetic_overflow.
gs_top-amt1 = abs( gs_top-amt1 ).
gs_top-amt2 = abs( gs_top-amt2 ).
"added by saurav 25.11.2021 Scope 4000015805 to process lead currency.
CALL FUNCTION 'ZSGTRMFM_LEAD_CURR'
"added by saurav 25.11.2021 Scope 4000015805 processing the date based on deal_id
IF line_exists( lt_data1[ ztsf_deal_id = <fs_data>-ztsf_deal_id ztsf_deal_type = c_d1 ] ) OR line_exists( lt_data1[ ztsf_deal_id = <fs_data>-ztsf_deal_id ztsf_deal_type = c_d2 ] ).
ls_top = lt_data1[ ztsf_deal_id = <fs_data>-ztsf_deal_id ztsf_deal_type = c_d1 ].
CATCH cx_sy_itab_line_not_found.
ls_top = lt_data1[ ztsf_deal_id = <fs_data>-ztsf_deal_id ztsf_deal_type = c_d2 ].
CATCH cx_sy_itab_line_not_found.
PERFORM rate USING lv_curr1 lv_curr2 ls_top-dblfz.
""added by saurav 25.11.2021 Scope 4000015805 passing pl_amt based obn currency.
LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<fs_data2>).
""""""" Added by Saiteja - 27.06.2023 """"""""
ASSIGN lt_model[ zdeal_id = <fs_data2>-ztsf_deal_id ] TO <fs_model>.
IF <fs_model>-zdeal_stat IN lr_cdealstat .
lr_name = ls_param-param3.
ELSEIF <fs_model>-zdeal_stat IN lr_pdealstat.
lr_name = ls_param-param2.
ELSEIF <fs_model>-zdeal_stat IN lr_ndealstat.
lr_name = ls_param-param1.
<fs_data2>-zinv_status = lr_name.
ASSIGN lt_finv[ zdeal_id = <fs_data2>-ztsf_deal_id ] TO FIELD-SYMBOL(<fs_finv>).
<fs_data2>-zamt_inv = <fs_finv>-zamt_usd.
"""""""""""""""""""""""""""""""""""""""""""""""""""
ASSIGN gt_top[ deal_id = <fs_data2>-ztsf_deal_id ] TO FIELD-SYMBOL(<fs_top>).
IF <fs_top>-curr1 = c_usd.
<fs_data2>-zvol_usd = abs( <fs_data2>-amt1 ).
<fs_data2>-zpl_new = <fs_data2>-amt1.
<fs_data2>-zamt_ninv = <fs_data2>-amt1 + <fs_data2>-zamt_inv.
<fs_data2>-zpnl_inv = <fs_data2>-zpl * <fs_data2>-zamt_inv / ( <fs_data2>-zamt_inv + <fs_data2>-zamt_ninv ) .
<fs_data2>-zpnl_uninv = <fs_data2>-zpl * <fs_data2>-zamt_ninv / ( <fs_data2>-zamt_ninv + <fs_data2>-zamt_inv ) .
CATCH cx_sy_arithmetic_overflow.
IF <fs_top>-curr2 = c_usd.
<fs_data2>-zvol_usd = abs( <fs_data2>-amt1 ).
<fs_data2>-zpl_new = <fs_data2>-amt2.
<fs_data2>-zamt_ninv = <fs_data2>-amt2 + <fs_data2>-zamt_inv.
<fs_data2>-zpnl_inv = <fs_data2>-zpl * <fs_data2>-zamt_inv / ( <fs_data2>-zamt_inv + <fs_data2>-zamt_ninv ).
<fs_data2>-zpnl_uninv = <fs_data2>-zpl * <fs_data2>-zamt_ninv / ( <fs_data2>-zamt_ninv + <fs_data2>-zamt_inv ).
CATCH cx_sy_arithmetic_overflow.
IF <fs_top>-curr2 <> c_usd.
<fs_data2>-zpl_local_new = <fs_top>-amt2.
<fs_data2>-zpl_local_new = <fs_top>-amt1.
LOOP AT gt_data2 ASSIGNING FIELD-SYMBOL(<fs_data4>).
""""""" Added by Saiteja - 27.06.2023 """"""""
ASSIGN lt_model[ zdeal_id = <fs_data4>-ztsf_deal_id ] TO <fs_model>.
IF <fs_model>-zdeal_stat IN lr_cdealstat .
lr_name = ls_param-param3.
ELSEIF <fs_model>-zdeal_stat IN lr_pdealstat.
lr_name = ls_param-param2.
ELSEIF <fs_model>-zdeal_stat IN lr_ndealstat.
lr_name = ls_param-param1.
<fs_data4>-zinv_status = lr_name.
ASSIGN lt_finv[ zdeal_id = <fs_data4>-ztsf_deal_id ] TO <fs_finv>.
<fs_data4>-zamt_inv = <fs_finv>-zamt_usd.
"""""""""""""""""""""""""""""""""""""""""""""""""""
ASSIGN gt_top[ deal_id = <fs_data4>-ztsf_deal_id ] TO <fs_top>.
IF <fs_top>-curr1 = c_usd.
<fs_data4>-zvol_usd = abs( <fs_data4>-amt1 ).
<fs_data4>-zamt_ninv = <fs_data4>-amt1 + <fs_data4>-zamt_inv.
<fs_data4>-zpnl_inv = <fs_data4>-zpl * ( <fs_data4>-zamt_inv / <fs_data4>-zamt_inv + <fs_data4>-zamt_ninv ).
<fs_data4>-zpnl_uninv = <fs_data4>-zpl * ( <fs_data4>-zamt_ninv / <fs_data4>-zamt_ninv + <fs_data4>-zamt_inv ).
CATCH cx_sy_arithmetic_overflow.
IF <fs_top>-curr2 = c_usd.
<fs_data4>-zvol_usd = abs( <fs_data4>-amt1 ).
<fs_data4>-zamt_ninv = <fs_data4>-amt2 + <fs_data4>-zamt_inv.
<fs_data4>-zpnl_inv = <fs_data4>-zpl * ( <fs_data4>-zamt_inv / <fs_data4>-zamt_inv + <fs_data4>-zamt_ninv ).
<fs_data4>-zpnl_uninv = <fs_data4>-zpl * ( <fs_data4>-zamt_ninv / <fs_data4>-zamt_ninv + <fs_data4>-zamt_inv ).
CATCH cx_sy_arithmetic_overflow.
IF <fs_top>-curr2 <> c_usd.
<fs_data2>-zpl_local_new = <fs_top>-amt2.
<fs_data2>-zpl_local_new = <fs_top>-amt1.
PERFORM style_color." Added by saurav on 02.03.2022 Scope 4000018703 to not PASS txn status.
" Added by saurav on 02.03.2022 Scope 4000018703 to change color for txn status 02.{
gs_data2-colortab = gt_color.
MODIFY gt_data2 FROM gs_data2 TRANSPORTING colortab WHERE txn_status = c_02.
gs_data1-colortab = gt_color.
MODIFY gt_data1 FROM gs_data1 TRANSPORTING colortab WHERE txn_status = c_02."}
CLASS lcl_handle_events DEFINITION.
on_line_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column. "event handler method for Hotspot
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
IF r_fx = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
CALL METHOD cl_salv_table=>factory
ELSEIF r_op = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
CALL METHOD cl_salv_table=>factory
DATA(lo_columns) = lr_alv->get_columns( ).
* Setting the Color Column name
CALL METHOD lo_columns->set_color_column
CATCH cx_salv_data_error.
lo_columns->set_optimize( 'X' ). "--> Optimise all columns
"" Setting the Color Column name
CALL METHOD lo_columns->set_color_column
CATCH cx_salv_data_error.
" For HotSpot for RFHA Column
DATA : lr_col TYPE REF TO cl_salv_column_table. "column instance
IF lo_columns IS NOT INITIAL.
lr_col ?= lo_columns->get_column( 'RFHA' ) .
CALL METHOD lr_col->set_cell_type
value = if_salv_c_cell_type=>hotspot.
CATCH cx_salv_data_error .
lr_alv->set_screen_status(
report = 'ZSGTSF_RFX_BLOTTER_COMP'
set_functions = lr_alv->c_functions_all ).
DATA(lo_functions) = lr_alv->get_functions( ).
lo_functions->set_all( ).
"" Events for ON Hotpsot Line click or Double click or user command
DATA: gr_events TYPE REF TO lcl_handle_events.
DATA: lr_events TYPE REF TO cl_salv_events_table.
lr_events = lr_alv->get_event( ). "get event
"" Events for ON Hotpsot Line click or Double click or user command
SET HANDLER gr_events->on_line_click FOR lr_events. "register event handler method
DATA(lo_layout) = lr_alv->get_layout( ).
DATA:ls_key TYPE salv_s_layout_key..
lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
ls_key-report = sy-repid.
lo_layout->set_key( ls_key ).
lo_layout->set_default( abap_true ).
lo_layout->set_initial_layout( gs_variant-variant ).
DATA: err_notfound TYPE REF TO cx_salv_not_found.
" Changed by saurav on 28.04.2021 Scope 4000013818 to change column names{
DATA(single_column) = lo_columns->get_column( 'ZPL_NEW' ).
single_column->set_short_text( 'P&L Amt(N)' ).
single_column->set_medium_text( 'FX P&L Amt(New)' ).
single_column->set_long_text( 'FX P&L Amt(New)' ).
"added by saurav 25.11.2021 Scope to change column names{
single_column = lo_columns->get_column( 'ZPL_LOCAL_NEW' ).
single_column->set_short_text( 'P&L loc(N)' ).
single_column->set_medium_text( 'FX P&L loc Amt(New)' ).
single_column->set_long_text( 'FX P&L local Amt(New)' ).
"""" Added by Saiteja 14.06.2023
single_column = lo_columns->get_column( 'ZINV_STATUS' ).
single_column->set_short_text( 'Inv Status' ).
single_column->set_medium_text( 'Invoicing Status' ).
single_column->set_long_text( 'Invoicing Status' ).
single_column = lo_columns->get_column( 'ZAMT_INV' ).
single_column->set_short_text( 'Amt Inv' ).
single_column->set_medium_text( 'Amount Invoiced' ).
single_column->set_long_text( 'Amount Invoiced ' ).
single_column = lo_columns->get_column( 'ZAMT_NINV' ).
single_column->set_short_text( 'Amt NInv' ).
single_column->set_medium_text( 'Amount Not Invoiced' ).
single_column->set_long_text( 'Amount Not Invoiced' ).
single_column = lo_columns->get_column( 'ZPNL_INV' ).
single_column->set_short_text( 'PNL INV' ).
single_column->set_medium_text( 'PNL of Invoiced' ).
single_column->set_long_text( 'PNL of Invoiced' ).
single_column = lo_columns->get_column( 'ZPNL_UNINV' ).
single_column->set_short_text( 'PNL UnINV' ).
single_column->set_medium_text( 'PNL of UnInvoiced' ).
single_column->set_long_text( 'PNL of UnInvoiced' ).
single_column = lo_columns->get_column( 'ZVOL_USD' ).
single_column->set_short_text( 'Volume-USD' ).
single_column->set_medium_text( 'Volume(USD)' ).
single_column->set_long_text( 'Volume(USD)' ).
CATCH cx_salv_not_found INTO err_notfound.
DATA : lr_header TYPE REF TO cl_salv_form_element.
DATA: lr_grid_layout TYPE REF TO cl_salv_form_layout_grid,
lr_label TYPE REF TO cl_salv_form_label,
lr_text TYPE REF TO cl_salv_form_text,
CREATE OBJECT lr_grid_layout.
l_text = TEXT-105." Added by kisan on 26.11.2021 Scope 4000015805 Replacing string with text element.
lr_grid_layout->create_header_information( "create header for gird
lr_grid_layout->add_row( ). "add row
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
date_internal = s_date-low
date_internal_is_invalid = 1
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
date_internal = s_date-high
date_internal_is_invalid = 1
CONCATENATE lv_sdate '-' lv_edate INTO l_text SEPARATED BY space.
lr_label = lr_grid_layout->create_label(
text = TEXT-106 " Added by kisan on 26.11.2021 Scope 4000015805 Replacing string with text element.{
lr_text = lr_grid_layout->create_text(
lr_label->set_label_for( lr_text ).
lr_header = lr_grid_layout.
CALL METHOD lr_alv->set_top_of_list "set top of list
SELECT SINGLE " Added by Aditi Macwan on 25.10.2023
WHERE prognam = 'ZSGTRM3AR_REXE_EXP' AND
" Added by Ryan Nayak 07.08.2023
PERFORM send_email_dlist USING ls_txnstat.
"" Final Data to Display Output
lr_alv->display( ). "display grid
CLASS lcl_handle_events IMPLEMENTATION.
**handle double click here
IF r_fx = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
ASSIGN gt_data1[ row ] TO FIELD-SYMBOL(<fs_data1>)." Added by kisan on 26.11.2021 Scope 4000015805 reading gt_data1 .
ELSEIF r_op = c_x. " Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
ASSIGN gt_data2[ row ] TO FIELD-SYMBOL(<fs_data2>)." Added by kisan on 26.11.2021 Scope 4000015805 reading gt_data1 .
IF r_fx = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
PERFORM view_txn USING gs_data1-bukrs gs_data1-rfha.
ELSEIF r_op = c_x." Added by kisan on 26.11.2021 Scope 4000015805 Replacing strings with constants.
PERFORM view_txn USING gs_data2-bukrs gs_data2-rfha.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
FORM view_txn USING p_bukrs
DATA: lv_activitytype LIKE vtbfhazu-sfgzustt,
lv_companycode LIKE vtbfha-bukrs,
lv_dealno LIKE vtbfha-rfha,
lv_dealtype LIKE vtbfha-sfgtyp,
lv_producttype LIKE vtbfha-sanlf.
SELECT SINGLE sfgzustt FROM vtbfhazu "#EC CI_NOORDER
lv_companycode = p_bukrs.
SELECT SINGLE sfgtyp sanlf FROM vtbfha
INTO ( lv_dealtype , lv_producttype )
CALL FUNCTION 'TB_TRANSACTION_TO_DISPLAY'
activitytype = lv_activitytype
companycode = lv_companycode
producttype = lv_producttype
* Implement suitable error handling here
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
gs_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
p_layout = gs_variant-variant.
*&---------------------------------------------------------------------*
*& Form TRD_VALUE_REQUEST
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_value,
ztrader TYPE zsgtrmtr_trader-ztrader,
DATA: lt_return TYPE STANDARD TABLE OF ddshretval,
lt_value TYPE TABLE OF ty_value.
SELECT ztrader FROM "#EC CI_NOWHERE
zsgtrmtr_trader INTO TABLE @DATA(lt_trade)." Added by kisan on 26.11.2021 Scope 4000015805 added inline declaration.
" Added by kisan on 26.11.2021 Scope 4000015805 passing the from interbnal table lt_trade to lt_value.{
IF lt_trade IS NOT INITIAL .
lt_value = CORRESPONDING #( lt_trade MAPPING
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
* Implement suitable error handling here
ASSIGN lt_return[ 1 ] TO FIELD-SYMBOL(<fs_return>)." Added by kisan on 26.11.2021 Scope 4000015805 replacing read statment with assign.
DATA(ls_return) = <fs_return>.
p_trd = ls_return-fieldval.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& --> <FS_DATA1>_TXN_STATUS
*&---------------------------------------------------------------------*
FORM style_color." Added by saurav on 02.03.2022 Scope 4000018703 to not PASS txn status.
" Added by kisan on 26.11.2021 Scope 4000015805 added values for alv column.
APPEND VALUE #( color-col = 6 color-int = 0 color-inv = 1 ) TO gt_color.
*&---------------------------------------------------------------------*
*& Form CHECK_AUTHORIZATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
FORM check_authorization .
" Added by saurav on 11.08.2021 Scope 4000015805 for authorization object.{
"""Fetching Company codes
INTO TABLE @DATA(lt_t001)
ORDER BY bukrs." Added by kisan on 26.11.2021 Scope 4000015805 added filter to comapny code.
"" Clear the values of select options
CLEAR : s_bukrs,s_bukrs[].
LOOP AT lt_t001 ASSIGNING FIELD-SYMBOL(<fs_t001>).
" AUTHORIZATION CHECK for co.code
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD <fs_t001>-bukrs
"" If user have authorisation then append value into select options
APPEND VALUE #( sign = cs_i option = cs_o low = <fs_t001>-bukrs ) TO s_bukrs.
""If user doesn't have any authorisation then display a meassge & laeve to selection screen
MESSAGE TEXT-104 TYPE cs_e. "You do not have an authorization for the given company code
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
FORM rate USING lv_curr1 lv_curr2 date.
" calling bapi to get exchage rate.
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
exch_rate = gs_exch_rate.
gs_top-rate = gs_exch_rate-exch_rate.
IF gs_top-amt1 IS NOT INITIAL.
gs_top-amt2 = gs_top-amt1 / gs_top-rate.
gs_top-amt1 = gs_top-amt2 / gs_top-rate.
" Added by saurav on 04.08.2021 Scope 4000015282 to add exception handling{
IF lv_curr1 = c_twd." Added by saurav on 03.08.2021 Scope 4000015282 to replace constant with strings
gs_top-amt1 = gs_top-amt1 * 100.
ELSEIF lv_curr2 = c_twd." Added by saurav on 03.08.2021 Scope 4000015282 to replace constant with strings
gs_top-amt1 = gs_top-amt1 * 100.
CATCH cx_sy_arithmetic_overflow.
""" Added by Ryan Nayak 07.08.2023
FORM send_email_dlist USING ls_txnstat TYPE gt_params.
gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab,
gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.
ls_txnstat-param1 = ls_txnstat-param1+0(1). "Added by Aditi Macwan on 25.10.2023
""For getting Variant of Background Job
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
external_program_active = lv_active
* Error calling FM: GET_JOB_RUNTIME_INFO
"******selecting Background Job Step Overview data from table based on the Background job name and Job ID Job step ID number..
SELECT jobname,jobcount,stepcount,variant
INTO TABLE @DATA(l_it_tbtcp)
WHERE jobname = @lv_jobnm
AND jobcount = @lv_jobcnt
AND stepcount = @lv_stepcnt.
SORT l_it_tbtcp BY jobname jobcount stepcount.
READ TABLE l_it_tbtcp ASSIGNING FIELD-SYMBOL(<fs_tbtcp>) INDEX 1.
lv_variant = <fs_tbtcp>-variant.
lv_variant_name = lv_variant.
CALL FUNCTION 'SO_DLI_READ_API1'
dli_name = lv_variant_name "lv_vari "sy-slset
operation_no_authorization = 2
IF gt_email IS NOT INITIAL.
lo_send_request = cl_bcs=>create_persistent( ).
* For setting the email format
CLEAR: lv_ebody, wa_message_body.
'<html><style>*{font-family: Calibri;}table,td{border-collapse:collapse;text-align: center;height: 20px;border: 1px solid #000;border-color: black;font-size:15px;white-space: nowrap}'
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody, wa_message_body.
'body{padding: 25px 10px 75px 10px;}.Grey{background-color:#d8d8d8;font-size:15px;font-weight : bold;}</style><meta name="generator" content="HTML Tidy for HTML5 for ABAP version 5.6.0">'
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody, wa_message_body.
INTO lv_ebody SEPARATED BY space .
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody, wa_message_body.
'<p> Please find attached for the OGA new trade due for submission to MAS </p>'
INTO lv_ebody SEPARATED BY space .
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody, wa_message_body.
'<p> Note : It is for DE6 blotter (Forwards) </p>'
INTO lv_ebody SEPARATED BY space .
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody, wa_message_body.
'<p> Note : It is for DE7 blotter (Options) </p>'
INTO lv_ebody SEPARATED BY space .
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody,wa_message_body.
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
CLEAR: lv_ebody,wa_message_body.
'<p><b> **** This Is System Generated E-Mail **** </b></p>'
wa_message_body-line = lv_ebody.
APPEND wa_message_body TO lt_message_body.
APPEND '</body>' TO lt_message_body .
APPEND '</html>' TO lt_message_body .
lv_subject = 'SAP New Trades - MAS Submission COB -'.
CONCATENATE lv_subject ` ` s_date-low+6(2)'/'s_date-low+4(2)'/'s_date-low+0(4) INTO lv_subject.
* Calculate the Document Size
CLEAR: lv_lines, lv_so_obj_len.
DESCRIBE TABLE lt_message_body LINES lv_lines.
lv_so_obj_len = 255 * lv_lines.
CATCH cx_sy_arithmetic_overflow.
lo_document = cl_document_bcs=>create_document(
CALL METHOD lo_send_request->set_message_subject
* Creating fcat for excel file
IF gt_data1 IS NOT INITIAL OR gt_data2 IS NOT INITIAL.
" Changes by Aditi Macwan on 08.09.2023 (
CONCATENATE lv_line 'Transaction' gc_tab
'Transaction Type Description' gc_tab
'Business Area Desc' gc_tab
'Accounting Category' gc_tab
'External Reference' gc_crlf INTO lv_line.
ELSE. " Added by Vaishnavi Jambhale on 22.08.2023 (
CONCATENATE lv_line 'Trade Date' gc_tab
'Transaction Type Description' gc_tab
'External Reference' gc_tab
'Internal Deal Ref' gc_tab
'Premium Currency' gc_tab
'Commodity Description Long' gc_tab
'Business Area Desc' gc_tab
'MO Remarks' gc_crlf INTO lv_line.
* Added by Vaishnavi Jambhale on 22.08.2023(
CLEAR: lv_premium_date, lv_fixdate, lv_bldate, lv_trdate, lv_valdate, lv_exp_date,
lv_mc_date, lv_ship_start_date, lv_ship_end_date, lv_rfha, lv_dealid, lv_mcrefno,
lv_extref, lv_ba, lv_amt1, lv_amt2, lv_premium_amt, lv_tot_rate. ")
LOOP AT gt_data2 ASSIGNING FIELD-SYMBOL(<fs_odata>).
IF <fs_odata>-txn_status = ls_txnstat-param5 OR <fs_odata>-txn_status = ls_txnstat-param8 OR <fs_odata>-txn_status = ls_txnstat-param9.
" Added by Vaishnavi Jambhale on 22.08.2023(
IF <fs_odata>-dzterm IS NOT INITIAL.
WRITE <fs_odata>-dzterm TO lv_premium_date.
IF <fs_odata>-dblfz IS NOT INITIAL.
WRITE <fs_odata>-dblfz TO lv_trdate.
IF <fs_odata>-delfz IS NOT INITIAL.
WRITE <fs_odata>-delfz TO lv_valdate.
IF <fs_odata>-e_date IS NOT INITIAL.
WRITE <fs_odata>-e_date TO lv_exp_date. " Modified by Vaishnavi Jambhale on 22.08.2023
" Added by Vaishnavi Jambhale on 22.08.2023(
IF <fs_odata>-zmc_date IS NOT INITIAL.
WRITE <fs_odata>-zmc_date TO lv_mc_date.
IF <fs_odata>-zship_start IS NOT INITIAL.
WRITE <fs_odata>-zship_start TO lv_ship_start_date.
IF <fs_odata>-zship_end IS NOT INITIAL.
WRITE <fs_odata>-zship_end TO lv_ship_end_date.
REPLACE ALL OCCURRENCES OF: '.' IN lv_premium_date WITH '/', " Added by Vaishnavi Jambhale on 22.08.2023
'.' IN lv_trdate WITH '/',
'.' IN lv_valdate WITH '/',
'.' IN lv_exp_date WITH '/', " Modified by Vaishnavi Jambhale on 22.08.2023
'.' IN lv_mc_date WITH '/', " Added by Vaishnavi Jambhale on 22.08.2023
'.' IN lv_ship_start_date WITH '/', " Added by Vaishnavi Jambhale on 22.08.2023
'.' IN lv_ship_end_date WITH '/'. " Added by Vaishnavi Jambhale on 22.08.2023
"" processing IDs & numeric values
IF <fs_odata>-rfha IS NOT INITIAL.
SHIFT <fs_odata>-rfha LEFT DELETING LEADING '0'.
* WRITE <fs_odata>-rfha TO lv_rfha.
lv_rfha = |="| && <fs_odata>-rfha && |"|.
IF <fs_odata>-ztsf_deal_id IS NOT INITIAL.
WRITE <fs_odata>-ztsf_deal_id TO lv_dealid.
IF <fs_odata>-ztsf_mc_ref_no IS NOT INITIAL.
WRITE <fs_odata>-ztsf_mc_ref_no TO lv_mcrefno.
IF <fs_odata>-nordext IS NOT INITIAL.
WRITE <fs_odata>-nordext TO lv_extref.
IF <fs_odata>-rbusa IS NOT INITIAL.
WRITE <fs_odata>-rbusa TO lv_ba.
IF <fs_odata>-fo_remark IS NOT INITIAL. " Added by Aditi Macwan on 09.10.2023
WRITE <fs_odata>-fo_remark TO lv_fo_remarks.
IF <fs_odata>-mo_remark IS NOT INITIAL. " Added by Aditi Macwan on 09.10.2023
WRITE <fs_odata>-mo_remark TO lv_mo_remarks.
"" processing amounts & rates
TRY. lv_amt1_dec = <fs_odata>-amt1 * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
WRITE lv_amt1_dec TO lv_amt1 CURRENCY <fs_odata>-curr1. " Added by Aditi Macwan on 10.10.2023
lv_amt1 = '-' && lv_amt1.
WRITE <fs_odata>-amt1 TO lv_amt1. " Modified by Vaishnavi Jambhale on 22.08.2023
TRY. lv_amt2_dec = <fs_odata>-amt2 * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
WRITE lv_amt2_dec TO lv_amt2 CURRENCY <fs_odata>-curr2. " Added by Aditi Macwan on 10.10.2023
lv_amt2 = '-' && lv_amt2.
WRITE <fs_odata>-amt2 TO lv_amt2. " Modified by Vaishnavi Jambhale on 22.08.2023
" Added by Vaishnavi Jambhale on 22.08.2023(
IF <fs_odata>-bzbetr < 0.
TRY. lv_premium_amt = <fs_odata>-bzbetr * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
lv_premium_amt = '-' && lv_premium_amt.
WRITE <fs_odata>-bzbetr TO lv_premium_amt.
TRY. lv_strike_rate = <fs_odata>-kkurs * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
lv_strike_rate = '-' && lv_strike_rate.
WRITE <fs_odata>-kkurs TO lv_strike_rate.
IF <fs_odata>-exp_rate < 0.
TRY. lv_exp_rate = <fs_odata>-exp_rate * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
lv_exp_rate = '-' && lv_exp_rate.
WRITE <fs_odata>-exp_rate TO lv_exp_rate.
" Changes by Aditi Macwan on 07.09.2023 (
CONCATENATE lv_line lv_trdate gc_tab
<fs_odata>-bp_name gc_tab
<fs_odata>-zolam_deal_no gc_tab
<fs_odata>-zcom_desc_long gc_tab
lv_ship_start_date gc_tab
<fs_odata>-ext_stat_desc gc_tab
<fs_odata>-rdealer gc_tab
<fs_odata>-zmod_id gc_tab
<fs_odata>-ba_name gc_tab
<fs_odata>-zold_mc_ref_no gc_tab
lv_mo_remarks gc_crlf INTO lv_line.
LOOP AT gt_data1 ASSIGNING FIELD-SYMBOL(<fs_edata>).
IF <fs_edata>-txn_status = ls_txnstat-param1 OR <fs_edata>-txn_status = ls_txnstat-param5.
"" converting excel data type by moving fields to local variables
"" processing dates to excel format
IF <fs_edata>-blotter_date IS NOT INITIAL.
WRITE <fs_edata>-blotter_date TO lv_bldate.
IF <fs_edata>-dblfz IS NOT INITIAL.
WRITE <fs_edata>-dblfz TO lv_trdate.
IF <fs_edata>-delfz IS NOT INITIAL.
WRITE <fs_edata>-delfz TO lv_valdate.
IF <fs_edata>-v_date IS NOT INITIAL.
WRITE <fs_edata>-v_date TO lv_fixdate.
REPLACE ALL OCCURRENCES OF: '.' IN lv_bldate WITH '/',
'.' IN lv_trdate WITH '/',
'.' IN lv_fixdate WITH '/',
'.' IN lv_valdate WITH '/'.
"" processing IDs & numeric values
IF <fs_edata>-rfha IS NOT INITIAL.
SHIFT <fs_edata>-rfha LEFT DELETING LEADING '0'.
* WRITE <fs_edata>-rfha TO lv_rfha.
lv_rfha = |="| && <fs_edata>-rfha && |"|.
IF <fs_edata>-ztsf_deal_id IS NOT INITIAL.
WRITE <fs_edata>-ztsf_deal_id TO lv_dealid.
IF <fs_edata>-ztsf_mc_ref_no IS NOT INITIAL.
WRITE <fs_edata>-ztsf_mc_ref_no TO lv_mcrefno.
IF <fs_edata>-nordext IS NOT INITIAL.
WRITE <fs_edata>-nordext TO lv_extref.
IF <fs_edata>-rbusa IS NOT INITIAL.
WRITE <fs_edata>-rbusa TO lv_ba.
"" processing amounts & rates
TRY. lv_amt1_dec = <fs_edata>-amt1 * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
WRITE lv_amt1_dec TO lv_amt1 CURRENCY <fs_edata>-curr1. " Added by Aditi Macwan on 10.10.2023
lv_amt1 = '-' && lv_amt1.
WRITE <fs_edata>-amt1 TO lv_amt1.
* lv_amt1 = <fs_edata>-amt1.
TRY. lv_amt2_dec = <fs_edata>-amt2 * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
WRITE lv_amt2_dec TO lv_amt2 CURRENCY <fs_edata>-curr2. " Added by Aditi Macwan on 10.10.2023
lv_amt2 = '-' && lv_amt2.
WRITE <fs_edata>-amt2 TO lv_amt2.
* lv_amt2 = <fs_edata>-amt2.
IF <fs_edata>-tot_rate < 0.
TRY. lv_tot_rate = <fs_edata>-tot_rate * -1. CATCH cx_sy_arithmetic_overflow. ENDTRY.
lv_tot_rate = '-' && lv_tot_rate.
lv_tot_rate = <fs_edata>-tot_rate.
CONCATENATE lv_line lv_rfha gc_tab
<fs_edata>-zcom_id gc_tab
<fs_edata>-bp_name gc_tab
<fs_edata>-ext_stat_desc gc_tab
<fs_edata>-ba_name gc_tab
<fs_edata>-trd_name gc_tab
lv_extref gc_crlf INTO lv_line.
* lv_line = lv_line && |</TABLE> </HTML>|.
"" Converting xml to binary
cl_bcs_convert=>string_to_solix(
iv_codepage = '4103' "suitable for MS Excel, leave empty
iv_add_bom = 'X' "for other doc types
et_solix = lt_att_content_hex
ev_size = lv_so_obj_len ).
lv_exceldesc = 'OLAM_OGA_MAS_SAP_TSF_Transaction_' && s_date-low+0(4) && s_date-low+4(2) && s_date-low+6(2). " Changed by Aditi Macwan on 09.10.2023 'DE6 - Forwards'
lv_exceldesc = 'OLAM_OGA_MAS_SAP_OPTION_' && s_date-low+0(4) && s_date-low+4(2) && s_date-low+6(2). " Changed by Aditi Macwan on 09.10.2023 'DE7 - Options'
lo_document->add_attachment(
i_attachment_type = 'csv'
i_attachment_subject = lv_exceldesc "BU CCR NDF
i_attachment_size = lv_so_obj_len
i_att_content_hex = lt_att_content_hex ).
* i_att_content_hex = lv_line ).
CATCH cx_document_bcs INTO lx_document_bcs.
* Add document to send request
CALL METHOD lo_send_request->set_document( lo_document ).
** --------- set sender -------------------------------------------
** note: this is necessary only if you want to set the sender
** different from actual user (SY-UNAME). Otherwise sender is
** set automatically with actual user.
lo_sender = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD lo_send_request->set_sender
LOOP AT gt_email ASSIGNING FIELD-SYMBOL(<fs_email>).
DATA lv_eadd TYPE ad_smtpadr.
lv_eadd = <fs_email>-member_adr.
lo_recipient = cl_cam_address_bcs=>create_internet_address( lv_eadd ).
lo_send_request->add_recipient(
i_recipient = lo_recipient
* ---------- Send document ---------------------------------------
lo_send_request->set_send_immediately( 'X' ).
i_with_error_screen = 'X'
result = lv_sent_to_all ).
CATCH cx_send_req_bcs INTO lv_send_exc.
CATCH cx_address_bcs INTO lv_addr_exc.
CATCH cx_bcs INTO bcs_exception.