FUNCTION {{p}}golf_fee IMPORTING iv_category TYPE string iv_holes TYPE i iv_players TYPE i iv_tee_hour TYPE i EXPORTING ev_fee TYPE decfloat34 RAISING {{p}}cx_golf. CONSTANTS: c_member TYPE decfloat34 VALUE '25.00', c_guest TYPE decfloat34 VALUE '62.50', c_junior TYPE decfloat34 VALUE '12.50'. DATA lv_per_player TYPE decfloat34. IF iv_players < 1 OR iv_players > 4. RAISE EXCEPTION TYPE {{p}}cx_golf EXPORTING iv_reason = 'INVALID_PLAYERS' iv_message = 'Number of players must be between 1 and 4'. ENDIF. IF iv_holes <> 9 AND iv_holes <> 18. RAISE EXCEPTION TYPE {{p}}cx_golf EXPORTING iv_reason = 'INVALID_HOLES' iv_message = 'Number of holes must be 9 or 18'. ENDIF. CASE iv_category. WHEN 'M'. lv_per_player = c_member. WHEN 'G'. lv_per_player = c_guest. WHEN 'J'. lv_per_player = c_junior. WHEN OTHERS. RAISE EXCEPTION TYPE {{p}}cx_golf EXPORTING iv_reason = 'INVALID_CATEGORY' iv_message = 'Player category must be M, G or J'. ENDCASE. IF iv_tee_hour < 7 OR iv_tee_hour > 20. RAISE EXCEPTION TYPE {{p}}cx_golf EXPORTING iv_reason = 'INVALID_TEE_HOUR' iv_message = 'Tee hour must be between 6 and 20'. ENDIF. IF iv_holes = 9. lv_per_player = lv_per_player / 2. ENDIF. IF iv_tee_hour >= 18. lv_per_player = round( val = lv_per_player * 75 / 100 dec = 2 mode = cl_abap_math=>round_half_up ). ENDIF. ev_fee = lv_per_player * iv_players. IF iv_players = 4. ev_fee = round( val = ev_fee * 90 / 100 dec = 2 mode = cl_abap_math=>round_half_up ). ENDIF. ENDFUNCTION.