92 lines
2.2 KiB
ABAP
92 lines
2.2 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.
|
|
METHODS lost_ticket_fee
|
|
IMPORTING iv_vehicle TYPE ty_vehicle
|
|
EXPORTING ev_fee TYPE ty_fee.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}parking_pricer IMPLEMENTATION.
|
|
METHOD calculate_fee.
|
|
DATA lv_minutes TYPE i.
|
|
DATA lv_hours TYPE i.
|
|
DATA lv_rate TYPE ty_fee.
|
|
DATA lv_cap TYPE ty_fee.
|
|
|
|
IF iv_lost_ticket = abap_true.
|
|
" a lost ticket is charged with a flat fee
|
|
lost_ticket_fee( EXPORTING iv_vehicle = iv_vehicle
|
|
IMPORTING ev_fee = rv_fee ).
|
|
ELSE.
|
|
IF iv_minutes < 0.
|
|
lv_minutes = 0.
|
|
ELSE.
|
|
lv_minutes = iv_minutes.
|
|
ENDIF.
|
|
|
|
IF lv_minutes <= 15.
|
|
" the first 15 minutes are free
|
|
rv_fee = 0.
|
|
ELSE.
|
|
lv_hours = lv_minutes DIV 60.
|
|
IF lv_minutes MOD 60 <> 0.
|
|
lv_hours = lv_hours + 1.
|
|
ENDIF.
|
|
IF lv_hours < 1.
|
|
lv_hours = 1.
|
|
ENDIF.
|
|
|
|
IF iv_vehicle = 'C'.
|
|
lv_rate = '2.00'.
|
|
lv_cap = '20.00'.
|
|
ELSEIF iv_vehicle = 'M'.
|
|
lv_rate = '1.00'.
|
|
lv_cap = '10.00'.
|
|
ELSEIF iv_vehicle = 'V'.
|
|
lv_rate = '3.00'.
|
|
lv_cap = '24.00'.
|
|
ELSE.
|
|
lv_rate = '0.00'.
|
|
lv_cap = '0.00'.
|
|
ENDIF.
|
|
|
|
rv_fee = lv_hours * lv_rate.
|
|
IF rv_fee > lv_cap.
|
|
rv_fee = lv_cap.
|
|
ENDIF.
|
|
ENDIF.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD lost_ticket_fee.
|
|
IF iv_vehicle = 'C'.
|
|
ev_fee = '25.00'.
|
|
ELSEIF iv_vehicle = 'M'.
|
|
ev_fee = '15.00'.
|
|
ELSEIF iv_vehicle = 'V'.
|
|
ev_fee = '35.00'.
|
|
ELSE.
|
|
ev_fee = '25.00'.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|