From 32dc97e1c4b1b9cbf65c7f7763ae046bfc75b4c7 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Wed, 22 Feb 2023 07:19:33 +0100 Subject: [PATCH 01/17] =?UTF-8?q?Mo=C5=BEnost=20p=C5=99idat=20si=20do=20n?= =?UTF-8?q?=C3=A1zv=C5=AF=20p=C5=99=C3=ADloh=20=C5=99e=C5=A1en=C3=AD=20i?= =?UTF-8?q?=20jm=C3=A9na=20=C5=99e=C5=A1itele?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Budu zlobit a vysvětlení napíšu až do pull-requestu. Tady to IMHO čtu jen já :-P Pull-Request-URL: https://gitea.ks.matfyz.cz/mam/mamweb/pulls/26 (Adresa platí, pokud mě nikdo nepředběhne :-P) --- .../templates/odevzdavatko/detail.html | 25 +++++++++++++- odevzdavatko/templatetags/__init__.py | 0 odevzdavatko/templatetags/jmena.py | 9 +++++ personalni/utils.py | 11 +++++++ various/utils.py | 33 +++++++++++++++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 odevzdavatko/templatetags/__init__.py create mode 100644 odevzdavatko/templatetags/jmena.py create mode 100644 personalni/utils.py create mode 100644 various/utils.py diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html index 7414b517..7443afa4 100644 --- a/odevzdavatko/templates/odevzdavatko/detail.html +++ b/odevzdavatko/templates/odevzdavatko/detail.html @@ -2,12 +2,26 @@ {% load static %} {% load deadliny %} {% load mail %} +{% load jmena %} {% block content %} {% if edit %} + {% endif %} @@ -40,11 +54,20 @@ SouborŘešitelova poznámkaDatum {% for priloha in object.prilohy.all %} - {{ priloha.split | last }} + {{ priloha.split | last }} {{ priloha.res_poznamka }} {{ priloha.vytvoreno }} {% endfor %} +{% if edit %} {# FIXME: tohle nesouvisí s editací, ale s tím, jestli je člověk org… #} + {# FIXME: vypadá to hnusně. #} + + +{% endif %} {% else %}

Žádné přílohy

{% endif %} diff --git a/odevzdavatko/templatetags/__init__.py b/odevzdavatko/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/odevzdavatko/templatetags/jmena.py b/odevzdavatko/templatetags/jmena.py new file mode 100644 index 00000000..9fe91ff5 --- /dev/null +++ b/odevzdavatko/templatetags/jmena.py @@ -0,0 +1,9 @@ +from django import template +register = template.Library() + +from personalni.utils import normalizuj_jmeno +import seminar.models as m # jen kvůli typové anotaci… + +@register.filter +def jmeno_jako_prefix(o: m.Osoba): + return normalizuj_jmeno(o).replace(' ', '_') diff --git a/personalni/utils.py b/personalni/utils.py new file mode 100644 index 00000000..0701d66a --- /dev/null +++ b/personalni/utils.py @@ -0,0 +1,11 @@ +import seminar.models as m +from various.utils import bez_diakritiky_translate +import re + +def normalizuj_jmeno(o: m.Osoba) -> str: + # FIXME: Možná není potřeba vázat na model? + cele_jmeno = f'{o.jmeno} {o.prijmeni}' + cele_jmeno = cele_jmeno.translate(bez_diakritiky_translate) + cele_jmeno = re.sub(r'[^a-zA-Z- ]', '', cele_jmeno) + return cele_jmeno + diff --git a/various/utils.py b/various/utils.py new file mode 100644 index 00000000..5905b2f6 --- /dev/null +++ b/various/utils.py @@ -0,0 +1,33 @@ +bez_diakritiky = ({} + # FIXME: funguje jen pro český a slovenský text, jinak jsou špatně + # transliterace. Potenciální řešení: + # https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-normalize-in-a-python-unicode-string + # (ale přidává to další závislosti…) + + # Tisknutelné ASCII + | {chr(a): chr(a) for a in range(32, 126+1)} + + # České, slovenské a blízké diakritiky a divnoznaky + | { x: 'a' for x in 'áÁäÄ'} + | { x: 'c' for x in 'čČ'} + | { x: 'd' for x in 'ďĎ'} + | { x: 'e' for x in 'éÉěĚëË'} + | { x: 'i' for x in 'íÍ'} + | { x: 'l' for x in 'ľĽĺĹ'} + | { x: 'n' for x in 'ňŇ'} + | { x: 'o' for x in 'óÓöÖôÔ'} + | { x: 'r' for x in 'řŘŕŔ'} + | { x: 's' for x in 'šŠßẞ'} + | { x: 't' for x in 'ťŤ'} + | { x: 'u' for x in 'úÚůŮ'} + | { x: 'y' for x in 'ýÝ'} + | { x: 'z' for x in 'žŽ'} + ) + +# Tabulka pro str.translate +class _bez_diakritiky_translate: + def __getitem__(self, it): + return ord(bez_diakritiky.get(chr(it), None)) +bez_diakritiky_translate = _bez_diakritiky_translate() + +# TODO: testy? From e42b6abec548849bbbaa452f2c74cf86247348b8 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 27 Feb 2023 20:25:45 +0100 Subject: [PATCH 02/17] =?UTF-8?q?Zru=C5=A1en=C3=AD=20console.log-=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/templates/odevzdavatko/detail.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html index 7443afa4..ef1f474f 100644 --- a/odevzdavatko/templates/odevzdavatko/detail.html +++ b/odevzdavatko/templates/odevzdavatko/detail.html @@ -11,10 +11,8 @@ -{% endblock %} - - - {% block content %}

{% block nadpis1a %} Změna osobních údajů {% endblock %}

-
- {% csrf_token %} - {{form.non_field_errors}}
+

Změnit heslo

-

- Přihlašovací údaje -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.username %} -
-

- Změnit heslo -

- -
- -

- Osobní údaje -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.jmeno %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.prezdivka_resitele %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.prijmeni %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.pohlavi_muz%} - {% include "personalni/udaje/prihlaska_field.html" with field=form.email %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.telefon %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.datum_narozeni %} -
- -
- -

- Bydliště -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.ulice %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.mesto %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.psc %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.stat %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} -
- -
- -

- Škola -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} - - - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_nazev id="id_li_skola_nazev" %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_adresa id="id_li_skola_adresa" %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.rok_maturity %} -
Vyplň prosím celý název a adresu školy.
- -
- -

- Pošta -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_emailem %} -
- -
- -

- Zasílání propagačních materiálů -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} -
- -
- - + + {% include "personalni/udaje/udaje.html"%} +
- + {% endblock %} diff --git a/personalni/templates/personalni/udaje/prihlaska.html b/personalni/templates/personalni/udaje/prihlaska.html index 33adba03..f26936de 100644 --- a/personalni/templates/personalni/udaje/prihlaska.html +++ b/personalni/templates/personalni/udaje/prihlaska.html @@ -5,16 +5,6 @@ {% endblock %} - - {% block content %}

{% block nadpis1a %} @@ -25,109 +15,26 @@

Tučně popsaná pole jsou povinná.

- {% csrf_token %} - {{form.non_field_errors}} - - -
-

- Přihlašovací údaje -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.username %} -{# {% include "personalni/udaje/prihlaska_field.html" with field=form.password %}#} -{# {% include "personalni/udaje/prihlaska_field.html" with field=form.password_check %}#} -
- -
- -

- Osobní údaje -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.jmeno %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.prezdivka_resitele %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.prijmeni %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.pohlavi_muz%} - {% include "personalni/udaje/prihlaska_field.html" with field=form.email %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.telefon %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.datum_narozeni %} -
- -
- -

- Bydliště -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.ulice %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.mesto %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.psc %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.stat %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} -
- -
- -

- Škola -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} - - - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_nazev id="id_li_skola_nazev" %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_adresa id="id_li_skola_adresa" %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.rok_maturity %} -
(Prosíme, zkuste ji najít, téměř jistě ji v seznamu máme. Školy se dobře hledají podle příjmení lidí v jejich názvu, podle ulice, případně název ulice mezera město, atd. Nezadávejte slova, která se často zkracují – gymnázium, střední odborná škola, křestní jména…)
Vyplň prosím celý název a adresu školy.
- -
- -

- Pošta -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat %} - {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_emailem %} -
-
- -

- GDPR -

- {% include "personalni/udaje/gdpr.html" %} - - {% include "personalni/udaje/prihlaska_field.html" with field=form.gdpr %} -
- -
- -

- Zasílání propagačních materiálů -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} -
- - - -
- -

- Ostatní -

- - {% include "personalni/udaje/prihlaska_field.html" with field=form.jak_se_dozvedeli %} -
- - - - + {% include "personalni/udaje/udaje.html" %} +

+ GDPR +

+ {% include "personalni/udaje/gdpr.html" %} + + {% include "personalni/udaje/prihlaska_field.html" with field=form.gdpr %} +
+ +
+ +

+ Ostatní +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.jak_se_dozvedeli %} +
+ +
+ +
- - - {% endblock %} diff --git a/personalni/templates/personalni/udaje/udaje.html b/personalni/templates/personalni/udaje/udaje.html new file mode 100644 index 00000000..f39e8b47 --- /dev/null +++ b/personalni/templates/personalni/udaje/udaje.html @@ -0,0 +1,75 @@ +{% load static %} + +{% block script %} + +{% endblock %} + +{% csrf_token %} +{{form.non_field_errors}} + +
+

+ Přihlašovací údaje +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.username %} +
+ +
+ +

+ Osobní údaje +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.jmeno %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.prezdivka_resitele %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.prijmeni %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.pohlavi_muz%} + {% include "personalni/udaje/prihlaska_field.html" with field=form.email %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.telefon %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.datum_narozeni %} +
+ +
+ +

+ Škola +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} + + + {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_nazev id="id_li_skola_nazev" %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.skola_adresa id="id_li_skola_adresa" %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.rok_maturity %} +
(Prosíme, zkuste ji najít, téměř jistě ji v seznamu máme. Školy se dobře hledají podle příjmení lidí v jejich názvu, podle ulice, případně název ulice mezera město, atd. Nezadávejte slova, která se často zkracují – gymnázium, střední odborná škola, křestní jména…)
Vyplň prosím celý název a adresu školy.
+ +
+ +

+ Pošta +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_emailem %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_papirove %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat %} +
+
+

+ Bydliště (povinné při volbě „domů“) +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.ulice %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.mesto %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.psc %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.stat %} + {% include "personalni/udaje/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} +
+ +
+ + From c97a84104169de9540bf2483482eb75b04c71dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 13 Mar 2023 23:45:05 +0100 Subject: [PATCH 10/17] =?UTF-8?q?Reforma=20nastaven=C3=AD=20zas=C3=ADl?= =?UTF-8?q?=C3=A1n=C3=AD=20po=C5=A1tou?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- personalni/views.py | 7 +++- .../0112_resitel_zasilat_cislo_papirove.py | 42 +++++++++++++++++++ seminar/models/personalni.py | 2 + seminar/models/tvorba.py | 4 +- seminar/templates/seminar/archiv/obalky.tex | 2 + seminar/utils.py | 2 +- 6 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 seminar/migrations/0112_resitel_zasilat_cislo_papirove.py diff --git a/personalni/views.py b/personalni/views.py index a52f7f5f..df1cb8f1 100644 --- a/personalni/views.py +++ b/personalni/views.py @@ -165,6 +165,7 @@ def resitelEditView(request): resitel_edit.rok_maturity = fcd['rok_maturity'] resitel_edit.zasilat = fcd['zasilat'] resitel_edit.zasilat_cislo_emailem = fcd['zasilat_cislo_emailem'] + resitel_edit.zasilat_cislo_papirove = fcd['zasilat_cislo_papirove'] if fcd.get('skola'): resitel_edit.skola = fcd['skola'] else: @@ -267,7 +268,8 @@ def prihlaskaView(request): prezdivka_resitele=fcd['prezdivka_resitele'], rok_maturity = fcd['rok_maturity'], zasilat = fcd['zasilat'], - zasilat_cislo_emailem = fcd['zasilat_cislo_emailem'] + zasilat_cislo_emailem = fcd['zasilat_cislo_emailem'], + zasilat_cislo_papirove = fcd['zasilat_cislo_papirove'], ) if fcd.get('skola'): @@ -284,7 +286,7 @@ def prihlaskaView(request): except m.Resitel.DoesNotExist: # Stejný trik: orig_resitel = r - resitel_attrs = ['skola', 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem'] + resitel_attrs = ['skola', 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem', 'zasilat_cislo_papirove'] for attr in resitel_attrs: new = getattr(r, attr) old = getattr(orig_resitel, attr) @@ -345,6 +347,7 @@ def dataResiteluCsvResponse(queryset, columns=None, with_header=True): 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem', + 'zasilat_cislo_papirove', 'osoba__datum_registrace', 'osoba__datum_souhlasu_udaje', 'osoba__datum_souhlasu_zasilani', diff --git a/seminar/migrations/0112_resitel_zasilat_cislo_papirove.py b/seminar/migrations/0112_resitel_zasilat_cislo_papirove.py new file mode 100644 index 00000000..63660ddc --- /dev/null +++ b/seminar/migrations/0112_resitel_zasilat_cislo_papirove.py @@ -0,0 +1,42 @@ +# Generated by Django 2.2.28 on 2023-03-13 22:02 + +from django.db import migrations, models + +ZASILAT_DOMU = 'domu' +ZASILAT_DO_SKOLY = 'do_skoly' +ZASILAT_NIKAM = 'nikam' + + +def default_zasilat_papirove(apps, schema_editor): + Resitel = apps.get_model('seminar', 'Resitel') + + for resitel in Resitel.objects.all(): + resitel.zasilat_cislo_papirove = resitel.zasilat != ZASILAT_NIKAM + if resitel.zasilat == ZASILAT_NIKAM: + resitel.zasilat = ZASILAT_DOMU if resitel.osoba.ulice else ZASILAT_DO_SKOLY + resitel.save() + + +def vrat_nikam(apps, schema_editor): + Resitel = apps.get_model('seminar', 'Resitel') + + for resitel in Resitel.objects.all(): + if not resitel.zasilat_cislo_papirove: + resitel.zasilat = ZASILAT_NIKAM + resitel.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0111_nikam2nezasilat_papirove'), + ] + + operations = [ + migrations.AddField( + model_name='resitel', + name='zasilat_cislo_papirove', + field=models.BooleanField(default=True, help_text='True pokud chce řešitel dostávat číslo papírově', verbose_name='zasílat číslo papírově'), + ), + migrations.RunPython(default_zasilat_papirove, vrat_nikam), + ] diff --git a/seminar/models/personalni.py b/seminar/models/personalni.py index 9ac85e51..205c9f4a 100644 --- a/seminar/models/personalni.py +++ b/seminar/models/personalni.py @@ -236,6 +236,8 @@ class Resitel(SeminarModelBase): zasilat_cislo_emailem = models.BooleanField('zasílat číslo emailem', help_text='True pokud chce řešitel dostávat číslo emailem', default=False) + zasilat_cislo_papirove = models.BooleanField('zasílat číslo papírově', help_text='True pokud chce řešitel dostávat číslo papírově', default=True) + poznamka = models.TextField('neveřejná poznámka', blank=True, help_text='Neveřejná poznámka k řešiteli (plain text)') diff --git a/seminar/models/tvorba.py b/seminar/models/tvorba.py index f2feb569..af21e587 100644 --- a/seminar/models/tvorba.py +++ b/seminar/models/tvorba.py @@ -290,9 +290,9 @@ class Cislo(SeminarModelBase): paticka = "---\nK odběru těchto e-mailů jste se přihlásili na stránkách https://mam.matfyz.cz. Z odběru se lze odhlásit na https://mam.matfyz.cz/resitel/osobni-udaje/" - posli(text_mailu + paticka, resitele_vsichni.filter(zasilat=pm.Resitel.ZASILAT_NIKAM)) + posli(text_mailu + paticka, resitele_vsichni.filter(zasilat=pm.Resitel.zasilat_cislo_papirove)) posli(text_mailu + 'P. S. Brzy budeme též rozesílat papírovou verzi čísla. Připomínáme, že pokud papírovou verzi čísla nevyužijete, můžete v https://mam.mff.cuni.cz/resitel/osobni-udaje/ zaškrtnout, abychom vám ji neposílali. Čísla vždy můžete nalézt v našem archivu a dál vám budou chodit e-mailem. Děkujeme.\n' + paticka, - resitele_vsichni.exclude(zasilat=pm.Resitel.ZASILAT_NIKAM)) + resitele_vsichni.exclude(zasilat=pm.Resitel.zasilat_cislo_papirove)) def save(self, *args, **kwargs): super().save(*args, **kwargs) diff --git a/seminar/templates/seminar/archiv/obalky.tex b/seminar/templates/seminar/archiv/obalky.tex index ba18d318..9ae62121 100644 --- a/seminar/templates/seminar/archiv/obalky.tex +++ b/seminar/templates/seminar/archiv/obalky.tex @@ -100,6 +100,7 @@ {% with o=r.osoba %} {% with s=r.skola %} {% spaceless %} + {% if r.zasilat_cislo_papirove %} {% if r.zasilat == "do_skoly" %} {% if o.stat == "CZ" %} \obalka{{o.jmeno|sloz}}{{o.prijmeni|sloz}}{{s.nazev|sloz}}{{s.ulice|sloz}}{{s.psc|sloz}}{{s.mesto|sloz}}{{''|sloz}} @@ -115,6 +116,7 @@ {% endif %} {% else %} {% endif %} + {% endif %} {% endspaceless %} {% endwith %} {% endwith %} diff --git a/seminar/utils.py b/seminar/utils.py index e7d52529..e10920b8 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -265,7 +265,7 @@ def merge_resitele(cilovy, zdrojovy): # Postup: # Sjednotit / upravit informace cílového řešitele print('Upravuji data modelu') - fieldy_shoda = ['skola', 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem'] + fieldy_shoda = ['skola', 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem', 'zasilat_cislo_papirove'] for f in fieldy_shoda: zf = getattr(zdrojovy, f) From 99161d016d6e698f7564290f0e26523cb3aedb9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Sun, 26 Mar 2023 01:52:17 +0100 Subject: [PATCH 11/17] =?UTF-8?q?Apr=C3=ADl=202023?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/templates/base.html | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index fc2ff76e..b10103e5 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -170,6 +170,22 @@ rotace_a_posun($('.container'), randomUhel()); {% endif %} + {% if april == 2023 %} + + {% endif %} {% render_block "js" %} From cd9aa73a34f71549941c4165eefb9b15a38bc3a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Wed, 29 Mar 2023 20:29:00 +0200 Subject: [PATCH 12/17] =?UTF-8?q?hotfix:=20p=C5=99ihl=C3=A1=C5=A1ky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- personalni/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/personalni/views.py b/personalni/views.py index a52f7f5f..88bc8697 100644 --- a/personalni/views.py +++ b/personalni/views.py @@ -264,7 +264,7 @@ def prihlaskaView(request): err_logger.warning(f'Zaregistrovala se osoba s kolizním jménem. ID osob: {[o.id for o in kolize]}') r = s.Resitel( - prezdivka_resitele=fcd['prezdivka_resitele'], + prezdivka_resitele=fcd['prezdivka_resitele'] if fcd['prezdivka_resitele'] != "" else None, rok_maturity = fcd['rok_maturity'], zasilat = fcd['zasilat'], zasilat_cislo_emailem = fcd['zasilat_cislo_emailem'] From b8a9d67cc287b1eb00cd8612f125caf3971c8793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 17 Apr 2023 20:15:39 +0200 Subject: [PATCH 13/17] send_mail -> EmailMessage --- korektury/admin.py | 9 +++++++-- korektury/views.py | 9 +++++++-- odevzdavatko/views.py | 10 +++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/korektury/admin.py b/korektury/admin.py index f2b0a319..5f92c542 100644 --- a/korektury/admin.py +++ b/korektury/admin.py @@ -12,7 +12,7 @@ from django.contrib import admin from reversion.admin import VersionAdmin from korektury.models import KorekturovanePDF -from django.core.mail import send_mail +from django.core.mail import EmailMessage from django.urls import reverse # Register your models here. @@ -64,6 +64,11 @@ Popis souboru: S pozdravem a korekturám zdar! Korekturovátko ''' - send_mail(predmet,text,odesilatel,[prijemce]) + EmailMessage( + subject=predmet, + body=text, + from_email=odesilatel, + to=[prijemce], + ).send() admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin) diff --git a/korektury/views.py b/korektury/views.py index efeab19d..564e1331 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -8,7 +8,7 @@ from django.views import generic from django.utils.translation import ugettext as _ from django.conf import settings from django.http import HttpResponseForbidden -from django.core.mail import send_mail +from django.core.mail import EmailMessage from django.db.models import Count,Q from .models import Oprava,Komentar,KorekturovanePDF, Organizator @@ -207,7 +207,12 @@ class KorekturyView(generic.TemplateView): print("---- Konec upozornění") return - send_mail(subject, text, from_email, list(emails)) + EmailMessage( + subject=subject, + body=text, + from_email=from_email, + to=list(emails), + ).send() def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 2390d27f..d3c74812 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -1,7 +1,7 @@ from django.core.exceptions import PermissionDenied from django.views.generic import ListView, DetailView, FormView from django.contrib.auth.mixins import LoginRequiredMixin -from django.core.mail import send_mail +from django.core.mail import EmailMessage from django.utils import timezone from django.views.generic import ListView, DetailView, FormView, CreateView from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin @@ -449,11 +449,11 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): seznam = "problému " + str(problemy[0]) if len(problemy) == 1 else 'následujícím problémům:\n' + ', \n'.join(map(str, problemy)) seznam_do_subjectu = "problému " + str(problemy[0]) + ("" if len(problemy) == 1 else f" (a dalším { len(problemy) - 1 })") - send_mail( + EmailMessage( subject="Nové řešení k " + seznam_do_subjectu, - message=f"Řešitel{ '' if resitel.pohlavi_muz else 'ka' } { resitel } právě nahrál{'' if resitel.pohlavi_muz else 'a' } nové řešení k { seznam }.\n\nHurá do opravování: { self.object.absolute_url() }", + body=f"Řešitel{ '' if resitel.pohlavi_muz else 'ka' } { resitel } právě nahrál{'' if resitel.pohlavi_muz else 'a' } nové řešení k { seznam }.\n\nHurá do opravování: { self.object.absolute_url() }", from_email="submitovatko@mam.mff.cuni.cz", # FIXME: Chceme to mít radši tady, nebo v nastavení? - recipient_list=list(prijemci), - ) + to=list(prijemci), + ).send() return formularOKView(self.request, text='Řešení úspěšně odevzdáno') From 397aacf8991ecc1d80ddd5b3a096fa16cb360d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 17 Apr 2023 20:41:01 +0200 Subject: [PATCH 14/17] =?UTF-8?q?Pos=C3=ADl=C3=A1n=C3=AD=20e-mail=C5=AF=20?= =?UTF-8?q?p=C5=99=C3=ADjemc=C5=AFm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0112_prijemce_zasilat_cislo_emailem.py | 18 ++++++++++++++++++ seminar/models/personalni.py | 2 ++ seminar/models/tvorba.py | 4 ++++ 3 files changed, 24 insertions(+) create mode 100644 seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py diff --git a/seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py b/seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py new file mode 100644 index 00000000..8efaf925 --- /dev/null +++ b/seminar/migrations/0112_prijemce_zasilat_cislo_emailem.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.28 on 2023-04-17 18:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0111_nikam2nezasilat_papirove'), + ] + + operations = [ + migrations.AddField( + model_name='prijemce', + name='zasilat_cislo_emailem', + field=models.BooleanField(default=False, help_text='True pokud chce příjemce dostávat číslo emailem', verbose_name='zasílat číslo emailem'), + ), + ] diff --git a/seminar/models/personalni.py b/seminar/models/personalni.py index 9ac85e51..2cb8539a 100644 --- a/seminar/models/personalni.py +++ b/seminar/models/personalni.py @@ -192,6 +192,8 @@ class Prijemce(SeminarModelBase): help_text='Které osobě či na jakou adresu se mají zasílat čísla', on_delete=models.CASCADE) + zasilat_cislo_emailem = models.BooleanField('zasílat číslo emailem', help_text='True pokud chce příjemce dostávat číslo emailem', default=False) + # FIXME: možná chceme něco jako vazbu na osobu XOR školu a počet kusů k zaslání # FIXME: a možná taky posílání na mail a možná taky přes něj chceme posílat i řešitelům diff --git a/seminar/models/tvorba.py b/seminar/models/tvorba.py index f2feb569..855c90f4 100644 --- a/seminar/models/tvorba.py +++ b/seminar/models/tvorba.py @@ -265,6 +265,7 @@ class Cislo(SeminarModelBase): poslat_z_mailu = 'zadani@mam.mff.cuni.cz' predmet = 'Vyšlo číslo {}'.format(self.kod()) + # TODO Možná nechceme všem psát „Ahoj“, např. příjemcům… text_mailu = 'Ahoj,\n' \ 'na adrese {} najdete nejnovější číslo.\n' \ 'Vaše M&M\n'.format(odkaz) @@ -294,6 +295,9 @@ class Cislo(SeminarModelBase): posli(text_mailu + 'P. S. Brzy budeme též rozesílat papírovou verzi čísla. Připomínáme, že pokud papírovou verzi čísla nevyužijete, můžete v https://mam.mff.cuni.cz/resitel/osobni-udaje/ zaškrtnout, abychom vám ji neposílali. Čísla vždy můžete nalézt v našem archivu a dál vám budou chodit e-mailem. Děkujeme.\n' + paticka, resitele_vsichni.exclude(zasilat=pm.Resitel.ZASILAT_NIKAM)) + paticka_prijemce = "---\nPokud tyto e-maily nechcete nadále dostávat, prosíme, ozvěte se nám na mam@matfyz.cz." + posli(text_mailu + paticka_prijemce, pm.Prijemce.objects.filter(zasilat_cislo_emailem=True)) + def save(self, *args, **kwargs): super().save(*args, **kwargs) self.vygeneruj_nahled() From 254e7949ef99672e8b2b563d9670a1a94635c8d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 17 Apr 2023 21:44:18 +0200 Subject: [PATCH 15/17] =?UTF-8?q?SQLite=20ne=C5=BEere=20date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models/personalni.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/models/personalni.py b/seminar/models/personalni.py index 9ac85e51..f871981a 100644 --- a/seminar/models/personalni.py +++ b/seminar/models/personalni.py @@ -402,6 +402,7 @@ class Organizator(SeminarModelBase): editable=False ) + # Ne, date to nebude. SQLite: invalid literal for int() with base 10: b'17 23:00:00' organizuje_od = models.DateTimeField('Organizuje od', blank=True, null=True) organizuje_do = models.DateTimeField('Organizuje do', blank=True, null=True) From 5b698cce4267757136f8ddfa8d69b142ae692563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 17 Apr 2023 22:16:44 +0200 Subject: [PATCH 16/17] =?UTF-8?q?Oprava=20migrac=C3=AD=20po=20p=C5=99edcho?= =?UTF-8?q?z=C3=ADm=20mergey=20(0f5b2b128f794ea746a6a404055f1ae77fa9a125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...cislo_papirove.py => 0113_resitel_zasilat_cislo_papirove.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename seminar/migrations/{0112_resitel_zasilat_cislo_papirove.py => 0113_resitel_zasilat_cislo_papirove.py} (95%) diff --git a/seminar/migrations/0112_resitel_zasilat_cislo_papirove.py b/seminar/migrations/0113_resitel_zasilat_cislo_papirove.py similarity index 95% rename from seminar/migrations/0112_resitel_zasilat_cislo_papirove.py rename to seminar/migrations/0113_resitel_zasilat_cislo_papirove.py index 63660ddc..9539f328 100644 --- a/seminar/migrations/0112_resitel_zasilat_cislo_papirove.py +++ b/seminar/migrations/0113_resitel_zasilat_cislo_papirove.py @@ -29,7 +29,7 @@ def vrat_nikam(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('seminar', '0111_nikam2nezasilat_papirove'), + ('seminar', '0112_prijemce_zasilat_cislo_emailem'), ] operations = [ From 61e71efcc4c25960505772d67cf19df302a8195e Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Mon, 15 May 2023 23:43:39 +0200 Subject: [PATCH 17/17] =?UTF-8?q?Make:=20spr=C3=A1vn=C4=9B=20nastavit=20or?= =?UTF-8?q?g=C5=AFm=20pr=C3=A1va?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tohle je trošku fishy, protože by se to teoreticky mělo dít i u produkce, leč tam zůstávají práva persistentně v DB (a až se rozbijí, tak se budeme divit)… --- make/init_local | 1 + 1 file changed, 1 insertion(+) diff --git a/make/init_local b/make/init_local index 75ee1ccf..1b2f7c1e 100755 --- a/make/init_local +++ b/make/init_local @@ -8,3 +8,4 @@ ensure_venv ./manage.py testdata ./manage.py loaddata data/* make/sync_prod_flatpages +./manage.py load_org_permissions deploy_v2/admin_org_prava.json