Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
88 lines
2.6 KiB
ABAP
88 lines
2.6 KiB
ABAP
FUNCTION {{p}}track_fee
|
|
IMPORTING
|
|
it_paths TYPE STANDARD TABLE
|
|
EXPORTING
|
|
et_fees TYPE STANDARD TABLE
|
|
EXCEPTIONS
|
|
invalid_distance
|
|
invalid_category.
|
|
|
|
TYPES: BEGIN OF ty_sum,
|
|
train_cat TYPE c LENGTH 2,
|
|
path_count TYPE i,
|
|
total_km TYPE p LENGTH 13 DECIMALS 2,
|
|
total_fee TYPE p LENGTH 13 DECIMALS 2,
|
|
END OF ty_sum.
|
|
|
|
DATA: lt_sums TYPE SORTED TABLE OF ty_sum WITH UNIQUE KEY train_cat,
|
|
lv_cat TYPE c LENGTH 2,
|
|
lv_km TYPE p LENGTH 13 DECIMALS 2,
|
|
lv_flag TYPE c LENGTH 1,
|
|
lv_rate TYPE p LENGTH 5 DECIMALS 2,
|
|
lv_raw TYPE decfloat34,
|
|
lv_fee TYPE p LENGTH 13 DECIMALS 2.
|
|
|
|
FIELD-SYMBOLS: <ls_in> TYPE any,
|
|
<ls_out> TYPE any,
|
|
<ls_sum> TYPE ty_sum,
|
|
<lv_val> TYPE any.
|
|
|
|
CLEAR et_fees.
|
|
|
|
LOOP AT it_paths ASSIGNING <ls_in>.
|
|
ASSIGN COMPONENT 'TRAIN_CAT' OF STRUCTURE <ls_in> TO <lv_val>.
|
|
lv_cat = <lv_val>.
|
|
ASSIGN COMPONENT 'DISTANCE_KM' OF STRUCTURE <ls_in> TO <lv_val>.
|
|
lv_km = <lv_val>.
|
|
ASSIGN COMPONENT 'NIGHT_FLAG' OF STRUCTURE <ls_in> TO <lv_val>.
|
|
lv_flag = <lv_val>.
|
|
|
|
IF lv_km <= 0.
|
|
RAISE invalid_distance.
|
|
ENDIF.
|
|
|
|
CASE lv_cat.
|
|
WHEN 'IC'.
|
|
lv_rate = '1.20'.
|
|
WHEN 'RG'.
|
|
lv_rate = '0.90'.
|
|
WHEN 'FR'.
|
|
lv_rate = '0.60'.
|
|
WHEN 'SP'.
|
|
lv_rate = '1.50'.
|
|
WHEN OTHERS.
|
|
RAISE invalid_category.
|
|
ENDCASE.
|
|
|
|
lv_raw = lv_km * lv_rate.
|
|
IF lv_flag = 'X'.
|
|
lv_raw = lv_raw * 12 / 10.
|
|
ENDIF.
|
|
lv_fee = round( val = lv_raw dec = 2 mode = cl_abap_math=>round_half_up ).
|
|
IF lv_fee < 5.
|
|
lv_fee = 5.
|
|
ENDIF.
|
|
|
|
READ TABLE lt_sums ASSIGNING <ls_sum> WITH TABLE KEY train_cat = lv_cat.
|
|
IF sy-subrc <> 0.
|
|
INSERT VALUE ty_sum( train_cat = lv_cat ) INTO TABLE lt_sums ASSIGNING <ls_sum>.
|
|
ENDIF.
|
|
<ls_sum>-path_count = <ls_sum>-path_count + 1.
|
|
<ls_sum>-total_km = <ls_sum>-total_km + lv_km.
|
|
<ls_sum>-total_fee = <ls_sum>-total_fee + lv_fee.
|
|
ENDLOOP.
|
|
|
|
LOOP AT lt_sums ASSIGNING <ls_sum>.
|
|
APPEND INITIAL LINE TO et_fees ASSIGNING <ls_out>.
|
|
ASSIGN COMPONENT 'TRAIN_CAT' OF STRUCTURE <ls_out> TO <lv_val>.
|
|
<lv_val> = <ls_sum>-train_cat.
|
|
ASSIGN COMPONENT 'PATH_COUNT' OF STRUCTURE <ls_out> TO <lv_val>.
|
|
<lv_val> = <ls_sum>-path_count.
|
|
ASSIGN COMPONENT 'TOTAL_KM' OF STRUCTURE <ls_out> TO <lv_val>.
|
|
<lv_val> = <ls_sum>-total_km.
|
|
ASSIGN COMPONENT 'TOTAL_FEE' OF STRUCTURE <ls_out> TO <lv_val>.
|
|
<lv_val> = <ls_sum>-total_fee.
|
|
ENDLOOP.
|
|
|
|
ENDFUNCTION.
|