60 lines
1.9 KiB
ABAP
60 lines
1.9 KiB
ABAP
CLASS {{p}}credit_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
INTERFACES {{p}}if_credit_check.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS c_income_factor TYPE i VALUE 3.
|
|
CONSTANTS c_plan_reduction TYPE {{p}}if_credit_check=>ty_amount VALUE '500.00'.
|
|
CONSTANTS c_min_age TYPE i VALUE 18.
|
|
CONSTANTS c_full_limit_age TYPE i VALUE 21.
|
|
CONSTANTS c_max_open_plans TYPE i VALUE 2.
|
|
CONSTANTS c_hundred TYPE i VALUE 100.
|
|
|
|
METHODS credit_limit_cents
|
|
IMPORTING iv_age TYPE i
|
|
iv_income TYPE {{p}}if_credit_check=>ty_amount
|
|
iv_open_plans TYPE i
|
|
RETURNING VALUE(rv_cents) TYPE i.
|
|
METHODS to_cents
|
|
IMPORTING iv_amount TYPE {{p}}if_credit_check=>ty_amount
|
|
RETURNING VALUE(rv_cents) TYPE i.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}credit_checker IMPLEMENTATION.
|
|
METHOD {{p}}if_credit_check~check.
|
|
IF iv_age < c_min_age.
|
|
rv_reason = {{p}}if_credit_check=>c_reason-age.
|
|
RETURN.
|
|
ENDIF.
|
|
IF iv_income <= 0.
|
|
rv_reason = {{p}}if_credit_check=>c_reason-income.
|
|
RETURN.
|
|
ENDIF.
|
|
IF iv_open_plans >= c_max_open_plans.
|
|
rv_reason = {{p}}if_credit_check=>c_reason-open_plan.
|
|
RETURN.
|
|
ENDIF.
|
|
IF to_cents( iv_order_amount ) > credit_limit_cents( iv_age = iv_age
|
|
iv_income = iv_income
|
|
iv_open_plans = iv_open_plans ).
|
|
rv_reason = {{p}}if_credit_check=>c_reason-limit.
|
|
RETURN.
|
|
ENDIF.
|
|
rv_reason = {{p}}if_credit_check=>c_reason-ok.
|
|
ENDMETHOD.
|
|
|
|
METHOD credit_limit_cents.
|
|
rv_cents = to_cents( iv_income ) * c_income_factor
|
|
- to_cents( c_plan_reduction ) * iv_open_plans.
|
|
IF iv_age < c_full_limit_age.
|
|
rv_cents = rv_cents DIV 2.
|
|
rv_cents = rv_cents DIV c_hundred * c_hundred.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD to_cents.
|
|
rv_cents = iv_amount * c_hundred.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|