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_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) | ||||
| 	spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False) | ||||
| 	 | ||||
|  |  | |||
|  | @ -112,6 +112,15 @@ | |||
| 
 | ||||
| <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"> | ||||
| </form> | ||||
| <script> | ||||
|  |  | |||
|  | @ -176,7 +176,7 @@ def resitelEditView(request): | |||
| 	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): | ||||
| 	generic_logger = logging.getLogger('seminar.prihlaska') | ||||
| 	err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
|  | @ -212,6 +212,7 @@ def prihlaskaView(request): | |||
| 					ulice = fcd.get('ulice',''), | ||||
| 					mesto = fcd.get('mesto',''), | ||||
| 					psc = fcd.get('psc',''), | ||||
| 					jak_se_dozvedeli = fcd.get('jak_se_dozvedeli',''), | ||||
| 					poznamka = str(fcd) | ||||
| 					) | ||||
| 
 | ||||
|  | @ -336,6 +337,7 @@ def dataResiteluCsvResponse(queryset, columns=None, with_header=True): | |||
| 		'osoba__psc', | ||||
| 		'osoba__stat', | ||||
| 		'skola',	#FIXME: dává jen ID | ||||
| 		'jak_se_dozvedeli', | ||||
| 		'poznamka', | ||||
| 		'osoba__poznamka', | ||||
| 		'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', | ||||
| 		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, | ||||
| 		help_text='Neveřejná poznámka k osobě (plain text)') | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| from http import HTTPStatus | ||||
| 
 | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.db import transaction | ||||
| from django.forms import Form, CharField, IntegerField | ||||
| from django.views.generic import FormView | ||||
|  | @ -21,28 +22,44 @@ def problemView(request, pk): | |||
| 
 | ||||
| 
 | ||||
| # FIXME Tohle možná patří do forms.py | ||||
| # FIXME Tohle není odladěné, selhává to nekontrolovaně | ||||
| #  a obecně je to fujky nekomentovaný kód | ||||
| # FIXME Chyby se ve formuláři zobrazují nějak divně | ||||
| class HromadnePridaniForm(Form): | ||||
| 	""" Formulář pro hromadné přidání úložek a problémů """ | ||||
| 
 | ||||
| 	tema = CharField(label="Název tématu:") | ||||
| 	dil = IntegerField(label="Díl:", min_value=1) | ||||
| 	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): | ||||
| 	""" View pro hromadné přidání úložek a problémů """ | ||||
| 	form_class = HromadnePridaniForm | ||||
| 	template_name = "generic_form.html" | ||||
| 	success_url = 'hromadne_pridani' | ||||
| 
 | ||||
| 	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["nadpis"] = "Hromadné přidání úloh" | ||||
| 		context["form_url"] = "hromadne_pridani" | ||||
| 		return context | ||||
| 
 | ||||
| 	def form_valid(self, form): | ||||
| 		""" Upravený Pavlův skript na hromadné přidání úložek a problémů. """ | ||||
| 		cd = form.cleaned_data | ||||
| 		tema = cd["tema"] | ||||
| 		dil = cd["dil"] | ||||
|  | @ -52,10 +69,10 @@ class HromadnePridaniView(FormView): | |||
| 		with transaction.atomic(): | ||||
| 			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( | ||||
| 					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, | ||||
| 					garant=t.garant, | ||||
| 					max_body=b, | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
| </h1> | ||||
| {# Obšlehnuto z Admina :-) #} | ||||
| {% 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 %} | ||||
| <form action="{% url 'login' %}" method="post"> | ||||
|   {% csrf_token %} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue