57 lines
1018 B
ABAP
57 lines
1018 B
ABAP
FUNCTION {{p}}drv_fee
|
|
IMPORTING
|
|
iv_lesson_type TYPE string
|
|
iv_vehicle TYPE string
|
|
iv_minutes TYPE i
|
|
EXPORTING
|
|
ev_block TYPE abap_bool
|
|
CHANGING
|
|
cv_fee TYPE decfloat34
|
|
EXCEPTIONS
|
|
invalid_minutes.
|
|
|
|
DATA lv_rate TYPE decfloat34.
|
|
DATA lv_surcharge TYPE decfloat34.
|
|
|
|
ev_block = abap_false.
|
|
cv_fee = 0.
|
|
|
|
IF iv_minutes < 1.
|
|
RAISE invalid_minutes.
|
|
ENDIF.
|
|
|
|
CASE iv_vehicle.
|
|
WHEN 'CAR'.
|
|
lv_rate = '1.20'.
|
|
WHEN 'TRUCK'.
|
|
lv_rate = '2.50'.
|
|
WHEN 'MOTORCYCLE'.
|
|
lv_rate = '0.90'.
|
|
WHEN OTHERS.
|
|
RETURN.
|
|
ENDCASE.
|
|
|
|
cv_fee = lv_rate * iv_minutes.
|
|
|
|
CASE iv_lesson_type.
|
|
WHEN 'NIGHT'.
|
|
lv_surcharge = '0.25'.
|
|
WHEN 'MOTORWAY'.
|
|
lv_surcharge = '0.40'.
|
|
WHEN OTHERS.
|
|
lv_surcharge = 0.
|
|
ENDCASE.
|
|
cv_fee = cv_fee * ( 1 + lv_surcharge ).
|
|
|
|
cv_fee = round( val = cv_fee dec = 2 ).
|
|
|
|
IF cv_fee < 15.
|
|
cv_fee = 15.
|
|
ENDIF.
|
|
|
|
IF iv_minutes <= 120.
|
|
ev_block = abap_true.
|
|
ENDIF.
|
|
|
|
ENDFUNCTION.
|