From 062653e70856998af7231a3eff17f35d99b685d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= <jonas.havelka@volny.cz>
Date: Tue, 22 Nov 2022 00:15:20 +0100
Subject: [PATCH] =?UTF-8?q?Fix:=200.5=20=C2=B7=20#1237?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 api/urls.py                                   |  1 +
 api/views/autocomplete.py                     | 20 +++++++++++++++++++
 odevzdavatko/forms.py                         |  9 ++++++++-
 .../templates/odevzdavatko/nahraj_reseni.html |  2 ++
 odevzdavatko/views.py                         |  1 +
 5 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/api/urls.py b/api/urls.py
index 23aafe36..76d82b25 100644
--- a/api/urls.py
+++ b/api/urls.py
@@ -22,6 +22,7 @@ urlpatterns = [
 	# Autocomplete
 	path('api/autocomplete/skola/', views.SkolaAutocomplete.as_view(), name='autocomplete_skola'),
 	path('api/autocomplete/resitel/', org_required(views.ResitelAutocomplete.as_view()), name='autocomplete_resitel'),
+	path('api/autocomplete/resitel_public/', views.PublicResitelAutocomplete.as_view(), name='autocomplete_resitel_public'),
 	path('api/autocomplete/problem/odevzdatelny', views.OdevzdatelnyProblemAutocomplete.as_view(), name='autocomplete_problem_odevzdatelny'),
 
 	# Ceka na autocomplete v3
diff --git a/api/views/autocomplete.py b/api/views/autocomplete.py
index 217df008..c706b126 100644
--- a/api/views/autocomplete.py
+++ b/api/views/autocomplete.py
@@ -44,6 +44,26 @@ class ResitelAutocomplete(LoginRequiredAjaxMixin,autocomplete.Select2QuerySetVie
 			qs = qs.filter(query)
 		return qs
 
+
+class PublicResitelAutocomplete(LoginRequiredAjaxMixin, autocomplete.Select2QuerySetView):
+	"""
+		View k :mod:`dal.autocomplete` pro vyhledávání řešitelů podle přezdívky
+		především v odevzdávátku.
+	"""
+	def get_queryset(self):
+		qs = m.Resitel.objects.filter(
+			prezdivka_resitele__isnull=False
+		).exclude(
+			prezdivka_resitele=""
+		).filter(
+			prezdivka_resitele__startswith=self.q
+		).all()
+		return qs
+
+	def get_result_label(self, result):
+		return result.prezdivka_resitele
+
+
 class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView):
 	""" View k :mod:`dal.autocomplete` pro vyhledávání problémů především v odevzdávátku. """
 	def get_queryset(self):
diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py
index a8538668..b52c30f4 100644
--- a/odevzdavatko/forms.py
+++ b/odevzdavatko/forms.py
@@ -63,7 +63,7 @@ class PosliReseniForm(forms.Form):
 class NahrajReseniForm(forms.ModelForm):
 	class Meta:
 		model = m.Reseni
-		fields = ('problem',)
+		fields = ('problem', 'resitele')
 		help_texts = {'problem':''} # Nezobrazovat help text ve formuláři
 		
 		widgets = {'problem':
@@ -72,6 +72,13 @@ class NahrajReseniForm(forms.ModelForm):
 					attrs = {'data-placeholder--id': '-1',
 						'data-placeholder--text' : '---',
 						'data-allow-clear': 'true'},
+				),
+				'resitele':
+				autocomplete.ModelSelect2Multiple(
+					url='autocomplete_resitel_public',
+					attrs = {'data-placeholder--id': '-1',
+						'data-placeholder--text' : '---',
+						'data-allow-clear': 'true'},
 				)
 		}
 
diff --git a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html
index 64ef92c1..07529720 100644
--- a/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html
+++ b/odevzdavatko/templates/odevzdavatko/nahraj_reseni.html
@@ -13,6 +13,8 @@
 
 <p style="text-align: justify">Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a&nbsp;třeba ti je i&nbsp;rychleji opravíme.</p>
 
+  <p>Pokud řešíte ve více lidech, je <b>nutné</b> přidat tyto lidi jako „Autory řešení“! V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze <b>jednou</b> (ne každý sám)!</p>
+
 <form enctype="multipart/form-data" action="{% url 'seminar_nahraj_reseni' %}" method="post" onsubmit="return zkontroluj_prilohy();">
   {% csrf_token %}
   <table class='form' id="reseni">
diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py
index 2927838b..3b29d397 100644
--- a/odevzdavatko/views.py
+++ b/odevzdavatko/views.py
@@ -407,6 +407,7 @@ class NahrajReseniView(LoginRequiredMixin, CreateView):
 		with transaction.atomic():
 			self.object = form.save()
 			self.object.resitele.add(m.Resitel.objects.get(osoba__user = self.request.user))
+			self.object.resitele.add(*form.cleaned_data["resitele"])
 			self.object.cas_doruceni = timezone.now()
 			self.object.forma = m.Reseni.FORMA_UPLOAD
 			self.object.save()