Files
abap-llm/tasks_gen/train/G1062/faulty/m1_parking_pricer.clas.abap
2026-10-05 18:02:52 +02:00

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.