|
|
@ -449,6 +449,112 @@ class Cislo(SeminarModelBase): |
|
|
|
return None |
|
|
|
return c |
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
|
class Organizator(SeminarModelBase): |
|
|
|
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu |
|
|
|
|
|
|
|
osoba = models.ForeignKey(Osoba, verbose_name='osoba', related_name='org', |
|
|
|
help_text='osobní údaje organizátora', null=False, blank=False) |
|
|
|
|
|
|
|
vytvoreno = models.DateTimeField( |
|
|
|
'Vytvořeno', |
|
|
|
default=timezone.now, |
|
|
|
blank=True, |
|
|
|
editable=False |
|
|
|
) |
|
|
|
|
|
|
|
organizuje_od = models.DateTimeField('Organizuje od', blank=False, null=False) |
|
|
|
|
|
|
|
organizuje_do = models.DateTimeField('Organizuje do', blank=True, null=True) |
|
|
|
|
|
|
|
studuje = models.CharField('Studium aj.', max_length = 256, |
|
|
|
null = True, blank = True, |
|
|
|
help_text=u"Např. 'Studuje Obecnou fyziku (Bc.), 3. ročník', " |
|
|
|
"'Vystudovala Diskrétní modely a algoritmy (Mgr.)' nebo " |
|
|
|
"'Přednáší na MFF'") |
|
|
|
|
|
|
|
strucny_popis_organizatora = models.TextField('Stručný popis organizátora', |
|
|
|
null = True, blank = True) |
|
|
|
|
|
|
|
skola = models.CharField('Škola, kterou studuje', max_length = 256, null=True, blank=True, |
|
|
|
help_text=u"Škola, např. MFF, VŠCHT, VUT, ... prostě aby se nemuselo psát do studuje" |
|
|
|
"školu, ale jen obor, možnost zobrazit zvlášť") |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
if self.osoba.prezdivka: |
|
|
|
return u"%s '%s' %s".format(self.osoba.jmeno, |
|
|
|
self.osoba.prezdivka, |
|
|
|
self.osoba.prijmeni) |
|
|
|
else: |
|
|
|
return u"%s %s".format(self.osoba.jmeno, self.osoba.prijmeni) |
|
|
|
|
|
|
|
class Meta: |
|
|
|
verbose_name = 'Organizátor' |
|
|
|
verbose_name_plural = 'Organizátoři' |
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
|
class Soustredeni(SeminarModelBase): |
|
|
|
|
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_soustredeni' |
|
|
|
verbose_name = 'Soustředění' |
|
|
|
verbose_name_plural = 'Soustředění' |
|
|
|
ordering = ['-rocnik__rocnik', '-datum_zacatku'] |
|
|
|
|
|
|
|
# Interní ID |
|
|
|
id = models.AutoField(primary_key = True) |
|
|
|
|
|
|
|
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='soustredeni') |
|
|
|
|
|
|
|
datum_zacatku = models.DateField('datum začátku', blank=True, null=True, |
|
|
|
help_text='První den soustředění') |
|
|
|
|
|
|
|
datum_konce = models.DateField('datum konce', blank=True, null=True, |
|
|
|
help_text='Poslední den soustředění') |
|
|
|
|
|
|
|
verejne_db = models.BooleanField('soustředění zveřejněno', db_column='verejne', default=False) |
|
|
|
|
|
|
|
misto = models.CharField('místo soustředění', max_length=256, blank=True, default='', |
|
|
|
help_text='Místo (název obce, volitelně též objektu') |
|
|
|
|
|
|
|
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci soustředění', |
|
|
|
help_text='Seznam účastníků soustředění', through='Soustredeni_Ucastnici') |
|
|
|
|
|
|
|
organizatori = models.ManyToManyField(Organizator, |
|
|
|
verbose_name='Organizátoři soustředění', |
|
|
|
help_text='Seznam organizátorů soustředění', |
|
|
|
through='Soustredeni_Organizatori') |
|
|
|
|
|
|
|
text = models.TextField('text k soustředění (HTML)', blank=True, default='') |
|
|
|
|
|
|
|
TYP_JARNI = 'jarni' |
|
|
|
TYP_PODZIMNI = 'podzimni' |
|
|
|
TYP_VIKEND = 'vikend' |
|
|
|
TYP_CHOICES = [ |
|
|
|
(TYP_JARNI, 'Jarní soustředění'), |
|
|
|
(TYP_PODZIMNI, 'Podzimní soustředění'), |
|
|
|
(TYP_VIKEND, 'Víkendový sraz'), |
|
|
|
] |
|
|
|
typ = models.CharField('typ akce', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_PODZIMNI) |
|
|
|
|
|
|
|
exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False, |
|
|
|
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)') |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
return force_unicode('%s (%s)'.format(self.misto, self.datum_zacatku)) |
|
|
|
|
|
|
|
def verejne(self): |
|
|
|
return self.verejne_db |
|
|
|
verejne.boolean = True |
|
|
|
|
|
|
|
def verejne_url(self): |
|
|
|
#return reverse('seminar_soustredeni', kwargs={'pk': self.id}) |
|
|
|
return reverse('seminar_seznam_soustredeni') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
@ -467,7 +573,7 @@ class Problem(SeminarModelBase): |
|
|
|
nazev = models.CharField('název', max_length=256) |
|
|
|
|
|
|
|
# Problém má podproblémy |
|
|
|
nadproblem = models.ForeignKey(Problem, verbose_name='nadřazený problém', |
|
|
|
nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém', |
|
|
|
related_name='nadproblem', null=True, blank=True) |
|
|
|
|
|
|
|
STAV_NAVRH = 'navrh' |
|
|
@ -578,6 +684,21 @@ class Clanek(Problem): |
|
|
|
return force_unicode("c{}".format(self.kod)) |
|
|
|
return '<Není zadaný>' |
|
|
|
|
|
|
|
class Text(SeminarModelBase): |
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_texty' |
|
|
|
verbose_name = 'text' |
|
|
|
verbose_name_plural = 'texty' |
|
|
|
|
|
|
|
na_web = models.TextField('text na web', blank=True, |
|
|
|
help_text='Text ke zveřejnění na webu') |
|
|
|
|
|
|
|
do_cisla = models.TextField('text do čísla', blank=True, |
|
|
|
help_text='Text ke zveřejnění v čísle') |
|
|
|
|
|
|
|
# obrázky mají návaznost opačným směrem (vazba z druhé strany) |
|
|
|
|
|
|
|
|
|
|
|
class Uloha(Problem): |
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_ulohy' |
|
|
@ -671,7 +792,7 @@ class Hodnoceni(SeminarModelBase): |
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_hodnoceni' |
|
|
|
verbose_name = 'Hodnocení' |
|
|
|
verbose_name_plular = 'Hodnocení' |
|
|
|
verbose_name_plural = 'Hodnocení' |
|
|
|
|
|
|
|
# Interní ID |
|
|
|
id = models.AutoField(primary_key = True) |
|
|
@ -707,20 +828,18 @@ class Hodnoceni(SeminarModelBase): |
|
|
|
# podle adresáře řešíme takto. |
|
|
|
|
|
|
|
## |
|
|
|
## FIXME: Budeme řešit později, pokud to bude potřeba. |
|
|
|
#def generate_filename_konfera(self, filename): |
|
|
|
# return os.path.join( |
|
|
|
# settings.SEMINAR_KONFERY_DIR, |
|
|
|
# aux_generate_filename(self, filename) |
|
|
|
# ) |
|
|
|
def generate_filename_konfera(self, filename): |
|
|
|
return os.path.join( |
|
|
|
settings.SEMINAR_KONFERY_DIR, |
|
|
|
aux_generate_filename(self, filename) |
|
|
|
) |
|
|
|
|
|
|
|
## |
|
|
|
## FIXME: Budeme řešit později, pokud to bude potřeba. |
|
|
|
#def generate_filename(self, filename): |
|
|
|
# return os.path.join( |
|
|
|
# settings.SEMINAR_RESENI_DIR, |
|
|
|
# aux_generate_filename(self, filename) |
|
|
|
# ) |
|
|
|
def generate_filename(self, filename): |
|
|
|
return os.path.join( |
|
|
|
settings.SEMINAR_RESENI_DIR, |
|
|
|
aux_generate_filename(self, filename) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
@ -794,112 +913,6 @@ class Pohadka(SeminarModelBase): |
|
|
|
return force_unicode(uryvek) |
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
|
class Organizator(SeminarModelBase): |
|
|
|
# zmena dedicnosti z models.Model na SeminarModelBase, potencialni vznik bugu |
|
|
|
|
|
|
|
osoba = models.ForeignKey(Osoba, verbose_name='osoba', related_name='org', |
|
|
|
help_text='osobní údaje organizátora', null=False, blank=False) |
|
|
|
|
|
|
|
vytvoreno = models.DateTimeField( |
|
|
|
'Vytvořeno', |
|
|
|
default=timezone.now, |
|
|
|
blank=True, |
|
|
|
editable=False |
|
|
|
) |
|
|
|
|
|
|
|
organizuje_od = models.DateTimeField('Organizuje od', blank=False, null=False) |
|
|
|
|
|
|
|
organizuje_do = models.DateTimeField('Organizuje do', blank=True, null=True) |
|
|
|
|
|
|
|
studuje = models.CharField('Studium aj.', max_length = 256, |
|
|
|
null = True, blank = True, |
|
|
|
help_text=u"Např. 'Studuje Obecnou fyziku (Bc.), 3. ročník', " |
|
|
|
"'Vystudovala Diskrétní modely a algoritmy (Mgr.)' nebo " |
|
|
|
"'Přednáší na MFF'") |
|
|
|
|
|
|
|
strucny_popis_organizatora = models.TextField('Stručný popis organizátora', |
|
|
|
null = True, blank = True) |
|
|
|
|
|
|
|
skola = models.CharField('Škola, kterou studuje', max_length = 256, null=True, blank=True, |
|
|
|
help_text=u"Škola, např. MFF, VŠCHT, VUT, ... prostě aby se nemuselo psát do studuje" |
|
|
|
"školu, ale jen obor, možnost zobrazit zvlášť") |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
if self.osoba.prezdivka: |
|
|
|
return u"%s '%s' %s".format(self.osoba.jmeno, |
|
|
|
self.osoba.prezdivka, |
|
|
|
self.osoba.prijmeni) |
|
|
|
else: |
|
|
|
return u"%s %s".format(self.osoba.jmeno, self.osoba.prijmeni) |
|
|
|
|
|
|
|
class Meta: |
|
|
|
verbose_name = 'Organizátor' |
|
|
|
verbose_name_plural = 'Organizátoři' |
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
|
class Soustredeni(SeminarModelBase): |
|
|
|
|
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_soustredeni' |
|
|
|
verbose_name = 'Soustředění' |
|
|
|
verbose_name_plural = 'Soustředění' |
|
|
|
ordering = ['-rocnik__rocnik', '-datum_zacatku'] |
|
|
|
|
|
|
|
# Interní ID |
|
|
|
id = models.AutoField(primary_key = True) |
|
|
|
|
|
|
|
rocnik = models.ForeignKey(Rocnik, verbose_name='ročník', related_name='soustredeni') |
|
|
|
|
|
|
|
datum_zacatku = models.DateField('datum začátku', blank=True, null=True, |
|
|
|
help_text='První den soustředění') |
|
|
|
|
|
|
|
datum_konce = models.DateField('datum konce', blank=True, null=True, |
|
|
|
help_text='Poslední den soustředění') |
|
|
|
|
|
|
|
verejne_db = models.BooleanField('soustředění zveřejněno', db_column='verejne', default=False) |
|
|
|
|
|
|
|
misto = models.CharField('místo soustředění', max_length=256, blank=True, default='', |
|
|
|
help_text='Místo (název obce, volitelně též objektu') |
|
|
|
|
|
|
|
ucastnici = models.ManyToManyField(Resitel, verbose_name='účastníci soustředění', |
|
|
|
help_text='Seznam účastníků soustředění', through='Soustredeni_Ucastnici') |
|
|
|
|
|
|
|
organizatori = models.ManyToManyField(Organizator, |
|
|
|
verbose_name='Organizátoři soustředění', |
|
|
|
help_text='Seznam organizátorů soustředění', |
|
|
|
through='Soustredeni_Organizatori') |
|
|
|
|
|
|
|
text = models.TextField('text k soustředění (HTML)', blank=True, default='') |
|
|
|
|
|
|
|
TYP_JARNI = 'jarni' |
|
|
|
TYP_PODZIMNI = 'podzimni' |
|
|
|
TYP_VIKEND = 'vikend' |
|
|
|
TYP_CHOICES = [ |
|
|
|
(TYP_JARNI, 'Jarní soustředění'), |
|
|
|
(TYP_PODZIMNI, 'Podzimní soustředění'), |
|
|
|
(TYP_VIKEND, 'Víkendový sraz'), |
|
|
|
] |
|
|
|
typ = models.CharField('typ akce', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_PODZIMNI) |
|
|
|
|
|
|
|
exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False, |
|
|
|
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti)') |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
return force_unicode('%s (%s)'.format(self.misto, self.datum_zacatku)) |
|
|
|
|
|
|
|
def verejne(self): |
|
|
|
return self.verejne_db |
|
|
|
verejne.boolean = True |
|
|
|
|
|
|
|
def verejne_url(self): |
|
|
|
#return reverse('seminar_soustredeni', kwargs={'pk': self.id}) |
|
|
|
return reverse('seminar_seznam_soustredeni') |
|
|
|
|
|
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True) |
|
|
|
@python_2_unicode_compatible |
|
|
|
class Soustredeni_Ucastnici(SeminarModelBase): |
|
|
@ -1054,20 +1067,6 @@ class Obrazek(SeminarModelBase): |
|
|
|
help_text = 'Černobílá verze obrázku do čísla', |
|
|
|
upload_to = 'obrazky/%Y/%m/%d/', blank=True, null=True) |
|
|
|
|
|
|
|
class Text(SeminarModelBase): |
|
|
|
class Meta: |
|
|
|
db_table = 'seminar_texty' |
|
|
|
verbose_name = 'text' |
|
|
|
verbose_name_plular = 'texty' |
|
|
|
|
|
|
|
na_web = models.TextField('text na web', blank=True, |
|
|
|
help_text='Text ke zveřejnění na webu') |
|
|
|
|
|
|
|
do_cisla = models.TextField('text do čísla', blank=True, |
|
|
|
help_text='Text ke zveřejnění v čísle') |
|
|
|
|
|
|
|
# obrázky mají návaznost opačným směrem (vazba z druhé strany) |
|
|
|
|
|
|
|
## FIXME: Logiku přesunout do views. |
|
|
|
#@python_2_unicode_compatible |
|
|
|
#class VysledkyBase(SeminarModelBase): |
|
|
|