Files
abap-llm/tasks_gen/train/G1125/faulty/m0_prt_price.func.abap
2026-10-05 18:02:52 +02:00

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_true.
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.