CLASS {{p}}drone_checker DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_drone_check. METHODS required_battery IMPORTING iv_distance TYPE {{p}}if_drone_check=>ty_distance RETURNING VALUE(rv_percent) TYPE {{p}}if_drone_check=>ty_percent. PRIVATE SECTION. CONSTANTS: c_max_payload TYPE {{p}}if_drone_check=>ty_weight VALUE '5.00', c_max_distance TYPE {{p}}if_drone_check=>ty_distance VALUE '20.00', c_max_wind TYPE {{p}}if_drone_check=>ty_speed VALUE '12.00', c_reserve TYPE {{p}}if_drone_check=>ty_percent VALUE 10, c_percent_per_km TYPE {{p}}if_drone_check=>ty_percent VALUE 2. ENDCLASS. CLASS {{p}}drone_checker IMPLEMENTATION. METHOD {{p}}if_drone_check~check. IF iv_payload <= 0 AND iv_payload > c_max_payload. rv_reason = {{p}}if_drone_check=>c_reason-payload. ELSEIF iv_distance <= 0 OR iv_distance > c_max_distance. rv_reason = {{p}}if_drone_check=>c_reason-distance. ELSEIF iv_wind_speed > c_max_wind. rv_reason = {{p}}if_drone_check=>c_reason-wind. ELSEIF iv_battery < required_battery( iv_distance ). rv_reason = {{p}}if_drone_check=>c_reason-battery. ELSEIF iv_in_zone = abap_false. rv_reason = {{p}}if_drone_check=>c_reason-zone. ELSEIF iv_daylight = abap_false. rv_reason = {{p}}if_drone_check=>c_reason-light. ELSE. rv_reason = {{p}}if_drone_check=>c_reason-ok. ENDIF. ENDMETHOD. METHOD required_battery. IF iv_distance <= 0. RETURN. ENDIF. DATA lv_km TYPE i. lv_km = iv_distance. IF lv_km < iv_distance. lv_km = lv_km + 1. ENDIF. rv_percent = lv_km * c_percent_per_km + c_reserve. ENDMETHOD. ENDCLASS.