From 36c8acbbd6205aba540fbf53bc12f6f7bbab250e Mon Sep 17 00:00:00 2001
From: "Pavel \"LEdoian\" Turinsky" <ledoian@matfyz.cz>
Date: Tue, 6 Apr 2021 23:33:10 +0200
Subject: [PATCH] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20p=C5=99ehled=20=C5=99?=
 =?UTF-8?q?e=C5=A1en=C3=AD=20pro=20=C5=99e=C5=A1itele=20(o=C5=A1kliv=C3=BD?=
 =?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 seminar/urls.py               |  1 +
 seminar/views/odevzdavatko.py | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/seminar/urls.py b/seminar/urls.py
index e5b79e01..5b469170 100644
--- a/seminar/urls.py
+++ b/seminar/urls.py
@@ -173,4 +173,5 @@ urlpatterns = [
 	path('temp/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
 	path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())),
 	path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())),
+	path('temp/reseni/resitel', resitel_required(views.PrehledOdevzdanychReseni.as_view())),
 ]
diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py
index 3aa7e469..585727a5 100644
--- a/seminar/views/odevzdavatko.py
+++ b/seminar/views/odevzdavatko.py
@@ -25,6 +25,8 @@ logger = logging.getLogger(__name__)
 # 	- ReseniProblemuView
 # - Detail konkrétního řešení -- všechny soubory, datum, ...
 # 	- DetailReseniView
+# - Pro řešitele: přehled jejich odevzdaných řešení
+#	- PrehledOdevzdanychReseni
 #
 # Taky se může hodit:
 # - Tabulka všech řešitelů x všech problémů?
@@ -238,6 +240,29 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
 	return redirect(success_url)
 
 
+class PrehledOdevzdanychReseni(ListView):
+	model = m.Hodnoceni
+	template_name = 'seminar/odevzdavatko/resitel_prehled.html'
+
+	def get_queryset(self):
+		if not self.request.user.is_authenticated:
+			raise RuntimeError("Uživatel měl být přihlášený!")
+		resitel = m.Resitel.objects.get(osoba__user=self.request.user)
+		qs = super().get_queryset()
+		qs = qs.filter(reseni__resitele__in=[resitel])
+		return qs
+	
+	def get_context_data(self, *args, **kwargs):
+		ctx = super().get_context_data(*args, **kwargs)
+		# Ročník určujeme podle čísla, do jehož deadlinu došlo řešení.
+		# Chceme to mít seřazené, takže místo comphrerehsion ručně postavíme pole polí. Django templates neumí použít OrderedDict :-/
+		podle_rocniku = []
+		for rocnik, hodnoceni in groupby(ctx['object_list'], lambda ho: deadline(ho.reseni.cas_doruceni)[1].rocnik):
+			podle_rocniku.append((rocnik, list(hodnoceni)))
+		ctx['podle_rocniku'] = reversed(podle_rocniku) # Od nejnovějšího ročníku
+		# TODO: Umožnit stažení / zobrazení řešení
+		return ctx
+
 # Přehled všech řešení kvůli debugování
 
 class SeznamReseniView(ListView):