|
@ -751,14 +751,6 @@ class Clanek(Problem): |
|
|
verbose_name = 'Článek' |
|
|
verbose_name = 'Článek' |
|
|
verbose_name_plural = 'Články' |
|
|
verbose_name_plural = 'Články' |
|
|
|
|
|
|
|
|
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True, |
|
|
|
|
|
on_delete=models.PROTECT) |
|
|
|
|
|
|
|
|
|
|
|
resitelsky = models.BooleanField('Jde o řešitelský článek?', default=True) |
|
|
|
|
|
|
|
|
|
|
|
# má OneToOneField s: |
|
|
|
|
|
# ClanekNode |
|
|
|
|
|
|
|
|
|
|
|
def kod_v_rocniku(self): |
|
|
def kod_v_rocniku(self): |
|
|
if self.stav == 'zadany': |
|
|
if self.stav == 'zadany': |
|
|
# Nemělo by být potřeba |
|
|
# Nemělo by být potřeba |
|
@ -767,15 +759,6 @@ class Clanek(Problem): |
|
|
return "c{}".format(self.kod) |
|
|
return "c{}".format(self.kod) |
|
|
return '<Není zadaný>' |
|
|
return '<Není zadaný>' |
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs): |
|
|
|
|
|
super().save(*args, **kwargs) |
|
|
|
|
|
# *Node.save() aktualizuje název *Nodu. |
|
|
|
|
|
try: |
|
|
|
|
|
self.claneknode.save() |
|
|
|
|
|
except ObjectDoesNotExist: |
|
|
|
|
|
# Neexistující *Node nemá smysl aktualizovat. |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
class Text(SeminarModelBase): |
|
|
class Text(SeminarModelBase): |
|
|
class Meta: |
|
|
class Meta: |
|
|
db_table = 'seminar_texty' |
|
|
db_table = 'seminar_texty' |
|
@ -885,13 +868,10 @@ class Reseni(SeminarModelBase): |
|
|
forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, |
|
|
forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False, |
|
|
default=FORMA_EMAIL) |
|
|
default=FORMA_EMAIL) |
|
|
|
|
|
|
|
|
text_cely = models.OneToOneField(Text, verbose_name='Plná verze textu řešení', |
|
|
text_cely = models.OneToOneField(ReseniNode, verbose_name='Plná verze textu řešení', |
|
|
blank=True, null=True, related_name="reseni_cely_set", |
|
|
blank=True, null=True, related_name="reseni_cely_set", |
|
|
on_delete=models.SET_NULL) |
|
|
on_delete=models.PROTECT) |
|
|
|
|
|
|
|
|
text_zkraceny = models.ManyToManyField(Text, verbose_name='zkrácené verze řešení', |
|
|
|
|
|
help_text='Seznam úryvků z řešení',related_name="reseni_zkraceny_set") |
|
|
|
|
|
|
|
|
|
|
|
poznamka = models.TextField('neveřejná poznámka', blank=True, |
|
|
poznamka = models.TextField('neveřejná poznámka', blank=True, |
|
|
help_text='Neveřejná poznámka k řešení (plain text)') |
|
|
help_text='Neveřejná poznámka k řešení (plain text)') |
|
|
|
|
|
|
|
@ -1100,7 +1080,7 @@ class Soustredeni_Organizatori(SeminarModelBase): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
@reversion.register(ignore_duplicates=True) |
|
|
class Konfera(models.Model): |
|
|
class Konfera(Problem): |
|
|
class Meta: |
|
|
class Meta: |
|
|
db_table = 'seminar_konfera' |
|
|
db_table = 'seminar_konfera' |
|
|
verbose_name = 'Konfera' |
|
|
verbose_name = 'Konfera' |
|
@ -1108,17 +1088,12 @@ class Konfera(models.Model): |
|
|
# Interní ID |
|
|
# Interní ID |
|
|
id = models.AutoField(primary_key = True) |
|
|
id = models.AutoField(primary_key = True) |
|
|
|
|
|
|
|
|
nazev = models.CharField('název konfery', max_length=100, help_text = 'Název konfery') |
|
|
|
|
|
|
|
|
|
|
|
anotace = models.TextField('anotace', blank=True, |
|
|
anotace = models.TextField('anotace', blank=True, |
|
|
help_text='Popis, o čem bude konfera.') |
|
|
help_text='Popis, o čem bude konfera.') |
|
|
|
|
|
|
|
|
abstrakt = models.TextField('abstrakt', blank=True, |
|
|
abstrakt = models.TextField('abstrakt', blank=True, |
|
|
help_text='Abstrakt konfery tak, jak byl uveden ve sborníku') |
|
|
help_text='Abstrakt konfery tak, jak byl uveden ve sborníku') |
|
|
|
|
|
|
|
|
organizator = models.ForeignKey(Organizator, verbose_name='organizátor', related_name='konfery', |
|
|
|
|
|
on_delete = models.SET_NULL, null=True) |
|
|
|
|
|
|
|
|
|
|
|
# FIXME: Umíme omezit jen na účastníky daného soustřeďka? |
|
|
# FIXME: Umíme omezit jen na účastníky daného soustřeďka? |
|
|
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery', |
|
|
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci konfery', |
|
|
help_text='Seznam účastníků konfery', through='Konfery_Ucastnici') |
|
|
help_text='Seznam účastníků konfery', through='Konfery_Ucastnici') |
|
@ -1126,13 +1101,6 @@ class Konfera(models.Model): |
|
|
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění', |
|
|
soustredeni = models.ForeignKey(Soustredeni, verbose_name='soustředění', |
|
|
related_name='konfery', on_delete = models.SET_NULL, null=True) |
|
|
related_name='konfery', on_delete = models.SET_NULL, null=True) |
|
|
|
|
|
|
|
|
poznamka = models.TextField('neveřejná poznámka', blank=True, |
|
|
|
|
|
help_text='Neveřejná poznámka ke konfeře(plain text)') |
|
|
|
|
|
# Jedno reseni se vztahuje nejvyse k jedne konfere |
|
|
|
|
|
reseni = models.OneToOneField(Reseni, verbose_name='článek ke konfeře', related_name='konfery', |
|
|
|
|
|
help_text='Účastnický přípěvek o konfeře', on_delete = models.SET_NULL, |
|
|
|
|
|
null=True, blank=True) |
|
|
|
|
|
|
|
|
|
|
|
TYP_VELETRH = 'veletrh' |
|
|
TYP_VELETRH = 'veletrh' |
|
|
TYP_PREZENTACE = 'prezentace' |
|
|
TYP_PREZENTACE = 'prezentace' |
|
|
TYP_CHOICES = [ |
|
|
TYP_CHOICES = [ |
|
@ -1149,21 +1117,9 @@ class Konfera(models.Model): |
|
|
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru', |
|
|
help_text = 'Další materiály ke konfeře zabalené do jednoho souboru', |
|
|
upload_to = generate_filename_konfera, blank=True) |
|
|
upload_to = generate_filename_konfera, blank=True) |
|
|
|
|
|
|
|
|
# má OneToOneField s: |
|
|
|
|
|
# KonferaNode |
|
|
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
def __str__(self): |
|
|
return "{}: ({})".format(self.nazev, self.soustredeni) |
|
|
return "{}: ({})".format(self.nazev, self.soustredeni) |
|
|
|
|
|
|
|
|
def save(self, *args, **kwargs): |
|
|
|
|
|
super().save(*args, **kwargs) |
|
|
|
|
|
# *Node.save() aktualizuje název *Nodu. |
|
|
|
|
|
try: |
|
|
|
|
|
self.konferanode.save() |
|
|
|
|
|
except ObjectDoesNotExist: |
|
|
|
|
|
# Neexistující *Node nemá smysl aktualizovat. |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Vazebna tabulka. Mozna se generuje automaticky. |
|
|
# Vazebna tabulka. Mozna se generuje automaticky. |
|
|
@reversion.register(ignore_duplicates=True) |
|
|
@reversion.register(ignore_duplicates=True) |
|
@ -1376,36 +1332,30 @@ class TemaVCisleNode(TreeNode): |
|
|
def getOdkazStr(self): |
|
|
def getOdkazStr(self): |
|
|
return str(self.tema) |
|
|
return str(self.tema) |
|
|
|
|
|
|
|
|
class KonferaNode(TreeNode): |
|
|
class OrgTextNode(TreeNode): |
|
|
class Meta: |
|
|
|
|
|
db_table = 'seminar_nodes_konfera' |
|
|
|
|
|
verbose_name = 'Konfera (Node)' |
|
|
|
|
|
verbose_name_plural = 'Konfery (Node)' |
|
|
|
|
|
konfera = models.OneToOneField(Konfera, |
|
|
|
|
|
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně |
|
|
|
|
|
verbose_name = "konfera", |
|
|
|
|
|
null=True, |
|
|
|
|
|
blank=False) |
|
|
|
|
|
|
|
|
|
|
|
def aktualizuj_nazev(self): |
|
|
|
|
|
self.nazev = "KonferaNode: "+str(self.konfera) |
|
|
|
|
|
|
|
|
|
|
|
class ClanekNode(TreeNode): |
|
|
|
|
|
class Meta: |
|
|
class Meta: |
|
|
db_table = 'seminar_nodes_clanek' |
|
|
db_table = 'seminar_nodes_clanek' |
|
|
verbose_name = 'Článek (Node)' |
|
|
verbose_name = 'Článek (Node)' |
|
|
verbose_name_plural = 'Články (Node)' |
|
|
verbose_name_plural = 'Články (Node)' |
|
|
clanek = models.OneToOneField(Clanek, |
|
|
|
|
|
on_delete=models.PROTECT, # Pokud chci mazat téma, musím si Node pořešit ručně |
|
|
organizator = models.ForeignKey(Organizator, |
|
|
verbose_name = "článek", |
|
|
null=False, |
|
|
null=True, |
|
|
blank=False, |
|
|
blank=False) |
|
|
on_delete=models.DO_NOTHING, |
|
|
|
|
|
verbose_name="Organizátor", |
|
|
|
|
|
) |
|
|
|
|
|
org_verejny = models.BooleanField(default = True, |
|
|
|
|
|
verbose_name = "Org je veřejný?", |
|
|
|
|
|
help_text = "Pokud ano, bude org pod článkem podepsaný", |
|
|
|
|
|
null=False, |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
def aktualizuj_nazev(self): |
|
|
def aktualizuj_nazev(self): |
|
|
self.nazev = "ClanekNode: "+str(self.clanek) |
|
|
return f"OrgTextNode začínající následujícim: {self.first_child.nazev}" |
|
|
|
|
|
|
|
|
def getOdkazStr(self): |
|
|
# FIXME!!! |
|
|
return str(self.clanek) |
|
|
#def getOdkazStr(self): |
|
|
|
|
|
# return str(self.clanek) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UlohaZadaniNode(TreeNode): |
|
|
class UlohaZadaniNode(TreeNode): |
|
@ -1486,7 +1436,7 @@ class CastNode(TreeNode): |
|
|
def getOdkazStr(self): |
|
|
def getOdkazStr(self): |
|
|
return str(self.nadpis) |
|
|
return str(self.nadpis) |
|
|
|
|
|
|
|
|
class OtisteneReseniNode(TreeNode): |
|
|
class ReseniNode(TreeNode): |
|
|
class Meta: |
|
|
class Meta: |
|
|
db_table = 'seminar_nodes_otistene_reseni' |
|
|
db_table = 'seminar_nodes_otistene_reseni' |
|
|
verbose_name = 'Otištěné řešení (Node)' |
|
|
verbose_name = 'Otištěné řešení (Node)' |
|
|