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

146 lines
4.2 KiB
ABAP

CLASS {{p}}pool_ticket DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_zone TYPE c LENGTH 2.
TYPES ty_rate TYPE c LENGTH 1.
TYPES ty_day TYPE c LENGTH 2.
TYPES ty_flag TYPE c LENGTH 1.
TYPES ty_status TYPE c LENGTH 2.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
CONSTANTS:
BEGIN OF c_status,
ok TYPE ty_status VALUE 'OK',
zone TYPE ty_status VALUE 'ZN',
rate TYPE ty_status VALUE 'RT',
day TYPE ty_status VALUE 'DY',
END OF c_status.
CONSTANTS:
BEGIN OF c_flag,
member TYPE ty_flag VALUE 'X',
guest TYPE ty_flag VALUE ' ',
END OF c_flag.
METHODS check_booking
IMPORTING iv_zone TYPE ty_zone
iv_rate TYPE ty_rate
iv_day TYPE ty_day
RETURNING VALUE(rv_status) TYPE ty_status.
METHODS ticket_price
IMPORTING iv_zone TYPE ty_zone
iv_rate TYPE ty_rate
iv_day TYPE ty_day
iv_member TYPE ty_flag
RETURNING VALUE(rv_price) TYPE ty_amount.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_base_price,
zone TYPE ty_zone,
rate TYPE ty_rate,
base TYPE ty_amount,
END OF ty_base_price,
tt_base_price TYPE HASHED TABLE OF ty_base_price WITH UNIQUE KEY zone rate.
CONSTANTS c_weekend_surcharge TYPE ty_amount VALUE '2.50'.
CONSTANTS c_member_share TYPE i VALUE 80.
METHODS base_prices
RETURNING VALUE(rt_price) TYPE tt_base_price.
METHODS weekend_surcharge
IMPORTING iv_day TYPE ty_day
RETURNING VALUE(rv_surcharge) TYPE ty_amount.
METHODS is_known_zone
IMPORTING iv_zone TYPE ty_zone
RETURNING VALUE(rv_known) TYPE abap_bool.
METHODS is_known_rate
IMPORTING iv_rate TYPE ty_rate
RETURNING VALUE(rv_known) TYPE abap_bool.
METHODS is_known_day
IMPORTING iv_day TYPE ty_day
RETURNING VALUE(rv_known) TYPE abap_bool.
ENDCLASS.
CLASS {{p}}pool_ticket IMPLEMENTATION.
METHOD check_booking.
IF is_known_zone( iv_zone ) = abap_false.
rv_status = c_status-zone.
RETURN.
ENDIF.
IF is_known_rate( iv_rate ) = abap_false.
rv_status = c_status-rate.
RETURN.
ENDIF.
IF is_known_day( iv_day ) = abap_false.
rv_status = c_status-day.
RETURN.
ENDIF.
rv_status = c_status-ok.
ENDMETHOD.
METHOD ticket_price.
IF check_booking( iv_zone = iv_zone
iv_rate = iv_rate
iv_day = iv_day ) = c_status-ok.
rv_price = 0.
RETURN.
ENDIF.
DATA(lt_price) = base_prices( ).
READ TABLE lt_price INTO DATA(ls_price)
WITH TABLE KEY zone = iv_zone rate = iv_rate.
IF sy-subrc <> 0.
rv_price = 0.
RETURN.
ENDIF.
rv_price = ls_price-base + weekend_surcharge( iv_day ).
IF iv_member = c_flag-member.
rv_price = rv_price * c_member_share / 100.
ENDIF.
ENDMETHOD.
METHOD base_prices.
rt_price = VALUE #(
( zone = 'IN' rate = 'A' base = '10.00' )
( zone = 'IN' rate = 'C' base = '5.00' )
( zone = 'IN' rate = 'S' base = '7.50' )
( zone = 'OU' rate = 'A' base = '7.50' )
( zone = 'OU' rate = 'C' base = '3.75' )
( zone = 'OU' rate = 'S' base = '5.00' )
( zone = 'SA' rate = 'A' base = '15.00' )
( zone = 'SA' rate = 'C' base = '7.50' )
( zone = 'SA' rate = 'S' base = '11.25' )
( zone = 'AL' rate = 'A' base = '20.00' )
( zone = 'AL' rate = 'C' base = '10.00' )
( zone = 'AL' rate = 'S' base = '15.00' ) ).
ENDMETHOD.
METHOD weekend_surcharge.
IF iv_day = 'SA' OR iv_day = 'SU'.
rv_surcharge = c_weekend_surcharge.
ENDIF.
ENDMETHOD.
METHOD is_known_zone.
rv_known = xsdbool( iv_zone = 'IN' OR iv_zone = 'OU'
OR iv_zone = 'SA' OR iv_zone = 'AL' ).
ENDMETHOD.
METHOD is_known_rate.
rv_known = xsdbool( iv_rate = 'A' OR iv_rate = 'C' OR iv_rate = 'S' ).
ENDMETHOD.
METHOD is_known_day.
rv_known = xsdbool( iv_day = 'MO' OR iv_day = 'TU' OR iv_day = 'WE'
OR iv_day = 'TH' OR iv_day = 'FR' OR iv_day = 'SA'
OR iv_day = 'SU' ).
ENDMETHOD.
ENDCLASS.