diff --git a/seminar/forms.py b/seminar/forms.py index 4db77c18..7aaa78b4 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -143,7 +143,7 @@ class PrihlaskaForm(forms.Form): self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy')) # Editační formulář bez řešitele. -class ProfileEditFormPoMat(forms.Form): +class ProfileEditFormPoMaturite(forms.Form): username = forms.CharField(label='Přihlašovací jméno', max_length=256, required=True) diff --git a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py index f819f047..5e79c390 100644 --- a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py +++ b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py @@ -107,12 +107,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor): for org in Organizator.objects.all(): # Spárování organizátora s osobou + # Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli, + # Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu user = org.user - resitele = Resitel.objects.filter(user=user) - if resitele.count() != 0: - osoba = resitele.first().osoba - else: + if user is None: + logger.error(f'Org {org} nemá uživatele!') + # Je to podezřelé, ale prostě vyrobíme novou osobu. osoba = Osoba(user=user) + else: + logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}') + # 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢 + class EndException(Exception): pass + try: + # Hledáme podle uživatele + resitele = Resitel.objects.filter(user=user) + if resitele.count() != 0 and user is not None: + osoba = resitele.first().osoba + logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu') + raise EndException + + # Hledáme podle e-mailu + osoby = Osoba.objects.filter(email=user.email) + if osoby.count() != 0 and user.email != '': + osoba = osoby.first() + if osoba.user is None: + osoba.user = user + logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu') + raise EndException + + # Fallback + logger.warning(f'Org neměl řešitele, zakládám novou Osobu.') + osoba = Osoba(user=user) + except EndException: pass # Přesun informací z usera do osoby # pro řešitele již v minule migraci @@ -142,7 +168,10 @@ def fix_problem(apps, schema_editor): else: pr.autor = None if pr.opravovatel is not None: - pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None: + pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + else: + logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}') pr.save() def fix_pohadka(apps, schema_editor): diff --git a/seminar/templates/seminar/profil/edit.html b/seminar/templates/seminar/profil/edit.html index 89ad6b8c..a5aacd0e 100644 --- a/seminar/templates/seminar/profil/edit.html +++ b/seminar/templates/seminar/profil/edit.html @@ -61,7 +61,7 @@ {% include "seminar/profil/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} -{% if not PoMat %} {# Vysloužilým účastníkům skrýt editaci školy apod. #} +{% if not po_maturite %} {# Vysloužilým účastníkům skrýt editaci školy apod. #}

diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 81a15071..3ba73886 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -26,7 +26,7 @@ import seminar.models as m from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva from seminar import utils, treelib -from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm, ProfileEditFormPoMat +from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm, ProfileEditFormPoMaturite import seminar.forms as f import seminar.templatetags.treenodes as tnltt import seminar.views.views_rest as vr @@ -1100,14 +1100,16 @@ def resitelEditView(request): prefill_1.update(prefill_2) prefill_3=model_to_dict(osoba_edit) prefill_1.update(prefill_3) + if 'datum_narozeni' in prefill_1: + prefill_1['datum_narozeni'] = str(prefill_1['datum_narozeni']) if resitel_edit and resitel_edit.rok_maturity < date.today().year: - form = ProfileEditFormPoMat(initial=prefill_1) + form = ProfileEditFormPoMaturite(initial=prefill_1) else: form = ProfileEditForm(initial=prefill_1) ## Změna údajů a jejich uložení if request.method == 'POST': if resitel_edit and resitel_edit.rok_maturity < date.today().year: - form = ProfileEditFormPoMat(request.POST) + form = ProfileEditFormPoMaturite(request.POST) else: form = ProfileEditForm(request.POST) if form.is_valid(): @@ -1121,6 +1123,7 @@ def resitelEditView(request): osoba_edit.ulice = fcd['ulice'] osoba_edit.mesto = fcd['mesto'] osoba_edit.psc = fcd['psc'] + osoba_edit.datum_narozeni = fcd['datum_narozeni'] ## Změny v osobě s podmínkami if fcd.get('spam',False): osoba_edit.datum_souhlasu_zasilani = date.today() @@ -1146,7 +1149,7 @@ def resitelEditView(request): return formularOKView(request) else: ## Stránka před odeslaním formuláře = předvyplněný formulář - return render(request, 'seminar/profil/edit.html', {'form': form, 'PoMat': resitel_edit and resitel_edit.rok_maturity < date.today().year}) + return render(request, 'seminar/profil/edit.html', {'form': form, 'po_maturite': resitel_edit and resitel_edit.rok_maturity < date.today().year}) def prihlaskaView(request): generic_logger = logging.getLogger('seminar.prihlaska')