Merge branch 'data_migrations' into test
This commit is contained in:
commit
c63ca09e68
7 changed files with 76 additions and 32 deletions
|
@ -1 +0,0 @@
|
|||
,anet,erebus,25.03.2020 22:21,file:///home/anet/.config/libreoffice/4;
|
|
@ -1,7 +1,8 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.auth.models import Group
|
||||
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 reversion.admin import VersionAdmin
|
||||
|
@ -12,11 +13,43 @@ from solo.admin import SingletonModelAdmin
|
|||
# Todo: reversion
|
||||
|
||||
import seminar.models as m
|
||||
import seminar.treelib as tl
|
||||
|
||||
admin.site.register(m.Skola)
|
||||
admin.site.register(m.Prijemce)
|
||||
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)
|
||||
class OsobaAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -350,9 +350,17 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
|||
def gen_terminy():
|
||||
import datetime
|
||||
from time import strftime
|
||||
|
||||
aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik
|
||||
aktualni_cislo = m.Nastaveni.get_solo().aktualni_cislo
|
||||
|
||||
from django.db.utils import OperationalError
|
||||
try:
|
||||
aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik
|
||||
aktualni_cislo = m.Nastaveni.get_solo().aktualni_cislo
|
||||
except OperationalError:
|
||||
# django.db.utils.OperationalError: no such table: seminar_nastaveni
|
||||
# Nemáme databázi, takže to selhalo. Pro jistotu vrátíme aspoň dvě možnosti, ať to nepadá dál
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.error("Rozbitá databáze (před počátečními migracemi?)")
|
||||
return [('broken', 'Je to rozbitý'), ('fubar', 'Nefunguje to')]
|
||||
|
||||
result = []
|
||||
|
||||
|
|
|
@ -864,31 +864,31 @@ class Problem(SeminarModelBase,PolymorphicModel):
|
|||
return str(self.kod)
|
||||
return '<Není zadaný>'
|
||||
|
||||
def verejne(self):
|
||||
# aktuálně podle stavu problému
|
||||
# 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.
|
||||
# Je to tak správně? Podle aktuální představy ano.
|
||||
stav_verejny = False
|
||||
if self.stav == 'zadany' or self.stav == 'vyreseny':
|
||||
stav_verejny = True
|
||||
print("stav_verejny: {}".format(stav_verejny))
|
||||
|
||||
cislo_verejne = False
|
||||
cislonode = self.cislo_node()
|
||||
if cislonode is None:
|
||||
# problém nemá vlastní node, veřejnost posuzujeme jen podle stavu
|
||||
print("empty node")
|
||||
return stav_verejny
|
||||
else:
|
||||
cislo_zadani = cislonode.cislo
|
||||
if (cislo_zadani and cislo_zadani.verejne()):
|
||||
print("cislo: {}".format(cislo_zadani))
|
||||
cislo_verejne = True
|
||||
print("stav_verejny: {}".format(stav_verejny))
|
||||
print("cislo_verejne: {}".format(cislo_verejne))
|
||||
return (stav_verejny and cislo_verejne)
|
||||
verejne.boolean = True
|
||||
# def verejne(self):
|
||||
# # aktuálně podle stavu problému
|
||||
# # 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.
|
||||
# # Je to tak správně? Podle aktuální představy ano.
|
||||
# stav_verejny = False
|
||||
# if self.stav == 'zadany' or self.stav == 'vyreseny':
|
||||
# stav_verejny = True
|
||||
# print("stav_verejny: {}".format(stav_verejny))
|
||||
#
|
||||
# cislo_verejne = False
|
||||
# cislonode = self.cislo_node()
|
||||
# if cislonode is None:
|
||||
# # problém nemá vlastní node, veřejnost posuzujeme jen podle stavu
|
||||
# print("empty node")
|
||||
# return stav_verejny
|
||||
# else:
|
||||
# cislo_zadani = cislonode.cislo
|
||||
# if (cislo_zadani and cislo_zadani.verejne()):
|
||||
# print("cislo: {}".format(cislo_zadani))
|
||||
# cislo_verejne = True
|
||||
# print("stav_verejny: {}".format(stav_verejny))
|
||||
# print("cislo_verejne: {}".format(cislo_verejne))
|
||||
# return (stav_verejny and cislo_verejne)
|
||||
# verejne.boolean = True
|
||||
|
||||
def verejne_url(self):
|
||||
return reverse('seminar_problem', kwargs={'pk': self.id})
|
||||
|
|
|
@ -24,7 +24,9 @@
|
|||
<div class='mam-org-only'>
|
||||
<h1>Výsledky včetně neveřejných</h1>
|
||||
{% with vysledkovka_s_neverejnymi as radky_vysledkovky %}
|
||||
{% with cisla_s_neverejnymi as cisla %}
|
||||
{% include "seminar/vysledkovka_rocnik.html" %}
|
||||
{% endwith %}
|
||||
{% endwith %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -232,7 +232,7 @@ def cisla_rocniku(rocnik, jen_verejne=True):
|
|||
if jen_verejne:
|
||||
return rocnik.verejna_cisla()
|
||||
else:
|
||||
return rocnik.cisla.all()
|
||||
return rocnik.cisla.all().order_by('poradi')
|
||||
|
||||
def hlavni_problem(problem):
|
||||
""" Pro daný problém vrátí jeho nejvyšší nadproblém."""
|
||||
|
|
|
@ -503,6 +503,7 @@ def ZadaniAktualniVysledkovkaView(request):
|
|||
pass
|
||||
# vysledkovka s neverejnyma vysledkama
|
||||
vysledkovka_s_neverejnymi = vysledkovka_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False)
|
||||
cisla_s_neverejnymi = cisla_rocniku(nastaveni.aktualni_rocnik, jen_verejne=False)
|
||||
return render(
|
||||
request,
|
||||
'seminar/zadani/AktualniVysledkovka.html',
|
||||
|
@ -511,6 +512,7 @@ def ZadaniAktualniVysledkovkaView(request):
|
|||
'radky_vysledkovky': vysledkovka,
|
||||
'cisla': cisla,
|
||||
'vysledkovka_s_neverejnymi': vysledkovka_s_neverejnymi,
|
||||
'cisla_s_neverejnymi': cisla_s_neverejnymi,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue