Add Support endpoint for Course Entitlements
This commit is contained in:
committed by
McKenzie Welter
parent
f1694661e8
commit
449c6903a6
@@ -1,10 +1,15 @@
|
||||
"""
|
||||
Serializers for all Course Entitlement related return objects.
|
||||
"""
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
from entitlements.models import CourseEntitlement
|
||||
from entitlements.models import CourseEntitlement, CourseEntitlementSupportDetail
|
||||
from openedx.core.lib.api.serializers import CourseKeyField
|
||||
|
||||
|
||||
class CourseEntitlementSerializer(serializers.ModelSerializer):
|
||||
""" Serialize a learner's course entitlement and related information. """
|
||||
user = serializers.SlugRelatedField(slug_field='username', queryset=get_user_model().objects.all())
|
||||
enrollment_course_run = serializers.CharField(
|
||||
source='enrollment_course_run.course_id',
|
||||
@@ -24,3 +29,40 @@ class CourseEntitlementSerializer(serializers.ModelSerializer):
|
||||
'mode',
|
||||
'order_number'
|
||||
)
|
||||
|
||||
|
||||
class CourseEntitlementSupportDetailSerializer(serializers.ModelSerializer):
|
||||
""" Serialize the details of a support team interaction with a learner's course entitlement. """
|
||||
support_user = serializers.SlugRelatedField(
|
||||
read_only=True,
|
||||
slug_field='username',
|
||||
default=serializers.CurrentUserDefault()
|
||||
)
|
||||
unenrolled_run = CourseKeyField('unenrolled_run.id')
|
||||
|
||||
class Meta:
|
||||
model = CourseEntitlementSupportDetail
|
||||
fields = (
|
||||
'support_user',
|
||||
'reason',
|
||||
'comments',
|
||||
'unenrolled_run'
|
||||
)
|
||||
|
||||
|
||||
class SupportCourseEntitlementSerializer(CourseEntitlementSerializer):
|
||||
"""
|
||||
Serialize a learner's course entitlement with details from all support team interactions with that entitlement.
|
||||
"""
|
||||
support_details = serializers.SerializerMethodField()
|
||||
|
||||
def get_support_details(self, model):
|
||||
"""
|
||||
Returns a serialized set of all support interactions with the course entitlement
|
||||
"""
|
||||
qset = CourseEntitlementSupportDetail.objects.filter(entitlement=model).order_by('-created')
|
||||
return CourseEntitlementSupportDetailSerializer(qset, many=True).data
|
||||
|
||||
class Meta:
|
||||
model = CourseEntitlement
|
||||
fields = CourseEntitlementSerializer.Meta.fields + ('support_details', )
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
import uuid as uuid_tools
|
||||
from datetime import timedelta
|
||||
from util.date_utils import strftime_localized
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db import models
|
||||
from django.utils.timezone import now
|
||||
from model_utils.models import TimeStampedModel
|
||||
|
||||
from lms.djangoapps.certificates.models import GeneratedCertificate
|
||||
from model_utils.models import TimeStampedModel
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from student.models import CourseEnrollment
|
||||
from util.date_utils import strftime_localized
|
||||
|
||||
|
||||
class CourseEntitlementPolicy(models.Model):
|
||||
@@ -253,6 +254,23 @@ class CourseEntitlement(TimeStampedModel):
|
||||
self.enrollment_course_run = enrollment
|
||||
self.save()
|
||||
|
||||
def reinstate(self):
|
||||
"""
|
||||
Unenrolls a user from the run in which they have spent the given entitlement and
|
||||
sets the entitlement's expired_at date to null.
|
||||
|
||||
Returns:
|
||||
CourseOverview: course run from which the user has been unenrolled
|
||||
"""
|
||||
unenrolled_run = self.enrollment_course_run.course
|
||||
self.expired_at = None
|
||||
CourseEnrollment.unenroll(
|
||||
user=self.enrollment_course_run.user, course_id=unenrolled_run.id, skip_refund=True
|
||||
)
|
||||
self.enrollment_course_run = None
|
||||
self.save()
|
||||
return unenrolled_run
|
||||
|
||||
@classmethod
|
||||
def unexpired_entitlements_for_user(cls, user):
|
||||
return cls.objects.filter(user=user, expired_at=None).select_related('user')
|
||||
@@ -334,9 +352,8 @@ class CourseEntitlementSupportDetail(TimeStampedModel):
|
||||
|
||||
def __unicode__(self):
|
||||
"""Unicode representation of an Entitlement"""
|
||||
return u'Course Entitlement Suppor Detail: entitlement: {}, support_user: {}, reason: {}'\
|
||||
.format(
|
||||
self.entitlement,
|
||||
self.support_user,
|
||||
self.reason,
|
||||
)
|
||||
return u'Course Entitlement Support Detail: entitlement: {}, support_user: {}, reason: {}'.format(
|
||||
self.entitlement,
|
||||
self.support_user,
|
||||
self.reason,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user