FUNCTION {{p}}bowl_fee_old IMPORTING iv_players TYPE i iv_games TYPE i iv_day TYPE i iv_shoes TYPE abap_bool EXPORTING ev_fee TYPE decfloat34 ev_note TYPE string EXCEPTIONS invalid_input. TYPES ty_rate TYPE p LENGTH 8 DECIMALS 2. CLASS lcl_bowling DEFINITION. PUBLIC SECTION. METHODS calculate IMPORTING iv_players TYPE i iv_games TYPE i iv_day TYPE i iv_shoes TYPE abap_bool EXPORTING ev_fee TYPE decfloat34 ev_note TYPE string. PRIVATE SECTION. CONSTANTS: c_lane_size TYPE i VALUE 6, c_group_size TYPE i VALUE 12, c_rate_weekday TYPE ty_rate VALUE '3.50', c_rate_weekend TYPE ty_rate VALUE '5.00', c_shoe_price TYPE ty_rate VALUE '2.00', c_group_discount TYPE ty_rate VALUE '10.00'. METHODS lanes_for IMPORTING iv_players TYPE i RETURNING VALUE(rv_lanes) TYPE i. METHODS rate_for IMPORTING iv_day TYPE i RETURNING VALUE(rv_rate) TYPE ty_rate. ENDCLASS. CLASS lcl_bowling IMPLEMENTATION. METHOD calculate. DATA(lv_lanes) = lanes_for( iv_players ). DATA(lv_rate) = rate_for( iv_day ). DATA lv_sum TYPE p LENGTH 15 DECIMALS 2. lv_sum = lv_lanes * iv_games * lv_rate. IF iv_shoes = abap_true. lv_sum = lv_sum + iv_players * c_shoe_price. ENDIF. ev_note = 'BOOKED'. IF iv_players >= c_group_size. lv_sum = lv_sum - c_group_discount. ev_note = 'GROUP'. ENDIF. ev_fee = lv_sum. ENDMETHOD. METHOD lanes_for. rv_lanes = iv_players DIV c_lane_size. IF iv_players MOD c_lane_size > 0. rv_lanes = rv_lanes + 1. ENDIF. ENDMETHOD. METHOD rate_for. IF iv_day > 5. rv_rate = c_rate_weekend. ELSE. rv_rate = c_rate_weekday. ENDIF. ENDMETHOD. ENDCLASS. IF iv_players < 1 OR iv_games < 1. RAISE invalid_input. ENDIF. DATA(lo_bowling) = NEW lcl_bowling( ). lo_bowling->calculate( EXPORTING iv_players = iv_players iv_games = iv_games iv_day = iv_day iv_shoes = iv_shoes IMPORTING ev_fee = ev_fee ev_note = ev_note ). ENDFUNCTION.