CLASS {{p}}tent_hire_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_tent_hire. PRIVATE SECTION. TYPES ty_calc TYPE p LENGTH 15 DECIMALS 4. METHODS get_rates IMPORTING iv_tent_size TYPE string EXPORTING ev_rate_day TYPE {{p}}if_tent_hire=>ty_amount ev_setup_fee TYPE {{p}}if_tent_hire=>ty_amount ev_found TYPE abap_bool. METHODS apply_discount IMPORTING iv_days TYPE i CHANGING cv_amount TYPE ty_calc. METHODS round_gross IMPORTING iv_amount TYPE ty_calc RETURNING VALUE(rv_fee) TYPE {{p}}if_tent_hire=>ty_amount. ENDCLASS. CLASS {{p}}tent_hire_fee IMPLEMENTATION. METHOD {{p}}if_tent_hire~calculate_fee. DATA lv_rate_day TYPE {{p}}if_tent_hire=>ty_amount. DATA lv_setup_fee TYPE {{p}}if_tent_hire=>ty_amount. DATA lv_found TYPE abap_bool. get_rates( EXPORTING iv_tent_size = iv_tent_size IMPORTING ev_rate_day = lv_rate_day ev_setup_fee = lv_setup_fee ev_found = lv_found ). IF lv_found = abap_false. rv_fee = 0. RETURN. ENDIF. DATA lv_net TYPE ty_calc. lv_net = iv_days * lv_rate_day + lv_setup_fee. apply_discount( EXPORTING iv_days = iv_days CHANGING cv_amount = lv_net ). DATA(lv_gross) = lv_net * ( 1 + {{p}}if_tent_hire=>c_vat ). rv_fee = round_gross( lv_gross ). ENDMETHOD. METHOD get_rates. CASE to_upper( iv_tent_size ). WHEN 'S'. ev_rate_day = {{p}}if_tent_hire=>c_rate_s-rate_day. ev_setup_fee = {{p}}if_tent_hire=>c_rate_s-setup_fee. WHEN 'M'. ev_rate_day = {{p}}if_tent_hire=>c_rate_m-rate_day. ev_setup_fee = {{p}}if_tent_hire=>c_rate_m-setup_fee. WHEN 'L'. ev_rate_day = {{p}}if_tent_hire=>c_rate_l-rate_day. ev_setup_fee = {{p}}if_tent_hire=>c_rate_l-setup_fee. WHEN OTHERS. ev_found = abap_false. RETURN. ENDCASE. ev_found = abap_true. ENDMETHOD. METHOD apply_discount. IF iv_days >= {{p}}if_tent_hire=>c_long_rental_days. cv_amount = cv_amount * ( 1 - {{p}}if_tent_hire=>c_discount ). ENDIF. ENDMETHOD. METHOD round_gross. rv_fee = round( val = iv_amount dec = 2 ). ENDMETHOD. ENDCLASS.