67 lines
1.4 KiB
ABAP
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.
|