54 lines
1.1 KiB
ABAP
54 lines
1.1 KiB
ABAP
FUNCTION {{p}}weld_fee
|
|
IMPORTING
|
|
iv_material TYPE string
|
|
iv_seam_cm TYPE decfloat34
|
|
iv_express TYPE abap_bool
|
|
EXPORTING
|
|
ev_skip TYPE abap_bool
|
|
CHANGING
|
|
cv_fee TYPE decfloat34
|
|
EXCEPTIONS
|
|
invalid_length.
|
|
|
|
IF iv_seam_cm < 0.
|
|
RAISE invalid_length.
|
|
ENDIF.
|
|
|
|
ev_skip = abap_false.
|
|
|
|
DATA lv_rate TYPE decfloat34.
|
|
CASE iv_material.
|
|
WHEN 'ST'.
|
|
lv_rate = 12.
|
|
WHEN 'SS'.
|
|
lv_rate = 20.
|
|
WHEN 'AL'.
|
|
IF iv_seam_cm > 50.
|
|
ev_skip = abap_true.
|
|
RETURN.
|
|
ENDIF.
|
|
lv_rate = 28.
|
|
WHEN OTHERS.
|
|
ev_skip = abap_false.
|
|
RETURN.
|
|
ENDCASE.
|
|
|
|
DATA lv_fee TYPE decfloat34.
|
|
lv_fee = round( val = iv_seam_cm * lv_rate dec = 2 mode = cl_abap_math=>round_half_up ).
|
|
|
|
IF iv_seam_cm > 200.
|
|
lv_fee = round( val = lv_fee * 9 / 10 dec = 2 mode = cl_abap_math=>round_half_up ).
|
|
ENDIF.
|
|
|
|
IF iv_express = abap_true.
|
|
lv_fee = round( val = lv_fee * 125 / 100 dec = 2 mode = cl_abap_math=>round_half_up ).
|
|
ENDIF.
|
|
|
|
IF lv_fee < 40.
|
|
lv_fee = 40.
|
|
ENDIF.
|
|
|
|
cv_fee = lv_fee.
|
|
|
|
ENDFUNCTION.
|