diff --git a/seminar/models.py b/seminar/models.py index a2767870..96bc88cd 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -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' @@ -577,6 +683,21 @@ class Clanek(Problem): # return force_unicode(self.nadproblem.kod_v_rocniku()+".c{}".format(self.kod)) return force_unicode("c{}".format(self.kod)) return '' + +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: @@ -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):