From 3b58e98815646b16a9f09408b6d864e1eddbf9e4 Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Mon, 31 Jan 2022 23:38:28 +0300 Subject: [PATCH] dashboard --- Main/views/MainView.py | 24 ++++++++++++++++++++++++ templates/main.html | 20 ++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/Main/views/MainView.py b/Main/views/MainView.py index 3e67636..7b9b49c 100644 --- a/Main/views/MainView.py +++ b/Main/views/MainView.py @@ -1,3 +1,9 @@ +from random import sample + +from django.db.models import Count, Max +from django.utils import timezone + +from Main.models import Task, UserInfo, Solution from SprintLib.BaseView import BaseView @@ -5,3 +11,21 @@ class MainView(BaseView): view_file = "main.html" required_login = True endpoint = "" + + def get(self): + self.context['top_tasks_today'] = Task.objects.filter(public=True, solution__time_sent__date=timezone.now().date()).annotate(count=Count('solution__task_id')).order_by('-count')[:5] + if len(self.context['top_tasks_today']) < 5: + self.context['top_tasks_today'] = Task.objects.filter(public=True, solution__time_sent__isnull=False).annotate(time_sent=Max('solution__time_sent'), count=Count('solution__task_id')).order_by('-count', '-time_sent')[:5] + if len(self.context['top_tasks_today']) < 5: + self.context['top_tasks_today'] = Task.objects.filter(public=True).order_by('name')[:5] + for task in self.context['top_tasks_today']: + setattr(task, 'solution', Solution.objects.filter(user=self.request.user, task=task).first()) + self.context['top_users'] = UserInfo.objects.filter(verified=True).order_by('-rating')[:5] + all_tasks = Task.objects.filter(solution__user=self.request.user).distinct() + ok_tasks = all_tasks.filter(solution__result="OK").distinct() + undone_tasks = set(all_tasks) - set(ok_tasks) + self.context['undone_tasks'] = sample(undone_tasks, k=min(5, len(undone_tasks))) + for task in self.context['undone_tasks']: + setattr(task, 'solution', Solution.objects.filter(user=self.request.user, task=task).first()) + new_tasks = set(Task.objects.filter(public=True)) - set(all_tasks) + self.context['new_tasks'] = sample(new_tasks, k=min(5, len(new_tasks))) diff --git a/templates/main.html b/templates/main.html index a7915dc..381c3d9 100644 --- a/templates/main.html +++ b/templates/main.html @@ -4,4 +4,24 @@ {% block main %}

Мои группы

+

+

Топ задач сегодня

+ {% for task in top_tasks_today %} + {{ task.name }} ({{ task.count }}){{ task.solution.number_result }}
+ {% endfor %} +

+

У тебя были попытки, попробуй решить задачи еще раз

+ {% for task in undone_tasks %} + {{ task.name }}{{ task.solution.number_result }}
+ {% endfor %} +

+

Новые задачи

+ {% for task in new_tasks %} + {{ task.name }}
+ {% endfor %} +

+

Топ пользователей

+ {% for u in top_users %} + {{ u.place }}. {{ u.user.username }} ({{ u.rating }})

+ {% endfor %} {% endblock %} \ No newline at end of file