From 4b141e38192d8c6de1a59eaf321e81e185b9c7e0 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 9 Mar 2021 20:16:01 +0100 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20Ve=C5=99ejnost=20bod=C5=AF=20ve=20v?= =?UTF-8?q?=C3=BDsledkovce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/utils.py | 2 +- seminar/views/vysledkovka.py | 34 ++++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/seminar/utils.py b/seminar/utils.py index e28f3cbc..26d52665 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -230,7 +230,7 @@ def cisla_rocniku(rocnik, jen_verejne=True): seznam objektů typu Cislo """ if jen_verejne: - return rocnik.verejna_cisla() + return rocnik.verejne_vysledkovky_cisla() else: return rocnik.cisla.all().order_by('poradi') diff --git a/seminar/views/vysledkovka.py b/seminar/views/vysledkovka.py index f4fa5edb..6a5da6a9 100644 --- a/seminar/views/vysledkovka.py +++ b/seminar/views/vysledkovka.py @@ -48,7 +48,7 @@ def sloupec_s_poradim(setrizene_body): -def body_resitelu(resitele, za, odjakziva=True): +def body_resitelu(resitele, za, odjakziva=True, jen_verejne=False): """ Funkce počítající počty bodů pro zadané řešitele, buď odjakživa do daného ročníku/čísla anebo za daný ročník/číslo. Parametry: @@ -94,12 +94,22 @@ def body_resitelu(resitele, za, odjakziva=True): body_k_zapocteni = Sum('reseni__hodnoceni__body', filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok, reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi) )) - elif rocnik and odjakziva: # Spočítáme body za starší ročníky až do zadaného včetně. - body_k_zapocteni = Sum('reseni__hodnoceni__body', - filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok)) + elif rocnik and odjakziva: # Spočítáme body za starší ročníky až do zadaného včetně. + if jen_verejne: + body_k_zapocteni = Sum('reseni__hodnoceni__body', + filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok, + reseni__hodnoceni__cislo_body__verejna_vysledkovka=True)) + else: + body_k_zapocteni = Sum('reseni__hodnoceni__body', + filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok)) elif rocnik and not odjakziva: # Spočítáme body za daný ročník. - body_k_zapocteni = Sum('reseni__hodnoceni__body', - filter= Q(reseni__hodnoceni__cislo_body__rocnik=rocnik)) + if jen_verejne: + body_k_zapocteni = Sum('reseni__hodnoceni__body', + filter=Q(reseni__hodnoceni__cislo_body__rocnik=rocnik, + reseni__hodnoceni__cislo_body__verejna_vysledkovka=True)) + else: + body_k_zapocteni = Sum('reseni__hodnoceni__body', + filter=Q(reseni__hodnoceni__cislo_body__rocnik=rocnik)) else: assert True, "body_resitelu: Neplatná kombinace za a odjakživa." @@ -149,14 +159,14 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): body_cisla_slov[cislo.id] = cislobody # získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně - resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) + resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele, jen_verejne=jen_verejne) # setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší setrizeni_resitele_id, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn) poradi = sloupec_s_poradim(setrizene_body) # získáme body odjakživa - resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, rocnik) + resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, rocnik, jen_verejne=jen_verejne) # vytvoříme jednotlivé sloupce výsledkovky radky_vysledkovky = [] @@ -216,7 +226,7 @@ def pricti_body(slovnik, resitel, body): slovnik[resitel.id] += body -def secti_body_za_rocnik(za, aktivni_resitele): +def secti_body_za_rocnik(za, aktivni_resitele, jen_verejne): """ Spočítá body za ročník (celý nebo do daného čísla), setřídí je sestupně a vrátí jako seznam. Parametry: @@ -224,7 +234,7 @@ def secti_body_za_rocnik(za, aktivni_resitele): daného čísla """ # spočítáme všem řešitelům jejich body za ročník (False => ne odjakživa) - resitel_rocnikbody_slov = body_resitelu(aktivni_resitele, za, False) + resitel_rocnikbody_slov = body_resitelu(aktivni_resitele, za, False, jen_verejne=jen_verejne) # zeptáme se na dvojice (řešitel, body) za ročník a setřídíme sestupně resitel_rocnikbody_sezn = sorted(resitel_rocnikbody_slov.items(), key = lambda x: x[1], reverse = True) @@ -380,10 +390,10 @@ def vysledkovka_cisla(cislo, context=None): hlavni_problemy_slovnik, cislobody = secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy) # získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně - resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele) + resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele, jen_verejne=True) # získáme body odjakživa - resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, cislo) + resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, cislo, jen_verejne=True) # řešitelé setřídění podle bodů za číslo sestupně setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn] From eecaa20cc2cce68a1912ee33977ee1ab1ed5f548 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 9 Mar 2021 20:28:27 +0100 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20Chyb=C4=9Bj=C3=ADc=C3=AD=20cached=5F?= =?UTF-8?q?property=20u=20=C4=8Dl=C3=A1nku=20(padala=20v=C3=BDsledkovka)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/models.py b/seminar/models.py index f2c418e6..b7147106 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -962,6 +962,7 @@ class Clanek(Problem): cislo = models.ForeignKey(Cislo, blank=True, null=True, on_delete=models.PROTECT, verbose_name='číslo vydání', related_name='vydane_clanky') + @cached_property def kod_v_rocniku(self): if self.stav == 'zadany': # Nemělo by být potřeba From 12c2c6cc90a3310ae7e046e9a8d66288548f9e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C?= Date: Tue, 9 Mar 2021 20:51:50 +0100 Subject: [PATCH 3/4] =?UTF-8?q?titulka=20bez=20odkaz=C5=AF=20na=20t=C3=A9m?= =?UTF-8?q?=C3=A1tka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 6e929965..db34b71c 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -22,12 +22,12 @@ function sousdeadline() { {% if typ_deadline == 'soustredeni' %} - deadlinu odeslání řešení + deadlinu odeslání řešení pro účast na soustředění {% elif typ_deadline == 'preddeadline' %} 1. deadlinu aktuálního čísla - {% else %} deadlinu aktuálního čísla + title="Řešení, která nám přijdou do tohoto deadlinu, se pokusíme opravit co nejdříve, abyste měli ještě šanci si je ještě opravit před definitivním deadlinem čísla.">1. deadlinu aktuálního čísla + {% else %} deadlinu aktuálního čísla {% endif %}zbývá: {{nejblizsi_deadline|timeuntil}}

@@ -48,27 +48,31 @@ function sousdeadline() {
- M&M je korespondenční seminář. Vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat, - experimentovat a objevovat s námi fascinující zákoutí matiky, fyziky a informatiky. + M&M je korespondenční seminář pro středoškoláky. Vydáváme časopis, v němž najdeš různá témata z matematiky, fyziky a informatiky. + Součástí témat jsou problémy a úlohy, nad kterými se můžeš zamyslet, experimentovat a bádat.
Zaregistruj se!
- M&M je taky soutěž. Za svá řešení dostaneš body a můžeš vyhrát zajímavé ceny, dostat se - na Matfyz bez přijímaček a především, můžeš s námi jet na skvělé soustředění. -
Co můžeš vyhrát?
{# FIXME odkaz #} -
+

- Řeš témata! + Vyřeš to!

+ M&M je taky soutěž. Řešení, která nám pošleš, opravíme, a dostaneš za ně body. Můžeš vyhrát zajímavé ceny, dostat se + na Matfyz bez přijímaček a především, můžeš s námi jet na skvělé soustředění. +

+
Co můžeš vyhrát?
{# FIXME odkaz #} + +
From d257c1858a69465b94d41025e98eee99f32de511 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 9 Mar 2021 20:52:19 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Chyb=C4=9Bj=C3=ADc=C3=AD=20migrace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/migrations/0092_auto_20210309_2049.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 seminar/migrations/0092_auto_20210309_2049.py diff --git a/seminar/migrations/0092_auto_20210309_2049.py b/seminar/migrations/0092_auto_20210309_2049.py new file mode 100644 index 00000000..3dbb7358 --- /dev/null +++ b/seminar/migrations/0092_auto_20210309_2049.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.15 on 2021-03-09 19:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0091_resitel_zasilat_cislo_emailem'), + ] + + operations = [ + migrations.AlterField( + model_name='tema', + name='rocnik', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='temata', to='seminar.Rocnik', verbose_name='ročník'), + ), + ]