Merge branch 'reforma_prihlasky_a_posilani'
This commit is contained in:
		
						commit
						0f5b2b128f
					
				
					 10 changed files with 225 additions and 370 deletions
				
			
		|  | @ -25,107 +25,86 @@ class TelInput(forms.TextInput): | |||
| 	input_pattern="^[+]?[()/0-9. -]{9,}$" | ||||
| 
 | ||||
| 
 | ||||
| class PrihlaskaForm(PasswordResetForm): | ||||
| 	username = forms.CharField(label='Přihlašovací jméno',  | ||||
| 			max_length=256,  | ||||
| 			required=True, | ||||
| 			help_text='Tímto jménem se následně budeš přihlašovat pro odevzdání řešení a další činnosti v semináři') | ||||
| class UdajeForm(forms.Form): | ||||
| 	username = None | ||||
| 	err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 
 | ||||
| 	jmeno = forms.CharField(label='Jméno', max_length=256, required=True) | ||||
| 	prezdivka_resitele = forms.CharField(label='Přezdívka (veřejná)', max_length=256, required=False) | ||||
| 	prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) | ||||
| 	pohlavi_muz = forms.ChoiceField(label='Pohlaví', | ||||
| 			choices = ((True,'muž'),(False,'žena')), required=True) | ||||
| 	pohlavi_muz = forms.ChoiceField(label='Pohlaví', choices=((True, 'muž'), (False, 'žena')), required=True) | ||||
| 	email = forms.EmailField(label='E-mail', max_length=256, required=True) | ||||
| 	telefon = forms.CharField(widget=TelInput(), label='Telefon', max_length=256, required=False) | ||||
| 	datum_narozeni = forms.DateField(widget=DateInput(), label='Datum narození', required=False) | ||||
| 	ulice = forms.CharField(label='Ulice a číslo popisné', max_length=256, required=False) | ||||
| 	mesto = forms.CharField(label='Město', max_length=256, required=False) | ||||
| 	psc = forms.CharField(label='PSČ', max_length=32, required=False) | ||||
| 	stat = forms.ChoiceField(label='Stát',  | ||||
| 			choices = (('CZ', 'Česká Republika'), | ||||
| 				('SK', 'Slovenská Republika'), | ||||
| 				('other', 'Jiné')), | ||||
| 			required=False) | ||||
| 	stat = forms.ChoiceField(label='Stát', choices=(('CZ', 'Česká republika'), ('SK', 'Slovenská republika'), ('other', 'Jiné')), required=False) | ||||
| 	stat_text = forms.CharField(label='Stát', max_length=256, required=False) | ||||
| 
 | ||||
| 	skola = forms.ModelChoiceField(label="Škola", | ||||
| 	skola = forms.ModelChoiceField( | ||||
| 		label="Škola", | ||||
| 		queryset=Skola.objects.all(), | ||||
| 		widget=autocomplete.ModelSelect2( | ||||
| 			url='autocomplete_skola', | ||||
| 			attrs = {'data-placeholder--id': '-1', | ||||
| 			attrs={ | ||||
| 				'data-placeholder--id': '-1', | ||||
| 				'data-placeholder--text': '---', | ||||
| 				'data-allow-clear': 'true'}) | ||||
| 			,required=False) | ||||
| 				'data-allow-clear': 'true' | ||||
| 			} | ||||
| 		), | ||||
| 		required=False, | ||||
| 	) | ||||
| 
 | ||||
| 	skola_nazev = forms.CharField(label='Název školy', max_length=256, required=False) | ||||
| 	skola_adresa = forms.CharField(label='Adresa školy', max_length=256, required=False) | ||||
| 
 | ||||
| #	trida = forms.CharField(label='Třída',max_length=10, required=True) | ||||
| 
 | ||||
| 	rok_maturity = forms.IntegerField( | ||||
| 		label='Rok maturity', | ||||
| 		min_value=date.today().year, | ||||
| 		max_value=date.today().year+8, | ||||
| 		required=True) | ||||
| 	zasilat = forms.ChoiceField(label='Kam zasílat čísla (zasílání není zpoplatněno)',choices = Resitel.ZASILAT_CHOICES, required=True, initial=Resitel.ZASILAT_NIKAM) | ||||
| 		required=True, | ||||
| 	) | ||||
| 
 | ||||
| 	zasilat = forms.ChoiceField(label='Kam zasílat (odměny, pozvánky, případně čísla nebo propagační materiály)', choices=[it for it in Resitel.ZASILAT_CHOICES if it[0] != Resitel.ZASILAT_NIKAM], required=True, initial=Resitel.ZASILAT_DOMU) | ||||
| 	zasilat_cislo_papirove = forms.BooleanField(label='Chci dostávat čísla poštou (zasílání není zpoplatněno)', required=False, initial=False) | ||||
| 	zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat e-mailem upozornění na vydání nového čísla', required=False, initial=True) | ||||
| 
 | ||||
| 	jak_se_dozvedeli = forms.CharField(widget=forms.Textarea({"rows": 3, "cols": 20}), label='Jak ses o M&M dozvěděl(a)? (Nechceš-li odpovídat, napiš „nechci uvést“.)', 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) | ||||
| 	 | ||||
| 	def clean_username(self): | ||||
| 		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 		username = self.cleaned_data.get('username') | ||||
| 		try: | ||||
| 			User.objects.get(username=username) | ||||
| 			msg = "Username {} exists".format(username) | ||||
| 			err_logger.info(msg) | ||||
| 			raise forms.ValidationError('Přihlašovací jméno je již použito') | ||||
| 
 | ||||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
| 		return username | ||||
| 
 | ||||
| 	def clean_email(self): | ||||
| 		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 		email = self.cleaned_data.get('email') | ||||
| 		try: | ||||
| 			osoba = Osoba.objects.get(email=email) | ||||
| 			msg = "Email {} exists".format(email) | ||||
| 			if osoba.user is not None: | ||||
| 				err_logger.info(msg) | ||||
| 				raise forms.ValidationError('E-mail je již použit') | ||||
| 			else: | ||||
| 				msg += ', but currently has no User, so allowing registration.' | ||||
| 				err_logger.info(msg) | ||||
| 
 | ||||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
| 		return email | ||||
| 	spam = forms.BooleanField(label='Souhlasím se zasíláním propagačních materiálů od MFF UK', required=False) | ||||
| 
 | ||||
| 	def clean_prezdivka_resitele(self): | ||||
| 		prezdivka_resitele = self.cleaned_data.get('prezdivka_resitele') | ||||
| 		if prezdivka_resitele == '': | ||||
| 			return prezdivka_resitele | ||||
| 		if Resitel.objects.filter(prezdivka_resitele=prezdivka_resitele).count() > 0: | ||||
| 		if Resitel.objects.filter(prezdivka_resitele=prezdivka_resitele).exclude(osoba__user__username=self.username).count() > 0: | ||||
| 			raise forms.ValidationError('Přezdívka je již použita') | ||||
| 		return prezdivka_resitele | ||||
| 
 | ||||
| 	def clean_email(self): | ||||
| 		email = self.cleaned_data.get('email') | ||||
| 		try: | ||||
| 			osoba = Osoba.objects.exclude(user__username=self.username).get(email=email) | ||||
| 			msg = "Email {} exists".format(email) | ||||
| 			if osoba.user is not None: | ||||
| 				self.err_logger.info(msg) | ||||
| 				raise forms.ValidationError('E-mail je již použit') | ||||
| 			else: | ||||
| 				msg += ', but currently has no User, so allowing registration.' | ||||
| 				self.err_logger.info(msg) | ||||
| 
 | ||||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
| 		return email | ||||
| 
 | ||||
| 	def clean_zasilat(self): | ||||
| 		zasilat = self.cleaned_data.get('zasilat') | ||||
| 		ulice = self.cleaned_data.get('ulice') | ||||
| 		if zasilat == Resitel.ZASILAT_DOMU and ulice == "": | ||||
| 			raise forms.ValidationError('Nevyplněná adresa bydliště, nelze zasílat čísla domů.') | ||||
| 			raise forms.ValidationError('Nevyplněná adresa bydliště, nelze zasílat domů.') | ||||
| 		return zasilat | ||||
| 
 | ||||
| 	def clean(self): | ||||
| 		super().clean() | ||||
| 
 | ||||
| 		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 
 | ||||
| 		data = self.cleaned_data | ||||
| 		if data.get('stat') != 'other' and data.get('stat_text') != '': | ||||
| 			self.add_error('stat',forms.ValidationError('Nelze mít vybraný stát z menu a zároven zapsaný textem')) | ||||
|  | @ -140,106 +119,41 @@ class PrihlaskaForm(PasswordResetForm): | |||
| 				self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy')) | ||||
| 
 | ||||
| 
 | ||||
| class ProfileEditForm(forms.Form): | ||||
| 	username = forms.CharField(label='Přihlašovací jméno', | ||||
| 
 | ||||
| 
 | ||||
| class PrihlaskaForm(PasswordResetForm, UdajeForm): | ||||
| 	username = forms.CharField( | ||||
| 		label='Přihlašovací jméno', | ||||
| 		max_length=256, | ||||
| 			required=False, | ||||
| 			disabled=True) | ||||
| 		required=True, | ||||
| 		help_text='Tímto jménem se následně budeš přihlašovat pro odevzdání řešení a další činnosti v semináři', | ||||
| 	) | ||||
| 
 | ||||
| 	jmeno = forms.CharField(label='Jméno', max_length=256, required=True) | ||||
| 	prezdivka_resitele = forms.CharField(label='Přezdívka (veřejná)', max_length=256, required=False) | ||||
| 	prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) | ||||
| 	pohlavi_muz = forms.ChoiceField(label='Pohlaví', | ||||
| 			choices = ((True,'muž'),(False,'žena')), required=True) | ||||
| 	email = forms.EmailField(label='E-mail',max_length=256, required=True) | ||||
| 	telefon = forms.CharField(widget=TelInput(),label='Telefon',max_length=256, required=False) | ||||
| 	datum_narozeni = forms.DateField(widget=DateInput(),label='Datum narození', required=False) | ||||
| 	ulice = forms.CharField(label='Ulice', max_length=256, required=False) | ||||
| 	mesto = forms.CharField(label='Město', max_length=256, required=False) | ||||
| 	psc = forms.CharField(label='PSČ', max_length=32, required=False) | ||||
| 	stat = forms.ChoiceField(label='Stát',  | ||||
| 			choices = (('CZ', 'Česká republika'), | ||||
| 				('SK', 'Slovenská republika'), | ||||
| 				('other', 'Jiné')), | ||||
| 			required=False) | ||||
| 	stat_text = forms.CharField(label='Stát', max_length=256, required=False) | ||||
| 	jak_se_dozvedeli = forms.CharField(widget=forms.Textarea({"rows": 3, "cols": 20}), label='Jak ses o M&M dozvěděl(a)? (Nechceš-li odpovídat, napiš „nechci uvést“.)', required=True) | ||||
| 
 | ||||
| 	skola = forms.ModelChoiceField(label="Škola", | ||||
| 		queryset=Skola.objects.all(), | ||||
| 		widget=autocomplete.ModelSelect2( | ||||
| 			url='autocomplete_skola', | ||||
| 			attrs = {'data-placeholder--id': '-1', | ||||
| 				'data-placeholder--text' : '---', | ||||
| 				'data-allow-clear': 'true'}) | ||||
| 			,required=False) | ||||
| 	gdpr = forms.BooleanField(label='Souhlasím se zpracováním osobních údajů', required=True) | ||||
| 	 | ||||
| 	skola_nazev = forms.CharField(label='Název školy', max_length=256, required=False) | ||||
| 	skola_adresa = forms.CharField(label='Adresa školy', max_length=256, required=False) | ||||
| 
 | ||||
| #	trida = forms.CharField(label='Třída',max_length=10, required=True) | ||||
| 
 | ||||
| 	rok_maturity = forms.IntegerField( | ||||
| 		label='Rok maturity',  | ||||
| 		min_value=date.today().year,  | ||||
| 		max_value=date.today().year+8, | ||||
| 		required=True) | ||||
| 	zasilat = forms.ChoiceField(label='Kam zasílat čísla',choices = Resitel.ZASILAT_CHOICES, required=True) | ||||
| 	zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat email s upozorněním na vydání nového čísla', required=False) | ||||
| 
 | ||||
| 	spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False) | ||||
| #	def clean_username(self): | ||||
| #		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| #		username = self.cleaned_data.get('username') | ||||
| #		try: | ||||
| #			User.objects.get(username=username) | ||||
| #			msg = "Username {} exists".format(username) | ||||
| #			err_logger.info(msg) | ||||
| #			raise forms.ValidationError('Přihlašovací jméno je již použito') | ||||
| # | ||||
| #		except ObjectDoesNotExist: | ||||
| #			pass | ||||
| #		return username | ||||
| # | ||||
| 
 | ||||
| 	def clean_prezdivka_resitele(self): | ||||
| 		prezdivka_resitele = self.cleaned_data.get('prezdivka_resitele') | ||||
| 		if prezdivka_resitele == '': | ||||
| 			return prezdivka_resitele | ||||
| 		if Resitel.objects.filter(prezdivka_resitele=prezdivka_resitele).exclude(osoba__user__username=self.username).count() > 0: | ||||
| 			raise forms.ValidationError('Přezdívka je již použita') | ||||
| 		return prezdivka_resitele | ||||
| 
 | ||||
| 	def clean_email(self): | ||||
| 		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 		email = self.cleaned_data.get('email') | ||||
| 	def clean_username(self): | ||||
| 		username = self.cleaned_data.get('username') | ||||
| 		try: | ||||
| 			Osoba.objects.exclude(user__username=self.username).get(email=email) | ||||
| 			msg = "Email {} exists (in edit)".format(email) | ||||
| 			err_logger.info(msg) | ||||
| 			raise forms.ValidationError('Email je již použit') | ||||
| 			User.objects.get(username=username) | ||||
| 			msg = "Username {} exists".format(username) | ||||
| 			self.err_logger.info(msg) | ||||
| 			raise forms.ValidationError('Přihlašovací jméno je již použito') | ||||
| 
 | ||||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
| 		return email | ||||
| 	#def clean(self): | ||||
| 	#	super().clean() | ||||
| 	#	 | ||||
| 	#	err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 		return username | ||||
| 
 | ||||
| 	#	data = self.cleaned_data | ||||
| 	#	if data.get('password') != data.get('password_check'): | ||||
| 	#		self.add_error('password_check',forms.ValidationError('Hesla se neshodují')) | ||||
| 	#	if data.get('stat') != '' and data.get('stat_text') != '': | ||||
| 	#		self.add_error('stat',forms.ValidationError('Nelze mít vybraný stát z menu a zároven zapsaný textem')) | ||||
| 	#	if data.get('skola') and (data.get('skola_nazev') or data.get('skola_adresa')): | ||||
| 	#		self.add_error('skola',forms.ValidationError('Pokud je škola v seznamu, nevypisujte ji ručně, pokud není, zrušte výběr ze seznamu (křížek vpravo)')) | ||||
| 	#	if not data.get('skola'): | ||||
| 	#		if data.get('skola_nazev')=='' and data.get('skola_adresa')=='': | ||||
| 	#			self.add_error('skola',forms.ValidationError('Je nutné vyplnit školu')) | ||||
| 	#		elif data.get('skola_nazev')=='': | ||||
| 	#			self.add_error('skola_nazev',forms.ValidationError('Je nutné vyplnit název školy')) | ||||
| 	#		elif data.get('skola_adresa')=='': | ||||
| 	#			self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy')) | ||||
| 
 | ||||
| class ProfileEditForm(UdajeForm): | ||||
| 	err_logger = logging.getLogger('seminar.edit.problem') | ||||
| 	username = forms.CharField( | ||||
| 		label='Přihlašovací jméno', | ||||
| 		max_length=256, | ||||
| 		required=False, | ||||
| 		disabled=True, | ||||
| 	) | ||||
| 
 | ||||
| 
 | ||||
| class PoMaturiteProfileEditForm(ProfileEditForm): | ||||
|  |  | |||
|  | @ -1,109 +1,19 @@ | |||
| {% extends "base.html" %} | ||||
| {% load static %} | ||||
| 
 | ||||
| {% block script %} | ||||
|     <script src="{% static 'personalni/prihlaska.js' %}"></script> | ||||
| {% endblock %} | ||||
| 
 | ||||
| <!-- | ||||
| 
 | ||||
| # pro přidání políčka do formuláře je potřeba | ||||
| # - mít v modelu tu položku, kterou chci upravovat | ||||
| # - přidat do views (prihlaskaView, resitelEditView) | ||||
| # - přidat do forms | ||||
| # - includovat do html | ||||
| 
 | ||||
| --> | ||||
| 
 | ||||
| {% block content %} | ||||
| <h1> | ||||
|   {% block nadpis1a %} | ||||
|    Změna osobních údajů | ||||
|   {% endblock %} | ||||
| </h1> | ||||
| 
 | ||||
| <hr> | ||||
| <p><a href="{% url 'reset_password' %}">Změnit heslo</a></p> | ||||
| 
 | ||||
| <form action="{% url 'seminar_resitel_edit' %}" method="post"> | ||||
|  {% csrf_token %} | ||||
|  {{form.non_field_errors}} | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|      <h4> | ||||
|       Přihlašovací údaje | ||||
|      </h4> | ||||
|      <table class="form"> | ||||
|        {% include "personalni/udaje/prihlaska_field.html" with field=form.username %} | ||||
|      </table> | ||||
|      <p><a href="{% url 'reset_password' %}"> | ||||
|         Změnit heslo | ||||
|      </a></p> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|      Osobní údaje | ||||
|     </h4> | ||||
|       <table class="form"> | ||||
|        {% 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 %} | ||||
|      </table> | ||||
| 
 | ||||
|   <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|       Bydliště | ||||
|     </h4> | ||||
|       <table class="form"> | ||||
|        {% 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"%} | ||||
|      </table> | ||||
| 
 | ||||
|  <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|      Škola | ||||
|     </h4> | ||||
|      <table class="form"> | ||||
|        {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} | ||||
|        <tr><td colspan="2" ><button id="id_skola_text_button" type="button">Škola není v seznamu</button></td></tr> | ||||
|        <tr><td id="id_li_skola_vypln" colspan="2">Vyplň prosím celý název a adresu školy.</td></tr> | ||||
|        {% 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 %} | ||||
|      </table> | ||||
| 
 | ||||
|  <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|      Pošta | ||||
|     </h4> | ||||
|      <table class="form"> | ||||
|        {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat %} | ||||
|        {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_emailem %} | ||||
|      </table> | ||||
| 
 | ||||
|  <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|      Zasílání propagačních materiálů | ||||
|     </h4> | ||||
|      <table class="form"> | ||||
|        {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} | ||||
|      </table> | ||||
| 
 | ||||
|  <hr> | ||||
| 
 | ||||
|   {% include "personalni/udaje/udaje.html"%} | ||||
|   <input type="submit" value="Změnit"> | ||||
| </form> | ||||
| <script> | ||||
| $("#id_stat").on("change",addrCountryChanged); | ||||
| $("#id_skola_text_button").on("click",schoolNotInList); | ||||
| </script> | ||||
| 
 | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -5,16 +5,6 @@ | |||
|     <script src="{% static 'personalni/prihlaska.js' %}"></script> | ||||
| {% endblock %} | ||||
| 
 | ||||
| <!-- | ||||
| 
 | ||||
| # pro přidání políčka do formuláře je potřeba | ||||
| # - mít v modelu tu položku, kterou chci upravovat | ||||
| # - přidat do views (prihlaskaView, resitelEditView) | ||||
| # - přidat do forms | ||||
| # - includovat do html | ||||
| 
 | ||||
| --> | ||||
| 
 | ||||
| {% block content %} | ||||
| <h1> | ||||
|   {% block nadpis1a %} | ||||
|  | @ -25,73 +15,7 @@ | |||
| <p><b>Tučně</b> popsaná pole jsou povinná.</p> | ||||
| 
 | ||||
| <form action="{% url 'seminar_prihlaska' %}" method="post"> | ||||
|   {% csrf_token %} | ||||
|   {{form.non_field_errors}} | ||||
| 
 | ||||
| 
 | ||||
| <hr> | ||||
|          <h4> | ||||
|           Přihlašovací údaje | ||||
|          </h4> | ||||
|          <table class="form"> | ||||
|            {% 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 %}#} | ||||
|          </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|         <h4> | ||||
|          Osobní údaje | ||||
|         </h4> | ||||
|           <table class="form"> | ||||
|             {% 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 %} | ||||
|          </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|         <h4> | ||||
|           Bydliště | ||||
|         </h4> | ||||
|           <table class="form"> | ||||
|            {% 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"%} | ||||
|          </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|         <h4> | ||||
|          Škola | ||||
|         </h4> | ||||
|          <table class="form"> | ||||
|            {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} | ||||
|              <tr><td colspan="2" ><button id="id_skola_text_button" type="button">Škola není v seznamu</button></td><td>(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 <i>mezera</i> město, atd. Nezadávejte slova, která se často zkracují – gymnázium, střední odborná škola, křestní jména…)</td></tr> | ||||
|            <tr><td id="id_li_skola_vypln" colspan="2">Vyplň prosím celý název a adresu školy.</td></tr> | ||||
|            {% 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 %} | ||||
|          </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|         <h4> | ||||
|          Pošta | ||||
|         </h4> | ||||
|          <table class="form"> | ||||
|            {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat %} | ||||
|            {% include "personalni/udaje/prihlaska_field.html" with field=form.zasilat_cislo_emailem %} | ||||
|          </table> | ||||
|  <hr> | ||||
| 
 | ||||
|   {% include "personalni/udaje/udaje.html" %} | ||||
|   <h4> | ||||
|     GDPR | ||||
|   </h4> | ||||
|  | @ -100,17 +24,6 @@ | |||
|     {% include "personalni/udaje/prihlaska_field.html" with field=form.gdpr %} | ||||
|   </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|         <h4> | ||||
|          Zasílání propagačních materiálů | ||||
|         </h4> | ||||
|          <table class="form"> | ||||
|            {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} | ||||
|          </table> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   <hr> | ||||
| 
 | ||||
|   <h4> | ||||
|  | @ -120,14 +33,8 @@ | |||
|     {% include "personalni/udaje/prihlaska_field.html" with field=form.jak_se_dozvedeli %} | ||||
|   </table> | ||||
| 
 | ||||
| 
 | ||||
|   <hr> | ||||
| 
 | ||||
|   <input type="submit" value="Odeslat"> | ||||
| </form> | ||||
| <script> | ||||
| $("#id_stat").on("change",addrCountryChanged); | ||||
| $("#id_skola_text_button").on("click",schoolNotInList); | ||||
| </script> | ||||
| 
 | ||||
| 
 | ||||
| {% endblock %} | ||||
|  |  | |||
							
								
								
									
										75
									
								
								personalni/templates/personalni/udaje/udaje.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								personalni/templates/personalni/udaje/udaje.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| {% load static %} | ||||
| 
 | ||||
| {% block script %} | ||||
|   <script src="{% static 'personalni/prihlaska.js' %}"></script> | ||||
| {% endblock %} | ||||
| 
 | ||||
| {% csrf_token %} | ||||
| {{form.non_field_errors}} | ||||
| 
 | ||||
| <hr> | ||||
| <h4> | ||||
|   Přihlašovací údaje | ||||
| </h4> | ||||
| <table class="form"> | ||||
|   {% include "personalni/udaje/prihlaska_field.html" with field=form.username %} | ||||
| </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
| <h4> | ||||
|   Osobní údaje | ||||
| </h4> | ||||
| <table class="form"> | ||||
|   {% 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 %} | ||||
| </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
| <h4> | ||||
|   Škola | ||||
| </h4> | ||||
| <table class="form"> | ||||
|   {% include "personalni/udaje/prihlaska_field.html" with field=form.skola %} | ||||
|   <tr><td colspan="2" ><button id="id_skola_text_button" type="button">Škola není v seznamu</button></td><td>(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 <i>mezera</i> město, atd. Nezadávejte slova, která se často zkracují – gymnázium, střední odborná škola, křestní jména…)</td></tr> | ||||
|   <tr><td id="id_li_skola_vypln" colspan="2">Vyplň prosím celý název a adresu školy.</td></tr> | ||||
|   {% 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 %} | ||||
| </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
| <h4> | ||||
|   Pošta | ||||
| </h4> | ||||
| <table class="form"> | ||||
|   {% 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 %} | ||||
| </table> | ||||
| <hr> | ||||
| <h4> | ||||
|   Bydliště (povinné při volbě „domů“) | ||||
| </h4> | ||||
| <table class="form"> | ||||
|   {% 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"%} | ||||
| </table> | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
| <script> | ||||
|   $("#id_stat").on("change",addrCountryChanged); | ||||
|   $("#id_skola_text_button").on("click",schoolNotInList); | ||||
| </script> | ||||
|  | @ -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'] if fcd['prezdivka_resitele'] != "" else None, | ||||
| 					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', | ||||
|  |  | |||
							
								
								
									
										42
									
								
								seminar/migrations/0112_resitel_zasilat_cislo_papirove.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								seminar/migrations/0112_resitel_zasilat_cislo_papirove.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -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), | ||||
|     ] | ||||
|  | @ -238,6 +238,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)') | ||||
| 
 | ||||
|  |  | |||
|  | @ -291,9 +291,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)) | ||||
| 
 | ||||
| 		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)) | ||||
|  |  | |||
|  | @ -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 %} | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue