Merge branch 'develop' into test
This commit is contained in:
commit
d7ef2e8044
7 changed files with 58 additions and 8 deletions
|
@ -70,6 +70,8 @@ class PrihlaskaForm(PasswordResetForm):
|
||||||
zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True)
|
zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, required=True)
|
||||||
zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat e-mailem upozornění na vydání nového čísla', required=False)
|
zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat e-mailem upozornění na vydání nového čísla', required=False)
|
||||||
|
|
||||||
|
jak_se_dozvedeli = forms.CharField(widget=forms.Textarea({"rows": 3, "cols": 20}), label='Jak ses o M&M dozvěděl(a)?', required=False)
|
||||||
|
|
||||||
gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True)
|
gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True)
|
||||||
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)
|
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,15 @@
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
<h4>
|
||||||
|
Ostatní
|
||||||
|
</h4>
|
||||||
|
<table class="form">
|
||||||
|
{% include "personalni/udaje/prihlaska_field.html" with field=form.jak_se_dozvedeli %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<input type="submit" value="Odeslat">
|
<input type="submit" value="Odeslat">
|
||||||
</form>
|
</form>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -176,7 +176,7 @@ def resitelEditView(request):
|
||||||
return render(request, 'personalni/udaje/edit.html', {'form': form})
|
return render(request, 'personalni/udaje/edit.html', {'form': form})
|
||||||
|
|
||||||
|
|
||||||
@sensitive_post_parameters('jmeno', 'prijmeni', 'email', 'telefon', 'datum_narozeni', 'ulice', 'mesto', 'psc', 'skola')
|
@sensitive_post_parameters('jmeno', 'prijmeni', 'email', 'telefon', 'datum_narozeni', 'ulice', 'mesto', 'psc', 'skola', 'jak_se_dozvedeli')
|
||||||
def prihlaskaView(request):
|
def prihlaskaView(request):
|
||||||
generic_logger = logging.getLogger('seminar.prihlaska')
|
generic_logger = logging.getLogger('seminar.prihlaska')
|
||||||
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
|
@ -212,6 +212,7 @@ def prihlaskaView(request):
|
||||||
ulice = fcd.get('ulice',''),
|
ulice = fcd.get('ulice',''),
|
||||||
mesto = fcd.get('mesto',''),
|
mesto = fcd.get('mesto',''),
|
||||||
psc = fcd.get('psc',''),
|
psc = fcd.get('psc',''),
|
||||||
|
jak_se_dozvedeli = fcd.get('jak_se_dozvedeli',''),
|
||||||
poznamka = str(fcd)
|
poznamka = str(fcd)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -336,6 +337,7 @@ def dataResiteluCsvResponse(queryset, columns=None, with_header=True):
|
||||||
'osoba__psc',
|
'osoba__psc',
|
||||||
'osoba__stat',
|
'osoba__stat',
|
||||||
'skola', #FIXME: dává jen ID
|
'skola', #FIXME: dává jen ID
|
||||||
|
'jak_se_dozvedeli',
|
||||||
'poznamka',
|
'poznamka',
|
||||||
'osoba__poznamka',
|
'osoba__poznamka',
|
||||||
'rok_maturity',
|
'rok_maturity',
|
||||||
|
|
18
seminar/migrations/0102_osoba_jak_se_dozvedeli.py
Normal file
18
seminar/migrations/0102_osoba_jak_se_dozvedeli.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.15 on 2022-08-15 19:39
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('seminar', '0101_auto_20211213_2306'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='osoba',
|
||||||
|
name='jak_se_dozvedeli',
|
||||||
|
field=models.TextField(blank=True, verbose_name='Jak se dozvěděli'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -70,6 +70,8 @@ class Osoba(SeminarModelBase):
|
||||||
stat = CountryField('stát', default='CZ',
|
stat = CountryField('stát', default='CZ',
|
||||||
help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)')
|
help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)')
|
||||||
|
|
||||||
|
jak_se_dozvedeli = models.TextField('Jak se dozvěděli', blank=True)
|
||||||
|
|
||||||
poznamka = models.TextField('neveřejná poznámka', blank=True,
|
poznamka = models.TextField('neveřejná poznámka', blank=True,
|
||||||
help_text='Neveřejná poznámka k osobě (plain text)')
|
help_text='Neveřejná poznámka k osobě (plain text)')
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.forms import Form, CharField, IntegerField
|
from django.forms import Form, CharField, IntegerField
|
||||||
from django.views.generic import FormView
|
from django.views.generic import FormView
|
||||||
|
@ -21,28 +22,44 @@ def problemView(request, pk):
|
||||||
|
|
||||||
|
|
||||||
# FIXME Tohle možná patří do forms.py
|
# FIXME Tohle možná patří do forms.py
|
||||||
# FIXME Tohle není odladěné, selhává to nekontrolovaně
|
# FIXME Chyby se ve formuláři zobrazují nějak divně
|
||||||
# a obecně je to fujky nekomentovaný kód
|
|
||||||
class HromadnePridaniForm(Form):
|
class HromadnePridaniForm(Form):
|
||||||
|
""" Formulář pro hromadné přidání úložek a problémů """
|
||||||
|
|
||||||
tema = CharField(label="Název tématu:")
|
tema = CharField(label="Název tématu:")
|
||||||
dil = IntegerField(label="Díl:", min_value=1)
|
dil = IntegerField(label="Díl:", min_value=1)
|
||||||
body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:")
|
body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:")
|
||||||
|
|
||||||
|
def clean_tema(self):
|
||||||
|
""" Kontrola, že `tema` je název právě jednoho tématu """
|
||||||
|
if m.Tema.objects.filter(
|
||||||
|
nazev__exact=self.cleaned_data['tema'],
|
||||||
|
nadproblem=None).count() != 1:
|
||||||
|
raise ValidationError("Špatný nebo nepřesně zadaný název témátka")
|
||||||
|
|
||||||
|
def clean_body(self):
|
||||||
|
""" Kontrola, že `body` je seznam čísel """
|
||||||
|
try:
|
||||||
|
list(map(int, self.cleaned_data["body"].split(",")))
|
||||||
|
except ValueError:
|
||||||
|
raise ValidationError("Špatný formát bodů")
|
||||||
|
|
||||||
|
|
||||||
# FIXME Tohle není odladěné, selhává to nekontrolovaně
|
|
||||||
# a obecně je to fujky nekomentovaný kód
|
|
||||||
class HromadnePridaniView(FormView):
|
class HromadnePridaniView(FormView):
|
||||||
|
""" View pro hromadné přidání úložek a problémů """
|
||||||
form_class = HromadnePridaniForm
|
form_class = HromadnePridaniForm
|
||||||
template_name = "generic_form.html"
|
template_name = "generic_form.html"
|
||||||
success_url = 'hromadne_pridani'
|
success_url = 'hromadne_pridani'
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
|
""" Přidání nadpisu stránky a url, kam se má poslat formulář. """
|
||||||
context = super().get_context_data()
|
context = super().get_context_data()
|
||||||
context["nadpis"] = "Hromadné přidání úloh"
|
context["nadpis"] = "Hromadné přidání úloh"
|
||||||
context["form_url"] = "hromadne_pridani"
|
context["form_url"] = "hromadne_pridani"
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
|
""" Upravený Pavlův skript na hromadné přidání úložek a problémů. """
|
||||||
cd = form.cleaned_data
|
cd = form.cleaned_data
|
||||||
tema = cd["tema"]
|
tema = cd["tema"]
|
||||||
dil = cd["dil"]
|
dil = cd["dil"]
|
||||||
|
@ -52,10 +69,10 @@ class HromadnePridaniView(FormView):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
pfx = f"{t.nazev}, díl {dil}, "
|
pfx = f"{t.nazev}, díl {dil}, "
|
||||||
|
|
||||||
for k, b in enumerate(body):
|
for k, b in enumerate(body, 1):
|
||||||
u = m.Uloha.objects.create(
|
u = m.Uloha.objects.create(
|
||||||
nadproblem=t,
|
nadproblem=t,
|
||||||
nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k + 1}",
|
nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k}",
|
||||||
autor=t.autor,
|
autor=t.autor,
|
||||||
garant=t.garant,
|
garant=t.garant,
|
||||||
max_body=b,
|
max_body=b,
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
</h1>
|
</h1>
|
||||||
{# Obšlehnuto z Admina :-) #}
|
{# Obšlehnuto z Admina :-) #}
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<p>K této stránce nejspíš nemáte přístup. Můžete se zkusit přihlásit jako uživatel, který přístup má.</p>
|
<p>Již jsi přihlášený!</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{% url 'login' %}" method="post">
|
<form action="{% url 'login' %}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
Loading…
Reference in a new issue