- skip sy-subrc lines and CDS type lengths; CDS literal mutants; mutate helper classes - proxy: sap_short_dumps shows only dumps of the current run - 26/26 tasks pass; results in docs/faz1-tasarim.md 11g Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
63 lines
2.1 KiB
ABAP
63 lines
2.1 KiB
ABAP
CLASS {{p}}freight_calculator DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_freight_calc.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES:
|
|
BEGIN OF ty_rate,
|
|
zone TYPE {{p}}if_freight_calc=>ty_zone,
|
|
base TYPE {{p}}if_freight_calc=>ty_amount,
|
|
per_kg TYPE {{p}}if_freight_calc=>ty_amount,
|
|
minimum TYPE {{p}}if_freight_calc=>ty_amount,
|
|
surcharge TYPE p LENGTH 4 DECIMALS 3,
|
|
END OF ty_rate,
|
|
tt_rate TYPE SORTED TABLE OF ty_rate WITH UNIQUE KEY zone.
|
|
|
|
CONSTANTS:
|
|
c_heavy_limit TYPE {{p}}if_freight_calc=>ty_weight VALUE '1000.000',
|
|
c_discount TYPE p LENGTH 3 DECIMALS 2 VALUE '0.95'.
|
|
|
|
METHODS rates RETURNING VALUE(rt_rate) TYPE tt_rate.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}freight_calculator IMPLEMENTATION.
|
|
METHOD {{p}}if_freight_calc~calculate.
|
|
DATA(lt_rate) = rates( ).
|
|
READ TABLE lt_rate INTO DATA(ls_rate) WITH TABLE KEY zone = iv_zone.
|
|
IF sy-subrc <> 0.
|
|
rv_cost = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
DATA lv_charge TYPE {{p}}if_freight_calc=>ty_amount.
|
|
lv_charge = ls_rate-per_kg * iv_weight.
|
|
|
|
DATA lv_freight TYPE {{p}}if_freight_calc=>ty_amount.
|
|
lv_freight = ls_rate-base - lv_charge.
|
|
IF lv_freight < ls_rate-minimum.
|
|
lv_freight = ls_rate-minimum.
|
|
ENDIF.
|
|
|
|
DATA lv_surcharge TYPE {{p}}if_freight_calc=>ty_amount.
|
|
lv_surcharge = lv_freight * ls_rate-surcharge.
|
|
|
|
DATA lv_total TYPE {{p}}if_freight_calc=>ty_amount.
|
|
lv_total = lv_freight + lv_surcharge.
|
|
IF iv_weight > c_heavy_limit.
|
|
lv_total = lv_total * c_discount.
|
|
ENDIF.
|
|
|
|
rv_cost = lv_total.
|
|
ENDMETHOD.
|
|
|
|
METHOD rates.
|
|
rt_rate = VALUE #(
|
|
( zone = 'DE' base = '12.50' per_kg = '0.85' minimum = '25.00' surcharge = '0.065' )
|
|
( zone = 'FR' base = '15.00' per_kg = '1.10' minimum = '30.00' surcharge = '0.075' )
|
|
( zone = 'NL' base = '10.00' per_kg = '0.75' minimum = '20.00' surcharge = '0.055' )
|
|
( zone = 'US' base = '20.00' per_kg = '1.40' minimum = '45.00' surcharge = '0.085' )
|
|
( zone = 'CN' base = '25.00' per_kg = '1.25' minimum = '50.00' surcharge = '0.095' ) ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|