57 lines
1.6 KiB
ABAP
57 lines
1.6 KiB
ABAP
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.
|