from django.utils import simplejson
from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse
-
+from django.conf.urls import url, patterns
+from django.shortcuts import render
+from django.contrib.auth.models import User
+from django.http import HttpResponse
+from django.template.loader import render_to_string
from .models import Submission, Assignment, Attachment, exercises
from .middleware import get_current_request
user_exercises = get_user_exercises(user)
user_marks = submission.marks.get(str(user.id), {})
return ','.join([str(e['id']) for e in user_exercises if str(e['id']) not in user_marks.keys()])
+ todo.short_description = 'Twoje nieocenione zadania'
def examiners_repr(self, submission):
return ', '.join([u.username for u in submission.examiners.all()])
- examiners_repr.short_description = 'Przypisani'
+ examiners_repr.short_description = 'Przypisani do zgłoszenia'
def save_model(self, request, submission, form, change):
for name, value in form.cleaned_data.items():
def changelist_view(self, request, extra_context=None):
context = dict(examiners = [])
- if request.user.is_superuser:
- submissions = Submission.objects.all()
- for assignment in Assignment.objects.all():
- examiner = dict(name = assignment.user.username, todo = 0)
- for submission in Submission.objects.filter(examiners = assignment.user):
- for exercise_id in assignment.exercises:
- if submission.get_mark(user_id = assignment.user.id, exercise_id = exercise_id) is None:
- examiner['todo'] += 1
- context['examiners'].append(examiner)
+ assignments = Assignment.objects.all()
+ if not request.user.is_superuser:
+ assignments = assignments.filter(user = request.user)
+ for assignment in assignments:
+ examiner = dict(name = assignment.user.username, todo = 0)
+ for submission in Submission.objects.filter(examiners = assignment.user):
+ for exercise_id in assignment.exercises:
+ if submission.get_mark(user_id = assignment.user.id, exercise_id = exercise_id) is None:
+ examiner['todo'] += 1
+ context['examiners'].append(examiner)
return super(SubmissionAdmin, self).changelist_view(request, extra_context = context)
def queryset(self, request):
qs = qs.filter(examiners = request.user)
return qs
+ def get_urls(self):
+ urls = super(SubmissionAdmin, self).get_urls()
+ return patterns('',
+ url(r'^report/$', self.admin_site.admin_view(report_view), name='wtem_admin_report')
+ ) + super(SubmissionAdmin, self).get_urls()
+
+
+class SubmissionsSet:
+ def __init__(self, submissions):
+ self.submissions = submissions
+ self.examiners_by_exercise = dict()
+ for submission in submissions:
+ for user_id, marks in submission.marks.items():
+ user = User.objects.get(pk=user_id)
+ for exercise_id in marks.keys():
+ examiners = self.examiners_by_exercise.setdefault(exercise_id, [])
+ if not user in examiners:
+ examiners.append(user)
+
+def report_view(request):
+ submissions = sorted(Submission.objects.all(), key = lambda s: -s.final_result)
+ toret = render_to_string('wtem/admin_report.csv', dict(
+ submissionsSet = SubmissionsSet(submissions),
+ exercise_ids = map(str, range(1,len(exercises)+1))
+ ))
+ response = HttpResponse(toret, content_type = 'text/csv')
+ response['Content-Disposition'] = 'attachment; filename="wyniki.csv"'
+ return response
admin.site.register(Submission, SubmissionAdmin)
admin.site.register(Assignment)
\ No newline at end of file