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.