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. 14
      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 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):

14
seminar/forms.py

@ -350,9 +350,17 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
def gen_terminy(): def gen_terminy():
import datetime import datetime
from time import strftime from time import strftime
aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik from django.db.utils import OperationalError
aktualni_cislo = m.Nastaveni.get_solo().aktualni_cislo 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 = [] result = []

50
seminar/models.py

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

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

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

2
seminar/utils.py

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

2
seminar/views/views_all.py

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