FUNCTION {{p}}tree_fee IMPORTING iv_species TYPE string iv_height_cm TYPE i iv_near_house TYPE abap_bool EXPORTING ev_fee TYPE decfloat34 ev_warning TYPE abap_bool EXCEPTIONS invalid_height. DATA lv_base_fee TYPE decfloat34. DATA lv_fee TYPE decfloat34. DATA lv_metres TYPE i. DATA lv_extra_metres TYPE i. ev_fee = 0. ev_warning = abap_false. IF iv_height_cm <= 0. RAISE invalid_height. ENDIF. CASE iv_species. WHEN 'OAK'. lv_base_fee = 200. WHEN 'PINE'. lv_base_fee = 150. WHEN 'BIRCH'. lv_base_fee = 120. WHEN OTHERS. lv_base_fee = 100. ENDCASE. lv_metres = iv_height_cm DIV 100. IF iv_height_cm MOD 100 <> 0. lv_metres = lv_metres - 1. ENDIF. lv_extra_metres = lv_metres - 5. IF lv_extra_metres < 0. lv_extra_metres = 0. ENDIF. lv_fee = lv_base_fee + lv_extra_metres * 25. IF iv_near_house = abap_true. lv_fee = lv_fee * 1125 / 1000. ENDIF. IF iv_height_cm > 2000. ev_warning = abap_true. lv_fee = lv_fee + 500. ENDIF. ev_fee = round( val = lv_fee dec = 2 ). ENDFUNCTION.