FUNCTION {{p}}bind_fee IMPORTING iv_binding TYPE string iv_pages TYPE i iv_member TYPE abap_bool EXPORTING ev_rush TYPE abap_bool CHANGING cv_fee TYPE decfloat34 EXCEPTIONS invalid_pages. CONSTANTS: lc_rate_pb TYPE decfloat34 VALUE '0.05', lc_rate_hb TYPE decfloat34 VALUE '0.12', lc_rate_ex TYPE decfloat34 VALUE '0.20', lc_min_hb TYPE decfloat34 VALUE '15.00', lc_discount TYPE decfloat34 VALUE '0.9'. ev_rush = abap_false. IF iv_pages < 1. RAISE invalid_pages. ENDIF. CASE iv_binding. WHEN 'PB'. cv_fee = round( val = iv_pages * lc_rate_pb dec = 2 mode = cl_abap_math=>round_half_up ). WHEN 'HB'. cv_fee = round( val = iv_pages * lc_rate_hb dec = 2 mode = cl_abap_math=>round_half_up ). IF cv_fee < lc_min_hb. cv_fee = lc_min_hb. ENDIF. WHEN 'EX'. ev_rush = abap_true. cv_fee = round( val = iv_pages * lc_rate_ex dec = 2 mode = cl_abap_math=>round_half_up ). WHEN OTHERS. cv_fee = 0. ENDCASE. IF iv_member = abap_true AND cv_fee > 0. cv_fee = round( val = cv_fee * lc_discount dec = 2 mode = cl_abap_math=>round_half_up ). ENDIF. ENDFUNCTION.