Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
72 lines
1.7 KiB
ABAP
72 lines
1.7 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.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}kennel_pricer IMPLEMENTATION.
|
|
METHOD calculate_fee.
|
|
DATA: lv_rate TYPE i,
|
|
lv_total TYPE p LENGTH 8 DECIMALS 2,
|
|
lv_discount TYPE i.
|
|
|
|
IF iv_nights < 1.
|
|
rv_fee = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
IF iv_pet_type = 'DOG'.
|
|
IF iv_high_season = 'X'.
|
|
lv_rate = 2500 * 1125 DIV 1000.
|
|
ELSE.
|
|
lv_rate = 2500.
|
|
ENDIF.
|
|
ELSEIF iv_pet_type = 'CAT'.
|
|
IF iv_high_season = 'X'.
|
|
lv_rate = 1800 * 1125 DIV 1000.
|
|
ELSE.
|
|
lv_rate = 1800.
|
|
ENDIF.
|
|
ELSEIF iv_pet_type = 'RABB'.
|
|
IF iv_high_season = 'X'.
|
|
lv_rate = 800 * 1125 DIV 1000.
|
|
ELSE.
|
|
lv_rate = 800.
|
|
ENDIF.
|
|
ELSE.
|
|
IF iv_high_season = 'X'.
|
|
lv_rate = 2000 * 1125 DIV 1000.
|
|
ELSE.
|
|
lv_rate = 2000.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
CLEAR lv_total.
|
|
DO iv_nights TIMES.
|
|
lv_total = lv_total + lv_rate.
|
|
ENDDO.
|
|
|
|
IF iv_nights >= 7.
|
|
lv_discount = lv_rate * 10 DIV 100.
|
|
lv_total = lv_total - lv_discount * iv_nights.
|
|
ENDIF.
|
|
|
|
IF iv_pet_type = 'CAT' AND iv_high_season = 'X'.
|
|
lv_total = lv_total - 500.
|
|
ENDIF.
|
|
|
|
IF iv_grooming = 'X'.
|
|
lv_total = lv_total + 1500.
|
|
ENDIF.
|
|
|
|
rv_fee = lv_total / 100.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|