FUNCTION {{p}}theme_fee IMPORTING iv_visitor_type TYPE string iv_tickets TYPE i iv_date TYPE d EXPORTING ev_unit_price TYPE decfloat34 ev_total_price TYPE decfloat34 ev_discount TYPE decfloat34 EXCEPTIONS invalid_visitor_type invalid_tickets. DATA lv_base_price TYPE decfloat34. DATA lv_gross TYPE decfloat34. DATA lv_discount_pct TYPE decfloat34. IF iv_tickets <= 0. RAISE invalid_tickets. ENDIF. CASE iv_visitor_type. WHEN 'ADULT'. lv_base_price = '45.50'. WHEN 'CHILD'. lv_base_price = '25.25'. WHEN 'SENIOR'. lv_base_price = '30.75'. WHEN 'FAMILY'. lv_base_price = '40.00'. WHEN OTHERS. RAISE invalid_visitor_type. ENDCASE. " Peak season surcharge IF iv_date IS NOT INITIAL. lv_base_price = lv_base_price + 5. ENDIF. " Group discount IF iv_tickets >= 10. lv_discount_pct = 10. ENDIF. IF iv_tickets > 20. lv_discount_pct = 15. ENDIF. lv_gross = lv_base_price * iv_tickets. ev_discount = lv_gross * lv_discount_pct / 100. ev_total_price = lv_gross - ev_discount. ev_unit_price = lv_base_price. ENDFUNCTION.