skillbox/server/statistics/views.py

52 lines
2.3 KiB
Python

from django.db.models import Count, Q
from django.views.generic import TemplateView
from assignments.models import StudentSubmission
from books.models import Module, ContentBlock
from rooms.models import Room
from users.models import SchoolClass
class StatisticsView(TemplateView):
template_name = "statistics.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
private_submissions = StudentSubmission.objects.filter(final=False).count()
shared_submissions = StudentSubmission.objects.filter(final=True).count()
private_submissions_by_module = Count('assignments__submissions',
filter=Q(assignments__submissions__final=False))
shared_submissions_by_module = Count('assignments__submissions', filter=Q(assignments__submissions__final=True))
modules = Module.objects.values('title').annotate(private_submissions=private_submissions_by_module).annotate(
shared_submissions=shared_submissions_by_module)
private_submissions_by_class = Count('users__submissions', filter=Q(users__submissions__final=False))
shared_submissions_by_class = Count('users__submissions', filter=Q(users__submissions__final=True))
rooms_by_class = Count('rooms')
room_entries_by_class = Count('rooms__room_entries')
room_entries_by_room = Count('room_entries')
classes = SchoolClass.objects.values('name').annotate(
private_submissions=private_submissions_by_class).annotate(shared_submissions=shared_submissions_by_class)
room_classes = SchoolClass.objects.values('name').annotate(room_count=rooms_by_class)
room_entries_classes = SchoolClass.objects.values('name').annotate(room_entry_count=room_entries_by_class)
rooms = Room.objects.values('title').annotate(room_entry_count=room_entries_by_room)
content_block_count = ContentBlock.objects.count()
context['private_submissions'] = private_submissions
context['shared_submissions'] = shared_submissions
context['modules'] = modules
context['classes'] = classes
context['room_classes'] = room_classes
context['room_entries_classes'] = room_entries_classes
context['rooms'] = rooms
context['content_block_count'] = content_block_count
return context