Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
147 lines
5.4 KiB
ABAP
147 lines
5.4 KiB
ABAP
CLASS {{p}}locksmith_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_locksmith_pricer.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_job_key TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'K',
|
|
c_job_lockout TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'L',
|
|
c_job_rekey TYPE {{p}}if_locksmith_pricer=>ty_job_type VALUE 'R',
|
|
c_key_std TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'S',
|
|
c_key_sec TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'Y',
|
|
c_key_elec TYPE {{p}}if_locksmith_pricer=>ty_key_type VALUE 'E',
|
|
c_call_late TYPE {{p}}if_locksmith_pricer=>ty_callout VALUE 'A',
|
|
c_call_week TYPE {{p}}if_locksmith_pricer=>ty_callout VALUE 'W',
|
|
c_fee_std TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '89.00',
|
|
c_fee_late TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '149.00',
|
|
c_fee_week TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '179.00',
|
|
c_rekey_base TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '35.00',
|
|
c_rate_dup_s TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '4.50',
|
|
c_rate_dup_y TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '9.80',
|
|
c_rate_dup_e TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '24.00',
|
|
c_rate_rek_s TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '6.00',
|
|
c_rate_rek_y TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '11.00',
|
|
c_rate_rek_e TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '26.00',
|
|
c_qty_mid TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '5.00',
|
|
c_qty_high TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '20.00',
|
|
c_disc_mid TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '10.00',
|
|
c_disc_high TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '20.00',
|
|
c_percent TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '100.00',
|
|
c_nothing TYPE {{p}}if_locksmith_pricer=>ty_amount VALUE '0.00'.
|
|
|
|
METHODS duplicate_price
|
|
IMPORTING iv_quantity TYPE i
|
|
iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
|
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
METHODS rekey_price
|
|
IMPORTING iv_quantity TYPE i
|
|
iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
|
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
METHODS lockout_price
|
|
IMPORTING iv_callout TYPE {{p}}if_locksmith_pricer=>ty_callout
|
|
RETURNING VALUE(rv_price) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
METHODS dup_key_rate
|
|
IMPORTING iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
|
RETURNING VALUE(rv_rate) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
METHODS rekey_key_rate
|
|
IMPORTING iv_key_type TYPE {{p}}if_locksmith_pricer=>ty_key_type
|
|
RETURNING VALUE(rv_rate) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
METHODS discount_percent
|
|
IMPORTING iv_quantity TYPE i
|
|
RETURNING VALUE(rv_percent) TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}locksmith_pricer IMPLEMENTATION.
|
|
METHOD {{p}}if_locksmith_pricer~calculate_price.
|
|
CASE iv_job_type.
|
|
WHEN c_job_key.
|
|
rv_price = duplicate_price( iv_quantity = iv_quantity
|
|
iv_key_type = iv_key_type ).
|
|
WHEN c_job_lockout.
|
|
rv_price = lockout_price( iv_callout = iv_callout ).
|
|
WHEN c_job_rekey.
|
|
rv_price = rekey_price( iv_quantity = iv_quantity
|
|
iv_key_type = iv_key_type ).
|
|
WHEN OTHERS.
|
|
rv_price = c_nothing.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD duplicate_price.
|
|
DATA lv_qty TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
lv_qty = iv_quantity.
|
|
IF lv_qty < 1.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_rate) = dup_key_rate( iv_key_type ).
|
|
IF lv_rate = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA lv_gross TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
lv_gross = lv_rate * lv_qty.
|
|
DATA(lv_discount) = discount_percent( iv_quantity ).
|
|
rv_price = lv_gross - lv_gross * lv_discount / c_percent.
|
|
ENDMETHOD.
|
|
|
|
METHOD rekey_price.
|
|
DATA lv_qty TYPE {{p}}if_locksmith_pricer=>ty_amount.
|
|
lv_qty = iv_quantity.
|
|
IF lv_qty < 1.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_rate) = rekey_key_rate( iv_key_type ).
|
|
IF lv_rate = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
rv_price = lv_qty * ( c_rekey_base - lv_rate ).
|
|
ENDMETHOD.
|
|
|
|
METHOD lockout_price.
|
|
CASE iv_callout.
|
|
WHEN c_call_week.
|
|
rv_price = c_fee_week.
|
|
WHEN c_call_late.
|
|
rv_price = c_fee_late.
|
|
WHEN OTHERS.
|
|
rv_price = c_fee_std.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD dup_key_rate.
|
|
CASE iv_key_type.
|
|
WHEN c_key_std.
|
|
rv_rate = c_rate_dup_s.
|
|
WHEN c_key_sec.
|
|
rv_rate = c_rate_dup_y.
|
|
WHEN c_key_elec.
|
|
rv_rate = c_rate_dup_e.
|
|
WHEN OTHERS.
|
|
rv_rate = c_nothing.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD rekey_key_rate.
|
|
CASE iv_key_type.
|
|
WHEN c_key_std.
|
|
rv_rate = c_rate_rek_s.
|
|
WHEN c_key_sec.
|
|
rv_rate = c_rate_rek_y.
|
|
WHEN c_key_elec.
|
|
rv_rate = c_rate_rek_e.
|
|
WHEN OTHERS.
|
|
rv_rate = c_nothing.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD discount_percent.
|
|
IF iv_quantity >= c_qty_high.
|
|
rv_percent = c_disc_high.
|
|
ELSEIF iv_quantity >= c_qty_mid.
|
|
rv_percent = c_disc_mid.
|
|
ELSE.
|
|
rv_percent = c_nothing.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|