Change max points in question description
[edumed.git] / wtem / admin.py
index be96131..0047e9d 100644 (file)
@@ -7,7 +7,11 @@ from django import forms
 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
 
@@ -132,10 +136,11 @@ class SubmissionAdmin(admin.ModelAdmin):
         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():
@@ -148,15 +153,16 @@ class SubmissionAdmin(admin.ModelAdmin):
 
     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):
@@ -165,6 +171,34 @@ class SubmissionAdmin(admin.ModelAdmin):
             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