FUNCTION {{p}}hut_fee IMPORTING iv_guest_type TYPE string iv_nights TYPE i iv_member TYPE abap_bool iv_breakfast TYPE abap_bool EXPORTING ev_fee TYPE decfloat34 EXCEPTIONS invalid_nights. CONSTANTS: c_rate_adult TYPE p LENGTH 8 DECIMALS 2 VALUE '28.00', c_rate_child TYPE p LENGTH 8 DECIMALS 2 VALUE '14.00', c_rate_dog TYPE p LENGTH 8 DECIMALS 2 VALUE '5.00', c_breakfast TYPE p LENGTH 8 DECIMALS 2 VALUE '9.50', c_member_share TYPE i VALUE 50, c_stay_short TYPE i VALUE 3, c_stay_long TYPE i VALUE 7, c_share_short TYPE i VALUE 90, c_share_long TYPE i VALUE 80. DATA: lv_type TYPE string, lv_rate TYPE p LENGTH 8 DECIMALS 2, lv_fee TYPE p LENGTH 10 DECIMALS 2. ev_fee = 0. IF iv_nights < 1. RAISE invalid_nights. ENDIF. lv_type = to_upper( iv_guest_type ). CASE lv_type. WHEN 'CHILD'. lv_rate = c_rate_child. WHEN 'DOG'. lv_rate = c_rate_dog. WHEN OTHERS. lv_rate = c_rate_adult. ENDCASE. IF iv_member = abap_true AND lv_type <> 'DOG'. lv_rate = lv_rate * c_member_share / 100. ENDIF. lv_fee = lv_rate * iv_nights. IF iv_nights >= c_stay_long. lv_fee = lv_fee * c_share_long / 100. ELSEIF iv_nights >= c_stay_short. lv_fee = lv_fee * c_share_short / 100. ENDIF. IF iv_breakfast = abap_true AND ( lv_type = 'ADULT' OR lv_type = 'CHILD' ). lv_fee = lv_fee + c_breakfast * iv_nights. ENDIF. ev_fee = lv_fee. ENDFUNCTION.