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): | ||||
|  |  | |||
|  | @ -351,8 +351,16 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): | |||
| 		import datetime | ||||
| 		from time import strftime | ||||
| 		 | ||||
| 		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,8 +24,10 @@ | |||
|     <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
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky