CLASS {{p}}scaffold_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_hire_fee. PRIVATE SECTION. TYPES ty_exact TYPE p LENGTH 15 DECIMALS 5. CONSTANTS: c_daily_rate TYPE {{p}}if_hire_fee=>ty_amount VALUE '4.20', c_express_percent TYPE i VALUE 12, c_discount_percent TYPE i VALUE 6, c_long_hire_days TYPE i VALUE 30. METHODS base_fee IMPORTING iv_days TYPE i iv_parts TYPE i RETURNING VALUE(rv_fee) TYPE {{p}}if_hire_fee=>ty_amount. METHODS express_surcharge IMPORTING iv_base TYPE {{p}}if_hire_fee=>ty_amount RETURNING VALUE(rv_surcharge) TYPE {{p}}if_hire_fee=>ty_amount. METHODS long_hire_discount IMPORTING iv_base TYPE {{p}}if_hire_fee=>ty_amount RETURNING VALUE(rv_discount) TYPE {{p}}if_hire_fee=>ty_amount. ENDCLASS. CLASS {{p}}scaffold_fee IMPLEMENTATION. METHOD {{p}}if_hire_fee~calculate_fee. DATA(lv_base) = base_fee( iv_days = iv_days iv_parts = iv_parts ). DATA(lv_fee) = lv_base. IF iv_express = abap_true. lv_fee = lv_fee + express_surcharge( lv_base ). ENDIF. IF iv_days > c_long_hire_days. rs_result-discount = long_hire_discount( lv_base ). lv_fee = lv_fee - rs_result-discount. ENDIF. rs_result-fee = lv_fee. ENDMETHOD. METHOD base_fee. rv_fee = iv_days * iv_parts * c_daily_rate. ENDMETHOD. METHOD express_surcharge. DATA(lv_amount) = CONV ty_exact( iv_base ) * c_express_percent / 100. rv_surcharge = round( val = lv_amount dec = 2 mode = 'CEILING' ). ENDMETHOD. METHOD long_hire_discount. DATA(lv_amount) = CONV ty_exact( iv_base ) * c_discount_percent / 100. rv_discount = round( val = lv_amount dec = 2 mode = 'HALF_UP' ). ENDMETHOD. ENDCLASS.