From 08eb89d790e353f47836970bf821b8d2aa428f94 Mon Sep 17 00:00:00 2001 From: KubaR Date: Wed, 27 Nov 2019 23:45:45 +0100 Subject: [PATCH 1/2] resitelEditView(view.py), EditForm(forms.py), template.edit.html --- seminar/forms.py | 103 ++++++++++++++++++++++++++++ seminar/templates/seminar/edit.html | 85 +++++++++++++++++++++++ seminar/views.py | 28 +++++++- 3 files changed, 213 insertions(+), 3 deletions(-) create mode 100644 seminar/templates/seminar/edit.html diff --git a/seminar/forms.py b/seminar/forms.py index 42d3c2d7..29e6607e 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -121,3 +121,106 @@ class PrihlaskaForm(forms.Form): 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 EditForm(forms.Form): + 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') + password = forms.CharField( + label='Heslo', + max_length=256, + required=False, + widget=forms.PasswordInput()) + password_check = forms.CharField( + label='Ověření hesla', + max_length=256, + required=False, + widget=forms.PasswordInput()) + + jmeno = forms.CharField(label='Jméno', max_length=256, required=True) + 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(label='Telefon',max_length=256, required=False) + datum_narozeni = forms.DateField(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) + + 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) + + 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 a řešení',choices = Resitel.ZASILAT_CHOICES, 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.objects.get(email=email) +# msg = "Email {} exists".format(email) +# err_logger.info(msg) +# raise forms.ValidationError('Email je již použit') +# +# except ObjectDoesNotExist: +# pass +# return email + #def clean(self): + # super().clean() + # + # err_logger = logging.getLogger('seminar.prihlaska.problem') + + # 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')) diff --git a/seminar/templates/seminar/edit.html b/seminar/templates/seminar/edit.html new file mode 100644 index 00000000..cc039301 --- /dev/null +++ b/seminar/templates/seminar/edit.html @@ -0,0 +1,85 @@ +{% extends "seminar/zadani/base.html" %} +{% load staticfiles %} + +{% block script %} + + {{form.media}} + +{% endblock %} +{% block content %} +

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

+
+ {% csrf_token %} + {{form.non_field_errors}} + + +
+ +{% endblock %} + diff --git a/seminar/views.py b/seminar/views.py index f2906d90..39ee76af 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -19,7 +19,7 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva from . import utils from .unicodecsv import UnicodeWriter -from .forms import PrihlaskaForm, LoginForm +from .forms import PrihlaskaForm, LoginForm, EditForm from datetime import timedelta, date, datetime from django.utils import timezone @@ -989,8 +989,6 @@ class ResitelView(LoginRequiredMixin,generic.DetailView): return Resitel.objects.get(osoba__user=self.request.user) ## Formulare -def resitelEditView(request): - pass def resetPasswordView(request): pass @@ -1027,6 +1025,30 @@ def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data): logger.warn(msg) gdpr_logger.warn(msg+", form:{}".format(form_data)) +from django.forms.models import model_to_dict +def resitelEditView(request): + ## Načtení objektu Osoba a Resitel, patrici k aktuálně přihlášenému uživately + u = request.user + osoba_edit = Osoba.objects.get(user=u) + resitel_edit = osoba_edit.resitel + user_edit = osoba_edit.user + ## Vytvoření slovníku, kterým předvyplním formulář + prefill_1=model_to_dict(osoba_edit) + prefill_2=model_to_dict(resitel_edit) + prefill_3=model_to_dict(user_edit) + prefill_1.update(prefill_2) + prefill_1.update(prefill_3) + form = EditForm(initial=prefill_1) + ## Změna údajů a jejich uložení + if request.method == 'POST': + form = EditForm(request.POST) + if form.is_valid(): + osoba_edit.prijmeni = 'NOVOTA' + osoba_edit.save() + return HttpResponseRedirect('/thanks/') + else: + ## Stránka před odeslaním formuláře = předvyplněný formulář + return render(request, 'seminar/edit.html', {'form': form}) def prihlaskaView(request): generic_logger = logging.getLogger('seminar.prihlaska') From 5f66fd0b03a7bf84ff488706dc5aca8fcd62ef5c Mon Sep 17 00:00:00 2001 From: KubaR Date: Wed, 4 Dec 2019 22:33:20 +0100 Subject: [PATCH 2/2] EditView, EditFrom, Edit.html uprava --- seminar/forms.py | 16 +------------ seminar/templates/seminar/edit.html | 7 ------ seminar/views.py | 35 ++++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/seminar/forms.py b/seminar/forms.py index 29e6607e..b28beeb9 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -123,23 +123,10 @@ class PrihlaskaForm(forms.Form): self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy')) - - class EditForm(forms.Form): 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') - password = forms.CharField( - label='Heslo', - max_length=256, - required=False, - widget=forms.PasswordInput()) - password_check = forms.CharField( - label='Ověření hesla', - max_length=256, - required=False, - widget=forms.PasswordInput()) + required=True) jmeno = forms.CharField(label='Jméno', max_length=256, required=True) prijmeni = forms.CharField(label='Příjmení', max_length=256, required=True) @@ -178,7 +165,6 @@ class EditForm(forms.Form): max_value=date.today().year+8, required=True) zasilat = forms.ChoiceField(label='Kam zasílat čísla a řešení',choices = Resitel.ZASILAT_CHOICES, 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') diff --git a/seminar/templates/seminar/edit.html b/seminar/templates/seminar/edit.html index cc039301..3f3e0d99 100644 --- a/seminar/templates/seminar/edit.html +++ b/seminar/templates/seminar/edit.html @@ -20,10 +20,6 @@ Přihlašovací údaje
  • {% include "seminar/prihlaska_field.html" with field=form.username %} -
  • - {% include "seminar/prihlaska_field.html" with field=form.password %} -
  • - {% include "seminar/prihlaska_field.html" with field=form.password_check %}
  • Osobní údaje
  • @@ -68,9 +64,6 @@ {% include "seminar/prihlaska_field.html" with field=form.rok_maturity %}
  • {% include "seminar/prihlaska_field.html" with field=form.zasilat %} -
  • - {% include "seminar/gdpr.html" %} - {% include "seminar/prihlaska_field.html" with field=form.gdpr %}
  • {% include "seminar/prihlaska_field.html" with field=form.spam %}
  • diff --git a/seminar/views.py b/seminar/views.py index 39ee76af..27728f0c 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -1027,15 +1027,16 @@ def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data): from django.forms.models import model_to_dict def resitelEditView(request): + err_logger = logging.getLogger('seminar.prihlaska.problem') ## Načtení objektu Osoba a Resitel, patrici k aktuálně přihlášenému uživately u = request.user osoba_edit = Osoba.objects.get(user=u) resitel_edit = osoba_edit.resitel user_edit = osoba_edit.user ## Vytvoření slovníku, kterým předvyplním formulář - prefill_1=model_to_dict(osoba_edit) + prefill_1=model_to_dict(user_edit) prefill_2=model_to_dict(resitel_edit) - prefill_3=model_to_dict(user_edit) + prefill_3=model_to_dict(osoba_edit) prefill_1.update(prefill_2) prefill_1.update(prefill_3) form = EditForm(initial=prefill_1) @@ -1043,7 +1044,35 @@ def resitelEditView(request): if request.method == 'POST': form = EditForm(request.POST) if form.is_valid(): - osoba_edit.prijmeni = 'NOVOTA' + ## Změny v osobě + fcd = form.cleaned_data + osoba_edit.jmeno = fcd['jmeno'] + osoba_edit.prijmeni = fcd['prijmeni'] + osoba_edit.pohlavi_muz = fcd['pohlavi_muz'] + osoba_edit.email = fcd['email'] + osoba_edit.telefon = fcd['telefon'] + osoba_edit.ulice = fcd['ulice'] + osoba_edit.mesto = fcd['mesto'] + osoba_edit.psc = fcd['psc'] + ## Změny v osobě s podmínkami + if fcd.get('spam',False): + osoba_edit.datum_souhlasu_zasilani = date.today() + if fcd.get('stat','') in ('CZ','SK'): + osoba_edit.stat = fcd['stat'] + else: + ## Neznámá země + msg = "Unknown country {}".format(fcd['stat_text']) + + ## Změny v řešiteli + resitel_edit.skola = fcd['skola'] + resitel_edit.rok_maturity = fcd['rok_maturity'] + resitel_edit.zasilat = fcd['zasilat'] + if fcd.get('skola'): + resitel_edit.skola = fcd['skola'] + else: + # Unknown school - log it + msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) + resitel_edit.save() osoba_edit.save() return HttpResponseRedirect('/thanks/') else: