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.