X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/b7fbbcfd919b7cf3d69da333a7e3f7c09eacd7e8..2d5e46793f9b1f3f87f972114a4448da8efe740e:/stage2/views.py diff --git a/stage2/views.py b/stage2/views.py index a010ef4..3f24d38 100644 --- a/stage2/views.py +++ b/stage2/views.py @@ -234,6 +234,10 @@ def expert_download(request, attachment_id): return attachment_download(attachment) +def write_row(row, writer): + writer.writerow([unicode(item).encode('utf-8') for item in row]) + + @login_required def csv_results(request): import csv @@ -241,7 +245,7 @@ def csv_results(request): writer = csv.writer(response) assignments = Assignment.objects.all() participants = Participant.objects.filter(complete_set=True) - headers = [u'imię', u'nazwisko', u'szkoła'] + headers = [u'imię', u'nazwisko', u'szkoła', u'adres szkoły'] assignments_experts = [] for assignment in assignments: for expert in assignment.experts.filter(mark__answer__assignment=assignment).distinct(): @@ -250,23 +254,51 @@ def csv_results(request): for assignment in assignments: headers.append(u'%s - średnia' % assignment.title.encode('utf-8')) headers.append(u'ostateczny wynik') - writer.writerow([unicode(item).encode('utf-8') for item in headers]) + write_row(headers, writer) for participant in participants: row = [ participant.first_name, participant.last_name, participant.contact.body['school'], + participant.contact.body['school_address'], ] for assignment, expert in assignments_experts: - try: - row.append( - Mark.objects.get( - expert=expert, answer__assignment=assignment, answer__participant=participant).points) - except Mark.DoesNotExist: + marks = expert.mark_set.filter(answer__assignment=assignment, answer__participant=participant) + if marks: + row.append(sum(mark.points for mark in marks)) + else: row.append('') for assignment in assignments: row.append('%.2f' % participant.answer_set.get(assignment=assignment).score()) row.append('%.2f' % participant.score()) - writer.writerow([unicode(item).encode('utf-8') for item in row]) + write_row(row, writer) response['Content-Disposition'] = 'attachment; filename="wyniki.csv"' return response + + +@login_required +def csv_details(request, assignment_id): + import csv + response = HttpResponse(content_type='text/csv') + writer = csv.writer(response) + assignment = get_object_or_404(Assignment, id=assignment_id) + criteria = tuple(assignment.markcriterion_set.all()) + expert_headers = (u"ekspert",) + criteria + headers = (u"imię", u"nazwisko", u"numer", u"wynik") + expert_headers * 2 + write_row(headers, writer) + + for a in assignment.answer_set.filter(participant__complete_set=True).order_by('participant__last_name'): + row = ( + a.participant.first_name, + a.participant.last_name, + str(a.participant.id), + '%.2f' % a.score(), + ) + experts = a.mark_set.values_list('expert__username', flat=True).order_by().distinct() + for expert in experts: + row += (expert,) + marks = a.mark_set.filter(expert__username=expert).order_by('criterion__order') + row += tuple(marks.values_list('points', flat=True)) + write_row(row, writer) + response['Content-Disposition'] = 'attachment; filename="%s.csv"' % assignment.title + return response