64 lines
1.3 KiB
ABAP
64 lines
1.3 KiB
ABAP
CLASS {{p}}snow_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_area TYPE i.
|
|
TYPES ty_priority TYPE c LENGTH 1.
|
|
TYPES ty_distance TYPE i.
|
|
TYPES ty_fee TYPE p LENGTH 9 DECIMALS 2.
|
|
|
|
METHODS calculate
|
|
IMPORTING iv_area TYPE ty_area
|
|
iv_priority TYPE ty_priority
|
|
iv_distance TYPE ty_distance
|
|
RETURNING VALUE(rv_fee) TYPE ty_fee.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}snow_fee IMPLEMENTATION.
|
|
METHOD calculate.
|
|
DATA: lv_rate TYPE ty_fee,
|
|
lv_base TYPE ty_fee,
|
|
lv_sum TYPE ty_fee,
|
|
lv_km TYPE ty_distance.
|
|
|
|
rv_fee = 0.
|
|
|
|
IF iv_area > 0.
|
|
|
|
IF iv_area <= 500.
|
|
lv_rate = '0.20'.
|
|
ELSE.
|
|
IF iv_area <= 2000.
|
|
lv_rate = '0.16'.
|
|
ELSE.
|
|
lv_rate = '0.12'.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
lv_base = iv_area * lv_rate.
|
|
|
|
IF lv_base < 45.
|
|
lv_base = 45.
|
|
ENDIF.
|
|
|
|
IF iv_priority = 'E'.
|
|
lv_base = lv_base * 125 / 100.
|
|
ELSE.
|
|
IF iv_priority = 'X'.
|
|
lv_base = lv_base * 150 / 100.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
lv_sum = lv_base.
|
|
|
|
lv_km = iv_distance - 10.
|
|
IF lv_km > 0.
|
|
lv_rate = '0.40'.
|
|
lv_sum = lv_sum + lv_km * lv_rate.
|
|
ENDIF.
|
|
|
|
rv_fee = lv_sum.
|
|
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|