67 lines
1.9 KiB
ABAP
67 lines
1.9 KiB
ABAP
CLASS {{p}}rideshare_split DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_distance TYPE i.
|
|
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
METHODS constructor.
|
|
METHODS calculate_total
|
|
IMPORTING iv_distance_km TYPE ty_distance
|
|
iv_passengers TYPE i
|
|
RETURNING VALUE(rv_total) TYPE ty_amount.
|
|
METHODS calculate_share
|
|
IMPORTING iv_distance_km TYPE ty_distance
|
|
iv_passengers TYPE i
|
|
RETURNING VALUE(rv_share) TYPE ty_amount.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_base_fee TYPE ty_amount VALUE '3.00',
|
|
c_fee_per_km TYPE ty_amount VALUE '0.40',
|
|
c_detour_fee TYPE ty_amount VALUE '1.20',
|
|
c_min_share TYPE ty_amount VALUE '1.50'.
|
|
|
|
METHODS distance_fee
|
|
IMPORTING iv_distance_km TYPE ty_distance
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
METHODS detour_fee
|
|
IMPORTING iv_passengers TYPE i
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}rideshare_split IMPLEMENTATION.
|
|
METHOD constructor.
|
|
ENDMETHOD.
|
|
|
|
METHOD calculate_total.
|
|
IF iv_passengers < 1.
|
|
RETURN.
|
|
ENDIF.
|
|
rv_total = c_base_fee - distance_fee( iv_distance_km ) + detour_fee( iv_passengers ).
|
|
ENDMETHOD.
|
|
|
|
METHOD calculate_share.
|
|
IF iv_passengers < 1.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_total) = calculate_total( iv_distance_km = iv_distance_km
|
|
iv_passengers = iv_passengers ).
|
|
DATA lv_share TYPE p LENGTH 15 DECIMALS 5.
|
|
lv_share = lv_total / iv_passengers.
|
|
rv_share = round( val = lv_share dec = 2 ).
|
|
IF rv_share < c_min_share.
|
|
rv_share = c_min_share.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD distance_fee.
|
|
IF iv_distance_km > 0.
|
|
rv_fee = c_fee_per_km * iv_distance_km.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD detour_fee.
|
|
rv_fee = c_detour_fee * ( iv_passengers - 1 ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|