CLASS {{p}}chimney_checker DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_sweep_check. PRIVATE SECTION. CONSTANTS c_discount TYPE p LENGTH 3 DECIMALS 2 VALUE '0.90'. METHODS flue_fee IMPORTING iv_kind TYPE {{p}}if_sweep_check=>ty_flue_kind RETURNING VALUE(rv_fee) TYPE {{p}}if_sweep_check=>ty_amount. METHODS is_known_kind IMPORTING iv_kind TYPE {{p}}if_sweep_check=>ty_flue_kind RETURNING VALUE(rv_known) TYPE abap_bool. ENDCLASS. CLASS {{p}}chimney_checker IMPLEMENTATION. METHOD {{p}}if_sweep_check~check_order. IF iv_flues < 1. rv_reason = {{p}}if_sweep_check=>c_reason-no_flues. ELSEIF iv_flues > {{p}}if_sweep_check=>c_max_flues. rv_reason = {{p}}if_sweep_check=>c_reason-too_many. ELSEIF is_known_kind( iv_kind ) = abap_false. rv_reason = {{p}}if_sweep_check=>c_reason-bad_kind. ELSEIF iv_blocked <> abap_true. rv_reason = {{p}}if_sweep_check=>c_reason-blocked. ELSEIF iv_year - iv_last_sweep > 2. rv_reason = {{p}}if_sweep_check=>c_reason-old_sweep. ELSE. rv_reason = {{p}}if_sweep_check=>c_reason-ok. ENDIF. ENDMETHOD. METHOD {{p}}if_sweep_check~fee. IF iv_flues < 1. rv_fee = 0. RETURN. ENDIF. DATA lv_total TYPE {{p}}if_sweep_check=>ty_amount. lv_total = flue_fee( iv_kind ) * iv_flues. IF iv_flues >= 5. lv_total = lv_total * c_discount. ENDIF. rv_fee = round( val = lv_total dec = 2 ). ENDMETHOD. METHOD flue_fee. IF iv_kind = {{p}}if_sweep_check=>c_kind-open. rv_fee = '60.00'. ELSEIF iv_kind = {{p}}if_sweep_check=>c_kind-closed. rv_fee = '45.00'. ELSEIF iv_kind = {{p}}if_sweep_check=>c_kind-indust. rv_fee = '120.00'. ELSE. rv_fee = 0. ENDIF. ENDMETHOD. METHOD is_known_kind. rv_known = xsdbool( iv_kind = {{p}}if_sweep_check=>c_kind-open OR iv_kind = {{p}}if_sweep_check=>c_kind-closed OR iv_kind = {{p}}if_sweep_check=>c_kind-indust ). ENDMETHOD. ENDCLASS.