2730 lines
		
	
	
	
		
			131 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			2730 lines
		
	
	
	
		
			131 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Generated by Django 2.2.24 on 2021-09-10 21:44
 | |
| 
 | |
| from django.conf import settings
 | |
| from django.db import migrations, models
 | |
| import django.db.migrations.operations.special
 | |
| import django.db.models.deletion
 | |
| import django.utils.timezone
 | |
| import django_countries.fields
 | |
| import imagekit.models.fields
 | |
| import taggit.managers
 | |
| 
 | |
| from soustredeni.models import generate_filename_konfera
 | |
| from odevzdavatko.models import generate_filename
 | |
| from tvorba.models import cislo_pdf_filename, cislo_png_filename
 | |
| 
 | |
| from datetime import date
 | |
| from django.db.models import Q
 | |
| from treenode.treelib import get_parent
 | |
| import datetime as dt
 | |
| 
 | |
| 
 | |
| import logging
 | |
| logger = logging.getLogger(__name__)
 | |
| # Functions from the following migrations need manual copying.
 | |
| # Move them and any dependencies into this file, then update the
 | |
| # RunPython operations to refer to the local versions:
 | |
| 
 | |
| # seminar.migrations.0051_resitel_to_osoba
 | |
| def resitel_to_osoba(apps,schema_editor):
 | |
| 	Resitel = apps.get_model('seminar','Resitel')
 | |
| 	Osoba = apps.get_model('seminar','Osoba')
 | |
| 	for r in Resitel.objects.all():
 | |
| 		o = Osoba()
 | |
| 		o.datum_narozeni = r.datum_narozeni
 | |
| 		o.datum_registrace = r.datum_prihlaseni if r.datum_prihlaseni else date.max	# Myslím si, že None by způsobilo použití defaultu
 | |
| 		o.datum_souhlasu_udaje = r.datum_souhlasu_udaje
 | |
| 		o.datum_souhlasu_zasilani = r.datum_souhlasu_zasilani
 | |
| 		o.email = r.email
 | |
| 		o.jmeno = r.jmeno
 | |
| 		o.mesto = r.mesto
 | |
| 		o.pohlavi_muz = r.pohlavi_muz
 | |
| 		o.prijmeni = r.prijmeni
 | |
| 		o.psc = r.psc
 | |
| 		o.stat = r.stat
 | |
| 		o.telefon = r.telefon
 | |
| 		o.ulice = r.ulice
 | |
| 		o.user = r.user
 | |
| 		o.poznamka += f'\nWEB DEBUG: Osoba pro řešitele {r.id}'
 | |
| 		if o.user:
 | |
| 			u = o.user
 | |
| 			if u.first_name:
 | |
| 				if not o.jmeno:
 | |
| 					o.jmeno = u.first_name
 | |
| 					u.first_name += ' (Uživatel!)'
 | |
| 				elif o.jmeno == u.first_name:
 | |
| 					u.first_name += ' (Uživatel!)'
 | |
| 				else:
 | |
| 					raise ValueError('jmeno a first_name rozdílné: "{}" vs. "{}"'.format(o.jmeno, u.first_name))
 | |
| 			if u.last_name:
 | |
| 				if not o.prijmeni:
 | |
| 					o.prijmeni = u.last_name
 | |
| 					u.last_name += ' (Uživatel!)'
 | |
| 				elif o.prijmeni == u.last_name:
 | |
| 					u.last_name += ' (Uživatel!)'
 | |
| 				else:
 | |
| 					raise ValueError('prijmeni a last_name rozdílné: "{}" vs. "{}"'.format(o.prijmeni, u.last_name))
 | |
| 			if u.email:
 | |
| 				if not o.email:
 | |
| 					o.email = u.email
 | |
| 				elif o.email != u.email:
 | |
| 					raise ValueError('o.email a u.email rozdílné: "{}" vs. "{}"'.format(o.email, u.email))
 | |
| 			u.save()
 | |
| 					
 | |
| 
 | |
| 		o.save()
 | |
| 		r.osoba = o
 | |
| 		r.save()
 | |
| 
 | |
| def osoba_to_resitel(apps, schema_editor):
 | |
| 	Resitel = apps.get_model('seminar','Resitel')
 | |
| 	Osoba = apps.get_model('seminar','Osoba')
 | |
| 	for r in Resitel.objects.all():
 | |
| 		o = r.osoba
 | |
| 		r.datum_narozeni = o.datum_narozeni
 | |
| 		r.datum_prihlaseni = o.datum_registrace
 | |
| 		r.datum_souhlasu_udaje = o.datum_souhlasu_udaje 
 | |
| 		r.datum_souhlasu_zasilani = o.datum_souhlasu_zasilani 
 | |
| 		r.email = o.email
 | |
| 		r.jmeno = o.jmeno
 | |
| 		r.mesto = o.mesto
 | |
| 		r.pohlavi_muz = o.pohlavi_muz
 | |
| 		r.prijmeni = o.prijmeni
 | |
| 		r.psc = o.psc
 | |
| 		r.stat = o.stat
 | |
| 		r.telefon = o.telefon
 | |
| 		r.ulice = o.ulice
 | |
| 		r.user = o.user
 | |
| 		r.save()
 | |
| 		o.delete()
 | |
| 
 | |
| # seminar.migrations.0052_user_to_organizator
 | |
| def spoj_k_organizatorum_osoby(apps, scema_editor):	
 | |
| 	Organizator = apps.get_model('seminar', 'Organizator')
 | |
| 	Resitel = apps.get_model('seminar', 'Resitel')
 | |
| 	Osoba = apps.get_model('seminar', 'Osoba')
 | |
| 	for org in Organizator.objects.all():
 | |
| 		
 | |
| 		# Spárování organizátora s osobou
 | |
| 		# Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli,
 | |
| 		# Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu
 | |
| 		user = org.user
 | |
| 		if user is None:
 | |
| 			logger.error(f'Org {org} nemá uživatele!')
 | |
| 			# Je to podezřelé, ale prostě vyrobíme novou osobu.
 | |
| 			osoba = Osoba()
 | |
| 			osoba.poznamka += f'\nWEB DEBUG: BUG: Osoba pro Orga {org.id} bez Uživatele'
 | |
| 			# Téhle osobě nejdou nastavit detaily, protože žádné nemáme.
 | |
| 			# Datum registrace budiž maximální
 | |
| 			osoba.datum_registrace = date.max
 | |
| 		else:
 | |
| 			logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}')
 | |
| 			# 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢
 | |
| 			class EndException(Exception): pass
 | |
| 			try:
 | |
| 				# Hledáme podle uživatele
 | |
| 				resitele = Resitel.objects.filter(user=user)
 | |
| 				if resitele.count() != 0 and user is not None:
 | |
| 					osoba = resitele.first().osoba
 | |
| 					osoba.poznamka += f'\nWEB DEBUG: Osoba pro Orga {org.id} spárovaná podle Uživatele Řešitele'
 | |
| 					logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu')
 | |
| 					raise EndException
 | |
| 				
 | |
| 				# Hledáme podle e-mailu
 | |
| 				osoby = Osoba.objects.filter(email__iexact=user.email)
 | |
| 				if osoby.count() != 0 and user.email != '':
 | |
| 					osoba = osoby.first()
 | |
| 					if osoba.user is None:
 | |
| 						osoba.user = user
 | |
| 					osoba.poznamka += f'\nWEB DEBUG: Osoba pro Orga {org.id} spárovaná podle e-mailu'
 | |
| 					logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu')
 | |
| 					raise EndException
 | |
| 
 | |
| 				# Fallback
 | |
| 				logger.warning(f'Org neměl řešitele, zakládám novou Osobu.')
 | |
| 				osoba = Osoba(user=user)
 | |
| 				osoba.poznamka += f'\nWEB DEBUG: Osoba pro Orga {org.id} vytvořena nová jen podle existence Uživatele'
 | |
| 
 | |
| 				# Přesun informací z usera do osoby
 | |
| 				# pro osoby z řešitelů (jediné dosud existující osoby) již v minule migraci
 | |
| 				osoba.jmeno = user.first_name
 | |
| 				osoba.prijmeni = user.last_name
 | |
| 				osoba.email = user.email
 | |
| 				user.first_name += " (Uživatel!)"
 | |
| 				user.last_name += " (Uživatel!)"
 | |
| 				osoba.datum_registrace = min(osoba.datum_registrace, user.date_joined, key=lambda d: d if d is not None else date.max)
 | |
| 				user.save()
 | |
| 
 | |
| 			except EndException: pass
 | |
| 
 | |
| 		# Přesun informací z organizátora do jeho osoby
 | |
| 		osoba.prezdivka = org.prezdivka if org.prezdivka is not None else ''
 | |
| 		osoba.foto = org.foto
 | |
| 		
 | |
| 		# Všechno uložit
 | |
| 		osoba.save()
 | |
| 		org.osoba = osoba
 | |
| 		org.save()
 | |
| 		
 | |
| def fix_problem_0052(apps, schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Organizator = apps.get_model('seminar', 'Organizator')
 | |
| 	for pr in Problem.objects.all():
 | |
| 		if pr.autor_old is not None:
 | |
| 			pr.autor = Organizator.objects.filter(osoba__user=pr.autor_old).first()
 | |
| 		else:
 | |
| 			pr.autor = None
 | |
| 		if pr.opravovatel is not None:
 | |
| 			if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None:
 | |
| 				pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first())
 | |
| 			else:
 | |
| 				logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}')
 | |
| 		pr.save()
 | |
| 
 | |
| def fix_pohadka(apps, schema_editor):
 | |
| 	Pohadka = apps.get_model('seminar', 'Pohadka')
 | |
| 	Organizator = apps.get_model('seminar', 'Organizator')
 | |
| 	for poh in Pohadka.objects.all():
 | |
| 		if poh.autor_old is not None:
 | |
| 			poh.autor = Organizator.objects.filter(osoba__user=poh.autor_old).first()
 | |
| 		else:
 | |
| 			poh.autor = None
 | |
| 		poh.save()
 | |
| 
 | |
| def fix_novinka(apps, schema_editor):
 | |
| 	Novinky = apps.get_model('seminar', 'Novinky')
 | |
| 	Organizator = apps.get_model('seminar', 'Organizator')
 | |
| 	for nov in Novinky.objects.all():
 | |
| 		nov.autor = Organizator.objects.filter(osoba__user=nov.autor_old).first()
 | |
| 		nov.save()
 | |
| 
 | |
| # seminar.migrations.0053_organizator_organizuje_od_do
 | |
| def rok_to_datetime(apps,schema_editor):
 | |
| 	Organizator = apps.get_model('seminar','Organizator')
 | |
| 	for o in Organizator.objects.all():
 | |
| 		rok = o.organizuje_od_roku
 | |
| 		if rok:
 | |
| 			o.organizuje_od = dt.datetime(rok,1,1)
 | |
| 		rok = o.organizuje_do_roku
 | |
| 		if rok:
 | |
| 			o.organizuje_do = dt.datetime(rok,12,31)
 | |
| 		o.save()
 | |
| 
 | |
| def datetime_to_rok(apps,schema_editor):
 | |
| 	Organizator = apps.get_model('seminar','Organizator')
 | |
| 	for o in Organizator.objects.all():
 | |
| 		o.organizuje_od_roku = o.organizuje_od.year
 | |
| 		o.organizuje_do_roku = o.organizuje_do.year
 | |
| 		o.save()
 | |
| 
 | |
| # seminar.migrations.0056_vrcholy_pro_rocniky_a_cisla
 | |
| def generuj_RocnikNody_a_CisloNody(apps,schema_editor):
 | |
| 	Rocnik = apps.get_model('seminar', 'Rocnik')
 | |
| 	RocnikNode = apps.get_model('seminar', 'RocnikNode')
 | |
| 	Cislo = apps.get_model('seminar', 'Cislo')
 | |
| 	CisloNode = apps.get_model('seminar', 'CisloNode')
 | |
| 
 | |
| 	last_rn = None		# last_* slouží k navázání následníků
 | |
| 	for r in Rocnik.objects.all():
 | |
| 		rn = RocnikNode.objects.create(rocnik=r)
 | |
| 		rn.save()
 | |
| 		rn.root = rn
 | |
| 		rn.save()
 | |
| 		if last_rn:
 | |
| 			last_rn.succ = rn
 | |
| 			last_rn.save()
 | |
| 		last_rn = rn
 | |
| 		
 | |
| 		last_cn = None
 | |
| 		for c in Cislo.objects.filter(rocnik=r):
 | |
| 			cn = CisloNode.objects.create(cislo=c, root=rn)
 | |
| 			cn.save()
 | |
| 			if last_cn:	# Jsme něčí následník
 | |
| 				last_cn.succ = cn
 | |
| 				last_cn.save()
 | |
| 			else:	# Jsme první v řadě, takže se musíme přidat jako first_child RočníkNodu
 | |
| 				rn.first_child = cn
 | |
| 				rn.save()
 | |
| 			last_cn = cn
 | |
| 
 | |
| # seminar.migrations.0057_reseni_to_reseni_hodnoceni
 | |
| def reseni_to_Reseni(apps, schema_editor): 
 | |
| 	Reseni = apps.get_model('seminar','Reseni')
 | |
| 	Reseni_Resitele = apps.get_model('seminar','Reseni_Resitele')
 | |
| 	Hodnoceni = apps.get_model('seminar','Hodnoceni')
 | |
| 	
 | |
| 	for r in Reseni.objects.all():
 | |
| 		rr = Reseni_Resitele.objects.create(resitele = r.resitel, reseni=r)
 | |
| 		if r.body == None:
 | |
| 			print("!!!!!!!!!!!!!!!")
 | |
| 			print(r.id,r)
 | |
| 			print("!!!!!!!!!!!!!!!")
 | |
| 		else:
 | |
| 			h = Hodnoceni.objects.create(
 | |
| 				body=r.body,
 | |
| 				cislo_body = r.cislo_body,
 | |
| 				problem = r.problem_old,
 | |
| 				reseni = r)
 | |
| 
 | |
| # seminar.migrations.0058_problem_to_uloha_tema_clanek
 | |
| def poskladej_strom(apps, rodic, *texty):
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 	if not rodic:
 | |
| 		raise ValueError("Rodič musí být definovaný")
 | |
| 
 | |
| 	uz_ma_deti = False
 | |
| 	tn = None
 | |
| 	for txt in texty:
 | |
| 		if not txt:
 | |
| 			continue
 | |
| 		# Přidej do stromu:
 | |
| 		textobj = Text.objects.create(na_web = txt)
 | |
| 		textobj.save()
 | |
| 		textnode = TextNode.objects.create(text = textobj)
 | |
| 		textnode.save()
 | |
| 		if not uz_ma_deti:
 | |
| 			rodic.first_child = textnode
 | |
| 			rodic.save()
 | |
| 			tn = rodic.first_child
 | |
| 			uz_ma_deti = True
 | |
| 		else:
 | |
| 			tn.succ = textnode
 | |
| 			tn.save()
 | |
| 			tn = tn.succ
 | |
| 
 | |
| def uloha_to_Uloha(apps,schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Uloha = apps.get_model('seminar', 'Uloha')
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	UlohaZadaniNode = apps.get_model('seminar', 'UlohaZadaniNode')
 | |
| 	UlohaVzorakNode = apps.get_model('seminar', 'UlohaVzorakNode')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 
 | |
| 	ulohy = Problem.objects.filter(typ = 'uloha')
 | |
| 	for uold in ulohy:
 | |
| 		unew = Uloha.objects.create(
 | |
| 			# Zakomentované fieldy by se už měly nacházet v příslušném problému
 | |
| 			problem_ptr = uold,
 | |
| 			nazev = uold.nazev,
 | |
| 			stav = uold.stav,
 | |
| 			zamereni = uold.zamereni,
 | |
| 			poznamka = uold.poznamka,
 | |
| 			autor = uold.autor,
 | |
| 			kod = uold.kod,
 | |
| 			cislo_zadani = uold.cislo_zadani_old,
 | |
| 			cislo_reseni = uold.cislo_reseni_old,
 | |
| 			max_body = uold.body,
 | |
| 			vytvoreno = uold.vytvoreno,
 | |
| 			)
 | |
| 		uold.save() # DULEZITE!!! Jinak Uloha.objects.create() přepíše všechny atributy Problému
 | |
| 		unew.opravovatele.add(*uold.opravovatele.all())
 | |
| 		
 | |
| 		# Nody:
 | |
| 		zadani_node = UlohaZadaniNode.objects.create(uloha = unew)
 | |
| 		poskladej_strom(apps, zadani_node, uold.text_zadani)
 | |
| 		zadani_node.save()
 | |
| 		vzorak_node = UlohaVzorakNode.objects.create(uloha = unew)
 | |
| 		poskladej_strom(apps, vzorak_node, uold.text_reseni)
 | |
| 		vzorak_node.save()
 | |
| 
 | |
| def konfery_rucne(apps, schema_editor):
 | |
| 	# Tohle dělat nebudu, máme aktuálně celou jednu. Ale "Errors should never pass silently"
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	pocet_konfer = Problem.objects.filter(typ = 'konfera').count()
 | |
| 	if pocet_konfer > 0:
 | |
| 		raise NotImplementedError("Zkonvertuj {} konfer na objekt Konfera ručně, prosím".format(pocet_konfer))
 | |
| 
 | |
| def clanek_to_Clanek(apps,schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Clanek = apps.get_model('seminar', 'Clanek')
 | |
| 	ReseniNode = apps.get_model('seminar', 'ReseniNode')
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 
 | |
| 	# XXX: Org-clanky neexistuji, tak je migrace ani nepodporuje.
 | |
| 	clanky = Problem.objects.filter(typ='res-clanek')
 | |
| 	for cl in clanky:
 | |
| 		# Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení:
 | |
| 		if cl.cislo_zadani_old is None:
 | |
| 			cislo = cl.cislo_reseni_old
 | |
| 		elif cl.cislo_reseni_old is None:
 | |
| 			cislo = cl.cislo_zadani_old
 | |
| 		elif cl.cislo_reseni_old == cl.cislo_zadani_old:
 | |
| 			cislo = cl.cislo_zadani_old
 | |
| 		else:
 | |
| 			raise ValueError("Různá čísla zadání a řešení u článku! (Článek: {})".format(cl.nazev))
 | |
| 
 | |
| 		clnew = Clanek.objects.create(
 | |
| 			problem_ptr = cl,
 | |
| 			# Problém by nemělo být potřeba upravovat
 | |
| 			cislo = cislo,
 | |
| 			# Body ignorujeme, protože už jsou v hodnocení
 | |
| 			)
 | |
| 		cl.save() # DULEZITE!!! Jinak Clanek.objects.create() přepíše všechny atributy Problému
 | |
| 
 | |
| 
 | |
| def Clanek_Treenody(apps, schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Clanek = apps.get_model('seminar', 'Clanek')
 | |
| 	ReseniNode = apps.get_model('seminar', 'ReseniNode')
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 	for cl in Clanek.objects.all():
 | |
| 		# Vyrobíme nody:
 | |
| 		# Clanek nema vlastni node, ma (prave jedno) Reseni a to ma text_cely -- ReseniNode
 | |
| 		reseni = cl.reseni_set.all()
 | |
| 		if len(reseni) != 1:
 | |
| 			raise ValueError(f'Clanek {cl.id} ma vic reseni {len(reseni)} ({reseni})')
 | |
| 		reseni = reseni[0]
 | |
| 		resnode = ReseniNode(reseni=reseni)
 | |
| 		poskladej_strom(apps, resnode, cl.text_zadani, cl.text_reseni)
 | |
| 		resnode.save()
 | |
| 		reseni.text_cely = resnode
 | |
| 		reseni.save()
 | |
| 
 | |
| def fix_Clanek_Reseni(apps, schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Clanek = apps.get_model('seminar', 'Clanek')
 | |
| 	Reseni = apps.get_model('seminar', 'Reseni')
 | |
| 	Hodnoceni = apps.get_model('seminar', 'Hodnoceni')
 | |
| 	Resitel = apps.get_model('seminar', 'Resitel')
 | |
| 
 | |
| 	# Je potreba zajistit, ze clanky budou mit jen jedno reseni -- z pohledu
 | |
| 	# modelu nic jineho nedava smysl.  Ve stavajicim modelu ale naopak nelze
 | |
| 	# reprezentovat vice resitelu jednoho clanku (coz je ale bezne -- clanky z
 | |
| 	# konfer) Musime tedy opravit, aby misto nekolika reseni kazdeho resitele
 | |
| 	# samostatne zustalo jen jedno reseni, spravne obodovane a s vice resiteli
 | |
| 	# jako autory
 | |
| 
 | |
| 	for cl in Clanek.objects.all():
 | |
| 		rr = cl.reseni_set.all()
 | |
| 		if len(rr) == 1: continue
 | |
| 		# Vice nez jedno reseni, jdeme je sjednotit.
 | |
| 		resitele = []
 | |
| 		vzor_hodnoceni = rr[0].hodnoceni_set.first()
 | |
| 		ostatni_hodnoceni = []
 | |
| 		for r in rr:
 | |
| 			# Overime, ze nemame kolizi v datech:
 | |
| 			h = r.hodnoceni_set.first()
 | |
| 			if h.cislo_body != vzor_hodnoceni.cislo_body or h.body != vzor_hodnoceni.body:
 | |
| 				raise ValueError(f'Clanek {cl.id} ma vice nekonzistentnich reseni')
 | |
| 			if h.id != vzor_hodnoceni.id:
 | |
| 					ostatni_hodnoceni.append(h)
 | |
| 			resitele.extend(r.resitele.all())
 | |
| 		rr[0].resitele.set(resitele)
 | |
| 		rr[0].save()
 | |
| 		vzor_hodnoceni.save()
 | |
| 		# Ted mame spravne databazi, jeste potrebujeme z databaze smazat po novu nepouzita hodnoceni
 | |
| 		for h in ostatni_hodnoceni:
 | |
| 			h.reseni.delete()
 | |
| 			h.delete()
 | |
| 
 | |
| def tema_to_Tema(apps, schema_editor):
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Tema = apps.get_model('seminar', 'Tema')
 | |
| 	TemaVCisleNode = apps.get_model('seminar', 'TemaVCisleNode')
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 	
 | |
| 	temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial'))
 | |
| 	for t in temata:
 | |
| 		# Vymyslíme správně ročník:
 | |
| 		if t.cislo_zadani_old is None and t.cislo_reseni_old is None:
 | |
| 			rocnik = None
 | |
| 		elif t.cislo_zadani_old is None:
 | |
| 			rocnik = t.cislo_reseni_old.rocnik
 | |
| 		elif t.cislo_reseni_old is None:
 | |
| 			rocnik = t.cislo_zadani_old.rocnik
 | |
| 		elif t.cislo_reseni_old.rocnik == t.cislo_zadani_old.rocnik:
 | |
| 			rocnik = t.cislo_zadani_old.rocnik
 | |
| 		else:
 | |
| 			raise ValueError("Nelze mít téma přes více ročníků! (Téma: {}".format(t.nazev))
 | |
| 
 | |
| 		tnew = Tema.objects.create(
 | |
| 			problem_ptr = t,
 | |
| 			tema_typ = t.typ,
 | |
| 			rocnik = rocnik,
 | |
| 			)
 | |
| 		t.save() # DULEZITE!!! Jinak Tema.objects.create() přepíše všechny atributy Problému
 | |
| 
 | |
| 		# Nody:
 | |
| 		tnode = TemaVCisleNode(tema = tnew)
 | |
| 		poskladej_strom(apps, tnode, t.text_zadani, t.text_reseni)
 | |
| 		tnode.save()
 | |
| 
 | |
| # seminar.migrations.0059_vytvorit_pohadkanode
 | |
| def vytvor_pohadkanode(apps, schema_editor):
 | |
| 	Pohadka = apps.get_model('seminar', 'Pohadka')
 | |
| 	PohadkaNode = apps.get_model('seminar', 'PohadkaNode')
 | |
| 	Text = apps.get_model('seminar', 'Text')
 | |
| 	TextNode = apps.get_model('seminar', 'TextNode')
 | |
| 
 | |
| 	for p in Pohadka.objects.all():
 | |
| 		t = Text.objects.create(na_web = p.text)
 | |
| 		t.save()
 | |
| 		tn = TextNode.objects.create(text = t)
 | |
| 		tn.save()
 | |
| 		pn = PohadkaNode.objects.create(pohadka = p, first_child = tn)
 | |
| 		pn.save()
 | |
| 
 | |
| # seminar.migrations.0060_spoj_stromy
 | |
| def nastav_koren(koren, node):
 | |
| 	node.root = koren
 | |
| 	node.save()
 | |
| 	
 | |
| 	if node.succ:
 | |
| 		nastav_koren(koren, node.succ)
 | |
| 	if node.first_child:
 | |
| 		nastav_koren(koren, node.first_child)
 | |
| 
 | |
| def pridej_potomka(rodic, potomek):
 | |
| 	# Daný vrchol bude posledním potomkem rodiče
 | |
| 	uz_ma_deti = False
 | |
| 	posledni = None
 | |
| 
 | |
| 	# Přidávaný potomek by neměl mít následovníka -- přidáváme potomka, ne podles.
 | |
| 	if potomek.succ:
 | |
| 		raise ValueError("Potomek má následovníka, to je velmi podezřelé!")
 | |
| 
 | |
| 	# Najdeme aktuálně posledního potomka:
 | |
| 	if rodic.first_child:
 | |
| 		uz_ma_deti = True
 | |
| 		posledni = rodic.first_child
 | |
| 		while posledni.succ:
 | |
| 			posledni = posledni.succ
 | |
| 
 | |
| 	# Nastavíme kořen:
 | |
| 	nastav_koren(rodic.root, potomek)
 | |
| 
 | |
| 	# Připojíme vrchol:
 | |
| 	if uz_ma_deti:
 | |
| 		posledni.succ = potomek
 | |
| 		posledni.save()
 | |
| 	else:
 | |
| 		rodic.first_child = potomek
 | |
| 		rodic.save()
 | |
| 
 | |
| def pokacej_les(apps, schema_editor):
 | |
| 	# Teď je potřeba všechny TreeNody příslušející k zadaným problémům připojit
 | |
| 	# do hlavního stromu
 | |
| 	# Tohle je jednoduchá verze: nejdřív témátka a seriály, pak úložky a pohádky,
 | |
| 	# pak články a konfery, pak vzoráky, všechno setříděné podle kódu (FIXME?)
 | |
| 
 | |
| 	# Kopírování je častým zdrojem chyb!
 | |
| 	Cislo = apps.get_model('seminar', 'Cislo')
 | |
| 	Tema = apps.get_model('seminar', 'Tema')
 | |
| 	Konfera = apps.get_model('seminar', 'Konfera')
 | |
| 	Clanek = apps.get_model('seminar', 'Clanek')
 | |
| 	Uloha = apps.get_model('seminar', 'Uloha')
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	Pohadka = apps.get_model('seminar', 'Pohadka')
 | |
| 
 | |
| 	for c in Cislo.objects.all().reverse():
 | |
| 		cnode = c.cislonode
 | |
| 
 | |
| 		# Témata a seriály:
 | |
| 		relevantni_temata = Tema.objects.filter(Q(cislo_zadani_old = c) | Q(cislo_reseni_old = c)).order_by('kod')
 | |
| 		# Téma dáme do prvního čísla, kde se vyskytne
 | |
| 		for t in relevantni_temata:
 | |
| 			tnodes = t.temavcislenode_set.all()
 | |
| 			# Migrujeme, TvCN je jen jedno dohromady
 | |
| 			assert(len(tnodes) == 1)
 | |
| 			tnode = tnodes[0]
 | |
| 			# Zkontrolujeme a preskocime cislo_reseni
 | |
| 			if t.cislo_zadani_old and t.cislo_reseni_old:
 | |
| 				assert(t.cislo_zadani_old.rocnik == t.cislo_reseni_old.rocnik
 | |
| 					and t.cislo_zadani_old.cislo <= t.cislo_reseni_old.cislo)
 | |
| 				if t.cislo_reseni_old == c:
 | |
| 					# Už by mělo být přidané do čísla zadání
 | |
| 					continue
 | |
| 			# Patří sem (buď je to jediné číslo, nebo je to číslo zadání)
 | |
| 			pridej_potomka(cnode, tnode)
 | |
| 
 | |
| 		# Úložky (zadání) a pohádky
 | |
| 		for u in Uloha.objects.filter(cislo_zadani = c).order_by('kod'):
 | |
| 			unode = u.ulohazadaninode
 | |
| 			pohadky_pred = Pohadka.objects.filter(uloha_old = u.problem_ptr, pred = True)
 | |
| 			pohadky_po = Pohadka.objects.filter(uloha_old = u.problem_ptr, pred = False)
 | |
| 			for p in pohadky_pred:
 | |
| 				pnode = p.pohadkanode
 | |
| 				pridej_potomka(cnode, pnode)
 | |
| 			pridej_potomka(cnode, unode)
 | |
| 			for p in pohadky_po:
 | |
| 				pnode = p.pohadkanode
 | |
| 				pridej_potomka(cnode, pnode)
 | |
| 
 | |
| 		# Pohádky, které nejsou u úlohy jsou špatně:
 | |
| 		if Pohadka.objects.exclude(uloha_old__typ='uloha').count():
 | |
| 			raise ValueError("Existuje pohádka, která není u úlohy")
 | |
| 
 | |
| 		# Články
 | |
| 		for cl in Clanek.objects.filter(cislo = c).order_by('kod'):
 | |
| 			# Zmena: Clanky nemaji vlastni Node, ale pouziva se ReseniNode v text_cely
 | |
| 			reseni = cl.reseni_set.all()
 | |
| 			if len(reseni) != 1:
 | |
| 				raise ValueError('Clanek ma vic reseni')
 | |
| 			resnode = reseni[0].text_cely
 | |
| 			pridej_potomka(cnode, resnode)
 | |
| 
 | |
| 		# Konfery
 | |
| 		for k in Konfera.objects.all():
 | |
| 			knode = k.konferanode
 | |
| 			if k.reseni and knode.root is None:
 | |
| 				# Takováhle konfera nejspíš neexistuje
 | |
| 				raise NotImplementedError("Konfery neumím zapojit do stromu")
 | |
| 
 | |
| 		# Vzoráky
 | |
| 		for u in Uloha.objects.filter(cislo_reseni = c).order_by('kod'):
 | |
| 			unode = u.ulohavzoraknode
 | |
| 			pridej_potomka(cnode, unode)
 | |
| 
 | |
| # seminar.migrations.0068_treenode_nazev
 | |
| def fix_RocnikNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'RocnikNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.rocnik)+" (RocnikNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_CisloNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'CisloNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.cislo)+" (CisloNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_MezicisloNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'MezicisloNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		if obj.prev:
 | |
| 			if (obj.prev.get_real_instance_class() != CisloNode and
 | |
| 				obj.prev.get_real_instance_class() != MezicisloNode):
 | |
| 					raise ValueError("Předchůdce není číslo!")
 | |
| 			posledni = obj.prev.cislo
 | |
| 			obj.nazev = "Mezičíslo po čísle"+str(posledni)+" (MezicisloNode)"
 | |
| 		elif obj.root:
 | |
| 			if obj.root.get_real_instance_class() != RocnikNode:
 | |
| 				raise ValueError("Kořen stromu není ročník!")
 | |
| 			rocnik = obj.root.rocnik
 | |
| 			obj.nazev = "První mezičíslo ročníku "+" (MezicisloNode)"
 | |
| 		else:
 | |
| 			print("!!!!! Nějaké neidentifikované mezičíslo !!!!!")
 | |
| 			obj.nazev = "Neidentifikovatelné mezičíslo! (MezicisloNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_TemaVCisleNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'TemaVCisleNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.tema)+" (TemaVCisleNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_KonferaNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'KonferaNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.konfera)+" (KonferaNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_ClanekNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'ClanekNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.clanek)+" (ClanekNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_UlohaZadaniNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'UlohaZadaniNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.uloha)+" (UlohaZadaniNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_PohadkaNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'PohadkaNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.pohadka)+" (PohadkaNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_UlohaVzorakNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'UlohaVzorakNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.uloha)+" (UlohaVzorakNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_TextNode_names(apps,schema_editor):
 | |
| 	Objects = apps.get_model('seminar', 'TextNode')
 | |
| 	for obj in Objects.objects.all():
 | |
| 		obj.nazev = str(obj.text)+" (TextNode)"
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_all_names(apps,schema_editor):
 | |
| 	fix_RocnikNode_names(apps,schema_editor)
 | |
| 	fix_CisloNode_names(apps,schema_editor)
 | |
| 	fix_MezicisloNode_names(apps,schema_editor)
 | |
| 	fix_TemaVCisleNode_names(apps,schema_editor)
 | |
| 	fix_KonferaNode_names(apps,schema_editor)
 | |
| 	fix_ClanekNode_names(apps,schema_editor)
 | |
| 	fix_UlohaZadaniNode_names(apps,schema_editor)
 | |
| 	fix_PohadkaNode_names(apps,schema_editor)
 | |
| 	fix_UlohaVzorakNode_names(apps,schema_editor)
 | |
| 	fix_TextNode_names(apps,schema_editor)
 | |
| 
 | |
| # seminar.migrations.0073_copy_osoba_email_to_user_email
 | |
| def copy_mails(apps, schema_editor):
 | |
| 	Osoba = apps.get_model('seminar', 'Osoba')
 | |
| 
 | |
| 	for o in Osoba.objects.all():
 | |
| 		if o.user is not None:
 | |
| 			u = o.user
 | |
| 			u.email = o.email
 | |
| 			u.save()
 | |
| 
 | |
| # seminar.migrations.0084_clanek_cislo
 | |
| def najdi_cislo(apps, schema_editor):
 | |
| 	Clanek = apps.get_model('seminar', 'Clanek')
 | |
| 	Hodnoceni = apps.get_model('seminar', 'Hodnoceni')
 | |
| 	Reseni = apps.get_model('seminar', 'Reseni')
 | |
| 	ReseniNode = apps.get_model('seminar', 'ReseniNode')
 | |
| 	CisloNode = apps.get_model('seminar', 'CisloNode')
 | |
| 	ContentType = apps.get_model('contenttypes', 'ContentType')
 | |
| 	
 | |
| 	for c in Clanek.objects.all():
 | |
| 		reseni = c.reseni_set
 | |
| 		if (reseni.count() != 1):	# Pozor, reseni_set je Manager, takže se na něj musí trošku jinak
 | |
| 			logger.warn(f"Více než jedno řešení pro článek {c}")
 | |
| 			c.cislo = None
 | |
| 			c.save()
 | |
| 			continue
 | |
| 		r = reseni.first()
 | |
| 		aktualniNode = r.text_cely # Hlavní ReseniNode pro řešení
 | |
| 		while aktualniNode is not None:
 | |
| 			#if isinstance(aktualniNode, CisloNode): # Nejde, protože aktualniNode se tváří jako obecný TreeNode...
 | |
| 			# Ale v dokumentaci k django-polymorphic se píše, že tam jsou nastavené nějaké fieldy na známé hodnoty :-)
 | |
| 			# https://django-polymorphic.readthedocs.io/en/stable/migrating.html
 | |
| 			cislonode_ct = ContentType.objects.get_for_model(CisloNode)
 | |
| 			akt_ct = aktualniNode.polymorphic_ctype
 | |
| 			if akt_ct == cislonode_ct:
 | |
| 				# Zneužíváme tu opačnou vazbu k treenode_ptr, protože
 | |
| 				# aktualniNode je "jen" TreeNode a ne CisloNode
 | |
| 				c.cislo = aktualniNode.cislonode.cislo
 | |
| 				c.save()
 | |
| 				break
 | |
| 			aktualniNode = get_parent(aktualniNode)
 | |
| 
 | |
| # seminar.migrations.0087_fix_polymorphism
 | |
| # Pomocná funkce -- děláme to samé pro obě polymorfní hierarchie
 | |
| def fix_ctypes(parent: str, children, apps, schema_editor):
 | |
| 	Parent = apps.get_model('seminar', parent)
 | |
| 	ContentType = apps.get_model('contenttypes', 'ContentType')
 | |
| 
 | |
| 	# Nejdřív všechno smažeme:
 | |
| 	Parent.objects.update(polymorphic_ctype=None)
 | |
| 
 | |
| 	# Opravíme děti
 | |
| 	for clsname in children:
 | |
| 		Model = apps.get_model('seminar', clsname)
 | |
| 		ct = ContentType.objects.get_for_model(Model)
 | |
| 		Model.objects.update(polymorphic_ctype=ct)
 | |
| 	
 | |
| 
 | |
| 	# Ostatní instance mají mít explicitně content type pro rodiče
 | |
| 	new_ct = ContentType.objects.get_for_model(Parent)
 | |
| 	for obj in Parent.objects.filter(polymorphic_ctype__isnull=True):
 | |
| 		# Po úpravě pořadí migrací se tohle stane pro každý problém. Není to správně, ale warning moc otravuje…
 | |
| 		logger.info(f"{parent} \"{obj}\" neměl content type -- nejspíš to je instance přímo {parent}!")
 | |
| 		obj.polymorphic_ctype=new_ct
 | |
| 		obj.save()
 | |
| 
 | |
| def fix_treenode(apps, schema_editor):
 | |
| 	children = ['RocnikNode', 'CisloNode', 'MezicisloNode', 'TemaVCisleNode',
 | |
| 			'OrgTextNode', 'UlohaZadaniNode', 'UlohaVzorakNode', 'PohadkaNode',
 | |
| 			'TextNode', 'CastNode', 'ReseniNode']
 | |
| 	fix_ctypes("TreeNode", children, apps, schema_editor)
 | |
| 
 | |
| def fix_problem_0087(apps, schema_editor):
 | |
| 	children = ['Tema', 'Clanek', 'Uloha'] # FIXME: Konfera z nějakého důvodu tenhle field vůbec nemá, asi je to špatně.
 | |
| 	fix_ctypes("Problem", children, apps, schema_editor)
 | |
| 
 | |
| # seminar.migrations.0088_perm_org_a_ucastnik
 | |
| def add_perms(apps, schema_editor):
 | |
|     ContentType = apps.get_model('contenttypes', 'ContentType')
 | |
|     User = apps.get_model('auth', 'User')
 | |
|     Permission = apps.get_model('auth', 'Permission')
 | |
|     Resitel = apps.get_model('seminar', 'Resitel')
 | |
| 
 | |
|     c = ContentType.objects.get_for_model(User)
 | |
|     org_perm = Permission.objects.filter(codename__exact='org').first()
 | |
|     if not org_perm:
 | |
|         org_perm = Permission.objects.create(codename='org', name='org', content_type=c)
 | |
|     resitel_perm = Permission.objects.filter(codename__exact='resitel').first()
 | |
|     if not resitel_perm:
 | |
|         resitel_perm = Permission.objects.create(codename='resitel', name='resitel', content_type=c)
 | |
|     for r in Resitel.objects.all():
 | |
|         u = r.osoba.user
 | |
|         if u:
 | |
|             u.user_permissions.add(resitel_perm)
 | |
|     for org in User.objects.all():
 | |
|         if org and org.is_staff:
 | |
|             org.user_permissions.add(org_perm)
 | |
|             org.user_permissions.remove(resitel_perm)
 | |
| 
 | |
| # seminar.migrations.0095_fix_polymorphism
 | |
| def fix_all(apps, schema_editor):
 | |
| 	ContentType = apps.get_model('contenttypes', 'ContentType')
 | |
| 	for modelname in [
 | |
| 			# Problémy:
 | |
| 			'Tema', 'Uloha', 'Clanek',
 | |
| 			# Konfery neexistuji, takze ani neni co nastavovat...
 | |
| 			# TreeNody:
 | |
| 			'RocnikNode', 'CisloNode', 'MezicisloNode', 'TemaVCisleNode', 'OrgTextNode', 'UlohaZadaniNode', 'PohadkaNode', 'UlohaVzorakNode', 'TextNode', 'CastNode', 'ReseniNode',
 | |
| 			]:
 | |
| 		Model = apps.get_model('seminar', modelname)
 | |
| 		ct = ContentType.objects.get_for_model(Model)
 | |
| 		Model.objects.update(polymorphic_ctype=ct)
 | |
| 
 | |
| # seminar.migrations.0096_fix_zamereni
 | |
| def fix_zamereni(apps, schema_editor):
 | |
| 	ContentType = apps.get_model('contenttypes', 'ContentType')
 | |
| 	Problem = apps.get_model('seminar', 'Problem')
 | |
| 	ProblemCT = ContentType.objects.get_for_model(Problem)
 | |
| 	TaggedItem = apps.get_model('taggit', 'TaggedItem')
 | |
| 
 | |
| 	typy_problemu = [
 | |
| 		'Clanek',
 | |
| 		'Tema',
 | |
| 		'Uloha',
 | |
| 		'Konfera',
 | |
| 		]
 | |
| 	for typ in typy_problemu:
 | |
| 		Model = apps.get_model('seminar', typ)
 | |
| 		ModelCT = ContentType.objects.get_for_model(Model)
 | |
| 		# Neumím jednoduše zjistit, které objekty jsou které, tak je prostě procyklím
 | |
| 		for obj in Model.objects.all():
 | |
| 			TaggedItem.objects.filter(object_id=obj.problem_ptr.id, content_type=ProblemCT).update(content_type=ModelCT)
 | |
| 
 | |
| 
 | |
| 
 | |
| class Migration(migrations.Migration):
 | |
| 
 | |
|     replaces = [('seminar', '0001_initial'), ('seminar', '0002_add_body_views'), ('seminar', '0003_add_skola_zs_ss'), ('seminar', '0004_add_old_dakos_id'), ('seminar', '0005_alter_problem_autor'), ('seminar', '0006_problem_add_timestamp'), ('seminar', '0007_problem_zamereni'), ('seminar', '0008_reseni_forma'), ('seminar', '0009_rename_imported_IDs'), ('seminar', '0010_alter_rok_maturity'), ('seminar', '0011_alter_timestamp_def'), ('seminar', '0012_remove_soustredeni_ucastnici'), ('seminar', '0013_soustredeni_ucastnici_through_model'), ('seminar', '0014_uprava_poznamek'), ('seminar', '0015_soustredeni_text'), ('seminar', '0016_texty_problemu'), ('seminar', '0017_texty_problemu_minor'), ('seminar', '0018_problemnavrh_problemzadany'), ('seminar', '0019_rocnik_ciselne'), ('seminar', '0020_indexy_a_razeni'), ('seminar', '0021_cislo_verejna_vysledkovka'), ('seminar', '0022_decimal_body'), ('seminar', '0023_add_novinky'), ('seminar', '0024_add_organizator'), ('seminar', '0025_zmena_cesty_nahravani_obrazku'), ('seminar', '0026_soustredeni_typ'), ('seminar', '0027_export_flag_a_typ_akce'), ('seminar', '0028_add_body_celkem_views'), ('seminar', '0029_fix_body_celkem_views'), ('seminar', '0030_add_vysledky'), ('seminar', '0031_cislo_pdf'), ('seminar', '0032_cislo_pdf_blank_typos'), ('seminar', '0033_organizator_studuje_popisek'), ('seminar', '0034_reseni_forma_default_email'), ('seminar', '0035_django_imagekit'), ('seminar', '0036_add_org_to_soustredeni'), ('seminar', '0037_prispevek'), ('seminar', '0038_change_meta_prispevek'), ('seminar', '0039_pohadka'), ('seminar', '0040_pohadka_nepovinny_autor'), ('seminar', '0041_konfery'), ('seminar', '0042_cislo_faze'), ('seminar', '0043_uprava_faze'), ('seminar', '0044_uprava_faze'), ('seminar', '0045_cislo_pridani_faze_nahrano'), ('seminar', '0042_auto_20161005_0847'), ('seminar', '0046_merge'), ('seminar', '0047_auto_20170120_2118'), ('seminar', '0048_add_cislo_datum_deadline_soustredeni'), ('seminar', '0049_auto_20190430_2354'), ('seminar', '0050_auto_20190510_2228'), ('seminar', '0066c_reseninode'), ('seminar', '0051_resitel_to_osoba'), ('seminar', '0052_user_to_organizator'), ('seminar', '0053_organizator_organizuje_od_do'), ('seminar', '0055_smazat_nemigrovane_zastarale_veci'), ('seminar', '0056_vrcholy_pro_rocniky_a_cisla'), ('seminar', '0057_reseni_to_reseni_hodnoceni'), ('seminar', '0065_treenode_polymorphic_ctype'), ('seminar', '0066_problem_polymorphic_ctype'), ('seminar', '0066b_orgtextnode'), ('seminar', '0077_auto_20200318_2146'), ('seminar', '0087_fix_polymorphism'), ('seminar', '0058_problem_to_uloha_tema_clanek'), ('seminar', 'fix_0058'), ('seminar', '0059_vytvorit_pohadkanode'), ('seminar', '0060_spoj_stromy'), ('seminar', '0061_kill_frankenstein'), ('seminar', '0062_redukce_modelu_pohadky'), ('seminar', '0063_procisteni_migraci'), ('seminar', '0064_auto_20190610_2358'), ('seminar', '0067_auto_20190814_0805'), ('seminar', '0068_treenode_nazev'), ('seminar', '0069_auto_20191120_2115'), ('seminar', '0070_auto_20191120_2357'), ('seminar', '0071_remove_nastaveni_aktualni_rocnik'), ('seminar', '0072_auto_20191204_2257'), ('seminar', '0073_copy_osoba_email_to_user_email'), ('seminar', '0074_auto_20200228_1401'), ('seminar', '0075_auto_20200228_2010'), ('seminar', '0076_auto_20200228_2013'), ('seminar', '0079_clanek_resitelsky'), ('seminar', '0080_zruseni_claneknode_a_konferanode'), ('seminar', '0081_auto_20200408_2221'), ('seminar', '0082_auto_20200506_1951'), ('seminar', '0083_auto_20200506_1952'), ('seminar', '0084_clanek_cislo'), ('seminar', '0086_auto_20200819_0959'), ('seminar', '0088_perm_org_a_ucastnik'), ('seminar', '0089_cislo_datum_preddeadline'), ('seminar', '0090_auto_20201110_1958'), ('seminar', '0091_resitel_zasilat_cislo_emailem'), ('seminar', '0092_auto_20210309_2049'), ('seminar', '0093_auto_20210330_2105'), ('seminar', '0094_auto_20210701_0149'), ('seminar', '0095_fix_polymorphism'), ('seminar', '0096_fix_zamereni'), ('seminar', '0097_auto_20210903_0112'), ('seminar', '0098_auto_20210906_0305')]
 | |
| 
 | |
|     initial = True
 | |
| 
 | |
|     dependencies = [
 | |
|         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
 | |
|         ('contenttypes', '0002_remove_content_type_name'),
 | |
|         ('taggit', '0001_initial'),
 | |
|         ('taggit', '0003_taggeditem_add_unique_index'),
 | |
|     ]
 | |
| 
 | |
|     operations = [
 | |
|         migrations.CreateModel(
 | |
|             name='Cislo',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('cislo', models.CharField(help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určije pořadí v ročníku!', max_length=32, verbose_name='název čísla')),
 | |
|                 ('datum_vydani', models.DateField(blank=True, help_text='Datum vydání finální verze', null=True, verbose_name='datum vydání')),
 | |
|                 ('datum_deadline', models.DateField(blank=True, help_text='Datum pro příjem řešení úloh zadaných v tomto čísle', null=True, verbose_name='datum deadline')),
 | |
|                 ('verejne_db', models.BooleanField(db_column='verejne', default=False, verbose_name='číslo zveřejněno')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['rocnik__rocnik', 'cislo'],
 | |
|                 'db_table': 'seminar_cisla',
 | |
|                 'verbose_name': 'Číslo',
 | |
|                 'verbose_name_plural': 'Čísla',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Problem',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('nazev', models.CharField(max_length=256, verbose_name='název')),
 | |
|                 ('typ', models.CharField(choices=[(b'uloha', 'Úloha'), (b'tema', 'Téma'), (b'serial', 'Seriál'), (b'org-clanek', 'Organizátorský článek'), (b'res-clanek', 'Řesitelský článek')], default=b'uloha', max_length=32, verbose_name='typ problému')),
 | |
|                 ('stav', models.CharField(choices=[(b'navrh', 'Návrh'), (b'zadany', 'Zadaný'), (b'smazany', 'Smazaný')], default=b'navrh', max_length=32, verbose_name='stav problému')),
 | |
|                 ('text_problemu_org', models.TextField(blank=True, verbose_name='organizátorský (neveřejný) text')),
 | |
|                 ('text_problemu', models.TextField(blank=True, verbose_name='veřejný text zadání a řešení')),
 | |
|                 ('kod', models.CharField(blank=True, default=b'', help_text='Číslo/kód úlohy v čísle nebo kód tématu/článku/seriálu v ročníku', max_length=32, verbose_name='lokální kód')),
 | |
|                 ('body', models.IntegerField(blank=True, null=True, verbose_name='maximum bodů')),
 | |
|                 ('autor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='autor_uloh', to=settings.AUTH_USER_MODEL, verbose_name='autor problému')),
 | |
|                 ('cislo_reseni', models.ForeignKey(blank=True, help_text='Číslo s řešením úlohy, jen pro úlohy', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='resene_problemy', to='seminar.Cislo', verbose_name='číslo řešení')),
 | |
|                 ('cislo_zadani', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='zadane_problemy', to='seminar.Cislo', verbose_name='číslo zadání')),
 | |
|                 ('opravovatel', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opravovatel_uloh', to=settings.AUTH_USER_MODEL, verbose_name='opravovatel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'db_table': 'seminar_problemy',
 | |
|                 'verbose_name': 'Problém',
 | |
|                 'verbose_name_plural': 'Problémy',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Resitel',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('jmeno', models.CharField(max_length=256, verbose_name='jméno')),
 | |
|                 ('prijmeni', models.CharField(max_length=256, verbose_name='příjmení')),
 | |
|                 ('pohlavi_muz', models.BooleanField(default=False, verbose_name='pohlaví (muž)')),
 | |
|                 ('rok_maturity', models.IntegerField(verbose_name='rok maturity')),
 | |
|                 ('email', models.EmailField(blank=True, default=b'', max_length=256, verbose_name='e-mail')),
 | |
|                 ('telefon', models.CharField(blank=True, default=b'', max_length=256, verbose_name='telefon')),
 | |
|                 ('datum_narozeni', models.DateField(blank=True, null=True, verbose_name='datum narození')),
 | |
|                 ('datum_souhlasu_udaje', models.DateField(blank=True, help_text='Datum souhlasu se zpracováním osobních údajů', null=True, verbose_name='datum souhlasu (údaje)')),
 | |
|                 ('datum_souhlasu_zasilani', models.DateField(blank=True, help_text='Datum souhlasu se zasíláním MFF materiálů', null=True, verbose_name='datum souhlasu (spam)')),
 | |
|                 ('datum_prihlaseni', models.DateField(default=django.utils.timezone.now, verbose_name='datum přihlášení')),
 | |
|                 ('zasilat', models.CharField(choices=[(b'domu', 'Domů'), (b'do_skoly', 'Do školy'), (b'nikam', 'Nikam')], default=b'domu', max_length=32, verbose_name='kam zasílat')),
 | |
|                 ('ulice', models.CharField(blank=True, default=b'', max_length=256, verbose_name='ulice')),
 | |
|                 ('mesto', models.CharField(blank=True, default=b'', max_length=256, verbose_name='město')),
 | |
|                 ('psc', models.CharField(blank=True, default=b'', max_length=32, verbose_name='PSČ')),
 | |
|                 ('stat', django_countries.fields.CountryField(default=b'CZ', help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)', max_length=2, verbose_name='stát')),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k řešiteli (plain text)', verbose_name='neveřejná poznámka')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['prijmeni', 'jmeno'],
 | |
|                 'db_table': 'seminar_resitele',
 | |
|                 'verbose_name': 'Řešitel',
 | |
|                 'verbose_name_plural': 'Řešitelé',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Rocnik',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('prvni_rok', models.IntegerField(verbose_name='první rok')),
 | |
|                 ('rocnik', models.CharField(max_length=16, verbose_name='číslo ročníku')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['rocnik'],
 | |
|                 'db_table': 'seminar_rocniky',
 | |
|                 'verbose_name': 'Ročník',
 | |
|                 'verbose_name_plural': 'Ročníky',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Skola',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('aesop_id', models.CharField(blank=True, default=b'', help_text='Aesopi ID typu "izo:..." nebo "aesop:..."', max_length=32, verbose_name='Aesop ID')),
 | |
|                 ('izo', models.CharField(blank=True, help_text='IZO školy (jen české školy)', max_length=32, verbose_name='IZO')),
 | |
|                 ('nazev', models.CharField(help_text='Celý název školy', max_length=256, verbose_name='název')),
 | |
|                 ('kratky_nazev', models.CharField(blank=True, help_text=b'Zkr\xc3\xa1cen\xc3\xbd n\xc3\xa1zev pro zobrazen\xc3\xad ve v\xc3\xbdsledkovce', max_length=256, verbose_name='zkrácený název')),
 | |
|                 ('ulice', models.CharField(max_length=256, verbose_name='ulice')),
 | |
|                 ('mesto', models.CharField(max_length=256, verbose_name='město')),
 | |
|                 ('psc', models.CharField(max_length=32, verbose_name='PSČ')),
 | |
|                 ('stat', django_countries.fields.CountryField(default=b'CZ', help_text='ISO 3166-1 kód zeme velkými písmeny (CZ, SK, ...)', max_length=2, verbose_name='stát')),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka ke škole (plain text)', verbose_name='neveřejná poznámka')),
 | |
|             ],
 | |
|             options={
 | |
|                 'db_table': 'seminar_skoly',
 | |
|                 'verbose_name': 'Škola',
 | |
|                 'verbose_name_plural': 'Školy',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Soustredeni',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('datum_zacatku', models.DateField(blank=True, help_text='První den soustředění', null=True, verbose_name='datum začátku')),
 | |
|                 ('datum_konce', models.DateField(blank=True, help_text='Poslední den soustředění', null=True, verbose_name='datum konce')),
 | |
|                 ('verejne_db', models.BooleanField(db_column='verejne', default=False, verbose_name='soustředění zveřejněno')),
 | |
|                 ('misto', models.CharField(blank=True, default=b'', help_text='Místo (název obce, volitelně též objektu', max_length=256, verbose_name='místo soustředění')),
 | |
|                 ('rocnik', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='soustredeni', to='seminar.Rocnik', verbose_name='ročník')),
 | |
|                 ('ucastnici', models.ManyToManyField(db_table='seminar_soustredeni_ucastnici', help_text='Seznam účastníků soustředění', to='seminar.Resitel', verbose_name='účastníci soustředění')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['rocnik__rocnik', 'datum_zacatku'],
 | |
|                 'db_table': 'seminar_soustredeni',
 | |
|                 'verbose_name': 'Soustředění',
 | |
|                 'verbose_name_plural': 'Soustředění',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='resitel',
 | |
|             name='skola',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Skola', verbose_name='škola'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='resitel',
 | |
|             name='user',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='uživatel'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Reseni',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('body', models.IntegerField(blank=True, null=True, verbose_name='body')),
 | |
|                 ('timestamp', models.DateTimeField(auto_now=True, verbose_name='vytvořeno')),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k řešení (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('cislo_body', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='bodovana_reseni', to='seminar.Cislo', verbose_name='číslo pro body')),
 | |
|                 ('problem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reseni', to='seminar.Problem', verbose_name='problém')),
 | |
|                 ('resitel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reseni', to='seminar.Resitel', verbose_name='řešitel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['problem', 'resitel'],
 | |
|                 'db_table': 'seminar_reseni',
 | |
|                 'verbose_name': 'Řešení',
 | |
|                 'verbose_name_plural': 'Řešení',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='PrilohaReseni',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('timestamp', models.DateTimeField(auto_now=True, verbose_name='vytvořeno')),
 | |
|                 ('soubor', models.FileField(upload_to=generate_filename, verbose_name='soubor')),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k příloze řešení (plain text), např. o původu', verbose_name='neveřejná poznámka')),
 | |
|                 ('reseni', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prilohy', to='seminar.Reseni', verbose_name='řešení')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['reseni', 'timestamp'],
 | |
|                 'db_table': 'seminar_priloha_reseni',
 | |
|                 'verbose_name': 'Příloha řešení',
 | |
|                 'verbose_name_plural': 'Přílohy řešení',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Nastaveni',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('aktualni_cislo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Cislo', verbose_name='poslední vydané číslo')),
 | |
|                 ('aktualni_rocnik', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Rocnik', verbose_name='aktuální ročník')),
 | |
|             ],
 | |
|             options={
 | |
|                 'db_table': 'seminar_nastaveni',
 | |
|                 'verbose_name': 'Nastavení semináře',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='rocnik',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cisla', to='seminar.Rocnik', verbose_name='ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='poznamka',
 | |
|             field=models.TextField(blank=True, help_text='Neveřejná poznámka k řešení (plain text, editace v detailu řešení)', verbose_name='neveřejná poznámka'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='skola',
 | |
|             name='je_ss',
 | |
|             field=models.BooleanField(default=True, verbose_name='střední stupeň'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='skola',
 | |
|             name='je_zs',
 | |
|             field=models.BooleanField(default=True, verbose_name='základní stupeň'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='autor_uloh', to=settings.AUTH_USER_MODEL, verbose_name='autor problému'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='zamereni',
 | |
|             field=taggit.managers.TaggableManager(blank=True, help_text=b'Zam\xc4\x9b\xc5\x99en\xc3\xad M/F/I/O probl\xc3\xa9mu, p\xc5\x99\xc3\xadp. dal\xc5\xa1\xc3\xad tagy', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='zaměření'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='forma',
 | |
|             field=models.CharField(choices=[(b'papir', 'Papírové řešení'), (b'email', 'Emailem'), (b'upload', 'Upload přes web')], default=b'papir', max_length=16, verbose_name='forma řešení'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='resitel',
 | |
|             name='import_mamoper_id',
 | |
|             field=models.CharField(blank=True, default=b'', help_text='MAMOPER.MM_RIESITELIA.ID z DAKOS importu, jen historický význam', max_length=32, verbose_name='importované MM_RIESITELIA.ID'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='skola',
 | |
|             name='import_dakos_id',
 | |
|             field=models.CharField(blank=True, default=b'', help_text='DKSROOT.V_SKOLA.ID z DAKOS importu, jen historický význam', max_length=32, verbose_name='importované DKSROOT.V_SKOLA.ID'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='resitel',
 | |
|             name='rok_maturity',
 | |
|             field=models.IntegerField(blank=True, null=True, verbose_name='rok maturity'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='prilohareseni',
 | |
|             name='timestamp',
 | |
|             field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, verbose_name='vytvořeno'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='import_dakos_id',
 | |
|             field=models.CharField(blank=True, default=b'', help_text='ID z importu z DAKOSU s prefixem podle původu: "AZAD:xxx (MAMOPER.MM_AZAD), ""DOZ:xxx" (MAMOPER.MM_DOZ), "ZAD:rocnik.cislo.uloha.typ" (MAMOPER.MM_ZADANIA), "ULOHA:xxx" (MAMOPER.MM_ULOHY)', max_length=32, verbose_name='importované ID s typem'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='timestamp',
 | |
|             field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, verbose_name='vytvořeno'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='timestamp',
 | |
|             field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, verbose_name='vytvořeno'),
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='soustredeni',
 | |
|             name='ucastnici',
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Soustredeni_Ucastnici',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k účasti (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('resitel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Resitel', verbose_name='řešitel')),
 | |
|                 ('soustredeni', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Soustredeni', verbose_name='soustředění')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['soustredeni', 'resitel'],
 | |
|                 'db_table': 'seminar_soustredeni_ucastnici',
 | |
|                 'verbose_name': 'Účast na soustředění',
 | |
|                 'verbose_name_plural': 'Účasti na soustředění',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='soustredeni',
 | |
|             name='ucastnici',
 | |
|             field=models.ManyToManyField(help_text='Seznam účastníků soustředění', through='seminar.Soustredeni_Ucastnici', to='seminar.Resitel', verbose_name='účastníci soustředění'),
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='problem',
 | |
|             options={'ordering': ['nazev'], 'verbose_name': 'Problém', 'verbose_name_plural': 'Problémy'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='reseni',
 | |
|             options={'ordering': ['problem_id', 'resitel_id'], 'verbose_name': 'Řešení', 'verbose_name_plural': 'Řešení'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='skola',
 | |
|             options={'ordering': ['mesto', 'nazev'], 'verbose_name': 'Škola', 'verbose_name_plural': 'Školy'},
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='poznamka',
 | |
|             field=models.TextField(blank=True, help_text='Neveřejná poznámka k číslu (plain text)', verbose_name='neveřejná poznámka'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='poznamka',
 | |
|             field=models.TextField(blank=True, help_text='Neveřejná poznámka k řešení (plain text)', verbose_name='neveřejná poznámka'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='soustredeni',
 | |
|             name='text',
 | |
|             field=models.TextField(blank=True, default=b'', verbose_name='text k soustředění (HTML)'),
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='text_problemu_org',
 | |
|             new_name='text_org',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='text_org',
 | |
|             field=models.TextField(blank=True, verbose_name='neveřejné zadání a organizátorské a poznámky'),
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='text_problemu',
 | |
|             new_name='text_zadani',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='text_org',
 | |
|             field=models.TextField(blank=True, help_text='Neveřejný návrh úlohy, návrh řešení, text zadání, poznámky ...', verbose_name='org poznámky (HTML)'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='text_zadani',
 | |
|             field=models.TextField(blank=True, help_text='Veřejný text zadání (HTML)', verbose_name='veřejné zadání (HTML)'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='text_reseni',
 | |
|             field=models.TextField(blank=True, help_text='Veřejný text řešení (HTML, u témat i příspěvky a komentáře)', verbose_name='veřejné řešení (HTML)'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='ProblemNavrh',
 | |
|             fields=[
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Problém (návrh)',
 | |
|                 'proxy': True,
 | |
|                 'verbose_name_plural': 'Problémy (návrhy)',
 | |
|             },
 | |
|             bases=('seminar.problem',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='ProblemZadany',
 | |
|             fields=[
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Problém (zadaný)',
 | |
|                 'proxy': True,
 | |
|                 'verbose_name_plural': 'Problémy (zadané)',
 | |
|             },
 | |
|             bases=('seminar.problem',),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='rocnik',
 | |
|             name='rocnik_n',
 | |
|             field=models.IntegerField(default=0, verbose_name='číslo ročníku'),
 | |
|             preserve_default=False,
 | |
|         ),
 | |
|         migrations.RunSQL(
 | |
|             sql='update seminar_rocniky set rocnik_n = cast (rocnik as integer)',
 | |
|             reverse_sql='update seminar_rocniky set rocnik_n = cast (rocnik as nvarchar(16))',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='rocnik',
 | |
|             name='rocnik',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='rocnik',
 | |
|             old_name='rocnik_n',
 | |
|             new_name='rocnik',
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='cislo',
 | |
|             options={'ordering': ['-rocnik__rocnik', '-cislo'], 'verbose_name': 'Číslo', 'verbose_name_plural': 'Čísla'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='reseni',
 | |
|             options={'ordering': ['problem_id', 'resitel__prijmeni', 'resitel__jmeno'], 'verbose_name': 'Řešení', 'verbose_name_plural': 'Řešení'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='rocnik',
 | |
|             options={'ordering': ['-rocnik'], 'verbose_name': 'Ročník', 'verbose_name_plural': 'Ročníky'},
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='cislo',
 | |
|             field=models.CharField(db_index=True, help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určije pořadí v ročníku!', max_length=32, verbose_name='název čísla'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='rocnik',
 | |
|             name='prvni_rok',
 | |
|             field=models.IntegerField(db_index=True, unique=True, verbose_name='první rok'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='rocnik',
 | |
|             name='rocnik',
 | |
|             field=models.IntegerField(db_index=True, unique=True, verbose_name='číslo ročníku'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='verejna_vysledkovka',
 | |
|             field=models.BooleanField(default=False, help_text='Je-li false u veřejného čísla, není výsledkovka zatím veřejná.', verbose_name='zveřejněna výsledkovka'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='body',
 | |
|             field=models.DecimalField(blank=True, decimal_places=1, max_digits=8, null=True, verbose_name='maximum bodů'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='body',
 | |
|             field=models.DecimalField(blank=True, decimal_places=1, max_digits=8, null=True, verbose_name='body'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Novinky',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('datum', models.DateField(auto_now_add=True)),
 | |
|                 ('text', models.TextField(blank=True, null=True, verbose_name=b'Text novinky')),
 | |
|                 ('obrazek', models.ImageField(blank=True, null=True, upload_to=b'image_novinky/%Y/%m/%d/', verbose_name=b'Obr\xc3\xa1zek')),
 | |
|                 ('zverejneno', models.BooleanField(default=False, verbose_name=b'Zve\xc5\x99ejn\xc4\x9bno')),
 | |
|                 ('autor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name=b'Autor novinky')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Novinka',
 | |
|                 'verbose_name_plural': 'Novinky',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Organizator',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('prezdivka', models.CharField(blank=True, max_length=32, null=True, verbose_name=b'P\xc5\x99ezd\xc3\xadvka')),
 | |
|                 ('organizuje_od_roku', models.IntegerField(blank=True, null=True, verbose_name=b'Organizuje od roku')),
 | |
|                 ('organizuje_do_roku', models.IntegerField(blank=True, null=True, verbose_name=b'Organizuje do roku')),
 | |
|                 ('studuje', models.CharField(blank=True, max_length=256, null=True, verbose_name=b'Studuje')),
 | |
|                 ('strucny_popis_organizatora', models.TextField(blank=True, null=True, verbose_name=b'Stru\xc4\x8dn\xc3\xbd popis organiz\xc3\xa1tora')),
 | |
|                 ('foto', models.ImageField(blank=True, help_text=b'Vlo\xc5\xbe fotografii organiz\xc3\xa1tora o libovon\xc3\xa9 velikosti', null=True, upload_to=b'image_organizatori/velke/%Y/', verbose_name=b'Fotografie organiz\xc3\xa1tora')),
 | |
|                 ('foto_male', models.ImageField(blank=True, editable=False, null=True, upload_to=b'image_organizatori/male/%Y/')),
 | |
|                 ('user', models.OneToOneField(help_text=b'Vyber \xc3\xba\xc4\x8det sp\xc5\x99a\xc5\xbeen\xc3\xbd s organiz\xc3\xa1torem.', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name=b'Osoba')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Organizátor',
 | |
|                 'verbose_name_plural': 'Organizátoři',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='rocnik',
 | |
|             name='exportovat',
 | |
|             field=models.BooleanField(db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti), a to jen čísla s veřejnou výsledkovkou', verbose_name='export do AESOPa'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='soustredeni',
 | |
|             name='exportovat',
 | |
|             field=models.BooleanField(db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)', verbose_name='export do AESOPa'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='soustredeni',
 | |
|             name='typ',
 | |
|             field=models.CharField(choices=[(b'jarni', 'Jarní soustředění'), (b'podzimni', 'Podzimní soustředění'), (b'vikend', 'Víkendový sraz')], default=b'podzimni', max_length=16, verbose_name='typ akce'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='foto',
 | |
|             field=models.ImageField(blank=True, help_text=b'Vlo\xc5\xbe fotografii organiz\xc3\xa1tora o libovoln\xc3\xa9 velikosti', null=True, upload_to=b'image_organizatori/velke/%Y/', verbose_name=b'Fotografie organiz\xc3\xa1tora'),
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='soustredeni',
 | |
|             options={'ordering': ['-rocnik__rocnik', '-datum_zacatku'], 'verbose_name': 'Soustředění', 'verbose_name_plural': 'Soustředění'},
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='cislo',
 | |
|             field=models.CharField(db_index=True, help_text='Většinou jen "1", vyjímečně "7-8", lexikograficky určuje pořadí v ročníku!', max_length=32, verbose_name='název čísla'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='pdf',
 | |
|             field=models.FileField(blank=True, help_text='Pdf čísla, které si mohou řešitelé stáhnout', null=True, upload_to=cislo_pdf_filename, verbose_name='pdf'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='typ',
 | |
|             field=models.CharField(choices=[(b'uloha', 'Úloha'), (b'tema', 'Téma'), (b'serial', 'Seriál'), (b'org-clanek', 'Organizátorský článek'), (b'res-clanek', 'Řešitelský článek')], default=b'uloha', max_length=32, verbose_name='typ problému'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='skola',
 | |
|             name='stat',
 | |
|             field=django_countries.fields.CountryField(default=b'CZ', help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)', max_length=2, verbose_name='stát'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='studuje',
 | |
|             field=models.CharField(blank=True, help_text=b"Nap\xc5\x99. 'Studuje Obecnou fyziku (Bc.), 3. ro\xc4\x8dn\xc3\xadk', 'Vystudovala Diskr\xc3\xa9tn\xc3\xad modely a algoritmy (Mgr.)' nebo 'P\xc5\x99edn\xc3\xa1\xc5\xa1\xc3\xad na MFF'", max_length=256, null=True, verbose_name=b'Studium aj.'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='forma',
 | |
|             field=models.CharField(choices=[(b'papir', 'Papírové řešení'), (b'email', 'Emailem'), (b'upload', 'Upload přes web')], default=b'email', max_length=16, verbose_name='forma řešení'),
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='foto_male',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='foto',
 | |
|             field=imagekit.models.fields.ProcessedImageField(blank=True, help_text=b'Vlo\xc5\xbe fotografii organiz\xc3\xa1tora o libovoln\xc3\xa9 velikosti', null=True, upload_to=b'image_organizatori/velke/%Y/', verbose_name=b'Fotografie organiz\xc3\xa1tora'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Soustredeni_Organizatori',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k účasti organizátora (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('organizator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Organizator', verbose_name='organizátor')),
 | |
|                 ('soustredeni', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Soustredeni', verbose_name='soustředění')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['soustredeni', 'organizator'],
 | |
|                 'db_table': 'seminar_soustredeni_organizatori',
 | |
|                 'verbose_name': 'Účast organizátorů na soustředění',
 | |
|                 'verbose_name_plural': 'Účasti organizátorů na soustředění',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='soustredeni',
 | |
|             name='organizatori',
 | |
|             field=models.ManyToManyField(help_text='Seznam organizátorů soustředění', through='seminar.Soustredeni_Organizatori', to='seminar.Organizator', verbose_name='Organizátoři soustředění'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Prispevek',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('nazev', models.CharField(max_length=200, verbose_name=b'N\xc3\xa1zev')),
 | |
|                 ('text_org', models.TextField(blank=True, null=True, verbose_name=b'Orgovsk\xc3\xbd text')),
 | |
|                 ('text_resitel', models.TextField(blank=True, null=True, verbose_name=b'\xc5\x98e\xc5\xa1itelsk\xc3\xbd text')),
 | |
|                 ('zverejnit', models.BooleanField(verbose_name=b'Zve\xc5\x99ejnit?')),
 | |
|                 ('problem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Problem', verbose_name=b'Probl\xc3\xa9m')),
 | |
|                 ('reseni', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Reseni', verbose_name=b'\xc5\x98e\xc5\xa1en\xc3\xad')),
 | |
|             ],
 | |
|             options={
 | |
|                 'abstract': False,
 | |
|                 'verbose_name': 'Příspěvek k problému',
 | |
|                 'verbose_name_plural': 'Příspěvky k problémům',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Konfera',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('nazev', models.CharField(help_text='Název konfery', max_length=40, verbose_name='název konfery')),
 | |
|                 ('popis', models.TextField(blank=True, help_text='Popis konfery k zobrazení na webu', verbose_name='popis konfery')),
 | |
|                 ('abstrakt', models.TextField(blank=True, help_text='Abstrakt konfery tak, jak byl uveden ve sborníku', verbose_name='abstrakt')),
 | |
|                 ('org_poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka ke konfeře(plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('typ_prezentace', models.CharField(choices=[(b'veletrh', 'Veletrh (postery)'), (b'prezentace', 'Prezentace (přednáška)')], default=b'veletrh', max_length=16, verbose_name='typ prezentace')),
 | |
|                 ('prezentace', models.FileField(help_text='Prezentace nebo fotka posteru', upload_to=generate_filename_konfera, verbose_name='prezentace')),
 | |
|                 ('materialy', models.FileField(help_text='Další materiály ke konfeře zabalené do jednoho souboru', upload_to=generate_filename_konfera, verbose_name='materialy')),
 | |
|                 ('organizator', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Organizator', verbose_name='organizátor')),
 | |
|                 ('soustredeni', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Soustredeni', verbose_name='soustředění')),
 | |
|             ],
 | |
|             options={
 | |
|                 'db_table': 'seminar_konfera',
 | |
|                 'verbose_name': 'Konfera',
 | |
|                 'verbose_name_plural': 'Konfery',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Konfery_Ucastnici',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k účasti (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('konfera', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Konfera', verbose_name='konfera')),
 | |
|                 ('resitel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Resitel', verbose_name='řešitel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['konfera', 'resitel'],
 | |
|                 'db_table': 'seminar_konfery_ucastnici',
 | |
|                 'verbose_name': 'Účast na konfeře',
 | |
|                 'verbose_name_plural': 'Účasti na konfeře',
 | |
|             },
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='typ',
 | |
|             field=models.CharField(choices=[(b'uloha', 'Úloha'), (b'tema', 'Téma'), (b'serial', 'Seriál'), (b'konfera', 'Konfera'), (b'org-clanek', 'Organizátorský článek'), (b'res-clanek', 'Řešitelský článek')], default=b'uloha', max_length=32, verbose_name='typ problému'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='ucastnici',
 | |
|             field=models.ManyToManyField(help_text='Seznam účastníků konfery', through='seminar.Konfery_Ucastnici', to='seminar.Resitel', verbose_name='účastníci konfery'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfera',
 | |
|             name='materialy',
 | |
|             field=models.FileField(blank=True, help_text='Další materiály ke konfeře zabalené do jednoho souboru', upload_to=generate_filename_konfera, verbose_name='materialy'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfera',
 | |
|             name='prezentace',
 | |
|             field=models.FileField(blank=True, help_text='Prezentace nebo fotka posteru', upload_to=generate_filename_konfera, verbose_name='prezentace'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='prispevek',
 | |
|             field=models.ForeignKey(blank=True, help_text='Účastnický přípěvek o konfeře', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Problem', verbose_name='příspěvek do čísla'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='faze',
 | |
|             field=models.CharField(choices=[('admin', 'Úpravy na webu'), ('tex', 'Úpravy v TeXu'), ('nahrano', 'Nahráno na web')], default='admin', help_text='Během fáze "Úpravy na webu" se obsah čísla vytváří (a případně komentuje) ve webovém rozhraní. Během fáze "Úpravy v TeXu" už obsah ve webovém rozhraní editovat nelze a návrhy na úpravy se píší do korekturovátka a zanášejí do gitu. Z něj se pak vygeneruje verze pro web a číslo se přepne do fáze "Nahráno na web", což jen znamená, že už nejde automaticky stáhnout obsah pro založení čísla v TeXu.', max_length=32, verbose_name='Fáze vytváření obsahu'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='datum_deadline_soustredeni',
 | |
|             field=models.DateField(blank=True, help_text='Datum pro příjem řešení pro účast na soustředění', null=True, verbose_name='datum deadline soustředění'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Osoba',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('jmeno', models.CharField(max_length=256, verbose_name='jméno')),
 | |
|                 ('prijmeni', models.CharField(max_length=256, verbose_name='příjmení')),
 | |
|                 ('prezdivka', models.CharField(blank=True, max_length=256, verbose_name='přezdívka')),
 | |
|                 ('pohlavi_muz', models.BooleanField(default=False, verbose_name='pohlaví (muž)')),
 | |
|                 ('email', models.EmailField(blank=True, default='', max_length=256, verbose_name='e-mail')),
 | |
|                 ('telefon', models.CharField(blank=True, default='', max_length=256, verbose_name='telefon')),
 | |
|                 ('datum_narozeni', models.DateField(blank=True, null=True, verbose_name='datum narození')),
 | |
|                 ('datum_souhlasu_udaje', models.DateField(blank=True, help_text='Datum souhlasu se zpracováním osobních údajů', null=True, verbose_name='datum souhlasu (údaje)')),
 | |
|                 ('datum_souhlasu_zasilani', models.DateField(blank=True, help_text='Datum souhlasu se zasíláním MFF materiálů', null=True, verbose_name='datum souhlasu (spam)')),
 | |
|                 ('datum_registrace', models.DateField(default=django.utils.timezone.now, verbose_name='datum registrace do semináře')),
 | |
|                 ('ulice', models.CharField(blank=True, default='', max_length=256, verbose_name='ulice')),
 | |
|                 ('mesto', models.CharField(blank=True, default='', max_length=256, verbose_name='město')),
 | |
|                 ('psc', models.CharField(blank=True, default='', max_length=32, verbose_name='PSČ')),
 | |
|                 ('stat', django_countries.fields.CountryField(default='CZ', help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)', max_length=2, verbose_name='stát')),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k osobě (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('foto', imagekit.models.fields.ProcessedImageField(blank=True, help_text='Vlož fotografii osoby o libovolné velikosti', null=True, upload_to='image_osoby/velke/%Y/', verbose_name='Fotografie osoby')),
 | |
|                 ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='uživatel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Osoba',
 | |
|                 'verbose_name_plural': 'Osoby',
 | |
|                 'db_table': 'seminar_osoby',
 | |
|                 'ordering': ['prijmeni', 'jmeno'],
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Prijemce',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k příemci čísel (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('osoba', models.ForeignKey(help_text='Které osobě či na jakou adresu se mají zasílat čísla', on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='komu')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'příjemce',
 | |
|                 'verbose_name_plural': 'příjemce',
 | |
|                 'db_table': 'seminar_prijemce',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Text',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('na_web', models.TextField(blank=True, help_text='Text ke zveřejnění na webu', verbose_name='text na web')),
 | |
|                 ('do_cisla', models.TextField(blank=True, help_text='Text ke zveřejnění v čísle', verbose_name='text do čísla')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'text',
 | |
|                 'verbose_name_plural': 'texty',
 | |
|                 'db_table': 'seminar_texty',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Uloha',
 | |
|             fields=[
 | |
|                 ('problem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.Problem')),
 | |
|                 ('max_body', models.DecimalField(blank=True, decimal_places=1, max_digits=8, null=True, verbose_name='maximum bodů')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Úloha',
 | |
|                 'verbose_name_plural': 'Úlohy',
 | |
|                 'db_table': 'seminar_ulohy',
 | |
|             },
 | |
|             bases=('seminar.problem',),
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='novinky',
 | |
|             options={'ordering': ['-datum'], 'verbose_name': 'Novinka', 'verbose_name_plural': 'Novinky'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='prilohareseni',
 | |
|             options={'ordering': ['reseni', 'vytvoreno'], 'verbose_name': 'Příloha řešení', 'verbose_name_plural': 'Přílohy řešení'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='reseni',
 | |
|             options={'ordering': ['-cas_doruceni'], 'verbose_name': 'Řešení', 'verbose_name_plural': 'Řešení'},
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='resitel',
 | |
|             options={'ordering': ['osoba'], 'verbose_name': 'Řešitel', 'verbose_name_plural': 'Řešitelé'},
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='konfera',
 | |
|             old_name='org_poznamka',
 | |
|             new_name='poznamka',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='reseni',
 | |
|             old_name='timestamp',
 | |
|             new_name='cas_doruceni',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='prilohareseni',
 | |
|             old_name='timestamp',
 | |
|             new_name='vytvoreno',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='text_org',
 | |
|             new_name='poznamka',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='timestamp',
 | |
|             new_name='vytvoreno',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='cislo_zadani',
 | |
|             new_name='cislo_zadani_old',
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='cislo_reseni',
 | |
|             new_name='cislo_reseni_old',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='anotace',
 | |
|             field=models.TextField(blank=True, help_text='Popis, o čem bude konfera.', verbose_name='anotace'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='organizator',
 | |
|             name='organizuje_do',
 | |
|             field=models.DateTimeField(blank=True, null=True, verbose_name='Organizuje do'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='organizator',
 | |
|             name='organizuje_od',
 | |
|             field=models.DateTimeField(blank=True, null=True, verbose_name='Organizuje od'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='organizator',
 | |
|             name='skola',
 | |
|             field=models.CharField(blank=True, help_text='Škola, např. MFF, VŠCHT, VUT, ... prostě aby se nemuselo psát do studuješkolu, ale jen obor, možnost zobrazit zvlášť', max_length=256, null=True, verbose_name='Škola, kterou studuje'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='organizator',
 | |
|             name='vytvoreno',
 | |
|             field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, verbose_name='Vytvořeno'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='garant',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='garant_problemu_problem', to='seminar.Organizator', verbose_name='garant zadaného problému'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='nadproblem',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='nadproblem_problem', to='seminar.Problem', verbose_name='nadřazený problém'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='opravovatele',
 | |
|             field=models.ManyToManyField(blank=True, related_name='opravovatele_problem', to='seminar.Organizator', verbose_name='opravovatelé'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='zverejneno',
 | |
|             field=models.BooleanField(default=False, help_text='Udává, zda je řešení zveřejněno', verbose_name='řešení zveřejněno'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='verejna_vysledkovka',
 | |
|             field=models.BooleanField(default=False, help_text='Je-li false u veřejného čísla,\t\t\t\t  není výsledkovka zatím veřejná.', verbose_name='zveřejněna výsledkovka'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='verejne_db',
 | |
|             field=models.BooleanField(db_column='verejne', default=False, verbose_name='číslo zveřejněno'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfera',
 | |
|             name='typ_prezentace',
 | |
|             field=models.CharField(choices=[('veletrh', 'Veletrh (postery)'), ('prezentace', 'Prezentace (přednáška)')], default='veletrh', max_length=16, verbose_name='typ prezentace'),
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='novinky',
 | |
|             old_name='autor',
 | |
|             new_name='autor_old',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='novinky',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Organizator', verbose_name='Autor novinky'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='novinky',
 | |
|             name='obrazek',
 | |
|             field=models.ImageField(blank=True, null=True, upload_to='image_novinky/%Y/%m/%d/', verbose_name='Obrázek'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='novinky',
 | |
|             name='text',
 | |
|             field=models.TextField(blank=True, null=True, verbose_name='Text novinky'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='novinky',
 | |
|             name='zverejneno',
 | |
|             field=models.BooleanField(default=False, verbose_name='Zveřejněno'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='strucny_popis_organizatora',
 | |
|             field=models.TextField(blank=True, null=True, verbose_name='Stručný popis organizátora'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='studuje',
 | |
|             field=models.CharField(blank=True, help_text="Např. 'Studuje Obecnou fyziku (Bc.), 3. ročník', 'Vystudovala Diskrétní modely a algoritmy (Mgr.)' nebo 'Přednáší na MFF'", max_length=256, null=True, verbose_name='Studium aj.'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Pohadka',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('text', models.TextField(verbose_name='Text pohádky')),
 | |
|                 ('pred', models.BooleanField(default=True, verbose_name='Před úlohou')),
 | |
|                 ('vytvoreno', models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, verbose_name='Vytvořeno')),
 | |
|                 ('autor_old', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name=b'Autor poh\xc3\xa1dky')),
 | |
|                 ('uloha_old', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pohadky', to='seminar.Problem', verbose_name='Úloha')),
 | |
|                 ('autor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Organizator', verbose_name='Autor pohádky')),
 | |
|                 ('uloha', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pohadky', to='seminar.Uloha', verbose_name='Úloha')),
 | |
|             ],
 | |
|             options={
 | |
|                 'ordering': ['uloha__cislo_zadani', 'uloha__kod', '-pred'],
 | |
|                 'db_table': 'seminar_pohadky',
 | |
|                 'verbose_name': 'Pohádka',
 | |
|                 'verbose_name_plural': 'Pohádky',
 | |
|             },
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='problem',
 | |
|             old_name='autor',
 | |
|             new_name='autor_old',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='autor_problemu_problem', to='seminar.Organizator', verbose_name='autor problému'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='kod',
 | |
|             field=models.CharField(blank=True, default='', help_text='Číslo/kód úlohy v čísle nebo kód tématu/článku/seriálu v ročníku', max_length=32, verbose_name='lokální kód'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='stav',
 | |
|             field=models.CharField(choices=[('navrh', 'Návrh'), ('zadany', 'Zadaný'), ('vyreseny', 'Vyřešený'), ('smazany', 'Smazaný')], default='navrh', max_length=32, verbose_name='stav problému'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='zamereni',
 | |
|             field=taggit.managers.TaggableManager(blank=True, help_text='Zaměření M/F/I/O problému, příp. další tagy', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='zaměření'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='forma',
 | |
|             field=models.CharField(choices=[('papir', 'Papírové řešení'), ('email', 'Emailem'), ('upload', 'Upload přes web')], default='email', max_length=16, verbose_name='forma řešení'),
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='reseni',
 | |
|             old_name='problem',
 | |
|             new_name='problem_old',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='resitel',
 | |
|             name='zasilat',
 | |
|             field=models.CharField(choices=[('domu', 'Domů'), ('do_skoly', 'Do školy'), ('nikam', 'Nikam')], default='domu', max_length=32, verbose_name='kam zasílat'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='rocnik',
 | |
|             name='exportovat',
 | |
|             field=models.BooleanField(db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti), a to jen čísla s veřejnou výsledkovkou', verbose_name='export do AESOPa'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='skola',
 | |
|             name='aesop_id',
 | |
|             field=models.CharField(blank=True, default='', help_text='Aesopi ID typu "izo:..." nebo "aesop:..."', max_length=32, verbose_name='Aesop ID'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='skola',
 | |
|             name='kratky_nazev',
 | |
|             field=models.CharField(blank=True, help_text='Zkrácený název pro zobrazení ve výsledkovce', max_length=256, verbose_name='zkrácený název'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='skola',
 | |
|             name='stat',
 | |
|             field=django_countries.fields.CountryField(default='CZ', help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)', max_length=2, verbose_name='stát'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='exportovat',
 | |
|             field=models.BooleanField(db_column='exportovat', default=False, help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)', verbose_name='export do AESOPa'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='misto',
 | |
|             field=models.CharField(blank=True, default='', help_text='Místo (název obce, volitelně též objektu', max_length=256, verbose_name='místo soustředění'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='text',
 | |
|             field=models.TextField(blank=True, default='', verbose_name='text k soustředění (HTML)'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='typ',
 | |
|             field=models.CharField(choices=[('jarni', 'Jarní soustředění'), ('podzimni', 'Podzimní soustředění'), ('vikend', 'Víkendový sraz')], default='podzimni', max_length=16, verbose_name='typ akce'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='verejne_db',
 | |
|             field=models.BooleanField(db_column='verejne', default=False, verbose_name='soustředění zveřejněno'),
 | |
|         ),
 | |
|         migrations.AlterModelTable(
 | |
|             name='problem',
 | |
|             table='seminar_problemy',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_deadline',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='deadlinove_ulohy', to='seminar.Cislo', verbose_name='číslo deadlinu'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_reseni',
 | |
|             field=models.ForeignKey(blank=True, help_text='Číslo s řešením úlohy, jen pro úlohy', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='resene_ulohy', to='seminar.Cislo', verbose_name='číslo řešení'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_zadani',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='zadane_ulohy', to='seminar.Cislo', verbose_name='číslo zadání'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Tema',
 | |
|             fields=[
 | |
|                 ('problem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.Problem')),
 | |
|                 ('tema_typ', models.CharField(choices=[('tema', 'Téma'), ('serial', 'Seriál')], default='tema', max_length=16, verbose_name='Typ tématu')),
 | |
|                 ('rocnik', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Rocnik', verbose_name='ročník')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Téma',
 | |
|                 'verbose_name_plural': 'Témata',
 | |
|                 'db_table': 'seminar_temata',
 | |
|             },
 | |
|             bases=('seminar.problem',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Reseni_Resitele',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('reseni', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Reseni', verbose_name='řešení')),
 | |
|                 ('resitele', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Resitel', verbose_name='řešitel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Řešení řešitelů',
 | |
|                 'verbose_name_plural': 'Řešení řešitelů',
 | |
|                 'db_table': 'seminar_reseni_resitele',
 | |
|                 'ordering': ['reseni', 'resitele'],
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Obrazek',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('na_web', models.ImageField(blank=True, null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='obrázek na web')),
 | |
|                 ('do_cisla_barevny', models.FileField(blank=True, help_text='Barevná verze obrázku do čísla', null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='barevný obrázek do čísla')),
 | |
|                 ('do_cisla_cernobily', models.FileField(blank=True, help_text='Černobílá verze obrázku do čísla', null=True, upload_to='obrazky/%Y/%m/%d/', verbose_name='černobílý obrázek do čísla')),
 | |
|                 ('text', models.ForeignKey(help_text='text, ve kterém se obrázek vyskytuje', on_delete=django.db.models.deletion.CASCADE, to='seminar.Text', verbose_name='text')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'obrázek',
 | |
|                 'verbose_name_plural': 'obrázky',
 | |
|                 'db_table': 'seminar_obrazky',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Hodnoceni',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('body', models.DecimalField(decimal_places=1, max_digits=8, verbose_name='body')),
 | |
|                 ('cislo_body', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hodnoceni', to='seminar.Cislo', verbose_name='číslo pro body')),
 | |
|                 ('problem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Problem', verbose_name='problém')),
 | |
|                 ('reseni', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Reseni', verbose_name='řešení')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Hodnocení',
 | |
|                 'verbose_name_plural': 'Hodnocení',
 | |
|                 'db_table': 'seminar_hodnoceni',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Clanek',
 | |
|             fields=[
 | |
|                 ('problem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.Problem')),
 | |
|                 ('cislo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Cislo', verbose_name='číslo')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Článek',
 | |
|                 'verbose_name_plural': 'Články',
 | |
|                 'db_table': 'seminar_clanky',
 | |
|             },
 | |
|             bases=('seminar.problem',),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='resitele',
 | |
|             field=models.ManyToManyField(help_text='Seznam autorů řešení', through='seminar.Reseni_Resitele', to='seminar.Resitel', verbose_name='autoři řešení'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='text_zkraceny',
 | |
|             field=models.ManyToManyField(help_text='Seznam úryvků z řešení', related_name='reseni_zkraceny_set', to='seminar.Text', verbose_name='zkrácené verze řešení'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='skola',
 | |
|             name='kontaktni_osoba',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='Kontaktní osoba'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='problem',
 | |
|             field=models.ManyToManyField(help_text='Problém', through='seminar.Hodnoceni', to='seminar.Problem', verbose_name='problém'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='reseni',
 | |
|             field=models.OneToOneField(blank=True, help_text='Účastnický přípěvek o konfeře', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='konfery', to='seminar.Reseni', verbose_name='článek ke konfeře'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='organizator',
 | |
|             name='osoba',
 | |
|             field=models.OneToOneField(help_text='osobní údaje organizátora', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='org', to='seminar.Osoba', verbose_name='osoba'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='resitel',
 | |
|             name='osoba',
 | |
|             field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='osoba'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='TreeNode',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 | |
|                 ('first_child', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.TreeNode', verbose_name='první potomek')),
 | |
|                 ('root', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='potomci_set', to='seminar.TreeNode', verbose_name='kořen stromu')),
 | |
|                 ('succ', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prev', to='seminar.TreeNode', verbose_name='další element na stejné úrovni')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'TreeNode',
 | |
|                 'verbose_name_plural': 'TreeNody',
 | |
|                 'db_table': 'seminar_nodes_treenode',
 | |
|             },
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='CisloNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('cislo', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Cislo', verbose_name='číslo')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Číslo (Node)',
 | |
|                 'verbose_name_plural': 'Čísla (Node)',
 | |
|                 'db_table': 'seminar_nodes_cislo',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='ClanekNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('clanek', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Clanek', verbose_name='článek')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Článek (Node)',
 | |
|                 'verbose_name_plural': 'Články (Node)',
 | |
|                 'db_table': 'seminar_nodes_clanek',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='KonferaNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('konfera', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Konfera', verbose_name='konfera')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Konfera (Node)',
 | |
|                 'verbose_name_plural': 'Konfery (Node)',
 | |
|                 'db_table': 'seminar_nodes_konfera',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='MezicisloNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Mezičíslo (Node)',
 | |
|                 'verbose_name_plural': 'Mezičísla (Node)',
 | |
|                 'db_table': 'seminar_nodes_mezicislo',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='RocnikNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('rocnik', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Rocnik', verbose_name='ročník')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Ročník (Node)',
 | |
|                 'verbose_name_plural': 'Ročníky (Node)',
 | |
|                 'db_table': 'seminar_nodes_rocnik',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='TemaVCisleNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('tema', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Tema', verbose_name='téma v čísle')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Téma v čísle (Node)',
 | |
|                 'verbose_name_plural': 'Témata v čísle (Node)',
 | |
|                 'db_table': 'seminar_nodes_temavcisle',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='TextNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('text', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Text', verbose_name='text')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Text (Node)',
 | |
|                 'verbose_name_plural': 'Text (Node)',
 | |
|                 'db_table': 'seminar_nodes_obsah',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='UlohaVzorakNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('uloha', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Uloha', verbose_name='úloha')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Vzorák úlohy (Node)',
 | |
|                 'verbose_name_plural': 'Vzoráky úloh (Node)',
 | |
|                 'db_table': 'seminar_nodes_uloha_vzorak',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='UlohaZadaniNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('uloha', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Uloha', verbose_name='úloha')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Zadání úlohy (Node)',
 | |
|                 'verbose_name_plural': 'Zadání úloh (Node)',
 | |
|                 'db_table': 'seminar_nodes_uloha_zadani',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='PohadkaNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('pohadka', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='seminar.Pohadka', verbose_name='pohádka')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Pohádka (Node)',
 | |
|                 'verbose_name_plural': 'Pohádky (Node)',
 | |
|                 'db_table': 'seminar_nodes_pohadka',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='ReseniNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('reseni', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Reseni', verbose_name='reseni')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Otištěné řešení (Node)',
 | |
|                 'verbose_name_plural': 'Otištěná řešení (Node)',
 | |
|                 'db_table': 'seminar_nodes_otistene_reseni',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='reseni',
 | |
|             name='text_cely',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reseni_cely_set', to='seminar.ReseniNode', verbose_name='Plná verze textu řešení'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=resitel_to_osoba,
 | |
|             reverse_code=osoba_to_resitel,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=spoj_k_organizatorum_osoby,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_problem_0052,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_pohadka,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_novinka,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=rok_to_datetime,
 | |
|             reverse_code=datetime_to_rok,
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='prispevek',
 | |
|             name='problem',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='prispevek',
 | |
|             name='reseni',
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='ProblemNavrh',
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='ProblemZadany',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='cislo',
 | |
|             name='faze',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='popis',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='prispevek',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='import_dakos_id',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='import_mamoper_id',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='skola',
 | |
|             name='import_dakos_id',
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='Prispevek',
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=generuj_RocnikNody_a_CisloNody,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=reseni_to_Reseni,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='problem',
 | |
|             name='polymorphic_ctype',
 | |
|             field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_seminar.problem_set+', to='contenttypes.ContentType'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='treenode',
 | |
|             name='polymorphic_ctype',
 | |
|             field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_seminar.treenode_set+', to='contenttypes.ContentType'),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='OrgTextNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('org_verejny', models.BooleanField(default=True, help_text='Pokud ano, bude org pod článkem podepsaný', verbose_name='Org je veřejný?')),
 | |
|                 ('organizator', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='seminar.Organizator', verbose_name='Organizátor')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Organizátorský článek (Node)',
 | |
|                 'verbose_name_plural': 'Organizátorské články (Node)',
 | |
|                 'db_table': 'seminar_nodes_orgtextnode',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='CastNode',
 | |
|             fields=[
 | |
|                 ('treenode_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.TreeNode')),
 | |
|                 ('nadpis', models.CharField(help_text='Nadpis podvěšené části obsahu', max_length=100, verbose_name='Nadpis')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Část (Node)',
 | |
|                 'verbose_name_plural': 'Části (Node)',
 | |
|                 'db_table': 'seminar_nodes_cast',
 | |
|             },
 | |
|             bases=('seminar.treenode',),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='treenode',
 | |
|             name='first_child',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='father_of_first', to='seminar.TreeNode', verbose_name='první potomek'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_treenode,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_problem_0087,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=uloha_to_Uloha,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=tema_to_Tema,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=clanek_to_Clanek,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_Clanek_Reseni,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=Clanek_Treenody,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=konfery_rucne,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunSQL(
 | |
|             sql="update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';",
 | |
|             reverse_sql="update seminar_problemy set typ = 'uloha' where typ like 'b_uloha_';",
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=vytvor_pohadkanode,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=pokacej_les,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='novinky',
 | |
|             name='autor_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='foto',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='organizuje_do_roku',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='organizuje_od_roku',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='prezdivka',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='organizator',
 | |
|             name='user',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='pohadka',
 | |
|             name='autor_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='pohadka',
 | |
|             name='uloha_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='autor_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='body',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='cislo_reseni_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='cislo_zadani_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='opravovatel',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='text_reseni',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='text_zadani',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='problem',
 | |
|             name='typ',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='reseni',
 | |
|             name='body',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='reseni',
 | |
|             name='cislo_body',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='reseni',
 | |
|             name='problem_old',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='reseni',
 | |
|             name='resitel',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='datum_narozeni',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='datum_prihlaseni',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='datum_souhlasu_udaje',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='datum_souhlasu_zasilani',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='email',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='jmeno',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='mesto',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='pohlavi_muz',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='prijmeni',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='psc',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='stat',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='telefon',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='ulice',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='resitel',
 | |
|             name='user',
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='pohadka',
 | |
|             options={'ordering': ['vytvoreno'], 'verbose_name': 'Pohádka', 'verbose_name_plural': 'Pohádky'},
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='pohadka',
 | |
|             name='pred',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='pohadka',
 | |
|             name='text',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='pohadka',
 | |
|             name='uloha',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='verejna_vysledkovka',
 | |
|             field=models.BooleanField(default=False, help_text='Je-li false u veřejného čísla, není výsledkovka zatím veřejná.', verbose_name='zveřejněna výsledkovka'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='prijemce',
 | |
|             name='osoba',
 | |
|             field=models.OneToOneField(help_text='Které osobě či na jakou adresu se mají zasílat čísla', on_delete=django.db.models.deletion.CASCADE, to='seminar.Osoba', verbose_name='komu'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='cas_doruceni',
 | |
|             field=models.DateTimeField(blank=True, default=django.utils.timezone.now, verbose_name='čas_doručení'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='rocnik',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='cisla', to='seminar.Rocnik', verbose_name='ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='clanek',
 | |
|             name='cislo',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Cislo', verbose_name='číslo'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='cislo_body',
 | |
|             field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.Cislo', verbose_name='číslo pro body'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='problem',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Problem', verbose_name='problém'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfery_ucastnici',
 | |
|             name='konfera',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Konfera', verbose_name='konfera'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfery_ucastnici',
 | |
|             name='resitel',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Resitel', verbose_name='řešitel'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='nastaveni',
 | |
|             name='aktualni_cislo',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Cislo', verbose_name='poslední vydané číslo'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='nastaveni',
 | |
|             name='aktualni_rocnik',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Rocnik', verbose_name='aktuální ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='novinky',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.Organizator', verbose_name='Autor novinky'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='organizator',
 | |
|             name='osoba',
 | |
|             field=models.OneToOneField(help_text='osobní údaje organizátora', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='org', to='seminar.Osoba', verbose_name='osoba'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='osoba',
 | |
|             name='user',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL, verbose_name='uživatel'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='pohadka',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.Organizator', verbose_name='Autor pohádky'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='autor',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='autor_problemu_problem', to='seminar.Organizator', verbose_name='autor problému'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='garant',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='garant_problemu_problem', to='seminar.Organizator', verbose_name='garant zadaného problému'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='nadproblem',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='nadproblem_problem', to='seminar.Problem', verbose_name='nadřazený problém'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='text_cely',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reseni_cely_set', to='seminar.ReseniNode', verbose_name='Plná verze textu řešení'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni_resitele',
 | |
|             name='resitele',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Resitel', verbose_name='řešitel'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='resitel',
 | |
|             name='osoba',
 | |
|             field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.Osoba', verbose_name='osoba'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='resitel',
 | |
|             name='skola',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.Skola', verbose_name='škola'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='skola',
 | |
|             name='kontaktni_osoba',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='seminar.Osoba', verbose_name='Kontaktní osoba'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni',
 | |
|             name='rocnik',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='soustredeni', to='seminar.Rocnik', verbose_name='ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni_organizatori',
 | |
|             name='organizator',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Organizator', verbose_name='organizátor'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni_organizatori',
 | |
|             name='soustredeni',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Soustredeni', verbose_name='soustředění'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni_ucastnici',
 | |
|             name='resitel',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Resitel', verbose_name='řešitel'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='soustredeni_ucastnici',
 | |
|             name='soustredeni',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Soustredeni', verbose_name='soustředění'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='tema',
 | |
|             name='rocnik',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='seminar.Rocnik', verbose_name='ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_deadline',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='deadlinove_ulohy', to='seminar.Cislo', verbose_name='číslo deadlinu'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_reseni',
 | |
|             field=models.ForeignKey(blank=True, help_text='Číslo s řešením úlohy, jen pro úlohy', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='resene_ulohy', to='seminar.Cislo', verbose_name='číslo řešení'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='uloha',
 | |
|             name='cislo_zadani',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='zadane_ulohy', to='seminar.Cislo', verbose_name='číslo zadání'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='konfera',
 | |
|             name='nazev',
 | |
|             field=models.CharField(help_text='Název konfery', max_length=100, verbose_name='název konfery'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='treenode',
 | |
|             name='nazev',
 | |
|             field=models.TextField(help_text='Tento název se zobrazuje v nabídkách pro výběr vhodného TreeNode', null=True, verbose_name='název tohoto node'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_all_names,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='cislo',
 | |
|             options={'ordering': ['-rocnik__rocnik', '-poradi'], 'verbose_name': 'Číslo', 'verbose_name_plural': 'Čísla'},
 | |
|         ),
 | |
|         migrations.RenameField(
 | |
|             model_name='cislo',
 | |
|             old_name='cislo',
 | |
|             new_name='poradi',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='problem',
 | |
|             name='nadproblem',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='podproblem', to='seminar.Problem', verbose_name='nadřazený problém'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='tema',
 | |
|             name='abstrakt',
 | |
|             field=models.TextField(blank=True, verbose_name='Abstrakt na rozcestník'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='tema',
 | |
|             name='obrazek',
 | |
|             field=models.ImageField(null=True, upload_to='', verbose_name='Obrázek na rozcestník'),
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='nastaveni',
 | |
|             name='aktualni_rocnik',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='treenode',
 | |
|             name='srolovatelne',
 | |
|             field=models.BooleanField(blank=True, help_text='Bude na stránce témátka možnost tuto položku skrýt', null=True, verbose_name='Srolovatelné'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='treenode',
 | |
|             name='zajimave',
 | |
|             field=models.BooleanField(default=False, help_text='Zobrazí se daná věc na rozcestníku témátek', verbose_name='Zajímavé'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=copy_mails,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='prilohareseni',
 | |
|             name='res_poznamka',
 | |
|             field=models.TextField(blank=True, help_text='Poznámka k příloze řešení, např. co daný soubor obsahuje', verbose_name='poznámka řešitele'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='problem',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.Problem', verbose_name='problém'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='body',
 | |
|             field=models.DecimalField(decimal_places=1, max_digits=8, null=True, verbose_name='body'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='cislo_body',
 | |
|             field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.Cislo', verbose_name='číslo pro body'),
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='Konfery_Ucastnici',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='ucastnici',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='id',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='clanek',
 | |
|             name='cislo',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='reseni',
 | |
|             name='text_zkraceny',
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='KonferaNode',
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='problem_ptr',
 | |
|             field=models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='seminar.Problem'),
 | |
|             preserve_default=False,
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='nazev',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='organizator',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='poznamka',
 | |
|         ),
 | |
|         migrations.RemoveField(
 | |
|             model_name='konfera',
 | |
|             name='reseni',
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='reseni',
 | |
|             name='text_cely',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reseni_cely_set', to='seminar.ReseniNode', verbose_name='Plná verze textu řešení'),
 | |
|         ),
 | |
|         migrations.DeleteModel(
 | |
|             name='ClanekNode',
 | |
|         ),
 | |
|         migrations.CreateModel(
 | |
|             name='Konfery_Ucastnici',
 | |
|             fields=[
 | |
|                 ('id', models.AutoField(primary_key=True, serialize=False)),
 | |
|                 ('poznamka', models.TextField(blank=True, help_text='Neveřejná poznámka k účasti (plain text)', verbose_name='neveřejná poznámka')),
 | |
|                 ('konfera', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Konfera', verbose_name='konfera')),
 | |
|                 ('resitel', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='seminar.Resitel', verbose_name='řešitel')),
 | |
|             ],
 | |
|             options={
 | |
|                 'verbose_name': 'Účast na konfeře',
 | |
|                 'verbose_name_plural': 'Účasti na konfeře',
 | |
|                 'db_table': 'seminar_konfery_ucastnici',
 | |
|                 'ordering': ['konfera', 'resitel'],
 | |
|             },
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='konfera',
 | |
|             name='ucastnici',
 | |
|             field=models.ManyToManyField(help_text='Seznam účastníků konfery', through='seminar.Konfery_Ucastnici', to='seminar.Resitel', verbose_name='účastníci konfery'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='cislo',
 | |
|             name='pdf',
 | |
|             field=models.FileField(blank=True, help_text='PDF čísla, které si mohou řešitelé stáhnout', null=True, upload_to=cislo_pdf_filename, verbose_name='pdf'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='titulka_nahled',
 | |
|             field=models.ImageField(blank=True, help_text='Obrázek titulní strany, generuje se automaticky', null=True, upload_to=cislo_png_filename, verbose_name='Obrázek titulní strany'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='treenode',
 | |
|             name='first_child',
 | |
|             field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='father_of_first', to='seminar.TreeNode', verbose_name='první potomek'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='clanek',
 | |
|             name='cislo',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vydane_clanky', to='seminar.Cislo', verbose_name='číslo vydání'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=najdi_cislo,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.AlterModelOptions(
 | |
|             name='organizator',
 | |
|             options={'ordering': ['-organizuje_do', 'osoba__jmeno', 'osoba__prijmeni'], 'verbose_name': 'Organizátor', 'verbose_name_plural': 'Organizátoři'},
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=add_perms,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='cislo',
 | |
|             name='datum_preddeadline',
 | |
|             field=models.DateField(blank=True, help_text='Datum pro příjem řešení, která se otisknou v dalším čísle', null=True, verbose_name='datum předdeadline'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='textnode',
 | |
|             name='text',
 | |
|             field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='seminar.Text', verbose_name='text'),
 | |
|         ),
 | |
|         migrations.AddField(
 | |
|             model_name='resitel',
 | |
|             name='zasilat_cislo_emailem',
 | |
|             field=models.BooleanField(default=False, help_text='True pokud chce řešitel dostávat číslo emailem', verbose_name='zasílat číslo emailem'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='tema',
 | |
|             name='rocnik',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='temata', to='seminar.Rocnik', verbose_name='ročník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='osoba',
 | |
|             name='prezdivka',
 | |
|             field=models.CharField(blank=True, max_length=256, null=True, verbose_name='přezdívka'),
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_all,
 | |
|             reverse_code=django.db.migrations.operations.special.RunPython.noop,
 | |
|         ),
 | |
|         migrations.RunPython(
 | |
|             code=fix_zamereni,
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='tema',
 | |
|             name='obrazek',
 | |
|             field=models.ImageField(blank=True, null=True, upload_to='', verbose_name='Obrázek na rozcestník'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='body',
 | |
|             field=models.DecimalField(blank=True, decimal_places=1, max_digits=8, null=True, verbose_name='body'),
 | |
|         ),
 | |
|         migrations.AlterField(
 | |
|             model_name='hodnoceni',
 | |
|             name='cislo_body',
 | |
|             field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.Cislo', verbose_name='číslo pro body'),
 | |
|         ),
 | |
|     ]
 |