CLASS {{p}}rope_checker DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_rope_check. PRIVATE SECTION. TYPES: BEGIN OF ty_limit, ticket TYPE {{p}}if_rope_check=>ty_ticket, min_age TYPE i, min_hours TYPE i, max_height TYPE i, END OF ty_limit, tt_limit TYPE HASHED TABLE OF ty_limit WITH UNIQUE KEY ticket. METHODS normalize_ticket IMPORTING iv_ticket TYPE {{p}}if_rope_check=>ty_ticket RETURNING VALUE(rv_ticket) TYPE {{p}}if_rope_check=>ty_ticket. METHODS limits RETURNING VALUE(rt_limit) TYPE tt_limit. ENDCLASS. CLASS {{p}}rope_checker IMPLEMENTATION. METHOD {{p}}if_rope_check~check. DATA(lv_ticket) = normalize_ticket( iv_ticket ). IF lv_ticket IS INITIAL. rv_reason = {{p}}if_rope_check=>c_reason-empty. RETURN. ENDIF. DATA(lt_limit) = limits( ). ASSIGN lt_limit[ ticket = lv_ticket ] TO FIELD-SYMBOL(). IF sy-subrc <> 0. rv_reason = {{p}}if_rope_check=>c_reason-ticket. RETURN. ENDIF. IF iv_age < -min_age. rv_reason = {{p}}if_rope_check=>c_reason-age. RETURN. ENDIF. IF iv_logged_hours < -min_hours. rv_reason = {{p}}if_rope_check=>c_reason-hours. RETURN. ENDIF. IF iv_height_m > -max_height. rv_reason = {{p}}if_rope_check=>c_reason-height. RETURN. ENDIF. rv_reason = {{p}}if_rope_check=>c_reason-ok. ENDMETHOD. METHOD normalize_ticket. rv_ticket = to_upper( replace( val = iv_ticket sub = ` ` with = `` occ = 0 ) ). ENDMETHOD. METHOD limits. rt_limit = VALUE #( ( ticket = {{p}}if_rope_check=>c_ticket-level_1 min_age = 18 min_hours = 0 max_height = 30 ) ( ticket = {{p}}if_rope_check=>c_ticket-level_2 min_age = 18 min_hours = 500 max_height = 60 ) ( ticket = {{p}}if_rope_check=>c_ticket-level_3 min_age = 21 min_hours = 1000 max_height = 120 ) ). ENDMETHOD. ENDCLASS.