Files
abap-llm/tasks_gen/eval/G0138/reference/cake_pricer.clas.abap

126 lines
3.8 KiB
ABAP

CLASS {{p}}cake_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
TYPES ty_filling TYPE c LENGTH 1.
TYPES ty_decoration TYPE c LENGTH 1.
METHODS calculate_price
IMPORTING iv_size TYPE i
iv_layers TYPE i
iv_filling TYPE ty_filling
iv_decoration TYPE ty_decoration
iv_express TYPE abap_bool
RETURNING VALUE(rv_price) TYPE ty_price.
PRIVATE SECTION.
CONSTANTS:
c_base_price TYPE ty_price VALUE '12.00',
c_min_price TYPE ty_price VALUE '15.00',
c_min_size TYPE i VALUE 16,
c_free_size TYPE i VALUE 20,
c_photo_size TYPE i VALUE 24,
c_size_rate TYPE ty_price VALUE '0.80',
c_layer_rate TYPE ty_price VALUE '4.50',
c_express_rate TYPE ty_price VALUE '1.25',
c_filling_plain TYPE ty_price VALUE '3.00',
c_filling_choc TYPE ty_price VALUE '4.00',
c_filling_fruit TYPE ty_price VALUE '5.50',
c_deco_flowers TYPE ty_price VALUE '6.00',
c_deco_photo TYPE ty_price VALUE '9.50',
c_deco_sugar TYPE ty_price VALUE '12.00'.
METHODS clamp_size
IMPORTING iv_size TYPE i
RETURNING VALUE(rv_size) TYPE i.
METHODS clamp_layers
IMPORTING iv_layers TYPE i
RETURNING VALUE(rv_layers) TYPE i.
METHODS size_surcharge
IMPORTING iv_size TYPE i
RETURNING VALUE(rv_amount) TYPE ty_price.
METHODS layer_surcharge
IMPORTING iv_layers TYPE i
RETURNING VALUE(rv_amount) TYPE ty_price.
METHODS filling_surcharge
IMPORTING iv_filling TYPE ty_filling
RETURNING VALUE(rv_amount) TYPE ty_price.
METHODS decoration_surcharge
IMPORTING iv_decoration TYPE ty_decoration
iv_size TYPE i
RETURNING VALUE(rv_amount) TYPE ty_price.
METHODS apply_express
IMPORTING iv_amount TYPE ty_price
RETURNING VALUE(rv_amount) TYPE ty_price.
ENDCLASS.
CLASS {{p}}cake_pricer IMPLEMENTATION.
METHOD calculate_price.
DATA(lv_size) = clamp_size( iv_size ).
DATA(lv_price) = c_base_price.
lv_price = lv_price + size_surcharge( lv_size ).
lv_price = lv_price + layer_surcharge( clamp_layers( iv_layers ) ).
lv_price = lv_price + filling_surcharge( iv_filling ).
lv_price = lv_price + decoration_surcharge( iv_decoration = iv_decoration
iv_size = lv_size ).
IF iv_express = abap_true.
lv_price = apply_express( lv_price ).
ENDIF.
IF lv_price < c_min_price.
rv_price = c_min_price.
ELSE.
rv_price = lv_price.
ENDIF.
ENDMETHOD.
METHOD clamp_size.
rv_size = nmax( val1 = iv_size val2 = c_min_size ).
ENDMETHOD.
METHOD clamp_layers.
rv_layers = nmax( val1 = iv_layers val2 = 1 ).
ENDMETHOD.
METHOD size_surcharge.
IF iv_size > c_free_size.
rv_amount = ( iv_size - c_free_size ) * c_size_rate.
ENDIF.
ENDMETHOD.
METHOD layer_surcharge.
IF iv_layers > 1.
rv_amount = ( iv_layers - 1 ) * c_layer_rate.
ENDIF.
ENDMETHOD.
METHOD filling_surcharge.
CASE iv_filling.
WHEN 'C'.
rv_amount = c_filling_choc.
WHEN 'F'.
rv_amount = c_filling_fruit.
WHEN 'N'.
CLEAR rv_amount.
WHEN OTHERS.
rv_amount = c_filling_plain.
ENDCASE.
ENDMETHOD.
METHOD decoration_surcharge.
CASE iv_decoration.
WHEN 'F'.
rv_amount = c_deco_flowers.
WHEN 'P'.
IF iv_size >= c_photo_size.
rv_amount = c_deco_photo.
ENDIF.
WHEN 'S'.
rv_amount = c_deco_sugar.
ENDCASE.
ENDMETHOD.
METHOD apply_express.
rv_amount = round( val = iv_amount * c_express_rate dec = 2 ).
ENDMETHOD.
ENDCLASS.