add CourseDetail, CourseStudentResults
This commit is contained in:
parent
b629459b46
commit
1797b9fe06
10 changed files with 205 additions and 17 deletions
|
@ -1,6 +1,8 @@
|
|||
from django.db import models
|
||||
from judge.models.course import Course
|
||||
from django.views.generic import ListView
|
||||
from judge.models.course import Course , CourseAssignment , CourseRole
|
||||
from judge.models.contest import ContestParticipation, Contest
|
||||
from django.views.generic import ListView, DetailView
|
||||
from django.utils import timezone
|
||||
|
||||
__all__ = [
|
||||
"CourseList",
|
||||
|
@ -10,22 +12,19 @@ __all__ = [
|
|||
"CourseStudentResults",
|
||||
"CourseEdit",
|
||||
"CourseResourceDetailEdit",
|
||||
"CourseResourceEdit",
|
||||
"CourseResourceEdit",
|
||||
]
|
||||
|
||||
course_directory_file = ""
|
||||
|
||||
class CourseListMixin(object):
|
||||
def get_queryset(self):
|
||||
return Course.objects.filter(is_open = "true").values()
|
||||
|
||||
class CourseList(ListView):
|
||||
model = Course
|
||||
template_name = "course/list.html"
|
||||
queryset = Course.objects.filter(is_public=True).filter(is_open=True)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(CourseList,self).get_context_data(**kwargs)
|
||||
available , enrolling = [] , []
|
||||
context = super(CourseList, self).get_context_data(**kwargs)
|
||||
available, enrolling = [], []
|
||||
for course in Course.objects.filter(is_public=True).filter(is_open=True):
|
||||
if Course.is_accessible_by(course, self.request.profile):
|
||||
enrolling.append(course)
|
||||
|
@ -34,4 +33,61 @@ class CourseList(ListView):
|
|||
context["available"] = available
|
||||
context["enrolling"] = enrolling
|
||||
return context
|
||||
|
||||
class CourseDetail(ListView):
|
||||
model = CourseAssignment
|
||||
template_name = "course/course.html"
|
||||
|
||||
def get_queryset(self):
|
||||
cur_course = Course.objects.get(slug=self.kwargs['slug'])
|
||||
return CourseAssignment.objects.filter(course=cur_course)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(CourseDetail, self).get_context_data(**kwargs)
|
||||
context['slug'] = self.kwargs['slug']
|
||||
return context
|
||||
|
||||
def best_score_user_contest(user , contest):
|
||||
participated_contests = ContestParticipation.objects.filter(user=user, contest=contest)
|
||||
progress_point = 0
|
||||
for cur_contest in participated_contests:
|
||||
progress_point = max( progress_point , cur_contest.score_final )
|
||||
return progress_point
|
||||
|
||||
def progress_contest(user , contest):
|
||||
return best_score_user_contest(user, contest) / contest.total_points
|
||||
|
||||
def progress_course(user , course):
|
||||
assignments = CourseAssignment.objects.filter(course=course)
|
||||
assignments_total_point = 0
|
||||
for assignment in assignments:
|
||||
assignments_total_point += assignment.points
|
||||
progress = 0
|
||||
for assignment in assignments:
|
||||
progress += progress_contest(user,assignment.contest) * assignment.points / assignments_total_point
|
||||
return progress
|
||||
|
||||
class CourseStudentResults(ListView):
|
||||
model = ContestParticipation
|
||||
template_name = "course/grades.html"
|
||||
|
||||
def get_queryset(self):
|
||||
cur_course = Course.objects.get(slug=self.kwargs['slug'])
|
||||
contests = CourseAssignment.objects.filter(course=cur_course)
|
||||
students = Course.get_students(cur_course)
|
||||
grades_table = []
|
||||
for student in students:
|
||||
grades_student = [student.user.user.username]
|
||||
for contest in contests:
|
||||
grades_student.append( round(progress_contest(student.user, contest.contest) * 100 ) )
|
||||
grades_student.append( round(progress_course(student.user, cur_course) * 100) )
|
||||
grades_table.append( grades_student )
|
||||
return grades_table
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(CourseStudentResults, self).get_context_data(**kwargs)
|
||||
cur_course = Course.objects.get(slug=self.kwargs['slug'])
|
||||
contests = CourseAssignment.objects.filter(course=cur_course)
|
||||
context['contests'] = contests
|
||||
return context
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue