From dcba5b6b308aeaafaff880d688f8be57b45488b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 19 Feb 2025 18:38:38 +0100 Subject: [PATCH 01/13] =?UTF-8?q?Hlasov=C3=A1n=C3=AD=20m=C3=A1=20m=C3=ADt?= =?UTF-8?q?=20i=20osobu,=20nejen=20string?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0023_hlasovani_ucastnik_osoba.py | 20 +++++++++++++++++++ prednasky/models.py | 1 + prednasky/views.py | 1 + 3 files changed, 22 insertions(+) create mode 100644 prednasky/migrations/0023_hlasovani_ucastnik_osoba.py diff --git a/prednasky/migrations/0023_hlasovani_ucastnik_osoba.py b/prednasky/migrations/0023_hlasovani_ucastnik_osoba.py new file mode 100644 index 00000000..970a6c24 --- /dev/null +++ b/prednasky/migrations/0023_hlasovani_ucastnik_osoba.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.16 on 2025-02-19 17:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('personalni', '0019_rename_upozorneni_resitel_upozornovat_na_opravy_reseni'), + ('prednasky', '0022_preklep_u_odpovedi_hlasovanioznalostech'), + ] + + operations = [ + migrations.AddField( + model_name='hlasovani', + name='ucastnik_osoba', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='personalni.osoba'), + ), + ] diff --git a/prednasky/models.py b/prednasky/models.py index f508ca7e..b49a3a69 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -88,6 +88,7 @@ class Hlasovani(models.Model): #: že všechna předchozí hlasování zde mají náhodný string…) #: TODO Změnit to na Osobu* ucastnik = models.CharField("Účastník", max_length=100) + ucastnik_osoba = models.ForeignKey(Osoba, on_delete=models.CASCADE, blank=False, null=True) seznam = models.ForeignKey(Seznam, null=True, on_delete=models.SET_NULL) def __str__(self): diff --git a/prednasky/views.py b/prednasky/views.py index 43ac983b..5bb33c14 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -64,6 +64,7 @@ def newPrednaska(request: HttpRequest) -> HttpResponse: prednaska=prednaska, body=form.cleaned_data['body'], ucastnik=ucastnik, + ucastnik_osoba=osoba, seznam=seznam, ) From a8e9f03cc1f33987453b9c23eb18720eea10e3bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 19 Feb 2025 18:41:13 +0100 Subject: [PATCH 02/13] =?UTF-8?q?
y=20kolem=20jednotliv=C3=BDch=20hlas?= =?UTF-8?q?ov=C3=A1n=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/templates/prednasky/base.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/prednasky/templates/prednasky/base.html b/prednasky/templates/prednasky/base.html index 326370f1..2a63abd1 100644 --- a/prednasky/templates/prednasky/base.html +++ b/prednasky/templates/prednasky/base.html @@ -14,6 +14,7 @@

Obtížnost 1 je nejlehčí, 3 nejtěžší.

{{ form_set_prednasky.management_form }} {% for f, p in formy_a_prednasky %} +

{{p.nazev}} ({{p.org}})

{{p.anotace | linebreaksbr}}

{{p.obor}}
@@ -22,17 +23,20 @@
{{ f }}
+
{% empty %} Nejsou žádné přednášky o kterých by šlo hlasovat. {% endfor %} {{ form_set_znalosti.management_form }} {% for f, z in formy_a_znalosti %} +
{% if forloop.first %}

Jak moc znáš následující?

{% endif %}

{{z.nazev}}

{{z.text | linebreaksbr}}

{{ f }}
+
{% endfor %} From 7a70b9dcff1a27205e42e514bda37af22c723cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 19 Feb 2025 18:45:24 +0100 Subject: [PATCH 03/13] =?UTF-8?q?Pojmenovan=C3=A9=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/templates/prednasky/metaseznam_prednasek.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prednasky/templates/prednasky/metaseznam_prednasek.html b/prednasky/templates/prednasky/metaseznam_prednasek.html index dfc13caf..d34b5fa7 100644 --- a/prednasky/templates/prednasky/metaseznam_prednasek.html +++ b/prednasky/templates/prednasky/metaseznam_prednasek.html @@ -14,7 +14,7 @@ {% else %} Seznam přednášek na soustředění {{seznam.soustredeni.misto}} {% endif %} - Export + Export {% endfor %} From 4d5800f3b8a363a2b29a9777e15a1ecbde3dc1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 19 Feb 2025 18:53:44 +0100 Subject: [PATCH 04/13] =?UTF-8?q?Pouze=20CSV=20export=20p=C5=99edn=C3=A1?= =?UTF-8?q?=C5=A1ek=20(smaz=C3=A1n=C3=AD=20ostatn=C3=ADch)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prednasky/metaseznam_prednasek.html | 10 ++-- prednasky/urls.py | 10 ---- prednasky/views.py | 58 ------------------- 3 files changed, 5 insertions(+), 73 deletions(-) diff --git a/prednasky/templates/prednasky/metaseznam_prednasek.html b/prednasky/templates/prednasky/metaseznam_prednasek.html index d34b5fa7..1216e2dc 100644 --- a/prednasky/templates/prednasky/metaseznam_prednasek.html +++ b/prednasky/templates/prednasky/metaseznam_prednasek.html @@ -2,19 +2,19 @@ {% block content %}

{% block nadpis1a %} - Hlasování o přednáškách + Výsledky hlasování o přednáškách {% endblock %}

{# Projdi vsechny seznamy #}
diff --git a/prednasky/urls.py b/prednasky/urls.py index 24d8535a..5c0201d8 100644 --- a/prednasky/urls.py +++ b/prednasky/urls.py @@ -12,19 +12,9 @@ urlpatterns = [ 'prednasky/metaseznam_prednasek', org_required(views.MetaSeznamListView.as_view()), name='metaseznam-list'), - # path( - # 'prednasky/seznam_prednasek//export', - # org_required(views.SeznamExportView), - # name='seznam-export' - # ), path( 'prednasky/seznam_prednasek//hlasovani.csv', org_required(views.PrednaskyExportView), name='seznam-export-csv' ), - path( - 'prednasky/seznam_prednasek//', - org_required(views.SeznamListView.as_view()), - name='seznam-list' - ), ] diff --git a/prednasky/views.py b/prednasky/views.py index 5bb33c14..53ee9b54 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -133,64 +133,6 @@ class MetaSeznamListView(generic.ListView): template_name = 'prednasky/metaseznam_prednasek.html' -class SeznamListView(generic.ListView): - """ - Náhled na to, kolik má která přednáška v :py:class:`Seznamu ` :py:class:`hlasů `. - (Je otázka, zda tento View vůbec chceme. Pokud ano, hodilo by se do něj přidat i znalosti.) - """ - template_name = 'prednasky/seznam_prednasek.html' - - def get_queryset(self): - self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) - prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( - 'org__osoba__user__first_name', 'org__osoba__user__last_name' - ) - return prednasky - - # FIXME nahradit anotaci s filtrem po prechodu na Django 2.2 - def get_context_data(self,**kwargs): - context = super(SeznamListView, self).get_context_data(**kwargs) - - # hlasovani se vztahuje k nejnovejsimu soustredeni - sous = Soustredeni.objects.first() - seznam = Seznam.objects.filter(soustredeni = sous, stav=Seznam.Stav.NAVRH).first() - - for obj in self.object_list: - hlasovani_set = obj.hlasovani_set.filter(seznam=seznam).only('body') - obj.body = sum(map(lambda x: x.body,hlasovani_set)) - - return context - - -# def SeznamExportView(request, seznam): -# """Vypíše výsledky hlasování ve formátu pro prologovský optimalizátor""" -# # TODO zřejmě se nepoužívá, časem vyřadit? nahradit tabulkou vhodnější pro -# # lidi? -# hlasovani = Hlasovani.objects.filter(seznam=seznam) -# prednasky = Prednaska.objects.filter(seznamy=seznam) -# orgove = set(p.org for p in prednasky) -# ucastnici = set(h.ucastnik for h in hlasovani) -# -# for p in prednasky: -# p.body = [] -# for u in ucastnici: -# try: -# p.body.append(hlasovani.get(ucastnik=u, prednaska=p).body) -# except ObjectDoesNotExist: -# # účastník nehlasoval -# p.body.append("?") -# -# for h in hlasovani: -# h.ucastnik = hash(h.ucastnik) -# -# return render( -# request, -# 'prednasky/seznam_prednasek_export.txt', -# {"hlasovani": hlasovani, "prednasky": prednasky, "orgove": orgove}, -# content_type="text/plain" -# ) - - def PrednaskyExportView(request: HttpRequest, seznam: int, **kwargs) -> HttpResponse: """ Vrátí všechna :py:class:`Hlasování ` From 52c5d18595c6410cbe412bbc0a25e77f23bbc7e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 21 Feb 2025 16:42:11 +0100 Subject: [PATCH 05/13] =?UTF-8?q?Nekonzumovateln=C3=BD=20kontext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 53ee9b54..8bc66e49 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -117,8 +117,8 @@ def newPrednaska(request: HttpRequest) -> HttpResponse: 'prednasky/base.html', { 'form_set_prednasky': form_set_prednasky, 'form_set_znalosti': form_set_znalosti, - 'formy_a_prednasky': zip(form_set_prednasky, prednasky), - 'formy_a_znalosti': zip(form_set_znalosti, znalosti), + 'formy_a_prednasky': list(zip(form_set_prednasky, prednasky)), + 'formy_a_znalosti': list(zip(form_set_znalosti, znalosti)), } ) From a0ee2383340758a704c06f2f9110dc793ef589f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 21 Feb 2025 16:42:57 +0100 Subject: [PATCH 06/13] =?UTF-8?q?Z=C3=A1vorky=20nechci=20jako=20sou=C4=8D?= =?UTF-8?q?=C3=A1st=20odkazu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/templates/prednasky/metaseznam_prednasek.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prednasky/templates/prednasky/metaseznam_prednasek.html b/prednasky/templates/prednasky/metaseznam_prednasek.html index 1216e2dc..541c7bb2 100644 --- a/prednasky/templates/prednasky/metaseznam_prednasek.html +++ b/prednasky/templates/prednasky/metaseznam_prednasek.html @@ -14,7 +14,7 @@ {% else %} Seznam přednášek na soustředění {{seznam.soustredeni.misto}} {% endif %} - (CSV) + (CSV) {% endfor %} From 061a699f62978d48c4a6b003f692d000f8ab103e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 21 Feb 2025 17:00:35 +0100 Subject: [PATCH 07/13] =?UTF-8?q?Chyb=C4=9Bj=C3=ADc=C3=AD=20backticky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/admin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index 07615f43..ff8e9464 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -97,7 +97,7 @@ admin.site.register(Seznam, SeznamAdmin) class PrednaskaAdmin(VersionAdmin): - """ Admin pro :py:class:`Přednášku """ + """ Admin pro :py:class:`Přednášku ` """ list_display = ['nazev', 'org', 'obor'] list_filter = ['org', 'obor'] search_fields = ['nazev'] @@ -138,7 +138,7 @@ admin.site.register(Prednaska, PrednaskaAdmin) class ZnalostAdmin(PrednaskaAdmin): # Trochu hack, ať nemusím vypisovat všechno znovu """ - Admin pro :py:class:`Znalost + Admin pro :py:class:`Znalost ` TODO předělat, aby nedědila z :py:class:`prednasky.admin.PrednaskaAdmin`, ale společné věci byly zvlášť """ list_display = ("__str__",) From 46e2bb6b12197dd882d84dfcadbe2ff6fb3b72fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 21 Feb 2025 17:17:14 +0100 Subject: [PATCH 08/13] =?UTF-8?q?pro=20nav=C3=ADc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/forms.py b/prednasky/forms.py index 7b0e9739..e1543f80 100644 --- a/prednasky/forms.py +++ b/prednasky/forms.py @@ -3,7 +3,7 @@ from django import forms from .models import Hlasovani, HlasovaniOZnalostech class HlasovaniPrednaskaForm(forms.Form): - """ :py:class:`Formulář ` pro pro :py:class:`Hlasování ` o jedné :py:class:`Přednášce ` + """ :py:class:`Formulář ` pro :py:class:`Hlasování ` o jedné :py:class:`Přednášce ` (neobsahuje téměř nic, většina se musí doplnit jiným způsobem) """ @@ -17,7 +17,7 @@ class HlasovaniPrednaskaForm(forms.Form): HlasovaniPrednaskaFormSet = forms.formset_factory(HlasovaniPrednaskaForm, extra=0) class HlasovaniZnalostiForm(forms.Form): - """ :py:class:`Formulář ` pro pro :py:class:`HlasováníOZnalostech ` o jedné :py:class:`Znalosti ` + """ :py:class:`Formulář ` pro :py:class:`HlasováníOZnalostech ` o jedné :py:class:`Znalosti ` (neobsahuje téměř nic, většina se musí doplnit jiným způsobem) """ From 19448ce6c0ba64db3953bbf1acefa785a3c87487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Sat, 22 Feb 2025 16:38:11 +0100 Subject: [PATCH 09/13] =?UTF-8?q?Hlasit=C4=9Bj=C5=A1=C3=AD=20v=C3=BDstup?= =?UTF-8?q?=20p=C5=99i=20odstran=C4=9Bn=C3=A9=20znalosti/p=C5=99edn=C3=A1?= =?UTF-8?q?=C5=A1ce=20v=20exportu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 8bc66e49..e5adeec1 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -157,6 +157,8 @@ def PrednaskyExportView(request: HttpRequest, seznam: int, **kwargs) -> HttpResp # A po inicializaci sloupců vyplníme tabulku table: [str, list[str|Prednaska|Znalost,]] = {} + errors = [] + for h in hlasovani: if h.ucastnik not in table: # Pokud jsme účastníka ještě neviděli, předgenerujeme si jeho řádek table[h.ucastnik] = [h.ucastnik] + ([""] * width) @@ -164,7 +166,7 @@ def PrednaskyExportView(request: HttpRequest, seznam: int, **kwargs) -> HttpResp if h.prednaska.id in prednasky_map: table[h.ucastnik][prednasky_map[h.prednaska.id]] = h.body else: - pass # TODO Padat hlasitě? + errors.append(f"Přednáška {h.prednaska.id} ({h.prednaska}) dostala od Účastníka {h.ucastnik} následující hodnocení: {h.body}") for h in hlasovani_o_znalostech: ucastnik = str(h.ucastnik) + ' ' + str(h.ucastnik.id) # id, kvůli kolizi jmen @@ -174,8 +176,11 @@ def PrednaskyExportView(request: HttpRequest, seznam: int, **kwargs) -> HttpResp if h.znalost.id in znalosti_map: table[ucastnik][znalosti_map[h.znalost.id]] = h.odpoved else: - pass # TODO Padat hlasitě? + errors.append(f"Znalost {h.znalost.id} ({h.znalost}) dostala od Účastníka {h.ucastnik.id} následující odpověď: {h.odpoved}") + if len(errors) > 0: + logger.error("Při exportování hlasování o přednáškách a znalostech se neexportovali hodnocení z následujícího infa (pravděpodobně se od hlasování vyškrtla nějaká znalost/přednáška ze seznamu).") + logger.info("\n".join(errors)) response = HttpResponse(content_type="text/csv", charset="utf-8") response["Content-Disposition"] = 'attachment; filename="hlasovani.csv"' From b53da8c800d2c0f88611370970c11c0c174143a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 26 Feb 2025 13:36:50 +0100 Subject: [PATCH 10/13] =?UTF-8?q?Okomentov=C3=A1n=C3=AD=20hodnot=20enumu?= =?UTF-8?q?=20Stav?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/models.py b/prednasky/models.py index b49a3a69..39b012b7 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -19,8 +19,8 @@ class Seznam(models.Model): class Stav(models.IntegerChoices): """ Stav seznamu přednášek (NAVRH se používá k hlasování viz :py:func:`daný view `). """ - NAVRH = 1, "Návrh" - BUDE = 2, "Bude" + NAVRH = 1, "Návrh" #: odpovídá před-soustřeďkové představě o tom, jaké přednášky dělat (dá se o nich třeba hlasovat ap.) + BUDE = 2, "Bude" #: odpovídá definitivní představě o tom, co bude/bylo a dá se porovnávat s novými návrhy id = models.AutoField(primary_key=True) soustredeni = models.ForeignKey(Soustredeni, null=True, default=None, on_delete=models.PROTECT) From ac71922472e7d90cf8499c6464c126f486979434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 26 Feb 2025 13:43:42 +0100 Subject: [PATCH 11/13] =?UTF-8?q?Dal=C5=A1=C3=AD=20dokumentace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/prednasky/models.py b/prednasky/models.py index 39b012b7..99c2e6eb 100644 --- a/prednasky/models.py +++ b/prednasky/models.py @@ -6,7 +6,7 @@ from personalni.models import Organizator, Osoba class Seznam(models.Model): """ - Spojuje :py:class:`Přednášky ` + Spojuje :py:class:`Přednášky ` a :py:class:`Znalosti se :py:class:`Soustředěními `, kde by mohly zaznít, nebo zazní/zazněly. """ @@ -99,6 +99,9 @@ class Znalost(models.Model): """ Reprezentuje znalost, na kterou se můžeme účastníka ptát (nechat je hlasovat). (Viz :py:class:`HlasováníOZnalostech `.) + + (V podstatě :py:class:`Přednáška , jen neobsahuje + tolik detailů a v hlasování má jiné odpovědi.) """ class Meta: db_table = "prednasky_znalost" @@ -118,6 +121,9 @@ class HlasovaniOZnalostech(models.Model): Reprezentuje hlasování jednoho účastníka o jedné :py:class:`Znalosti ` v jednom :py:class:`Seznamu ` (účastníkův pohled se totiž mezi sousy změnit) + + (V podstatě totéž, co :py:class:`Hlasování `, jen má jiné komentáře + u odpovědí a místo přednášky odkazuje na znalost.) """ class Odpoved(models.IntegerChoices): """ Na kolik danou znalost účastník ovládá v daném Hlasování (větší číslo = víc zná) """ From 283bb4247e61afe242ed94628348cad41cb00660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 26 Feb 2025 14:06:14 +0100 Subject: [PATCH 12/13] =?UTF-8?q?Lep=C5=A1=C3=AD=3F=20popis=20inline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/admin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index ff8e9464..d0fe603a 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -10,7 +10,7 @@ from soustredeni.models import Soustredeni class Seznam_PrednaskaInline(admin.TabularInline): """ - Pomůcka pro :py:class:`prednasky.admin.SeznamAdmin` zobrazující hezky :py:class:`Přednášky ` + :py:class:`Inline ` pro :py:class:`prednasky.admin.SeznamAdmin` zobrazující :py:class:`Přednášky ` v adminu :py:class:`Seznamu `. """ model = Prednaska.seznamy.through @@ -60,7 +60,7 @@ class Seznam_PrednaskaInline(admin.TabularInline): class Seznam_ZnalostInline(admin.TabularInline): """ - Pomůcka pro :py:class:`prednasky.admin.SeznamAdmin` zobrazující hezky :py:class:`Znalosti ` + :py:class:`Inline ` pro :py:class:`prednasky.admin.SeznamAdmin` zobrazující :py:class:`Znalosti ` v adminu :py:class:`Seznamu `. """ model = Znalost.seznamy.through From 6e6b2deedb8039a9990df95ffb7c45186594dacc Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 26 Feb 2025 14:25:32 +0100 Subject: [PATCH 13/13] =?UTF-8?q?Kdy=C5=BE=20nen=C3=AD=20jin=C3=A9ho=20zby?= =?UTF-8?q?t=C3=AD,=20tak=20budou=20p=C5=99edm=C4=9Bty=20e-mail=C5=AF=20?= =?UTF-8?q?=C5=A1=C3=ADlen=C3=A9=20(by=20Jid=C3=A1=C5=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index e5adeec1..7a01839a 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -179,8 +179,7 @@ def PrednaskyExportView(request: HttpRequest, seznam: int, **kwargs) -> HttpResp errors.append(f"Znalost {h.znalost.id} ({h.znalost}) dostala od Účastníka {h.ucastnik.id} následující odpověď: {h.odpoved}") if len(errors) > 0: - logger.error("Při exportování hlasování o přednáškách a znalostech se neexportovali hodnocení z následujícího infa (pravděpodobně se od hlasování vyškrtla nějaká znalost/přednáška ze seznamu).") - logger.info("\n".join(errors)) + logger.error("Při exportování hlasování o přednáškách a znalostech se neexportovali hodnocení a přednášky (pravděpodobně se od hlasování vyškrtla nějaká znalost/přednáška ze seznamu):\n" + "\n".join(errors)) response = HttpResponse(content_type="text/csv", charset="utf-8") response["Content-Disposition"] = 'attachment; filename="hlasovani.csv"'