Skip to content

Commit b3d44f6

Browse files
Add admin action to downgrade learners enrollment (#3055)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 5aecf12 commit b3d44f6

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

courses/admin.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from django.urls import reverse
1010
from mitol.common.admin import TimestampedModelAdmin
1111

12+
from courses.api import downgrade_learner
1213
from courses.forms import ProgramAdminForm
1314
from courses.models import (
1415
BlockedCountry,
@@ -266,7 +267,7 @@ class CourseRunEnrollmentAdmin(ModelAdminRunActionsForAllMixin, AuditableModelAd
266267
inlines = [
267268
CourseRunEnrollmentAuditInline,
268269
]
269-
actions = ["retry_all_failed_edx_enrollment"]
270+
actions = ["retry_all_failed_edx_enrollment", "downgrade_enrollment"]
270271
run_for_all_actions = ["retry_all_failed_edx_enrollment"]
271272

272273
def get_queryset(self, request):
@@ -305,6 +306,22 @@ def retry_all_failed_edx_enrollment(self, request, queryset): # noqa: ARG002
305306
request, "Retry all failed Open edX enrollments successfully requested."
306307
)
307308

309+
@admin.action(description="Downgrade users enrollment")
310+
def downgrade_enrollment(self, request, queryset):
311+
"""Admin action to change the status of users enrollment from verified to audit"""
312+
enrollment = queryset.first()
313+
enrollments, enroll_success = downgrade_learner(enrollment)
314+
if not enroll_success:
315+
self.message_user(
316+
request,
317+
f"Failed to downgrade enrollment for user {enrollment.user.email}",
318+
)
319+
else:
320+
self.message_user(
321+
request,
322+
f"Successfully downgraded users enrollment from verified to audit: {enrollment.user.email}.",
323+
)
324+
308325

309326
@admin.register(CourseRunEnrollmentAudit)
310327
class CourseRunEnrollmentAuditAdmin(TimestampedModelAdmin):

courses/api.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,21 @@ def create_program_enrollments(user, programs):
296296
return successful_enrollments
297297

298298

299+
def downgrade_learner(enrollment):
300+
"""
301+
Downgrades given enrollment from verified to audit.
302+
"""
303+
304+
# Forcing the enrollment here - if the refund comes after the end date
305+
# for the course for whatever reason, we still want to revert the mode.
306+
return create_run_enrollments(
307+
user=enrollment.user,
308+
runs=[enrollment.run],
309+
keep_failed_enrollments=True,
310+
mode=EDX_ENROLLMENT_AUDIT_MODE,
311+
)
312+
313+
299314
def deactivate_run_enrollment(
300315
run_enrollment,
301316
change_status,

0 commit comments

Comments
 (0)