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