CLASS {{p}}airport_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_class TYPE c LENGTH 1. TYPES ty_zone TYPE c LENGTH 2. TYPES ty_flag TYPE c LENGTH 1. TYPES ty_curr TYPE c LENGTH 3. TYPES ty_amount TYPE p LENGTH 10 DECIMALS 2. METHODS landing_fee IMPORTING iv_class TYPE ty_class iv_zone TYPE ty_zone iv_night TYPE ty_flag iv_currency TYPE ty_curr iv_tonnes TYPE i RETURNING VALUE(rv_fee) TYPE ty_amount. METHODS passenger_fee IMPORTING iv_zone TYPE ty_zone iv_currency TYPE ty_curr iv_passengers TYPE i RETURNING VALUE(rv_fee) TYPE ty_amount. PRIVATE SECTION. TYPES ty_calc TYPE p LENGTH 13 DECIMALS 4. CONSTANTS: c_night_per_tonne TYPE ty_amount VALUE '7.50', c_pax_fee TYPE ty_amount VALUE '12.37', c_full_percent TYPE ty_amount VALUE '100.00', BEGIN OF c_rate, eur TYPE ty_amount VALUE '1.00', usd TYPE ty_amount VALUE '1.15', chf TYPE ty_amount VALUE '0.85', END OF c_rate. METHODS base_per_tonne IMPORTING iv_class TYPE ty_class RETURNING VALUE(rv_fee) TYPE ty_amount. METHODS zone_percent IMPORTING iv_zone TYPE ty_zone RETURNING VALUE(rv_percent) TYPE ty_amount. METHODS zone_surcharge IMPORTING iv_zone TYPE ty_zone RETURNING VALUE(rv_surcharge) TYPE ty_amount. METHODS convert IMPORTING iv_amount TYPE ty_calc iv_currency TYPE ty_curr RETURNING VALUE(rv_fee) TYPE ty_calc. ENDCLASS. CLASS {{p}}airport_fee IMPLEMENTATION. METHOD landing_fee. IF iv_tonnes < 1. RETURN. ENDIF. DATA lv_base TYPE ty_amount. lv_base = base_per_tonne( iv_class ). IF lv_base IS INITIAL. RETURN. ENDIF. DATA lv_percent TYPE ty_amount. lv_percent = c_full_percent + zone_percent( iv_zone ). DATA lv_per_tonne TYPE ty_calc. lv_per_tonne = lv_base * lv_percent / c_full_percent. IF iv_night = 'N'. lv_per_tonne = lv_per_tonne + c_night_per_tonne. ENDIF. DATA lv_converted TYPE ty_calc. lv_converted = convert( iv_amount = lv_per_tonne iv_currency = iv_currency ). rv_fee = lv_converted * iv_tonnes. ENDMETHOD. METHOD passenger_fee. IF iv_passengers < 1. RETURN. ENDIF. DATA lv_per_pax TYPE ty_amount. lv_per_pax = c_pax_fee + zone_surcharge( iv_zone ). DATA lv_converted TYPE ty_calc. lv_converted = convert( iv_amount = lv_per_pax iv_currency = iv_currency ). rv_fee = lv_converted * iv_passengers. ENDMETHOD. METHOD base_per_tonne. CASE iv_class. WHEN 'L'. rv_fee = '12.50'. WHEN 'M'. rv_fee = '24.50'. WHEN 'H'. rv_fee = '52.50'. ENDCASE. ENDMETHOD. METHOD zone_percent. CASE iv_zone. WHEN 'Z2'. rv_percent = '12.50'. WHEN 'Z3'. rv_percent = '27.50'. ENDCASE. ENDMETHOD. METHOD zone_surcharge. CASE iv_zone. WHEN 'Z2'. rv_surcharge = '1.45'. WHEN 'Z3'. rv_surcharge = '2.90'. ENDCASE. ENDMETHOD. METHOD convert. CASE iv_currency. WHEN 'EUR'. rv_fee = round( val = iv_amount * c_rate-eur dec = 2 ). WHEN 'USD'. rv_fee = round( val = iv_amount * c_rate-usd dec = 2 ). WHEN 'CHF'. rv_fee = round( val = iv_amount * c_rate-chf dec = 2 ). ENDCASE. ENDMETHOD. ENDCLASS.