+ def changelist_view(self, request, extra_context=None):
+ context = dict(examiners=[])
+ 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 = super(SubmissionAdmin, self).queryset(request)
+ if not request.user.is_superuser:
+ qs = qs.filter(examiners=request.user)
+ return qs
+
+ def get_urls(self):
+ 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 = {}
+ 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 user not in examiners:
+ examiners.append(user)
+ if submission.contact:
+ contact_body = submission.contact.body
+ submission.school = '%s %s' % (contact_body.get('school'), contact_body.get('school_address'))
+
+
+def report_view(request):
+ submissions = sorted(Submission.objects.all(), key=lambda s: -s.final_result)
+ toret = render_to_string('wtem/admin_report.csv', {
+ 'submissionsSet': SubmissionsSet(submissions),
+ 'exercise_ids': [str(e['id']) for e in exercises]})
+ response = HttpResponse(toret, content_type='text/csv')
+ response['Content-Disposition'] = 'attachment; filename="wyniki.csv"'
+ return response
+
+
+class ConfirmationAdmin(admin.ModelAdmin):
+ list_display = ('email', 'first_name', 'last_name', 'readable_contact', 'school_phone', 'readable_age', 'confirmed')
+ readonly_fields = ('contact', 'readable_contact', 'readable_age', 'school_phone', 'key', 'confirmed')
+ list_filter = ('confirmed',)
+ list_select_related = ('contact',)
+ search_fields = ('last_name', 'email', 'contact__contact')
+
+ def resend_mail(self, request, queryset):
+ for confirmation in queryset:
+ confirmation.send_mail()
+ resend_mail.short_description = "Wyślij kod ponownie"
+
+ actions = [resend_mail]