diff --git a/seminar/forms.py b/seminar/forms.py index 39d06513..8f46b6c8 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -347,7 +347,7 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): @classmethod - def gen_terminy(cls): + def gen_terminy(cls, rocnik=None): import datetime from time import strftime @@ -362,6 +362,11 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): logger.error("Rozbitá databáze (před počátečními migracemi?)") return [('broken', 'Je to rozbitý'), ('fubar', 'Nefunguje to')] + # FIXME: Tohle je hnusný monkey patch, mělo by to být nějak zahrnuto výš. + if rocnik is not None: + aktualni_rocnik = rocnik + aktualni_cislo = m.Cislo.objects.filter(rocnik=rocnik).order_by('poradi').last() + result = [] for cislo in m.Cislo.objects.filter( @@ -391,8 +396,8 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): return result @classmethod - def gen_initial(cls): - terminy = cls.gen_terminy() + def gen_initial(cls, rocnik=None): + terminy = cls.gen_terminy(rocnik) initial = { 'resitele': cls.RESITELE_RELEVANTNI, 'problemy': cls.PROBLEMY_MOJE, @@ -402,14 +407,14 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): } return initial - def __init__(self, *args, **kwargs): + def __init__(self, *args, rocnik=None, **kwargs): if 'initial' not in kwargs: - super().__init__(initial=self.gen_initial(), *args, **kwargs) + super().__init__(initial=self.gen_initial(rocnik), *args, **kwargs) else: super().__init__(*args, **kwargs) # choices jako parametr Select widgetu neumí brát callable, jen iterable, takže si pro jednoduchost můžu rovnou uložit výsledek sem... # A "sem" znamená do libovolné metody, protože jinak se jedná o kód, který django spustí při inicializaci a protože potřebujeme databázi, tak by spadnul při vyrábění testdat... - self.terminy = self.gen_terminy() + self.terminy = self.gen_terminy(rocnik) self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy()) self.fields['reseni_od'].initial = self.terminy[-2] self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy()) diff --git a/seminar/urls.py b/seminar/urls.py index 58f17130..c2005cf0 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -173,6 +173,7 @@ urlpatterns = [ # name='seminar_autocomplete_organizator') path('org/reseni/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'), + path('org/reseni/rocnik//', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'), path('org/reseni///', org_required(views.ReseniProblemuView.as_view()), name='odevzdavatko_reseni_resitele_k_problemu'), path('org/reseni/', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'), path('org/reseni/all', org_required(views.SeznamReseniView.as_view())), diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 3d0056c7..a8273ec8 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -53,7 +53,11 @@ class TabulkaOdevzdanychReseniView(ListView): self.problemy = m.Problem.objects.all() self.reseni = m.Reseni.objects.all() - form = FiltrForm(self.request.GET) + aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci + if 'rocnik' in self.kwargs: + aktualni_rocnik = m.Rocnik.objects.get(rocnik=self.kwargs['rocnik']) + + form = FiltrForm(self.request.GET, rocnik=aktualni_rocnik) if form.is_valid(): fcd = form.cleaned_data resitele = fcd["resitele"] @@ -62,7 +66,7 @@ class TabulkaOdevzdanychReseniView(ListView): reseni_do = fcd["reseni_do"] jen_neobodovane = fcd["neobodovane"] else: - initial = FiltrForm.gen_initial() + initial = FiltrForm.gen_initial(aktualni_rocnik) resitele = initial['resitele'] problemy = initial['problemy'] reseni_od = initial['reseni_od'][0] @@ -70,9 +74,6 @@ class TabulkaOdevzdanychReseniView(ListView): jen_neobodovane = initial["neobodovane"] - # Filtrujeme! - aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci - # Chceme jen letošní problémy # FIXME: Neexistuje metoda, jak dostat starší problémy… self.problemy = self.problemy.filter(Q(Tema___rocnik=aktualni_rocnik) | Q(Uloha___cislo_zadani__rocnik = aktualni_rocnik) | Q(Clanek___cislo__rocnik = aktualni_rocnik) | Q(Konfera___soustredeni__rocnik = aktualni_rocnik))