59 lines
1.1 KiB
ABAP
59 lines
1.1 KiB
ABAP
FUNCTION {{p}}tree_fee
|
|
IMPORTING
|
|
iv_species TYPE string
|
|
iv_height_cm TYPE i
|
|
iv_near_house TYPE abap_bool
|
|
EXPORTING
|
|
ev_fee TYPE decfloat34
|
|
ev_warning TYPE abap_bool
|
|
EXCEPTIONS
|
|
invalid_height.
|
|
|
|
DATA lv_base_fee TYPE decfloat34.
|
|
DATA lv_fee TYPE decfloat34.
|
|
DATA lv_metres TYPE i.
|
|
DATA lv_extra_metres TYPE i.
|
|
|
|
ev_fee = 0.
|
|
ev_warning = abap_false.
|
|
|
|
IF iv_height_cm <= 0.
|
|
RAISE invalid_height.
|
|
ENDIF.
|
|
|
|
CASE iv_species.
|
|
WHEN 'OAK'.
|
|
lv_base_fee = 200.
|
|
WHEN 'PINE'.
|
|
lv_base_fee = 150.
|
|
WHEN 'BIRCH'.
|
|
lv_base_fee = 120.
|
|
WHEN OTHERS.
|
|
lv_base_fee = 100.
|
|
ENDCASE.
|
|
|
|
lv_metres = iv_height_cm DIV 100.
|
|
IF iv_height_cm MOD 100 <> 0.
|
|
lv_metres = lv_metres + 1.
|
|
ENDIF.
|
|
|
|
lv_extra_metres = lv_metres - 5.
|
|
IF lv_extra_metres < 0.
|
|
lv_extra_metres = 0.
|
|
ENDIF.
|
|
|
|
lv_fee = lv_base_fee + lv_extra_metres * 25.
|
|
|
|
IF iv_near_house = abap_true.
|
|
lv_fee = lv_fee * 1125 / 1000.
|
|
ENDIF.
|
|
|
|
IF iv_height_cm > 2000.
|
|
ev_warning = abap_true.
|
|
lv_fee = lv_fee + 500.
|
|
ENDIF.
|
|
|
|
ev_fee = round( val = lv_fee dec = 2 ).
|
|
|
|
ENDFUNCTION.
|