113 lines
3.3 KiB
ABAP
113 lines
3.3 KiB
ABAP
CLASS {{p}}parking_pricer DEFINITION
|
|
PUBLIC
|
|
FINAL
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
TYPES ty_vehicle TYPE c LENGTH 1.
|
|
TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
CONSTANTS:
|
|
c_vehicle_car TYPE ty_vehicle VALUE 'C',
|
|
c_vehicle_motorcycle TYPE ty_vehicle VALUE 'M',
|
|
c_vehicle_van TYPE ty_vehicle VALUE 'V'.
|
|
|
|
METHODS calculate_fee
|
|
IMPORTING iv_minutes TYPE i
|
|
iv_vehicle TYPE ty_vehicle
|
|
iv_lost_ticket TYPE abap_bool
|
|
RETURNING VALUE(rv_fee) TYPE ty_fee.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_grace_minutes TYPE i VALUE 15,
|
|
c_minutes_per_hour TYPE i VALUE 60,
|
|
c_no_fee TYPE ty_fee VALUE '0.00',
|
|
c_car_rate TYPE ty_fee VALUE '2.00',
|
|
c_car_cap TYPE ty_fee VALUE '20.00',
|
|
c_car_lost_fee TYPE ty_fee VALUE '25.00',
|
|
c_moto_rate TYPE ty_fee VALUE '1.00',
|
|
c_moto_cap TYPE ty_fee VALUE '10.00',
|
|
c_moto_lost_fee TYPE ty_fee VALUE '15.00',
|
|
c_van_rate TYPE ty_fee VALUE '3.00',
|
|
c_van_cap TYPE ty_fee VALUE '24.00',
|
|
c_van_lost_fee TYPE ty_fee VALUE '35.00',
|
|
c_default_lost_fee TYPE ty_fee VALUE '25.00'.
|
|
|
|
TYPES:
|
|
BEGIN OF ty_tariff,
|
|
vehicle TYPE ty_vehicle,
|
|
rate TYPE ty_fee,
|
|
cap TYPE ty_fee,
|
|
lost_fee TYPE ty_fee,
|
|
END OF ty_tariff,
|
|
tt_tariff TYPE HASHED TABLE OF ty_tariff WITH UNIQUE KEY vehicle.
|
|
|
|
METHODS get_tariff
|
|
IMPORTING iv_vehicle TYPE ty_vehicle
|
|
RETURNING VALUE(rs_tariff) TYPE ty_tariff.
|
|
METHODS all_tariffs
|
|
RETURNING VALUE(rt_tariff) TYPE tt_tariff.
|
|
METHODS started_hours
|
|
IMPORTING iv_minutes TYPE i
|
|
RETURNING VALUE(rv_hours) TYPE i.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}parking_pricer IMPLEMENTATION.
|
|
METHOD calculate_fee.
|
|
DATA(ls_tariff) = get_tariff( iv_vehicle ).
|
|
|
|
IF iv_lost_ticket <> abap_true.
|
|
rv_fee = ls_tariff-lost_fee.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
IF iv_minutes <= c_grace_minutes.
|
|
rv_fee = c_no_fee.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
rv_fee = started_hours( iv_minutes ) * ls_tariff-rate.
|
|
IF rv_fee > ls_tariff-cap.
|
|
rv_fee = ls_tariff-cap.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD get_tariff.
|
|
DATA(lt_tariff) = all_tariffs( ).
|
|
ASSIGN lt_tariff[ vehicle = iv_vehicle ] TO FIELD-SYMBOL(<ls_tariff>).
|
|
IF sy-subrc = 0.
|
|
rs_tariff = <ls_tariff>.
|
|
ELSE.
|
|
rs_tariff = VALUE #( vehicle = iv_vehicle
|
|
rate = c_no_fee
|
|
cap = c_no_fee
|
|
lost_fee = c_default_lost_fee ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD all_tariffs.
|
|
rt_tariff = VALUE #(
|
|
( vehicle = c_vehicle_car
|
|
rate = c_car_rate
|
|
cap = c_car_cap
|
|
lost_fee = c_car_lost_fee )
|
|
( vehicle = c_vehicle_motorcycle
|
|
rate = c_moto_rate
|
|
cap = c_moto_cap
|
|
lost_fee = c_moto_lost_fee )
|
|
( vehicle = c_vehicle_van
|
|
rate = c_van_rate
|
|
cap = c_van_cap
|
|
lost_fee = c_van_lost_fee ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD started_hours.
|
|
rv_hours = iv_minutes DIV c_minutes_per_hour.
|
|
IF iv_minutes MOD c_minutes_per_hour <> 0.
|
|
rv_hours = rv_hours + 1.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|