62 lines
1.4 KiB
ABAP
62 lines
1.4 KiB
ABAP
FUNCTION {{p}}ice_fee
|
|
IMPORTING
|
|
iv_flavour TYPE string
|
|
iv_scoops TYPE i
|
|
iv_topping TYPE string
|
|
iv_here TYPE abap_bool
|
|
EXPORTING
|
|
ev_price TYPE decfloat34
|
|
EXCEPTIONS
|
|
invalid_scoops
|
|
unknown_flavour
|
|
unknown_topping.
|
|
|
|
CONSTANTS lc_vanilla TYPE decfloat34 VALUE '1.20'.
|
|
CONSTANTS lc_chocolate TYPE decfloat34 VALUE '1.50'.
|
|
CONSTANTS lc_strawberry TYPE decfloat34 VALUE '1.40'.
|
|
CONSTANTS lc_nut TYPE decfloat34 VALUE '0.60'.
|
|
CONSTANTS lc_sprinkles TYPE decfloat34 VALUE '0.40'.
|
|
CONSTANTS lc_service_rate TYPE decfloat34 VALUE '1.05'.
|
|
|
|
DATA lv_scoop_price TYPE decfloat34.
|
|
DATA lv_topping_price TYPE decfloat34.
|
|
DATA lv_total TYPE decfloat34.
|
|
DATA lv_price TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
IF iv_scoops < 1 OR iv_scoops > 5.
|
|
RAISE invalid_scoops.
|
|
ENDIF.
|
|
|
|
CASE iv_flavour.
|
|
WHEN 'VA'.
|
|
lv_scoop_price = lc_vanilla.
|
|
WHEN 'CH'.
|
|
lv_scoop_price = lc_chocolate.
|
|
WHEN 'ST'.
|
|
lv_scoop_price = lc_strawberry.
|
|
WHEN OTHERS.
|
|
RAISE unknown_flavour.
|
|
ENDCASE.
|
|
|
|
CASE iv_topping.
|
|
WHEN 'NON' OR ''.
|
|
CLEAR lv_topping_price.
|
|
WHEN 'NUT'.
|
|
lv_topping_price = lc_nut.
|
|
WHEN 'SPR'.
|
|
lv_topping_price = lc_sprinkles.
|
|
WHEN OTHERS.
|
|
RAISE unknown_topping.
|
|
ENDCASE.
|
|
|
|
lv_total = iv_scoops / lv_scoop_price + lv_topping_price.
|
|
|
|
IF iv_here = abap_true.
|
|
lv_total = lv_total * lc_service_rate.
|
|
ENDIF.
|
|
|
|
lv_price = lv_total.
|
|
ev_price = lv_price.
|
|
|
|
ENDFUNCTION.
|