Commit 115ccf87 by Diana Huang

Add in new hooks for the dashboard into the upgrade path.

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