Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
59 lines
1.5 KiB
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.
|