70 lines
3.4 KiB
Python
70 lines
3.4 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.managers import RoleManager
|
|
from users.models import SchoolClass, User
|
|
|
|
|
|
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()
|
|
|
|
content_block_by_users = ContentBlock.objects.filter(
|
|
Q(owner__user_roles__role__key=RoleManager.TEACHER_KEY) | Q(
|
|
owner__user_roles__role__key=RoleManager.STUDENT_KEY)).count()
|
|
|
|
content_block_by_teachers = ContentBlock.objects.filter(
|
|
owner__user_roles__role__key=RoleManager.TEACHER_KEY).count()
|
|
content_block_by_students = ContentBlock.objects.filter(
|
|
owner__user_roles__role__key=RoleManager.STUDENT_KEY).count()
|
|
|
|
users_with_content_blocks = User.objects.filter(
|
|
Q(user_roles__role__key=RoleManager.STUDENT_KEY) | Q(user_roles__role__key=RoleManager.TEACHER_KEY)).filter(
|
|
owned_pages__gt=0).distinct().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
|
|
context['content_block_by_users_count'] = content_block_by_users
|
|
context['content_block_by_teachers_count'] = content_block_by_teachers
|
|
context['content_block_by_students_count'] = content_block_by_students
|
|
context['users_with_content_blocks_count'] = users_with_content_blocks
|
|
|
|
return context
|