Browse Source

Merge branch 'data_migrations' into test

middleware_test
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
c63ca09e68
  1. 1
      seminar/.~lock.profile_vysledkovka.txt#
  2. 37
      seminar/admin.py
  3. 12
      seminar/forms.py
  4. 50
      seminar/models.py
  5. 2
      seminar/templates/seminar/zadani/AktualniVysledkovka.html
  6. 2
      seminar/utils.py
  7. 2
      seminar/views/views_all.py

1
seminar/.~lock.profile_vysledkovka.txt#

@ -1 +0,0 @@
,anet,erebus,25.03.2020 22:21,file:///home/anet/.config/libreoffice/4;

37
seminar/admin.py

@ -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):

12
seminar/forms.py

@ -351,8 +351,16 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
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 = []

50
seminar/models.py

@ -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})

2
seminar/templates/seminar/zadani/AktualniVysledkovka.html

@ -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 %}

2
seminar/utils.py

@ -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."""

2
seminar/views/views_all.py

@ -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…
Cancel
Save