Merge remote-tracking branch 'refs/remotes/Gimli/data_migrations' into data_migrations
This commit is contained in:
commit
91169fb536
5 changed files with 65 additions and 28 deletions
|
@ -1,7 +1,8 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.forms import widgets
|
from django.forms import widgets, ModelForm
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
|
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin, PolymorphicChildModelFilter
|
||||||
from reversion.admin import VersionAdmin
|
from reversion.admin import VersionAdmin
|
||||||
|
@ -12,11 +13,43 @@ from solo.admin import SingletonModelAdmin
|
||||||
# Todo: reversion
|
# Todo: reversion
|
||||||
|
|
||||||
import seminar.models as m
|
import seminar.models as m
|
||||||
|
import seminar.treelib as tl
|
||||||
|
|
||||||
admin.site.register(m.Skola)
|
admin.site.register(m.Skola)
|
||||||
admin.site.register(m.Prijemce)
|
admin.site.register(m.Prijemce)
|
||||||
admin.site.register(m.Rocnik)
|
admin.site.register(m.Rocnik)
|
||||||
admin.site.register(m.Cislo)
|
|
||||||
|
class CisloForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = m.Cislo
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
print("Cleaning...")
|
||||||
|
print(self.cleaned_data)
|
||||||
|
if self.cleaned_data.get('verejne_db') == False:
|
||||||
|
return self.cleaned_data
|
||||||
|
cn = m.CisloNode.objects.get(cislo=self.instance)
|
||||||
|
for ch in tl.all_children(cn):
|
||||||
|
if isinstance(ch, m.TemaVCisleNode):
|
||||||
|
if ch.tema.stav not in \
|
||||||
|
(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY):
|
||||||
|
raise ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema})
|
||||||
|
|
||||||
|
if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode):
|
||||||
|
if ch.uloha.stav not in \
|
||||||
|
(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY):
|
||||||
|
raise ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha})
|
||||||
|
if isinstance(ch, m.ReseniNode):
|
||||||
|
for problem in ch.reseni.problem_set:
|
||||||
|
if problem not in \
|
||||||
|
(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY):
|
||||||
|
raise ValidationError('Problém %s není zadaný ani vyřešený', code=problem)
|
||||||
|
return self.cleaned_data
|
||||||
|
|
||||||
|
@admin.register(m.Cislo)
|
||||||
|
class CisloAdmin(admin.ModelAdmin):
|
||||||
|
form = CisloForm
|
||||||
|
|
||||||
@admin.register(m.Osoba)
|
@admin.register(m.Osoba)
|
||||||
class OsobaAdmin(admin.ModelAdmin):
|
class OsobaAdmin(admin.ModelAdmin):
|
||||||
|
|
|
@ -864,31 +864,31 @@ class Problem(SeminarModelBase,PolymorphicModel):
|
||||||
return str(self.kod)
|
return str(self.kod)
|
||||||
return '<Není zadaný>'
|
return '<Není zadaný>'
|
||||||
|
|
||||||
def verejne(self):
|
# def verejne(self):
|
||||||
# aktuálně podle stavu problému
|
# # aktuálně podle stavu problému
|
||||||
# FIXME pro některé problémy možná chceme override
|
# # FIXME pro některé problémy možná chceme override
|
||||||
# FIXME vrací veřejnost čistě problému, nezávisle na čísle, ve kterém je.
|
# # FIXME vrací veřejnost čistě problému, nezávisle na čísle, ve kterém je.
|
||||||
# Je to tak správně? Podle aktuální představy ano.
|
# # Je to tak správně? Podle aktuální představy ano.
|
||||||
stav_verejny = False
|
# stav_verejny = False
|
||||||
if self.stav == 'zadany' or self.stav == 'vyreseny':
|
# if self.stav == 'zadany' or self.stav == 'vyreseny':
|
||||||
stav_verejny = True
|
# stav_verejny = True
|
||||||
print("stav_verejny: {}".format(stav_verejny))
|
# print("stav_verejny: {}".format(stav_verejny))
|
||||||
|
#
|
||||||
cislo_verejne = False
|
# cislo_verejne = False
|
||||||
cislonode = self.cislo_node()
|
# cislonode = self.cislo_node()
|
||||||
if cislonode is None:
|
# if cislonode is None:
|
||||||
# problém nemá vlastní node, veřejnost posuzujeme jen podle stavu
|
# # problém nemá vlastní node, veřejnost posuzujeme jen podle stavu
|
||||||
print("empty node")
|
# print("empty node")
|
||||||
return stav_verejny
|
# return stav_verejny
|
||||||
else:
|
# else:
|
||||||
cislo_zadani = cislonode.cislo
|
# cislo_zadani = cislonode.cislo
|
||||||
if (cislo_zadani and cislo_zadani.verejne()):
|
# if (cislo_zadani and cislo_zadani.verejne()):
|
||||||
print("cislo: {}".format(cislo_zadani))
|
# print("cislo: {}".format(cislo_zadani))
|
||||||
cislo_verejne = True
|
# cislo_verejne = True
|
||||||
print("stav_verejny: {}".format(stav_verejny))
|
# print("stav_verejny: {}".format(stav_verejny))
|
||||||
print("cislo_verejne: {}".format(cislo_verejne))
|
# print("cislo_verejne: {}".format(cislo_verejne))
|
||||||
return (stav_verejny and cislo_verejne)
|
# return (stav_verejny and cislo_verejne)
|
||||||
verejne.boolean = True
|
# verejne.boolean = True
|
||||||
|
|
||||||
def verejne_url(self):
|
def verejne_url(self):
|
||||||
return reverse('seminar_problem', kwargs={'pk': self.id})
|
return reverse('seminar_problem', kwargs={'pk': self.id})
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
<div class='mam-org-only'>
|
<div class='mam-org-only'>
|
||||||
<h1>Výsledky včetně neveřejných</h1>
|
<h1>Výsledky včetně neveřejných</h1>
|
||||||
{% with vysledkovka_s_neverejnymi as radky_vysledkovky %}
|
{% with vysledkovka_s_neverejnymi as radky_vysledkovky %}
|
||||||
|
{% with cisla_s_neverejnymi as cisla %}
|
||||||
{% include "seminar/vysledkovka_rocnik.html" %}
|
{% include "seminar/vysledkovka_rocnik.html" %}
|
||||||
|
{% endwith %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -232,7 +232,7 @@ def cisla_rocniku(rocnik, jen_verejne=True):
|
||||||
if jen_verejne:
|
if jen_verejne:
|
||||||
return rocnik.verejna_cisla()
|
return rocnik.verejna_cisla()
|
||||||
else:
|
else:
|
||||||
return rocnik.cisla.all()
|
return rocnik.cisla.all().order_by('poradi')
|
||||||
|
|
||||||
def hlavni_problem(problem):
|
def hlavni_problem(problem):
|
||||||
""" Pro daný problém vrátí jeho nejvyšší nadproblém."""
|
""" Pro daný problém vrátí jeho nejvyšší nadproblém."""
|
||||||
|
|
|
@ -503,6 +503,7 @@ def ZadaniAktualniVysledkovkaView(request):
|
||||||
pass
|
pass
|
||||||
# vysledkovka s neverejnyma vysledkama
|
# vysledkovka s neverejnyma vysledkama
|
||||||
vysledkovka_s_neverejnymi = vysledkovka_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False)
|
vysledkovka_s_neverejnymi = vysledkovka_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False)
|
||||||
|
cisla_s_neverejnymi = cisla_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False)
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
'seminar/zadani/AktualniVysledkovka.html',
|
'seminar/zadani/AktualniVysledkovka.html',
|
||||||
|
@ -511,6 +512,7 @@ def ZadaniAktualniVysledkovkaView(request):
|
||||||
'radky_vysledkovky': vysledkovka,
|
'radky_vysledkovky': vysledkovka,
|
||||||
'cisla': cisla,
|
'cisla': cisla,
|
||||||
'vysledkovka_s_neverejnymi': vysledkovka_s_neverejnymi,
|
'vysledkovka_s_neverejnymi': vysledkovka_s_neverejnymi,
|
||||||
|
'cisla_s_neverejnymi': cisla_s_neverejnymi,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue