FUNCTION {{p}}lib_fee IMPORTING iv_media_type TYPE string iv_days_late TYPE i iv_value TYPE decfloat34 EXPORTING ev_blocked TYPE abap_bool CHANGING cv_fee TYPE decfloat34 EXCEPTIONS invalid_days. DATA lv_fee TYPE decfloat34. DATA lv_rate TYPE decfloat34. ev_blocked = abap_false. IF iv_days_late < 0. RAISE invalid_days. ENDIF. CASE iv_media_type. WHEN 'BOOK'. lv_fee = iv_value * iv_days_late * 5 / 1000. cv_fee = round( val = lv_fee dec = 2 ). IF cv_fee > 5. cv_fee = 5. ENDIF. WHEN 'DVD'. lv_fee = iv_value / iv_days_late / 100. cv_fee = round( val = lv_fee dec = 2 ). IF cv_fee > 12. cv_fee = 12. ENDIF. WHEN 'MAG'. lv_rate = '0.30'. cv_fee = iv_days_late * lv_rate. WHEN 'REF'. ev_blocked = abap_true. WHEN OTHERS. cv_fee = 0. ENDCASE. ENDFUNCTION.