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.