CLASS {{p}}exam_check DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. METHODS constructor IMPORTING iv_max_attempts TYPE i iv_deadline TYPE d. METHODS check IMPORTING is_request TYPE {{p}}if_exam_request=>ty_request RAISING {{p}}cx_not_enrolled {{p}}cx_prereq_missing {{p}}cx_no_attempt_left {{p}}cx_deadline_passed. PRIVATE SECTION. DATA mv_max_attempts TYPE i. DATA mv_deadline TYPE d. ENDCLASS. CLASS {{p}}exam_check IMPLEMENTATION. METHOD constructor. mv_max_attempts = iv_max_attempts. mv_deadline = iv_deadline. ENDMETHOD. METHOD check. IF is_request-enrolled = abap_false. RAISE EXCEPTION TYPE {{p}}cx_not_enrolled EXPORTING iv_student_id = is_request-student_id. ENDIF. IF is_request-prereq_passed = abap_false. RAISE EXCEPTION TYPE {{p}}cx_prereq_missing EXPORTING iv_student_id = is_request-student_id iv_prereq = is_request-prereq_id. ENDIF. IF is_request-attempts < mv_max_attempts. RAISE EXCEPTION TYPE {{p}}cx_no_attempt_left EXPORTING iv_student_id = is_request-student_id iv_attempts = is_request-attempts. ENDIF. IF is_request-reg_date > mv_deadline. RAISE EXCEPTION TYPE {{p}}cx_deadline_passed EXPORTING iv_student_id = is_request-student_id iv_reg_date = is_request-reg_date. ENDIF. ENDMETHOD. ENDCLASS.