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 OR 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.