FUNCTION {{p}}prt_price IMPORTING iv_job_type TYPE string iv_quantity TYPE i iv_express TYPE abap_bool EXPORTING ev_skip TYPE abap_bool ev_note TYPE string CHANGING cv_price TYPE decfloat34 EXCEPTIONS invalid_quantity. CONSTANTS: lc_price_fl TYPE decfloat34 VALUE '0.05', lc_price_bc TYPE decfloat34 VALUE '0.08', lc_price_po TYPE decfloat34 VALUE '1.15', lc_min_fl TYPE decfloat34 VALUE '10', lc_min_bc TYPE decfloat34 VALUE '5', lc_discount TYPE decfloat34 VALUE '0.9', lc_express TYPE decfloat34 VALUE '1.25'. ev_skip = abap_false. ev_note = ''. cv_price = 0. IF iv_quantity < 1. RAISE invalid_quantity. ENDIF. CASE iv_job_type. WHEN 'FL'. cv_price = round( val = iv_quantity * lc_price_fl dec = 2 mode = cl_abap_math=>round_half_up ). IF cv_price < lc_min_fl. cv_price = lc_min_fl. ENDIF. WHEN 'BC'. cv_price = round( val = iv_quantity * lc_price_bc dec = 2 mode = cl_abap_math=>round_half_up ). IF cv_price < lc_min_bc. cv_price = lc_min_bc. ENDIF. WHEN 'PO'. cv_price = round( val = iv_quantity * lc_price_po dec = 2 mode = cl_abap_math=>round_half_up ). IF iv_quantity > 100. cv_price = round( val = cv_price * lc_discount dec = 2 mode = cl_abap_math=>round_half_up ). ENDIF. WHEN OTHERS. ev_skip = abap_true. ev_note = 'MANUAL QUOTE'. ENDCASE. IF iv_express = abap_true AND cv_price > 0. cv_price = round( val = cv_price * lc_express dec = 2 mode = cl_abap_math=>round_half_up ). ENDIF. ENDFUNCTION.