Files
abap-llm/tasks_gen/eval/G0171/reference/kiln_pricer.clas.abap

59 lines
1.5 KiB
ABAP

CLASS {{p}}kiln_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_kiln_price.
PRIVATE SECTION.
TYPES ty_amount TYPE p LENGTH 10 DECIMALS 4.
CONSTANTS:
c_base_fee TYPE ty_amount VALUE '40.00',
c_piece_fee TYPE ty_amount VALUE '12.00',
c_free_weight TYPE {{p}}if_kiln_price=>ty_weight VALUE '10.00',
c_kg_fee TYPE ty_amount VALUE '3.00',
c_glaze_fee TYPE ty_amount VALUE '25.00',
c_member_rate TYPE ty_amount VALUE '0.85'.
METHODS clay_factor
IMPORTING iv_clay TYPE {{p}}if_kiln_price=>ty_clay
RETURNING VALUE(rv_factor) TYPE ty_amount.
ENDCLASS.
CLASS {{p}}kiln_pricer IMPLEMENTATION.
METHOD {{p}}if_kiln_price~calculate_price.
IF iv_clay IS INITIAL.
rv_price = 0.
RETURN.
ENDIF.
DATA lv_price TYPE ty_amount.
lv_price = c_base_fee + iv_pieces * c_piece_fee.
IF iv_weight > c_free_weight.
lv_price = lv_price + ( iv_weight - c_free_weight ) * c_kg_fee.
ENDIF.
DATA(lv_factor) = clay_factor( iv_clay ).
lv_price = lv_price * lv_factor.
IF iv_glaze = abap_true.
lv_price = lv_price + c_glaze_fee.
ENDIF.
IF iv_member = abap_true.
lv_price = lv_price * c_member_rate.
ENDIF.
rv_price = round( val = lv_price dec = 2 ).
ENDMETHOD.
METHOD clay_factor.
CASE iv_clay.
WHEN 'ST'.
rv_factor = '1.20'.
WHEN 'PO'.
rv_factor = '1.50'.
WHEN OTHERS.
rv_factor = '1.00'.
ENDCASE.
ENDMETHOD.
ENDCLASS.