From 67d52594b16d5cc372d65be6f6938d21615a76a5 Mon Sep 17 00:00:00 2001 From: Anna Gavrilman Date: Thu, 6 Jul 2023 14:27:38 +0200 Subject: [PATCH] Add unverify option to google sheets plugin (#1717) --- courses/api.py | 25 ++++++++++++++++++++++--- sheets/deferrals_plugin.py | 8 +++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/courses/api.py b/courses/api.py index 7ff491d39..9f215376a 100644 --- a/courses/api.py +++ b/courses/api.py @@ -46,7 +46,11 @@ get_edx_grades_with_users, unenroll_edx_course_run, ) -from openedx.constants import EDX_DEFAULT_ENROLLMENT_MODE, EDX_ENROLLMENT_VERIFIED_MODE +from openedx.constants import ( + EDX_DEFAULT_ENROLLMENT_MODE, + EDX_ENROLLMENT_VERIFIED_MODE, + EDX_ENROLLMENT_AUDIT_MODE, +) from openedx.exceptions import ( EdxApiEnrollErrorException, NoEdxApiAuthError, @@ -452,6 +456,22 @@ def defer_enrollment( from_enrollment = CourseRunEnrollment.all_objects.get( user=user, run__courseware_id=from_courseware_id ) + to_run = ( + CourseRun.objects.get(courseware_id=to_courseware_id) + if to_courseware_id + else None + ) + + if to_run is None: + downgraded_enrollments, _ = create_run_enrollments( + user=user, + runs=[from_enrollment.run], + keep_failed_enrollments=True, + mode=EDX_ENROLLMENT_AUDIT_MODE, + force_enrollment=True, + ) + return downgraded_enrollments, None + if not force and not from_enrollment.active: raise ValidationError( "Cannot defer from inactive enrollment (id: {}, run: {}, user: {}). " @@ -459,12 +479,11 @@ def defer_enrollment( from_enrollment.id, from_enrollment.run.courseware_id, user.email ) ) - to_run = CourseRun.objects.get(courseware_id=to_courseware_id) if from_enrollment.run == to_run: raise ValidationError( "Cannot defer to the same course run (run: {})".format(to_run.courseware_id) ) - if not to_run.is_not_beyond_enrollment: + if not force and not to_run.is_not_beyond_enrollment: raise ValidationError( "Cannot defer to a course run that is outside of its enrollment period (run: {}).".format( to_run.courseware_id diff --git a/sheets/deferrals_plugin.py b/sheets/deferrals_plugin.py index e3c5133cb..bbb9ae314 100644 --- a/sheets/deferrals_plugin.py +++ b/sheets/deferrals_plugin.py @@ -15,12 +15,10 @@ def deferrals_process_request( from_courseware_id = deferral_request_row.from_courseware_id to_courseware_id = deferral_request_row.to_courseware_id - deferral_api_success = defer_enrollment( + defer_enrollment( user, from_courseware_id, to_courseware_id, + force=True, ) - if deferral_api_success: - return DeferralResult(ResultType.PROCESSED) - - return DeferralResult(ResultType.FAILED) + return DeferralResult(ResultType.PROCESSED)