Files
abap-llm/tasks_gen/eval/G0136/faulty/m1_kennel_pricer.clas.abap

94 lines
2.8 KiB
ABAP

CLASS {{p}}kennel_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_pet_type TYPE c LENGTH 4.
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
METHODS calculate_fee
IMPORTING iv_pet_type TYPE ty_pet_type
iv_nights TYPE i
iv_high_season TYPE abap_bool
iv_grooming TYPE abap_bool
RETURNING VALUE(rv_fee) TYPE ty_amount.
PRIVATE SECTION.
CONSTANTS:
BEGIN OF c_pet_type,
dog TYPE ty_pet_type VALUE 'DOG',
cat TYPE ty_pet_type VALUE 'CAT',
rabb TYPE ty_pet_type VALUE 'RABB',
END OF c_pet_type,
BEGIN OF c_rate,
dog TYPE i VALUE 2500,
cat TYPE i VALUE 1800,
rabb TYPE i VALUE 800,
other TYPE i VALUE 2000,
END OF c_rate,
c_surcharge_num TYPE i VALUE 1125,
c_surcharge_den TYPE i VALUE 1000,
c_discount_percent TYPE i VALUE 10,
c_percent_base TYPE i VALUE 100,
c_long_stay_nights TYPE i VALUE 7,
c_cat_high_cut TYPE i VALUE 500,
c_grooming_fee TYPE i VALUE 1500,
c_cents_per_euro TYPE i VALUE 100.
METHODS nightly_rate
IMPORTING iv_pet_type TYPE ty_pet_type
iv_high_season TYPE abap_bool
RETURNING VALUE(rv_rate) TYPE i.
METHODS long_stay_discount
IMPORTING iv_rate TYPE i
iv_nights TYPE i
RETURNING VALUE(rv_discount) TYPE i.
ENDCLASS.
CLASS {{p}}kennel_pricer IMPLEMENTATION.
METHOD calculate_fee.
IF iv_nights < 1.
rv_fee = 0.
RETURN.
ENDIF.
DATA(lv_rate) = nightly_rate( iv_pet_type = iv_pet_type
iv_high_season = iv_high_season ).
DATA(lv_cents) = CONV ty_amount( lv_rate * iv_nights ).
IF iv_nights >= c_long_stay_nights.
lv_cents = lv_cents + long_stay_discount( iv_rate = lv_rate
iv_nights = iv_nights ).
ENDIF.
IF iv_pet_type = c_pet_type-cat AND iv_high_season = abap_true.
lv_cents = lv_cents - c_cat_high_cut.
ENDIF.
IF iv_grooming = abap_true.
lv_cents = lv_cents + c_grooming_fee.
ENDIF.
rv_fee = lv_cents / c_cents_per_euro.
ENDMETHOD.
METHOD nightly_rate.
CASE iv_pet_type.
WHEN c_pet_type-dog.
rv_rate = c_rate-dog.
WHEN c_pet_type-cat.
rv_rate = c_rate-cat.
WHEN c_pet_type-rabb.
rv_rate = c_rate-rabb.
WHEN OTHERS.
rv_rate = c_rate-other.
ENDCASE.
IF iv_high_season = abap_true.
rv_rate = rv_rate * c_surcharge_num DIV c_surcharge_den.
ENDIF.
ENDMETHOD.
METHOD long_stay_discount.
DATA(lv_per_night) = iv_rate * c_discount_percent DIV c_percent_base.
rv_discount = lv_per_night * iv_nights.
ENDMETHOD.
ENDCLASS.