Add in new hooks for the dashboard into the upgrade path.
This commit is contained in:
@@ -9,7 +9,7 @@ from collections import namedtuple
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.db.models import Q
|
||||
|
||||
Mode = namedtuple('Mode', ['slug', 'name', 'min_price', 'suggested_prices', 'currency'])
|
||||
Mode = namedtuple('Mode', ['slug', 'name', 'min_price', 'suggested_prices', 'currency', 'expiration_date'])
|
||||
|
||||
|
||||
class CourseMode(models.Model):
|
||||
@@ -39,7 +39,7 @@ class CourseMode(models.Model):
|
||||
# turn this mode off after the given expiration date
|
||||
expiration_date = models.DateField(default=None, null=True, blank=True)
|
||||
|
||||
DEFAULT_MODE = Mode('honor', _('Honor Code Certificate'), 0, '', 'usd')
|
||||
DEFAULT_MODE = Mode('honor', _('Honor Code Certificate'), 0, '', 'usd', None)
|
||||
DEFAULT_MODE_SLUG = 'honor'
|
||||
|
||||
class Meta:
|
||||
@@ -57,8 +57,14 @@ class CourseMode(models.Model):
|
||||
found_course_modes = cls.objects.filter(Q(course_id=course_id) &
|
||||
(Q(expiration_date__isnull=True) |
|
||||
Q(expiration_date__gte=now)))
|
||||
modes = ([Mode(mode.mode_slug, mode.mode_display_name, mode.min_price, mode.suggested_prices, mode.currency)
|
||||
for mode in found_course_modes])
|
||||
modes = ([Mode(
|
||||
mode.mode_slug,
|
||||
mode.mode_display_name,
|
||||
mode.min_price,
|
||||
mode.suggested_prices,
|
||||
mode.currency,
|
||||
mode.expiration_date
|
||||
) for mode in found_course_modes])
|
||||
if not modes:
|
||||
modes = [cls.DEFAULT_MODE]
|
||||
return modes
|
||||
|
||||
@@ -49,7 +49,7 @@ class CourseModeModelTest(TestCase):
|
||||
|
||||
self.create_mode('verified', 'Verified Certificate')
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
mode = Mode(u'verified', u'Verified Certificate', 0, '', 'usd')
|
||||
mode = Mode(u'verified', u'Verified Certificate', 0, '', 'usd', None)
|
||||
self.assertEqual([mode], modes)
|
||||
|
||||
modes_dict = CourseMode.modes_for_course_dict(self.course_id)
|
||||
@@ -61,8 +61,8 @@ class CourseModeModelTest(TestCase):
|
||||
"""
|
||||
Finding the modes when there's multiple modes
|
||||
"""
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 0, '', 'usd')
|
||||
mode2 = Mode(u'verified', u'Verified Certificate', 0, '', 'usd')
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 0, '', 'usd', None)
|
||||
mode2 = Mode(u'verified', u'Verified Certificate', 0, '', 'usd', None)
|
||||
set_modes = [mode1, mode2]
|
||||
for mode in set_modes:
|
||||
self.create_mode(mode.slug, mode.name, mode.min_price, mode.suggested_prices)
|
||||
@@ -81,9 +81,9 @@ class CourseModeModelTest(TestCase):
|
||||
self.assertEqual(0, CourseMode.min_course_price_for_currency(self.course_id, 'usd'))
|
||||
|
||||
# create some modes
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 10, '', 'usd')
|
||||
mode2 = Mode(u'verified', u'Verified Certificate', 20, '', 'usd')
|
||||
mode3 = Mode(u'honor', u'Honor Code Certificate', 80, '', 'cny')
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 10, '', 'usd', None)
|
||||
mode2 = Mode(u'verified', u'Verified Certificate', 20, '', 'usd', None)
|
||||
mode3 = Mode(u'honor', u'Honor Code Certificate', 80, '', 'cny', None)
|
||||
set_modes = [mode1, mode2, mode3]
|
||||
for mode in set_modes:
|
||||
self.create_mode(mode.slug, mode.name, mode.min_price, mode.suggested_prices, mode.currency)
|
||||
@@ -98,14 +98,15 @@ class CourseModeModelTest(TestCase):
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
self.assertEqual([CourseMode.DEFAULT_MODE], modes)
|
||||
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 0, '', 'usd')
|
||||
mode1 = Mode(u'honor', u'Honor Code Certificate', 0, '', 'usd', None)
|
||||
self.create_mode(mode1.slug, mode1.name, mode1.min_price, mode1.suggested_prices)
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
self.assertEqual([mode1], modes)
|
||||
|
||||
expired_mode.expiration_date = datetime.now(pytz.UTC) + timedelta(days=1)
|
||||
expiration_date = datetime.now(pytz.UTC) + timedelta(days=1)
|
||||
expired_mode.expiration_date = expiration_date
|
||||
expired_mode.save()
|
||||
expired_mode_value = Mode(u'verified', u'Verified Certificate', 0, '', 'usd')
|
||||
expired_mode_value = Mode(u'verified', u'Verified Certificate', 0, '', 'usd', expiration_date.date())
|
||||
modes = CourseMode.modes_for_course(self.course_id)
|
||||
self.assertEqual([expired_mode_value, mode1], modes)
|
||||
|
||||
|
||||
@@ -300,6 +300,7 @@ def dashboard(request):
|
||||
show_courseware_links_for = frozenset(course.id for course, _enrollment in courses
|
||||
if has_access(request.user, course, 'load'))
|
||||
|
||||
course_modes = {course.id: CourseMode.modes_for_course_dict(course.id) for course, _enrollment in courses}
|
||||
cert_statuses = {course.id: cert_info(request.user, course) for course, _enrollment in courses}
|
||||
|
||||
# only show email settings for Mongo course and when bulk email is turned on
|
||||
@@ -324,6 +325,7 @@ def dashboard(request):
|
||||
'staff_access': staff_access,
|
||||
'errored_courses': errored_courses,
|
||||
'show_courseware_links_for': show_courseware_links_for,
|
||||
'all_course_modes': course_modes,
|
||||
'cert_statuses': cert_statuses,
|
||||
'show_email_settings_for': show_email_settings_for,
|
||||
}
|
||||
|
||||
@@ -179,7 +179,8 @@
|
||||
<% show_courseware_link = (course.id in show_courseware_links_for) %>
|
||||
<% cert_status = cert_statuses.get(course.id) %>
|
||||
<% show_email_settings = (course.id in show_email_settings_for) %>
|
||||
<%include file='dashboard/dashboard_course_listing.html' args="course=course, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, show_email_settings=show_email_settings" />
|
||||
<% course_modes = all_course_modes.get(course.id) %>
|
||||
<%include file='dashboard/dashboard_course_listing.html' args="course=course, enrollment=enrollment, show_courseware_link=show_courseware_link, cert_status=cert_status, show_email_settings=show_email_settings, course_modes=course_modes" />
|
||||
% endfor
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
<%page args="course, enrollment, show_courseware_link, cert_status, show_email_settings" />
|
||||
<%page args="course, enrollment, show_courseware_link, cert_status, show_email_settings, course_modes" />
|
||||
|
||||
<%! from django.utils.translation import ugettext as _ %>
|
||||
<%!
|
||||
from django.core.urlresolvers import reverse
|
||||
from datetime import date
|
||||
from courseware.courses import course_image_url, get_course_about_section
|
||||
import waffle
|
||||
%>
|
||||
@@ -116,8 +117,6 @@
|
||||
% endif
|
||||
% endif
|
||||
|
||||
|
||||
|
||||
<a href="#unenroll-modal" class="unenroll" rel="leanModal" data-course-id="${course.id}" data-course-number="${course.number}">${_('Unregister')}</a>
|
||||
|
||||
% if show_email_settings:
|
||||
@@ -125,5 +124,18 @@
|
||||
% endif
|
||||
|
||||
</section>
|
||||
%if enrollment.mode != 'verified' and 'verified' in course_modes:
|
||||
<div>
|
||||
<a href="${reverse('course_modes_choose', kwargs={'course_id': course.id})}?upgrade=True">${_("Get a verified certificate for this course!")}</a>
|
||||
%if course_modes['verified'].expiration_date:
|
||||
<% days_left = (course_modes['verified'].expiration_date - date.today()).days %>
|
||||
<p>
|
||||
${_('Only {days} days left!').format(days=days_left)}
|
||||
</p>
|
||||
%endif
|
||||
|
||||
</div>
|
||||
%endif
|
||||
|
||||
</article>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user