Files
abap-llm/tasks_gen/eval/G0191/faulty/m2_locksmith_pricer.clas.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.