44 lines
916 B
ABAP
44 lines
916 B
ABAP
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.
|