CLASS {{p}}studio_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_studio_pricer. PRIVATE SECTION. CONSTANTS: c_discount_per_booking TYPE p LENGTH 5 DECIMALS 2 VALUE '0.75', c_max_discount TYPE p LENGTH 5 DECIMALS 2 VALUE '15.00'. METHODS hourly_rate IMPORTING iv_room TYPE {{p}}if_studio_pricer=>ty_room RETURNING VALUE(rv_rate) TYPE {{p}}if_studio_pricer=>ty_amount. METHODS billable_hours IMPORTING iv_minutes TYPE i RETURNING VALUE(rv_hours) TYPE i. METHODS discount_percent IMPORTING iv_bookings TYPE i RETURNING VALUE(rv_percent) TYPE i. ENDCLASS. CLASS {{p}}studio_pricer IMPLEMENTATION. METHOD {{p}}if_studio_pricer~calculate. DATA(lv_rate) = hourly_rate( iv_room ). IF lv_rate IS INITIAL. rv_price = 0. RETURN. ENDIF. DATA(lv_base) = lv_rate * billable_hours( iv_minutes ). DATA(lv_percent) = discount_percent( iv_bookings ). rv_price = lv_base - lv_base * lv_percent / 100. ENDMETHOD. METHOD hourly_rate. CASE iv_room. WHEN {{p}}if_studio_pricer=>c_room-a. rv_rate = '48.00'. WHEN {{p}}if_studio_pricer=>c_room-b. rv_rate = '36.00'. WHEN {{p}}if_studio_pricer=>c_room-c. rv_rate = '27.00'. WHEN OTHERS. rv_rate = 0. ENDCASE. ENDMETHOD. METHOD billable_hours. rv_hours = ( iv_minutes + 59 ) DIV 60. IF rv_hours < 1. rv_hours = 1. ENDIF. ENDMETHOD. METHOD discount_percent. IF iv_bookings <= 0. RETURN. ENDIF. DATA lv_bookings TYPE p LENGTH 7 DECIMALS 2. lv_bookings = iv_bookings. DATA(lv_raw) = lv_bookings * c_discount_per_booking. IF lv_raw > c_max_discount. lv_raw = c_max_discount. ENDIF. rv_percent = lv_raw. ENDMETHOD. ENDCLASS.