CLASS {{p}}tenancy_checker DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_tenancy_check. PRIVATE SECTION. METHODS income_factor IMPORTING iv_employment TYPE {{p}}if_tenancy_check=>ty_employment iv_pets TYPE abap_bool RETURNING VALUE(rv_factor) TYPE i. ENDCLASS. CLASS {{p}}tenancy_checker IMPLEMENTATION. METHOD {{p}}if_tenancy_check~check. IF iv_rent <= 0. rv_reason = {{p}}if_tenancy_check=>c_reason-rent. RETURN. ENDIF. IF iv_income <= 0. rv_reason = {{p}}if_tenancy_check=>c_reason-income. RETURN. ENDIF. IF iv_persons < 1. rv_reason = {{p}}if_tenancy_check=>c_reason-persons. RETURN. ENDIF. IF iv_persons > 2 * iv_rooms. rv_reason = {{p}}if_tenancy_check=>c_reason-capacity. RETURN. ENDIF. IF iv_employment <> {{p}}if_tenancy_check=>c_employment-permanent AND iv_employment <> {{p}}if_tenancy_check=>c_employment-fixed AND iv_employment <> {{p}}if_tenancy_check=>c_employment-self. rv_reason = {{p}}if_tenancy_check=>c_reason-employment. RETURN. ENDIF. DATA(lv_factor) = income_factor( iv_employment = iv_employment iv_pets = iv_pets ). IF iv_income < iv_rent * lv_factor. rv_reason = {{p}}if_tenancy_check=>c_reason-ratio. RETURN. ENDIF. rv_reason = {{p}}if_tenancy_check=>c_reason-ok. ENDMETHOD. METHOD {{p}}if_tenancy_check~deposit. IF iv_rent <= 0. rv_deposit = 0. ELSEIF iv_pets = abap_true. rv_deposit = 3 * iv_rent. ELSE. rv_deposit = 2 * iv_rent. ENDIF. ENDMETHOD. METHOD income_factor. CASE iv_employment. WHEN {{p}}if_tenancy_check=>c_employment-permanent. rv_factor = 3. WHEN {{p}}if_tenancy_check=>c_employment-fixed. rv_factor = 4. WHEN OTHERS. rv_factor = 5. ENDCASE. IF iv_pets = abap_true. rv_factor = rv_factor + 1. ENDIF. ENDMETHOD. ENDCLASS.