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.