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.