CLASS {{p}}pest_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_pest TYPE c LENGTH 4. TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2. METHODS calculate_fee IMPORTING iv_pest_type TYPE ty_pest iv_area TYPE i iv_urgent TYPE abap_bool iv_contract TYPE abap_bool RETURNING VALUE(rv_fee) TYPE ty_fee. ENDCLASS. CLASS {{p}}pest_fee IMPLEMENTATION. METHOD calculate_fee. DATA lv_base TYPE ty_fee. DATA lv_area_fee TYPE ty_fee. DATA lv_area_fee2 TYPE ty_fee. DATA lv_total TYPE ty_fee. DATA lv_discount TYPE ty_fee. DATA lv_steps TYPE i. DATA lv_rest TYPE i. DATA lv_dummy TYPE i. " get the base fee IF iv_pest_type = 'RATS'. lv_base = 120. ELSEIF iv_pest_type = 'MICE'. lv_base = 55. ELSEIF iv_pest_type = 'WASP'. lv_base = 150. ELSEIF iv_pest_type = 'ANTS'. lv_base = 80. ELSE. lv_base = 0. ENDIF. IF lv_base = 0. rv_fee = 0. RETURN. ENDIF. " area surcharge lv_area_fee = 0. IF iv_area > 100. lv_rest = iv_area - 100. lv_steps = lv_rest DIV 50. IF lv_rest MOD 50 <> 0. lv_steps = lv_steps + 1. ENDIF. lv_area_fee = lv_steps * 15. ENDIF. lv_total = lv_base + lv_area_fee. " urgent jobs cost more IF iv_urgent = 'X'. lv_total = lv_total + 45. ENDIF. " contract customers get a discount IF iv_contract = 'X'. lv_area_fee2 = 0. IF iv_area > 100. lv_rest = iv_area - 100. lv_steps = lv_rest DIV 50. IF lv_rest MOD 50 <> 0. lv_steps = lv_steps + 1. ENDIF. lv_area_fee2 = lv_steps * 15. ENDIF. lv_discount = ( lv_base + lv_area_fee2 ) * 10 / 100. lv_total = lv_total - lv_discount. ENDIF. IF lv_total < 50. lv_total = 50. ENDIF. rv_fee = lv_total. ENDMETHOD. ENDCLASS.