CLASS {{p}}dive_check DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_reason TYPE c LENGTH 10. TYPES ty_cert_level TYPE c LENGTH 1. CONSTANTS: BEGIN OF c_reason, ok TYPE ty_reason VALUE 'OK', age TYPE ty_reason VALUE 'AGE', cert TYPE ty_reason VALUE 'CERT', depth TYPE ty_reason VALUE 'DEPTH', dives TYPE ty_reason VALUE 'DIVES', recent TYPE ty_reason VALUE 'RECENT', END OF c_reason. METHODS check_diver IMPORTING iv_cert_level TYPE ty_cert_level iv_depth TYPE i iv_dives TYPE i iv_last_dive TYPE d iv_dive_date TYPE d iv_age TYPE i RETURNING VALUE(rv_reason) TYPE ty_reason. ENDCLASS. CLASS {{p}}dive_check IMPLEMENTATION. METHOD check_diver. DATA lv_max_depth TYPE i. DATA lv_min_dives TYPE i. DATA lv_days TYPE i. DATA lv_known TYPE c LENGTH 1. rv_reason = c_reason-ok. IF iv_age < 12. rv_reason = c_reason-age. ELSE. IF iv_cert_level = 'O'. lv_max_depth = 18. lv_min_dives = 20. lv_known = 'X'. ELSEIF iv_cert_level = 'A'. lv_max_depth = 30. lv_min_dives = 50. lv_known = 'X'. ELSEIF iv_cert_level = 'R'. lv_max_depth = 40. lv_min_dives = 80. lv_known = 'X'. ELSEIF iv_cert_level = 'D'. lv_max_depth = 40. lv_min_dives = 100. lv_known = 'X'. ELSE. lv_known = ' '. ENDIF. IF lv_known <> 'X'. rv_reason = c_reason-cert. ELSE. IF iv_depth > lv_max_depth. rv_reason = c_reason-depth. ELSE. IF iv_dives < lv_min_dives. rv_reason = c_reason-dives. ELSE. IF iv_last_dive IS INITIAL. rv_reason = c_reason-recent. ELSE. IF iv_depth > 30. lv_days = iv_dive_date - iv_last_dive. IF lv_days > 180. rv_reason = c_reason-recent. ENDIF. ELSE. lv_days = iv_dive_date - iv_last_dive. IF lv_days > 365. rv_reason = c_reason-recent. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDMETHOD. ENDCLASS.