Files
abap-llm/tasks_gen/eval/G0102/faulty/m1_hotel_rate.clas.abap

109 lines
3.7 KiB
ABAP

CLASS {{p}}hotel_rate DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_hotel_rate.
PRIVATE SECTION.
CONSTANTS:
c_breakfast TYPE {{p}}if_hotel_rate=>ty_amount VALUE '12.50',
c_city_tax TYPE {{p}}if_hotel_rate=>ty_amount VALUE '3.00'.
METHODS validate
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
iv_nights TYPE i
iv_guests TYPE i
RETURNING VALUE(rv_reason) TYPE {{p}}if_hotel_rate=>ty_reason.
METHODS room_count
IMPORTING iv_guests TYPE i
RETURNING VALUE(rv_rooms) TYPE i.
METHODS nightly_rate
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
RETURNING VALUE(rv_amount) TYPE {{p}}if_hotel_rate=>ty_amount.
METHODS discount_percent
IMPORTING iv_nights TYPE i
RETURNING VALUE(rv_percent) TYPE i.
METHODS net_room_total
IMPORTING iv_category TYPE {{p}}if_hotel_rate=>ty_category
iv_nights TYPE i
iv_guests TYPE i
RETURNING VALUE(rv_total) TYPE {{p}}if_hotel_rate=>ty_amount.
METHODS extras
IMPORTING iv_nights TYPE i
iv_guests TYPE i
iv_breakfast TYPE abap_bool
RETURNING VALUE(rv_extras) TYPE {{p}}if_hotel_rate=>ty_amount.
ENDCLASS.
CLASS {{p}}hotel_rate IMPLEMENTATION.
METHOD {{p}}if_hotel_rate~calculate.
rs_result-reason = validate( iv_category = iv_category
iv_nights = iv_nights
iv_guests = iv_guests ).
IF rs_result-reason <> {{p}}if_hotel_rate=>c_reason-ok.
rs_result-price = 0.
RETURN.
ENDIF.
rs_result-price = net_room_total( iv_category = iv_category
iv_nights = iv_nights
iv_guests = iv_guests )
+ extras( iv_nights = iv_nights
iv_guests = iv_guests
iv_breakfast = iv_breakfast ).
ENDMETHOD.
METHOD validate.
IF iv_nights < 1.
rv_reason = {{p}}if_hotel_rate=>c_reason-nights.
ELSEIF iv_guests < 1.
rv_reason = {{p}}if_hotel_rate=>c_reason-guests.
ELSEIF iv_category <> {{p}}if_hotel_rate=>c_category-basic
AND iv_category <> {{p}}if_hotel_rate=>c_category-comfort
OR iv_category <> {{p}}if_hotel_rate=>c_category-suite.
rv_reason = {{p}}if_hotel_rate=>c_reason-category.
ELSE.
rv_reason = {{p}}if_hotel_rate=>c_reason-ok.
ENDIF.
ENDMETHOD.
METHOD room_count.
rv_rooms = ( iv_guests + 1 ) DIV 2.
ENDMETHOD.
METHOD nightly_rate.
CASE iv_category.
WHEN {{p}}if_hotel_rate=>c_category-basic.
rv_amount = '90.00'.
WHEN {{p}}if_hotel_rate=>c_category-comfort.
rv_amount = '140.00'.
WHEN {{p}}if_hotel_rate=>c_category-suite.
rv_amount = '260.00'.
ENDCASE.
ENDMETHOD.
METHOD discount_percent.
IF iv_nights >= 28.
rv_percent = 20.
ELSEIF iv_nights >= 14.
rv_percent = 15.
ELSEIF iv_nights >= 7.
rv_percent = 10.
ENDIF.
ENDMETHOD.
METHOD net_room_total.
DATA lv_total TYPE {{p}}if_hotel_rate=>ty_amount.
lv_total = nightly_rate( iv_category ) * room_count( iv_guests ) * iv_nights.
DATA lv_discount TYPE {{p}}if_hotel_rate=>ty_amount.
lv_discount = lv_total * discount_percent( iv_nights ) / 100.
rv_total = lv_total - lv_discount.
ENDMETHOD.
METHOD extras.
DATA(lv_guest_nights) = iv_guests * iv_nights.
rv_extras = lv_guest_nights * c_city_tax.
IF iv_breakfast = abap_true.
rv_extras = rv_extras + lv_guest_nights * c_breakfast.
ENDIF.
ENDMETHOD.
ENDCLASS.