Files
abap-llm/tasks_gen/train/G1024/faulty/m2_holiday_checker.clas.abap

110 lines
2.9 KiB
ABAP

CLASS {{p}}holiday_checker DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_dest_code TYPE string.
TYPES:
BEGIN OF ty_booking,
dest_code TYPE ty_dest_code,
travellers TYPE i,
nights TYPE i,
departure TYPE d,
END OF ty_booking.
METHODS check
IMPORTING is_booking TYPE ty_booking
iv_today TYPE d
RAISING {{p}}cx_holiday_error.
PRIVATE SECTION.
CONSTANTS:
c_min_travellers TYPE i VALUE 1,
c_min_nights TYPE i VALUE 2,
c_max_nights TYPE i VALUE 28,
c_lead_days TYPE i VALUE 14.
METHODS normalize
IMPORTING iv_code TYPE ty_dest_code
RETURNING VALUE(rv_code) TYPE ty_dest_code.
METHODS max_travellers
IMPORTING iv_code TYPE ty_dest_code
RETURNING VALUE(rv_max) TYPE i
RAISING {{p}}cx_unknown_dest.
METHODS check_travellers
IMPORTING is_booking TYPE ty_booking
iv_max TYPE i
RAISING {{p}}cx_holiday_error.
METHODS check_nights
IMPORTING is_booking TYPE ty_booking
RAISING {{p}}cx_holiday_error.
METHODS check_departure
IMPORTING is_booking TYPE ty_booking
iv_today TYPE d
RAISING {{p}}cx_holiday_error.
ENDCLASS.
CLASS {{p}}holiday_checker IMPLEMENTATION.
METHOD check.
DATA(lv_code) = normalize( is_booking-dest_code ).
DATA(lv_max) = max_travellers( lv_code ).
check_travellers( is_booking = is_booking iv_max = lv_max ).
check_nights( is_booking ).
check_departure( is_booking = is_booking iv_today = iv_today ).
ENDMETHOD.
METHOD normalize.
rv_code = to_upper( replace( val = iv_code sub = ` ` with = `` occ = 0 ) ).
ENDMETHOD.
METHOD max_travellers.
CASE iv_code.
WHEN 'ALPS'.
rv_max = 6.
WHEN 'CRETE'.
rv_max = 4.
WHEN 'KYOTO'.
rv_max = 8.
WHEN 'LAPLAND'.
rv_max = 5.
WHEN 'SAFARI'.
rv_max = 7.
WHEN OTHERS.
RAISE EXCEPTION TYPE {{p}}cx_unknown_dest EXPORTING iv_dest = iv_code.
ENDCASE.
ENDMETHOD.
METHOD check_travellers.
IF is_booking-travellers < c_min_travellers
OR is_booking-travellers > iv_max.
RAISE EXCEPTION TYPE {{p}}cx_bad_travellers
EXPORTING iv_travellers = is_booking-travellers
iv_max = iv_max.
ENDIF.
ENDMETHOD.
METHOD check_nights.
IF is_booking-nights >= c_min_nights OR is_booking-nights > c_max_nights.
RAISE EXCEPTION TYPE {{p}}cx_bad_nights
EXPORTING iv_nights = is_booking-nights.
ENDIF.
ENDMETHOD.
METHOD check_departure.
DATA lv_earliest TYPE d.
lv_earliest = iv_today + c_lead_days.
IF is_booking-departure < lv_earliest.
RAISE EXCEPTION TYPE {{p}}cx_bad_departure
EXPORTING iv_departure = is_booking-departure
iv_earliest = lv_earliest.
ENDIF.
ENDMETHOD.
ENDCLASS.