Files
abap-llm/tasks_gen/train/G1123/reference/airport_fee.clas.abap
2026-10-05 18:02:52 +02:00

125 lines
3.5 KiB
ABAP

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.