FUNCTION {{p}}crane_fee_old IMPORTING iv_crane_type TYPE string iv_hours TYPE decfloat34 iv_distance_km TYPE i iv_weekend TYPE abap_bool iv_customer TYPE string EXPORTING ev_base_fee TYPE decfloat34 ev_travel_fee TYPE decfloat34 ev_surcharge TYPE decfloat34 ev_discount TYPE decfloat34 ev_total TYPE decfloat34 EXCEPTIONS invalid_crane_type invalid_hours. DATA lv_hourly TYPE decfloat34. DATA lv_per_km TYPE decfloat34. DATA lv_km TYPE i. DATA lv_sum TYPE decfloat34. IF iv_hours <= 0. RAISE invalid_hours. ENDIF. CASE iv_crane_type. WHEN 'SM'. lv_hourly = 115. lv_per_km = '1.25'. WHEN 'MD'. lv_hourly = 185. lv_per_km = '1.75'. WHEN 'LG'. lv_hourly = 345. lv_per_km = '2.35'. WHEN OTHERS. RAISE invalid_crane_type. ENDCASE. ev_base_fee = iv_hours * lv_hourly. lv_km = iv_distance_km. IF lv_km > 100. lv_km = 100. ENDIF. ev_travel_fee = lv_km * lv_per_km. IF iv_weekend = abap_true. ev_surcharge = ev_base_fee * 25 / 100. ELSE. ev_surcharge = 0. ENDIF. lv_sum = ev_base_fee + ev_travel_fee + ev_surcharge. IF iv_customer = 'GOLD'. ev_discount = lv_sum * 10 / 100. ELSE. ev_discount = 0. ENDIF. ev_total = lv_sum - ev_discount. ev_base_fee = round( val = ev_base_fee dec = 2 mode = cl_abap_math=>round_half_up ). ev_travel_fee = round( val = ev_travel_fee dec = 2 mode = cl_abap_math=>round_half_up ). ev_surcharge = round( val = ev_surcharge dec = 2 mode = cl_abap_math=>round_half_up ). ev_discount = round( val = ev_discount dec = 2 mode = cl_abap_math=>round_half_up ). ev_total = round( val = ev_total dec = 2 mode = cl_abap_math=>round_half_up ). ENDFUNCTION.