|
9 | 9 | from django.urls import reverse |
10 | 10 | from mitol.common.admin import TimestampedModelAdmin |
11 | 11 |
|
| 12 | +from courses.api import downgrade_learner |
12 | 13 | from courses.forms import ProgramAdminForm |
13 | 14 | from courses.models import ( |
14 | 15 | BlockedCountry, |
@@ -266,7 +267,7 @@ class CourseRunEnrollmentAdmin(ModelAdminRunActionsForAllMixin, AuditableModelAd |
266 | 267 | inlines = [ |
267 | 268 | CourseRunEnrollmentAuditInline, |
268 | 269 | ] |
269 | | - actions = ["retry_all_failed_edx_enrollment"] |
| 270 | + actions = ["retry_all_failed_edx_enrollment", "downgrade_enrollment"] |
270 | 271 | run_for_all_actions = ["retry_all_failed_edx_enrollment"] |
271 | 272 |
|
272 | 273 | def get_queryset(self, request): |
@@ -305,6 +306,22 @@ def retry_all_failed_edx_enrollment(self, request, queryset): # noqa: ARG002 |
305 | 306 | request, "Retry all failed Open edX enrollments successfully requested." |
306 | 307 | ) |
307 | 308 |
|
| 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 | + |
308 | 325 |
|
309 | 326 | @admin.register(CourseRunEnrollmentAudit) |
310 | 327 | class CourseRunEnrollmentAuditAdmin(TimestampedModelAdmin): |
|
0 commit comments