CLASS {{p}}sauna_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_sauna_price. PRIVATE SECTION. CONSTANTS: c_min_days TYPE i VALUE 1, c_max_days TYPE i VALUE 14, c_min_guests TYPE i VALUE 1, c_max_guests TYPE i VALUE 10, c_many_guests TYPE i VALUE 6, c_rate_base TYPE {{p}}if_sauna_price=>ty_amount VALUE '120.00', c_rate_weekend TYPE {{p}}if_sauna_price=>ty_amount VALUE '150.00', c_rate_group TYPE {{p}}if_sauna_price=>ty_amount VALUE '140.00'. METHODS rate_per_day IMPORTING iv_guests TYPE i iv_weekend TYPE abap_bool RETURNING VALUE(rv_rate) TYPE {{p}}if_sauna_price=>ty_amount. ENDCLASS. CLASS {{p}}sauna_pricer IMPLEMENTATION. METHOD {{p}}if_sauna_price~calculate. IF iv_days < c_min_days OR iv_days > c_max_days OR iv_guests < c_min_guests OR iv_guests > c_max_guests. RETURN. ENDIF. rv_price = rate_per_day( iv_guests = iv_guests iv_weekend = iv_weekend ) * iv_days. ENDMETHOD. METHOD rate_per_day. " Answer to the open question: the weekend rate has priority. IF iv_weekend = abap_true. rv_rate = c_rate_weekend. ELSEIF iv_guests > c_many_guests. rv_rate = c_rate_group. ELSE. rv_rate = c_rate_base. ENDIF. ENDMETHOD. ENDCLASS.