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(). IF sy-subrc = 0. rs_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.