93 lines
2.9 KiB
ABAP
93 lines
2.9 KiB
ABAP
CLASS {{p}}trans_pricer DEFINITION
|
|
PUBLIC
|
|
FINAL
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
METHODS constructor.
|
|
METHODS calculate_fee
|
|
IMPORTING iv_lang_pair TYPE string
|
|
iv_word_count TYPE i
|
|
iv_express TYPE abap_bool
|
|
iv_certified TYPE abap_bool
|
|
RETURNING VALUE(rv_fee) TYPE decfloat34.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS c_rate_std TYPE decfloat34 VALUE '0.12'.
|
|
CONSTANTS c_rate_rare TYPE decfloat34 VALUE '0.19'.
|
|
CONSTANTS c_min_charge TYPE decfloat34 VALUE '35.00'.
|
|
CONSTANTS c_certified_fee TYPE decfloat34 VALUE '22.00'.
|
|
CONSTANTS c_express_percent TYPE decfloat34 VALUE '150'.
|
|
CONSTANTS c_tier_one_words TYPE i VALUE 1000.
|
|
CONSTANTS c_tier_two_words TYPE i VALUE 5000.
|
|
CONSTANTS c_tier_one_percent TYPE decfloat34 VALUE '10'.
|
|
CONSTANTS c_tier_two_percent TYPE decfloat34 VALUE '15'.
|
|
|
|
METHODS rate
|
|
IMPORTING iv_lang_pair TYPE string
|
|
RETURNING VALUE(rv_rate) TYPE decfloat34.
|
|
METHODS translation_charge
|
|
IMPORTING iv_word_count TYPE i
|
|
iv_rate TYPE decfloat34
|
|
RETURNING VALUE(rv_charge) TYPE decfloat34.
|
|
METHODS discount
|
|
IMPORTING iv_word_count TYPE i
|
|
iv_charge TYPE decfloat34
|
|
RETURNING VALUE(rv_discount) TYPE decfloat34.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}trans_pricer IMPLEMENTATION.
|
|
METHOD constructor.
|
|
ENDMETHOD.
|
|
|
|
METHOD calculate_fee.
|
|
DATA(lv_amount) = translation_charge(
|
|
iv_word_count = iv_word_count
|
|
iv_rate = rate( iv_lang_pair ) ).
|
|
lv_amount = lv_amount - discount( iv_word_count = iv_word_count
|
|
iv_charge = lv_amount ).
|
|
IF iv_certified <> abap_true.
|
|
lv_amount = lv_amount + c_certified_fee.
|
|
ENDIF.
|
|
IF iv_express = abap_true.
|
|
lv_amount = round( val = lv_amount * c_express_percent / 100
|
|
dec = 2
|
|
mode = cl_abap_math=>round_half_up ).
|
|
ENDIF.
|
|
rv_fee = lv_amount.
|
|
ENDMETHOD.
|
|
|
|
METHOD rate.
|
|
CASE iv_lang_pair.
|
|
WHEN 'STD'.
|
|
rv_rate = c_rate_std.
|
|
WHEN 'RARE'.
|
|
rv_rate = c_rate_rare.
|
|
WHEN OTHERS.
|
|
rv_rate = 0.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD translation_charge.
|
|
rv_charge = round( val = iv_word_count * iv_rate
|
|
dec = 2
|
|
mode = cl_abap_math=>round_half_up ).
|
|
IF rv_charge < c_min_charge.
|
|
rv_charge = c_min_charge.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD discount.
|
|
IF iv_word_count >= c_tier_two_words.
|
|
rv_discount = round( val = iv_charge * c_tier_two_percent / 100
|
|
dec = 2
|
|
mode = cl_abap_math=>round_half_up ).
|
|
ELSEIF iv_word_count >= c_tier_one_words.
|
|
rv_discount = round( val = iv_charge * c_tier_one_percent / 100
|
|
dec = 2
|
|
mode = cl_abap_math=>round_half_up ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|