Commit 196dc46e by Bill DeRusha Committed by GitHub

Merge pull request #203 from edx/bderusha/course-detail

Bderusha/course detail
parents e5a8a824 5eb62a25
# pylint: disable=no-member
import ddt
from django.test import TestCase
from unittest import mock
from django.test import TestCase
from course_discovery.apps.course_metadata.tests.factories import OrganizationFactory
from course_discovery.apps.publisher.models import Seat
from course_discovery.apps.publisher.tests import factories
from course_discovery.apps.publisher.wrappers import CourseRunWrapper
from course_discovery.apps.publisher.models import Seat
@ddt.ddt
......
......@@ -11,6 +11,7 @@ urlpatterns = [
url(r'^course_runs/(?P<pk>\d+)/$', views.CourseRunDetailView.as_view(), name='publisher_course_run_detail'),
url(r'^course_runs/$', views.CourseRunListView.as_view(), name='publisher_course_runs'),
url(r'^course_runs/new$', views.CreateCourseRunView.as_view(), name='publisher_course_runs_new'),
url(r'^course_runs/(?P<pk>\d+)/$', views.CourseRunDetailView.as_view(), name='publisher_course_run_detail'),
url(r'^course_runs/(?P<pk>\d+)/edit/$', views.UpdateCourseRunView.as_view(), name='publisher_course_runs_edit'),
url(r'^seats/new$', views.CreateSeatView.as_view(), name='publisher_seats_new'),
url(r'^seats/(?P<pk>\d+)/edit/$', views.UpdateSeatView.as_view(), name='publisher_seats_edit'),
......
......@@ -10,6 +10,8 @@ from course_discovery.apps.publisher.forms import CourseForm, CourseRunForm, Sea
from course_discovery.apps.publisher.models import Course, CourseRun, Seat
from course_discovery.apps.publisher.wrappers import CourseRunWrapper
SEATS_HIDDEN_FIELDS = ['price', 'currency', 'upgrade_deadline', 'credit_provider', 'credit_hours']
class CourseRunListView(ListView):
""" Create Course View."""
......@@ -21,7 +23,15 @@ class CourseRunListView(ListView):
]
SEATS_HIDDEN_FIELDS = ['price', 'currency', 'upgrade_deadline', 'credit_provider', 'credit_hours']
class CourseRunDetailView(DetailView):
""" Course Run Detail View."""
model = CourseRun
template_name = 'publisher/course_run_detail.html'
def get_context_data(self, **kwargs):
context = super(CourseRunDetailView, self).get_context_data(**kwargs)
context['object'] = CourseRunWrapper(context['object'])
return context
# pylint: disable=attribute-defined-outside-init
......@@ -123,14 +133,3 @@ class UpdateSeatView(UpdateView):
def get_success_url(self):
return reverse(self.success_url, kwargs={'pk': self.object.id})
class CourseRunDetailView(DetailView):
""" Course RunDetail View."""
model = CourseRun
template_name = 'publisher/run_detail/home.html'
def get_context_data(self, **kwargs):
context = super(CourseRunDetailView, self).get_context_data(**kwargs)
context['object'] = CourseRunWrapper(context['object'])
return context
......@@ -77,6 +77,14 @@ class CourseRunWrapper(BaseWrapper):
return self.wrapped_obj.course.prerequisites
@property
def learner_testimonial(self):
return self.wrapped_obj.course.learner_testimonial
@property
def syllabus(self):
return self.wrapped_obj.course.syllabus
@property
def subjects(self):
return [
self.wrapped_obj.course.primary_subject,
......@@ -85,6 +93,10 @@ class CourseRunWrapper(BaseWrapper):
]
@property
def subject_names(self):
return ', '.join([subject.name for subject in self.subjects])
@property
def course_type(self):
seats_types = [seat.type for seat in self.wrapped_obj.seats.all()]
if [Seat.AUDIT] == seats_types:
......
$(".container a").click(function(event) {
event.preventDefault();
$(".container button").click(function(event) {
$(this).addClass("selected");
$(this).siblings().removeClass("selected");
var tab = $(this).attr("href");
var tab = $(this).data("tab");
$(".tab-content").not(tab).css("display", "none");
$(tab).fadeIn();
});
......@@ -54,10 +54,14 @@ nav {
.container {
a {
display: inline-block;
button {
display: block;
padding: 10px;
color: #0ea6ec;
@include float(left)
margin: 0 5px;
border: none;
background-color: transparent;
&.selected {
border-bottom: 4px solid #0ea6ec;
......
......@@ -10,16 +10,16 @@
<nav class="administration-navbar">
<div class="container">
<a class="selected" href="#tab-1">{% trans "All" %}</a>
<a href="#tab-2">{% trans "STUDIO" %}</a>
<a href="#tab-3">{% trans "CAT" %}</a>
<a href="#tab-4">{% trans "DRUPAL" %}</a>
<button class="selected" data-tab="#tab-1">{% trans "All" %}</button>
<button data-tab="#tab-2">{% trans "STUDIO" %}</button>
<button data-tab="#tab-3">{% trans "CAT" %}</button>
<button data-tab="#tab-4">{% trans "DRUPAL" %}</a>
</div>
</nav>
<div id="app" class="container">
<ol class="breadcrumb">
<li><a href="{% url 'publisher:publisher_course_run_detail' pk=object.wrapped_obj.id %}">{% trans "Courses" %}</a></li>
<li><a href="{% url 'publisher:publisher_course_runs' %}">{% trans "Courses" %}</a></li>
<li class="active">{{ object.title }}</li>
</ol>
<div class="page-header">
......@@ -30,18 +30,16 @@
<div class="tab">
<div id="tab-1" class="tab-content active">
{% include 'publisher/run_detail/_studio.html' %}
{% include 'publisher/run_detail/_cat.html' %}
{% include 'publisher/run_detail/_drupal.html' %}
{% include 'publisher/course_run_detail/_all.html' %}
</div>
<div id="tab-2" class="tab-content active">
{% include 'publisher/run_detail/_studio.html' %}
<div id="tab-2" class="tab-content">
{% include 'publisher/course_run_detail/_studio.html' %}
</div>
<div id="tab-3" class="tab-content">
{% include 'publisher/run_detail/_cat.html' %}
{% include 'publisher/course_run_detail/_cat.html' %}
</div>
<div id="tab-4" class="tab-content">
{% include 'publisher/run_detail/_drupal.html' %}
{% include 'publisher/course_run_detail/_drupal.html' %}
</div>
</div>
</div>
......
{% load i18n %}
<div class="course-information">
<div class="info-item">
<div class="heading">{% trans "Title" %}</div>
<div>{{ object.title }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Number" %}</div>
<div>{{ object.number }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course ID" %}</div>
<div>{{ object.lms_course_id }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Is Re-run?" %}</div>
<div>{{ object.is_re_run }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course Subtitle" %}</div>
<div>{{ object.short_description }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Partner Name" %}</div>
<div>{{ object.partner }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Subjects" %}</div>
<div>{{ object.subject_names }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Part of an Xseries?" %}</div>
<div>{{ object.is_xseries }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Xseries Name" %}</div>
<div>{{ object.xseries_name }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Part of a Micromasters?" %}</div>
<div>{{ object.is_micromasters }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Micromasters Name" %}</div>
<div>{{ object.micromasters_name }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Enrollment Type" %}</div>
<div>{{ object.course_type }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Price" %}</div>
<div>{{ object.verified_seat_price }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course Start Date" %}</div>
<div>{{ object.start }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course End Date" %}</div>
<div>{{ object.end }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Certificate Generation Date Exception Request" %}</div>
<div>{{ object.certificate_generation }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course Length (weeks)" %}</div>
<div>{{ object.length }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Pacing Type" %}</div>
<div>{{ object.pacing_type }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Estimated Effort" %}</div>
<div>
{% if object.min_effort and object.max_effort %}
{{ object.min_effort }} {% trans "to" %} {{ object.max_effort }} {% trans "hours per week" %}
{% endif %}
</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course Languages" %}</div>
<div>{{ object.language.name }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Video Translation Languages" %}</div>
<div>{{ object.video_languages }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Course Level" %}</div>
<div>{{ object.level_type }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "About This Course" %}</div>
<div>{{ object.full_description }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "What You'll Learn" %}</div>
<div>{{ object.expected_learnings }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Learner Testimonial" %}</div>
<div>{{ object.learner_testimonial }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Syllabus" %}</div>
<div>{{ object.syllabus }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Prerequisites" %}</div>
<div>{{ object.prerequisites }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Search Engine Optimization Review" %}</div>
<div>{{ object.seo_review }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Top 10 Keywords" %}</div>
<div>{{ object.keywords }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "edX Username or email address of Course Team Admin(s)" %}</div>
<div>{{ object.course_team_admins }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "edX Username or email address of additional course team members (Staff)" %}</div>
<div>{{ object.course_team_additional_staff }}</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Additional Notes" %}</div>
<div>{{ object.notes }}</div>
</div>
</div>
......@@ -19,8 +19,8 @@
{% include 'publisher/run_detail/_seats.html' %}
{% include 'publisher/run_detail/_credit_seat.html' %}
{% include 'publisher/course_run_detail/_seats.html' %}
{% include 'publisher/course_run_detail/_credit_seat.html' %}
{% endblock %}
......@@ -58,7 +58,8 @@
<div>
{% if object.min_effort and object.max_effort %}
{{ object.min_effort }} {% trans "to" %} {{ object.max_effort }} {% trans "hours per week" %}
{% endif %}</div>
{% endif %}
</div>
</div>
<div class="info-item">
<div class="heading">{% trans "Languages" %}</div>
......
......@@ -18,8 +18,12 @@
<th>{% trans "Last Updated" %}</th>
</tr>
{% for course_run in object_list %}
{% url 'publisher:publisher_course_run_detail' course_run.id as detail_url %}
<tr>
<td>{{ course_run.title }}</td>
<td>
<a href={{detail_url}}>{{ course_run.title }}</a>
</td>
<td>{{ course_run.start }}</td>
<td>{{ course_run.partner }}</td>
<td>{{ course_run.target_content }}</td>
......
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