Files
abap-llm/tasks_gen/train/G1144/reference/move_fee.func.abap
2026-10-05 18:02:52 +02:00

67 lines
1.4 KiB
ABAP

FUNCTION {{p}}move_fee
IMPORTING
iv_order_no TYPE string
iv_move_date TYPE d
iv_work_hours TYPE decfloat34
iv_box_count TYPE i
iv_calc_mode TYPE string
EXPORTING
ev_fee TYPE decfloat34
ev_msg TYPE string
EXCEPTIONS
invalid_order
invalid_date
invalid_hours
invalid_count
unknown_mode.
CONSTANTS lc_box_rate TYPE decfloat34 VALUE '1.5'.
CONSTANTS lc_exp_rate TYPE decfloat34 VALUE '1.2'.
DATA lv_rate TYPE decfloat34.
DATA lv_subtotal TYPE decfloat34.
ev_fee = 0.
IF iv_order_no IS INITIAL.
ev_msg = 'Order number is missing'.
RAISE invalid_order.
ENDIF.
IF iv_move_date IS INITIAL.
ev_msg = 'Move date is missing'.
RAISE invalid_date.
ENDIF.
IF iv_work_hours <= 0.
ev_msg = 'Work hours are not positive'.
RAISE invalid_hours.
ENDIF.
IF iv_box_count < 0.
ev_msg = 'Box count is negative'.
RAISE invalid_count.
ENDIF.
CASE iv_calc_mode.
WHEN 'ECO'.
lv_rate = 45.
WHEN 'STD'.
lv_rate = 60.
WHEN 'EXP'.
lv_rate = 75.
WHEN OTHERS.
ev_msg = 'Calculation mode is unknown'.
RAISE unknown_mode.
ENDCASE.
lv_subtotal = iv_work_hours * lv_rate + iv_box_count * lc_box_rate.
IF iv_calc_mode = 'EXP'.
lv_subtotal = lv_subtotal * lc_exp_rate.
ENDIF.
ev_fee = round( val = lv_subtotal dec = 2 mode = cl_abap_math=>round_half_up ).
ev_msg = 'OK'.
ENDFUNCTION.