Skip to content

Commit

Permalink
Merge pull request #558 from znick/add_costudents_to_statistics
Browse files Browse the repository at this point in the history
Add costudents to statistics
  • Loading branch information
znick authored Jun 23, 2023
2 parents 209c7b7 + 7bcca66 commit 1c433e4
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions anytask/courses/pythontask.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponse

import csv
import datetime
import StringIO


class PythonTaskStat(object):
Expand Down Expand Up @@ -61,8 +64,8 @@ def _group_update(self, group):
group_students = []

for student in group.students.filter(is_active=True).order_by('last_name', 'first_name'):
tasks = TaskTaken.objects.filter(user=student).filter(task__in=self.tasks) \
.filter(Q(Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED)))
tasks = TaskTaken.objects.filter(Q(Q(user=student) | Q(issue__costudents=student))).filter(task__in=self.tasks) \
.filter(Q(Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED))).distinct()
if tasks.count() > 0:
stat['active_students'] += 1

Expand Down Expand Up @@ -140,13 +143,33 @@ def tasks_list(request, course):
return render(request, 'course_tasks_potok.html', context)


def _conver_group_stat_to_cvs(group_stat):
fn = StringIO.StringIO()
fieldnames = ['group', 'name', 'score']
writer = csv.DictWriter(fn, fieldnames=fieldnames)

writer.writeheader()
for group, user_data in group_stat:
for user, score, _ in user_data:
writer.writerow({'group': group.name.encode('utf-8'),
'name': "{} {}".format(user.last_name.encode('utf-8'), user.first_name.encode('utf-8')),
'score':score})

return fn.getvalue()


def python_stat(request, course):
tasks = Task.objects.filter(course=course)
stat = PythonTaskStat(tasks)

for group in course.groups.all().order_by('name'):
stat.update(group)

if request.GET.get('format') == 'csv':
csv = _conver_group_stat_to_cvs(stat.get_group_stat())

return HttpResponse(csv, content_type="text/csv")

context = {
'course': course,
'group_stat': stat.get_group_stat(),
Expand Down

0 comments on commit 1c433e4

Please sign in to comment.