From 64777359142862f3bab94724e9a50b6562415f11 Mon Sep 17 00:00:00 2001 From: Anet Date: Tue, 1 Sep 2020 23:04:19 +0200 Subject: [PATCH] =?UTF-8?q?orgorozhrani=20verze=20-1:=20z=C3=A1kladn=C3=AD?= =?UTF-8?q?=20v=C4=9Bci,=20u=20probl=C3=A9m=C5=AF=20je=20pot=C5=99eba=20vy?= =?UTF-8?q?myslet,=20kam=20to=20m=C3=A1=20sm=C4=9Brovat,=20asi=20odkaz=20n?= =?UTF-8?q?a=20treenode=20editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/orgorozcestnik.html | 86 +++++++++++ seminar/urls.py | 2 +- seminar/views/views_all.py | 138 +++++++++++------- 3 files changed, 170 insertions(+), 56 deletions(-) create mode 100644 seminar/templates/seminar/orgorozcestnik.html diff --git a/seminar/templates/seminar/orgorozcestnik.html b/seminar/templates/seminar/orgorozcestnik.html new file mode 100644 index 00000000..5bd75403 --- /dev/null +++ b/seminar/templates/seminar/orgorozcestnik.html @@ -0,0 +1,86 @@ +{% extends "base.html" %} + +{% block content %} +

Informace, komunikace

+ + + +
+

Tvorba čísla

+ + +
+ +

Moje problémy

+ +

Témata

+ + +

Úlohy

+ + +

Články

+ + +
+

Soustředění

+ + + +
+

Můj profil

+ + + +
+

Nemůžeš najít, co hledáš? Může to být v administračním rozhraní webu.

+{% endblock content %} + diff --git a/seminar/urls.py b/seminar/urls.py index 9c72717e..ed42a7f8 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -91,7 +91,7 @@ urlpatterns = [ path('org/vloz_body//', staff_member_required(views.VlozBodyView.as_view()),name='seminar_org_vlozbody'), # příprava na nestatický orgorozcestník - path('org/rozcestnik', + path('org/rozcestnik/', staff_member_required(views.OrgoRozcestnikView.as_view()),name='seminar_org_rozcestnik'), path('prihlaska/',views.prihlaskaView, name='seminar_prihlaska'), path('login/', views.LoginView.as_view(), name='login'), diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index a80623d7..242c4962 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -10,6 +10,7 @@ from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect from django.db.models import Q, Sum, Count from django.views.decorators.csrf import ensure_csrf_cookie from django.views.generic.edit import FormView, CreateView +from django.views.generic.base import TemplateView from django.contrib.auth import authenticate, login, get_user_model, logout from django.contrib.auth import views as auth_views from django.contrib.auth.models import User @@ -200,7 +201,7 @@ class AktualniZadaniView(TreeNodeView): # "cisla" : cisla # }) # return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik}) -# +# #def ZadaniAktualniVysledkovkaView(request): # nastaveni = get_object_or_404(Nastaveni) @@ -875,12 +876,39 @@ def oldObalkovaniView(request, rocnik, cislo): ### Orgostránky -def OrgoRozcestnikView(request): +class OrgoRozcestnikView(TemplateView): ''' Zobrazí organizátorský rozcestník.''' - posledni_soustredeni = Soustredeni.objects.order_by('-datum_konce').first() template_name = 'seminar/orgorozcestnik.html' - content_type = 'text/plain; charset=UTF8' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['posledni_soustredeni'] = Soustredeni.objects.order_by('-datum_konce').first() + nastaveni = Nastaveni.objects.first() + aktualni_rocnik = nastaveni.aktualni_rocnik + context['posledni_cislo_url'] = nastaveni.aktualni_cislo.verejne_url() + # TODO možná chceme odkazovat na právě rozpracované číslo, a ne to poslední vydané + # pokud nechceme haluzit kód (= poradi) dalšího čísla, bude asi potřeba jít + # přes treenody (a dát si přitom pozor na MezicisloNode) + + u = self.request.user + os = s.Osoba.objects.get(user=u) + organizator = s.Organizator.objects.get(osoba=os) + temata_garant = s.Tema.objects.filter(garant=organizator, + rocnik=aktualni_rocnik) + #FIXME: přidat opravovatel, stav='STAV_ZADANY' + ulohy_garant = s.Uloha.objects.filter(garant=organizator, + cislo_zadani__rocnik=aktualni_rocnik) + clanky_garant = s.Clanek.objects.filter(garant=organizator, + cislo__rocnik=aktualni_rocnik) + + context['temata'] = temata_garant + context['ulohy'] = ulohy_garant + context['clanky'] = clanky_garant + context['organizator'] = organizator + return context + + #content_type = 'text/plain; charset=UTF8' #XXX ### Tituly @@ -1109,57 +1137,57 @@ 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(user_edit) - prefill_2=model_to_dict(resitel_edit) - prefill_3=model_to_dict(osoba_edit) - prefill_1.update(prefill_2) - prefill_1.update(prefill_3) - form = ProfileEditForm(initial=prefill_1) - ## Změna údajů a jejich uložení - if request.method == 'POST': - form = ProfileEditForm(request.POST) - if form.is_valid(): - ## 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: - ## Stránka před odeslaním formuláře = předvyplněný formulář - return render(request, 'seminar/profil/edit.html', {'form': form}) + 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(user_edit) + prefill_2=model_to_dict(resitel_edit) + prefill_3=model_to_dict(osoba_edit) + prefill_1.update(prefill_2) + prefill_1.update(prefill_3) + form = ProfileEditForm(initial=prefill_1) + ## Změna údajů a jejich uložení + if request.method == 'POST': + form = ProfileEditForm(request.POST) + if form.is_valid(): + ## 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: + ## Stránka před odeslaním formuláře = předvyplněný formulář + return render(request, 'seminar/profil/edit.html', {'form': form}) def prihlaskaView(request): generic_logger = logging.getLogger('seminar.prihlaska')