Commit 8081abe8 by Albert St. Aubin

changes to the prototype to add the enroll/unenroll functions to

entitlements
parent 7bcf85e0
......@@ -25,7 +25,7 @@ from lms.djangoapps.commerce.utils import EcommerceService
from lms.djangoapps.experiments.utils import get_experiment_user_metadata_context
from openedx.core.djangoapps.embargo import api as embargo_api
from student.models import CourseEnrollment
from entitlements.utils import get_entitlement_data
from entitlements.utils import is_user_entitled_to_course
from third_party_auth.decorators import tpa_hint_ends_existing_session
from util import organizations_helpers as organization_api
from util.db import outer_atomic
......@@ -86,7 +86,7 @@ class ChooseModeView(View):
return redirect(embargo_redirect)
enrollment_mode, is_active = CourseEnrollment.enrollment_mode_for_user(request.user, course_key)
entitlement_data = get_entitlement_data(request.user, course_key)
entitlement_data = is_user_entitled_to_course(request.user, course_key)
modes = CourseMode.modes_for_course_dict(course_key)
ecommerce_service = EcommerceService()
......
......@@ -36,12 +36,20 @@ class CourseEntitlement(models.Model):
@classmethod
def get_user_course_entitlement(cls, user, course):
# TODO: Implement check to see if the Course ID is valid
return cls.objects.filter(user_id=user, root_course_id=course).all()
return cls.objects.filter(user_id=user, root_course_id=course).first()
@classmethod
def set_enrollment(cls, user, course_key, course_enrollment):
def set_entitlement_enrollment(cls, user, course_key, course_enrollment):
course = course_key.org + '+' + course_key.course
return cls.objects.filter(
user_id=user,
root_course_id=course
).update(enrollment_course_id=course_enrollment)
@classmethod
def remove_enrollment(cls, user, course_key):
course = course_key.org + '+' + course_key.course
return cls.objects.filter(
user_id=user,
root_course_id=course
).update(enrollment_course_id=None)
from .models import CourseEntitlement
from opaque_keys.edx.keys import CourseKey
def get_json_entitlements_by_user(self, username):
......@@ -27,11 +28,26 @@ def get_list_course_entitlements(user):
return list_entitlements
def get_entitlement_data(user, course):
def is_user_entitled_to_course(user, course):
is_entitled = False
course_entitlements = CourseEntitlement.get_user_course_entitlement(user, course)
if len(course_entitlements) > 0 and course_entitlements[0].is_active:
course_entitlement = CourseEntitlement.get_user_course_entitlement(user, course)
if course_entitlement is not None and course_entitlement.is_active:
is_entitled = True
return is_entitled
def is_user_entitlement_enrolled(user, course_run_id):
entitlement = CourseEntitlement.get_user_course_entitlement(user, get_course_id(course_run_id))
if (
entitlement is not None and
entitlement.enrollment_course_id is not None and
entitlement.is_active
):
return True
return False
def get_course_id(course_run_id):
return course_run_id.org + '+' + course_run_id.course
......@@ -53,7 +53,7 @@ from course_modes.models import CourseMode
from courseware.models import DynamicUpgradeDeadlineConfiguration, CourseDynamicUpgradeDeadlineConfiguration
from enrollment.api import _default_course_mode
from entitlements.utils import get_entitlement_data
from entitlements.utils import is_user_entitled_to_course, is_user_entitlement_enrolled
from entitlements.models import CourseEntitlement
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.schedules.models import ScheduleConfig
......@@ -1336,8 +1336,8 @@ class CourseEnrollment(models.Model):
enrollment.update_enrollment(is_active=True, mode=mode)
enrollment.send_signal(EnrollStatusChange.enroll)
if get_entitlement_data(user, course_key.org + '+' + course_key.course):
CourseEntitlement.set_enrollment(user, course_key, enrollment)
if is_user_entitled_to_course(user, course_key.org + '+' + course_key.course):
CourseEntitlement.set_entitlement_enrollment(user, course_key, enrollment)
return enrollment
......
......@@ -63,6 +63,8 @@ from certificates.models import ( # pylint: disable=import-error
from course_modes.models import CourseMode
from courseware.access import has_access
from courseware.courses import get_courses, sort_by_announcement, sort_by_start_date # pylint: disable=import-error
from entitlements.models import CourseEntitlement
from entitlements.utils import is_user_entitled_to_course, is_user_entitlement_enrolled
from django_comment_common.models import assign_role
from entitlements.utils import get_list_course_entitlements
from edxmako.shortcuts import render_to_response, render_to_string
......@@ -1301,8 +1303,12 @@ def change_enrollment(request, check_access=True):
if certificate_info.get('status') in DISABLE_UNENROLL_CERT_STATES:
return HttpResponseBadRequest(_("Your certificate prevents you from unenrolling from this course"))
CourseEnrollment.unenroll(user, course_id)
REFUND_ORDER.send(sender=None, course_enrollment=enrollment)
if is_user_entitlement_enrolled(user, course_id):
CourseEnrollment.unenroll(user, course_id, skip_refund=True)
CourseEntitlement.remove_enrollment(user, course_id)
else:
CourseEnrollment.unenroll(user, course_id)
REFUND_ORDER.send(sender=None, course_enrollment=enrollment)
return HttpResponse()
else:
return HttpResponseBadRequest(_("Enrollment action is invalid"))
......
......@@ -123,6 +123,13 @@
Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], {location: 'learner_dashboard'});
});
$('#switch-enrollment').click(function(event) {
var user = $(event.target).closest('.action-switch').data('user'),
course = $(event.target).closest('.action-switch').data('course-id');
// Logger.log('edx.course.enrollment.upgrade.clicked', [user, course], {location: 'learner_dashboard'});
});
$('.action-email-settings').click(function(event) {
$('#email_settings_course_id').val($(event.target).data('course-id'));
$('#email_settings_course_number').text($(event.target).data('course-number'));
......
......@@ -248,6 +248,19 @@ from util.course import get_link_for_about_page, get_encoded_course_sharing_utm_
</a>
% endif
</li>
<li>
<span id="switch-enrollment" class="action action-switch"
data-course-id="${course_overview.id}"
data-course-number="${course_overview.number}"
data-course-name="${course_overview.display_name_with_default}"
data-dashboard-index="${dashboard_index}"
data-course-refund-url="${course_refund_url}"
data-course-is-paid-course="${is_paid_course}"
data-course-cert-name-long="${cert_name_long}"
data-course-enrollment-mode="${enrollment.mode}">
${_('Switch Entitlement')}
</span>
</li>
% endif
<li class="actions-item" id="actions-item-email-settings-${dashboard_index}" role="menuitem">
% if show_email_settings:
......
......@@ -27,7 +27,7 @@ from openedx.core.djangoapps.commerce.utils import ecommerce_api_client
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
from openedx.core.djangoapps.credentials.utils import get_credentials
from student.models import CourseEnrollment
from entitlements.utils import get_entitlement_data
from entitlements.utils import is_user_entitled_to_course
from util.date_utils import strftime_localized
from xmodule.modulestore.django import modulestore
......@@ -404,7 +404,7 @@ class ProgramDataExtender(object):
# Look at each Course and check if it has an entitlement
# Set a boolean on the Course
for course in self.data['courses']:
is_entitled = get_entitlement_data(self.user, course.get('key', ''))
is_entitled = is_user_entitled_to_course(self.user, course.get('key', ''))
course['is_entitlement'] = is_entitled
def _attach_course_run_certificate_url(self, run_mode):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment