Merge branch 'data_migrations' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into data_migrations
This commit is contained in:
commit
34f44c5c99
6 changed files with 135 additions and 102 deletions
|
@ -18,13 +18,13 @@ from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
|
|
||||||
class UserModelChoiceField(forms.ModelChoiceField):
|
class UserModelChoiceField(forms.ModelChoiceField):
|
||||||
u"""Vlastní ModelChoiceField pro uživatele. Zobrazí kromě loginu i jméno.
|
"""Vlastní ModelChoiceField pro uživatele. Zobrazí kromě loginu i jméno.
|
||||||
"""
|
"""
|
||||||
def label_from_instance(self, obj):
|
def label_from_instance(self, obj):
|
||||||
return u"{} ({})".format(obj.get_full_name(), obj.username)
|
return "{} ({})".format(obj.get_full_name(), obj.username)
|
||||||
|
|
||||||
def get_form_predvypln_autora(self, request, obj=None, *args, **kwargs):
|
def get_form_predvypln_autora(self, request, obj=None, *args, **kwargs):
|
||||||
u"""get_form fce pro Adminy. Předvyplňí přihlášeného uživatele jako autora.
|
"""get_form fce pro Adminy. Předvyplňí přihlášeného uživatele jako autora.
|
||||||
"""
|
"""
|
||||||
form = super(self.__class__, self).get_form(request, *args, **kwargs)
|
form = super(self.__class__, self).get_form(request, *args, **kwargs)
|
||||||
form.base_fields['autor'].initial = request.user.id
|
form.base_fields['autor'].initial = request.user.id
|
||||||
|
@ -32,7 +32,7 @@ def get_form_predvypln_autora(self, request, obj=None, *args, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def make_set_action(atribut, hodnota, nazev):
|
def make_set_action(atribut, hodnota, nazev):
|
||||||
u"""
|
"""
|
||||||
Pomocnik pro rychle vytvareni hromadnych admin akci ktere jen nastavuji
|
Pomocnik pro rychle vytvareni hromadnych admin akci ktere jen nastavuji
|
||||||
atribut (dany jako string) na danou hodnotu.
|
atribut (dany jako string) na danou hodnotu.
|
||||||
nazev je krátký popis akce pro admin rozhraní."""
|
nazev je krátký popis akce pro admin rozhraní."""
|
||||||
|
@ -214,10 +214,10 @@ class ResitelAdmin(VersionAdmin):
|
||||||
fk_name = 'osoba'
|
fk_name = 'osoba'
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['jmeno', 'prijmeni', 'user']}),
|
(None, {'fields': ['jmeno', 'prijmeni', 'user']}),
|
||||||
(u'Škola', {'fields': ['skola', 'rok_maturity']}),
|
('Škola', {'fields': ['skola', 'rok_maturity']}),
|
||||||
(u'Seminář', {'fields': ['datum_souhlasu_udaje', 'datum_souhlasu_zasilani', 'datum_prihlaseni', 'zasilat']}),
|
('Seminář', {'fields': ['datum_souhlasu_udaje', 'datum_souhlasu_zasilani', 'datum_prihlaseni', 'zasilat']}),
|
||||||
(u'Osobní údaje', {'fields': ['pohlavi_muz', 'datum_narozeni', 'email', 'telefon']}),
|
('Osobní údaje', {'fields': ['pohlavi_muz', 'datum_narozeni', 'email', 'telefon']}),
|
||||||
(u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}),
|
('Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}),
|
||||||
]
|
]
|
||||||
list_display = ['osoba__jmeno', 'osoba__prijmeni', 'osoba__user', 'osoba__pohlavi_muz', 'skola', 'rok_maturity', 'pocet_reseni']
|
list_display = ['osoba__jmeno', 'osoba__prijmeni', 'osoba__user', 'osoba__pohlavi_muz', 'skola', 'rok_maturity', 'pocet_reseni']
|
||||||
list_filter = ['osoba__pohlavi_muz', 'rok_maturity', 'zasilat']
|
list_filter = ['osoba__pohlavi_muz', 'rok_maturity', 'zasilat']
|
||||||
|
@ -262,8 +262,8 @@ admin.site.register(Resitel, ResitelAdmin)
|
||||||
class SkolaAdmin(VersionAdmin):
|
class SkolaAdmin(VersionAdmin):
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['nazev', 'kratky_nazev', 'je_zs', 'je_ss']}),
|
(None, {'fields': ['nazev', 'kratky_nazev', 'je_zs', 'je_ss']}),
|
||||||
(u'Interní ID', {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}),
|
('Interní ID', {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}),
|
||||||
(u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}),
|
('Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}),
|
||||||
(None, {'fields': ['poznamka']}),
|
(None, {'fields': ['poznamka']}),
|
||||||
]
|
]
|
||||||
list_display = ['nazev', 'aesop_id', 'mesto', 'ulice', 'stat', 'je_zs', 'je_ss']
|
list_display = ['nazev', 'aesop_id', 'mesto', 'ulice', 'stat', 'je_zs', 'je_ss']
|
||||||
|
@ -328,8 +328,8 @@ class RocnikAdmin(VersionAdmin):
|
||||||
inlines = [CisloInline]
|
inlines = [CisloInline]
|
||||||
view_on_site = Rocnik.verejne_url
|
view_on_site = Rocnik.verejne_url
|
||||||
actions = [
|
actions = [
|
||||||
make_set_action('exportovat', True, u'Nastavit pro AESOP export'),
|
make_set_action('exportovat', True, 'Nastavit pro AESOP export'),
|
||||||
make_set_action('exportovat', False, u'Skrýt pro AESOP export'),
|
make_set_action('exportovat', False, 'Skrýt pro AESOP export'),
|
||||||
]
|
]
|
||||||
|
|
||||||
admin.site.register(Rocnik, RocnikAdmin)
|
admin.site.register(Rocnik, RocnikAdmin)
|
||||||
|
@ -341,7 +341,7 @@ admin.site.register(Rocnik, RocnikAdmin)
|
||||||
# readonly_fields = ['timestamp', 'reseni']
|
# readonly_fields = ['timestamp', 'reseni']
|
||||||
# fieldsets = [
|
# fieldsets = [
|
||||||
# (None, {'fields': ['reseni', 'soubor', 'timestamp']}),
|
# (None, {'fields': ['reseni', 'soubor', 'timestamp']}),
|
||||||
# (u'Poznámky', {'fields': ['poznamka']}),
|
# ('Poznámky', {'fields': ['poznamka']}),
|
||||||
# ]
|
# ]
|
||||||
# list_display = ['reseni', 'soubor', 'timestamp']
|
# list_display = ['reseni', 'soubor', 'timestamp']
|
||||||
# list_filter = ['reseni', 'timestamp']
|
# list_filter = ['reseni', 'timestamp']
|
||||||
|
@ -356,7 +356,7 @@ class ReseniAdmin(VersionAdmin):
|
||||||
#form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem', 'resitele'], fields=['problem', 'resitele'])
|
#form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem', 'resitele'], fields=['problem', 'resitele'])
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['problem__set', 'resitele__set', 'forma', 'cas_doruceni']}),
|
(None, {'fields': ['problem__set', 'resitele__set', 'forma', 'cas_doruceni']}),
|
||||||
(u'Poznámky', {'fields': ['poznamka']}),
|
('Poznámky', {'fields': ['poznamka']}),
|
||||||
]
|
]
|
||||||
readonly_fields = ['cas_doruceni']
|
readonly_fields = ['cas_doruceni']
|
||||||
list_display = [ResitelInline, 'forma', 'cas_doruceni']
|
list_display = [ResitelInline, 'forma', 'cas_doruceni']
|
||||||
|
@ -400,11 +400,11 @@ class PohadkaAdmin(VersionAdmin):
|
||||||
|
|
||||||
def get_kod_ulohy(self, obj):
|
def get_kod_ulohy(self, obj):
|
||||||
return obj.uloha.kod_v_rocniku()
|
return obj.uloha.kod_v_rocniku()
|
||||||
get_kod_ulohy.short_description = u'Kód úlohy'
|
get_kod_ulohy.short_description = 'Kód úlohy'
|
||||||
|
|
||||||
def get_rocnik(self, obj):
|
def get_rocnik(self, obj):
|
||||||
return obj.uloha.cislo_zadani.rocnik.rocnik
|
return obj.uloha.cislo_zadani.rocnik.rocnik
|
||||||
get_rocnik.short_description = u'Ročník'
|
get_rocnik.short_description = 'Ročník'
|
||||||
|
|
||||||
list_display = [
|
list_display = [
|
||||||
'__str__',
|
'__str__',
|
||||||
|
@ -477,7 +477,7 @@ class ProblemAdmin(VersionAdmin):
|
||||||
form = ProblemAdminForm
|
form = ProblemAdminForm
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['nazev', 'typ', 'stav', 'autor', 'zamereni', 'body', 'timestamp', 'import_dakos_id']}),
|
(None, {'fields': ['nazev', 'typ', 'stav', 'autor', 'zamereni', 'body', 'timestamp', 'import_dakos_id']}),
|
||||||
(u'Vydání', {'fields': ['kod', 'cislo_reseni', 'opravovatel',]}),
|
('Vydání', {'fields': ['kod', 'cislo_reseni', 'opravovatel',]}),
|
||||||
(None, {'fields': ['text_zadani', 'text_reseni', 'text_org',]}),
|
(None, {'fields': ['text_zadani', 'text_reseni', 'text_org',]}),
|
||||||
]
|
]
|
||||||
list_select_related = True
|
list_select_related = True
|
||||||
|
@ -506,7 +506,7 @@ class ProblemNavrhAdmin(ProblemAdmin):
|
||||||
|
|
||||||
|
|
||||||
#FIXME
|
#FIXME
|
||||||
#create_modeladmin(ProblemNavrhAdmin, Problem, 'ProblemNavrh', verbose_name=u'Problém (návrh)', verbose_name_plural=u'Problémy (návrhy)')
|
#create_modeladmin(ProblemNavrhAdmin, Problem, 'ProblemNavrh', verbose_name='Problém (návrh)', verbose_name_plural='Problémy (návrhy)')
|
||||||
|
|
||||||
|
|
||||||
class ProblemZadanyAdmin(ProblemAdmin):
|
class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
|
@ -531,7 +531,7 @@ class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
reverse("admin:seminar_cislo_change", args=(obj.cislo_zadani.pk,)),
|
reverse("admin:seminar_cislo_change", args=(obj.cislo_zadani.pk,)),
|
||||||
obj.cislo_zadani
|
obj.cislo_zadani
|
||||||
))
|
))
|
||||||
cislo_zadani_link.short_description = u'Číslo zadání'
|
cislo_zadani_link.short_description = 'Číslo zadání'
|
||||||
|
|
||||||
# TODO pokud se budou odkazy v adminu více používat, možná by se hodilo je
|
# TODO pokud se budou odkazy v adminu více používat, možná by se hodilo je
|
||||||
# nějak zjednodušit, např. tímto?
|
# nějak zjednodušit, např. tímto?
|
||||||
|
@ -543,7 +543,7 @@ class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
reverse("admin:seminar_cislo_change", args=(obj.cislo_reseni.pk,)),
|
reverse("admin:seminar_cislo_change", args=(obj.cislo_reseni.pk,)),
|
||||||
obj.cislo_reseni
|
obj.cislo_reseni
|
||||||
))
|
))
|
||||||
cislo_reseni_link.short_description = u'Číslo řešení'
|
cislo_reseni_link.short_description = 'Číslo řešení'
|
||||||
|
|
||||||
def get_inline_instances(self, request, obj=None):
|
def get_inline_instances(self, request, obj=None):
|
||||||
if obj and obj.typ == Problem.TYP_ULOHA:
|
if obj and obj.typ == Problem.TYP_ULOHA:
|
||||||
|
@ -560,7 +560,7 @@ class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
get_form = get_form_predvypln_autora
|
get_form = get_form_predvypln_autora
|
||||||
|
|
||||||
#FIXME
|
#FIXME
|
||||||
#create_modeladmin(ProblemZadanyAdmin, Problem, 'ProblemZadany', verbose_name=u'Problém (zadaný)', verbose_name_plural=u'Problémy (zadané)')
|
#create_modeladmin(ProblemZadanyAdmin, Problem, 'ProblemZadany', verbose_name='Problém (zadaný)', verbose_name_plural='Problémy (zadané)')
|
||||||
|
|
||||||
#admin.site.register(Problem, ProblemAdmin)
|
#admin.site.register(Problem, ProblemAdmin)
|
||||||
|
|
||||||
|
@ -601,10 +601,10 @@ class SoustredeniAdmin(VersionAdmin):
|
||||||
list_filter = ['typ', 'rocnik']
|
list_filter = ['typ', 'rocnik']
|
||||||
view_on_site = Soustredeni.verejne_url
|
view_on_site = Soustredeni.verejne_url
|
||||||
actions = [
|
actions = [
|
||||||
make_set_action('verejne_db', True, u'Zveřejnit soustředění'),
|
make_set_action('verejne_db', True, 'Zveřejnit soustředění'),
|
||||||
make_set_action('verejne_db', False, u'Skrýt (zneveřejnit) soustředění'),
|
make_set_action('verejne_db', False, 'Skrýt (zneveřejnit) soustředění'),
|
||||||
make_set_action('exportovat', True, u'Nastavit pro AESOP export'),
|
make_set_action('exportovat', True, 'Nastavit pro AESOP export'),
|
||||||
make_set_action('exportovat', False, u'Skrýt pro AESOP export'),
|
make_set_action('exportovat', False, 'Skrýt pro AESOP export'),
|
||||||
]
|
]
|
||||||
|
|
||||||
admin.site.register(Soustredeni, SoustredeniAdmin)
|
admin.site.register(Soustredeni, SoustredeniAdmin)
|
||||||
|
|
|
@ -91,8 +91,7 @@ def clanek_to_Clanek(apps,schema_editor):
|
||||||
elif cl.cislo_reseni_old == cl.cislo_zadani_old:
|
elif cl.cislo_reseni_old == cl.cislo_zadani_old:
|
||||||
cislo = cl.cislo_zadani_old
|
cislo = cl.cislo_zadani_old
|
||||||
else:
|
else:
|
||||||
cislo = cl.cislo_zadani_old
|
raise ValueError("Různá čísla zadání a řešení u článku! (Článek: {})".format(cl.nazev))
|
||||||
#raise ValueError("Různá čísla zadání a řešení u článku!")
|
|
||||||
|
|
||||||
clnew = Clanek.objects.create(
|
clnew = Clanek.objects.create(
|
||||||
problem_ptr = cl,
|
problem_ptr = cl,
|
||||||
|
@ -132,7 +131,7 @@ def tema_to_Tema(apps, schema_editor):
|
||||||
elif t.cislo_reseni_old.rocnik == t.cislo_zadani_old.rocnik:
|
elif t.cislo_reseni_old.rocnik == t.cislo_zadani_old.rocnik:
|
||||||
rocnik = t.cislo_zadani_old.rocnik
|
rocnik = t.cislo_zadani_old.rocnik
|
||||||
else:
|
else:
|
||||||
raise ValueError("Nelze mít téma přes více ročníků!")
|
raise ValueError("Nelze mít téma přes více ročníků! (Téma: {}".format(t.nazev))
|
||||||
|
|
||||||
tnew = Tema.objects.create(
|
tnew = Tema.objects.create(
|
||||||
problem_ptr = t,
|
problem_ptr = t,
|
||||||
|
|
|
@ -115,6 +115,11 @@ class Osoba(SeminarModelBase):
|
||||||
],
|
],
|
||||||
options={'quality': 95})
|
options={'quality': 95})
|
||||||
|
|
||||||
|
# má OneToOneField nejvýše s:
|
||||||
|
# Resitel
|
||||||
|
# Prijemce
|
||||||
|
# Organizator
|
||||||
|
|
||||||
def plne_jmeno(self):
|
def plne_jmeno(self):
|
||||||
return '{} {}'.format(self.jmeno, self.prijmeni)
|
return '{} {}'.format(self.jmeno, self.prijmeni)
|
||||||
|
|
||||||
|
@ -314,7 +319,11 @@ class Rocnik(SeminarModelBase):
|
||||||
rocnik = models.IntegerField('číslo ročníku', db_index=True, unique=True)
|
rocnik = models.IntegerField('číslo ročníku', db_index=True, unique=True)
|
||||||
|
|
||||||
exportovat = models.BooleanField('export do AESOPa', db_column='exportovat', default=False,
|
exportovat = models.BooleanField('export do AESOPa', 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')
|
help_text='Exportuje se jen podle tohoto flagu (ne veřejnosti),'
|
||||||
|
' a to jen čísla s veřejnou výsledkovkou')
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# RocnikNode
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{} ({}/{})'.format(self.rocnik, self.prvni_rok, self.prvni_rok+1)
|
return '{} ({}/{})'.format(self.rocnik, self.prvni_rok, self.prvni_rok+1)
|
||||||
|
@ -409,6 +418,8 @@ class Cislo(SeminarModelBase):
|
||||||
pdf = models.FileField('pdf', upload_to=cislo_pdf_filename, null=True, blank=True,
|
pdf = models.FileField('pdf', upload_to=cislo_pdf_filename, null=True, blank=True,
|
||||||
help_text='Pdf čísla, které si mohou řešitelé stáhnout')
|
help_text='Pdf čísla, které si mohou řešitelé stáhnout')
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# CisloNode
|
||||||
|
|
||||||
def kod(self):
|
def kod(self):
|
||||||
return '%s.%s' % (self.rocnik.rocnik, self.cislo)
|
return '%s.%s' % (self.rocnik.rocnik, self.cislo)
|
||||||
|
@ -560,7 +571,10 @@ class Problem(SeminarModelBase):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
# Není abstraktní, protože se na něj jinak nedají dělat ForeignKeys.
|
# Není abstraktní, protože se na něj jinak nedají dělat ForeignKeys.
|
||||||
# TODO: Udělat to polymorfní (pomocí django-polymorphic), abychom dostali po těch vazbách přímo tu úlohu/témátko vč. fieldů, které nejsou součástí modelu Problem?
|
# TODO: Udělat to polymorfní (pomocí django-polymorphic), abychom dostali
|
||||||
|
# po těch vazbách přímo tu úlohu/témátko vč. fieldů, které nejsou součástí
|
||||||
|
# modelu Problem?
|
||||||
|
|
||||||
#abstract = True
|
#abstract = True
|
||||||
db_table = 'seminar_problemy'
|
db_table = 'seminar_problemy'
|
||||||
verbose_name = 'Problém'
|
verbose_name = 'Problém'
|
||||||
|
@ -678,6 +692,10 @@ class Clanek(Problem):
|
||||||
verbose_name_plural = 'Články'
|
verbose_name_plural = 'Články'
|
||||||
|
|
||||||
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=True)
|
cislo = models.ForeignKey(Cislo, verbose_name='číslo', blank=True, null=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
|
||||||
|
@ -698,9 +716,13 @@ class Text(SeminarModelBase):
|
||||||
do_cisla = models.TextField('text do čísla', blank=True,
|
do_cisla = models.TextField('text do čísla', blank=True,
|
||||||
help_text='Text ke zveřejnění v čísle')
|
help_text='Text ke zveřejnění v čísle')
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# Reseni (je u něj jako reseni_cele)
|
||||||
|
|
||||||
# obrázky mají návaznost opačným směrem (vazba z druhé strany)
|
# obrázky mají návaznost opačným směrem (vazba z druhé strany)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Uloha(Problem):
|
class Uloha(Problem):
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'seminar_ulohy'
|
db_table = 'seminar_ulohy'
|
||||||
|
@ -720,6 +742,10 @@ class Uloha(Problem):
|
||||||
max_body = models.DecimalField(max_digits=8, decimal_places=1, verbose_name='maximum bodů',
|
max_body = models.DecimalField(max_digits=8, decimal_places=1, verbose_name='maximum bodů',
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# UlohaZadaniNode
|
||||||
|
# UlohaVzorakNode
|
||||||
|
|
||||||
def kod_v_rocniku(self):
|
def kod_v_rocniku(self):
|
||||||
if self.stav == 'zadany':
|
if self.stav == 'zadany':
|
||||||
name="{}.u{}".format(self.cislo_zadani.cislo,self.kod)
|
name="{}.u{}".format(self.cislo_zadani.cislo,self.kod)
|
||||||
|
@ -729,7 +755,6 @@ class Uloha(Problem):
|
||||||
return '<Není zadaný>'
|
return '<Není zadaný>'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicates=True)
|
@reversion.register(ignore_duplicates=True)
|
||||||
class Reseni(SeminarModelBase):
|
class Reseni(SeminarModelBase):
|
||||||
|
|
||||||
|
@ -776,6 +801,9 @@ class Reseni(SeminarModelBase):
|
||||||
zverejneno = models.BooleanField('řešení zveřejněno', default=False,
|
zverejneno = models.BooleanField('řešení zveřejněno', default=False,
|
||||||
help_text='Udává, zda je řešení zveřejněno')
|
help_text='Udává, zda je řešení zveřejněno')
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# Konfera
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{}: {}".format(self.resitel.osoba.plne_jmeno(), self.problem.nazev)
|
return "{}: {}".format(self.resitel.osoba.plne_jmeno(), self.problem.nazev)
|
||||||
# NOTE: Potenciální DB HOG (bez select_related)
|
# NOTE: Potenciální DB HOG (bez select_related)
|
||||||
|
@ -897,6 +925,9 @@ class Pohadka(SeminarModelBase):
|
||||||
editable=False
|
editable=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# má OneToOneField s:
|
||||||
|
# PohadkaNode
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
uryvek = self.text if len(self.text) < 50 else self.text[:(50-3)]+"..."
|
uryvek = self.text if len(self.text) < 50 else self.text[:(50-3)]+"..."
|
||||||
return uryvek
|
return uryvek
|
||||||
|
@ -1001,6 +1032,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)
|
||||||
|
|
||||||
|
|
71
seminar/old_views.py
Normal file
71
seminar/old_views.py
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
# Tento soubor slouží k odkládání aktuálně nepotřebného kódu, který by
|
||||||
|
# se však v budoucnu mohl opět hodit.
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
## Prispevek byl zrusen, mozna ale bude podobny nahled na neco jineho.
|
||||||
|
#class PrispevekView(generic.DetailView):
|
||||||
|
# model = Prispevek
|
||||||
|
# template_name = 'seminar/archiv/prispevek.html'
|
||||||
|
#
|
||||||
|
# # Vlastni ziskavani objektu z databaze podle prispevku
|
||||||
|
# # pokud je prispevek neverejny zobrazi se jenom orgum
|
||||||
|
# def get_object(self, queryset=None):
|
||||||
|
# if queryset is None:
|
||||||
|
# queryset = self.get_queryset()
|
||||||
|
# problem_arg = self.kwargs.get('pk')
|
||||||
|
# prispevek_arg = self.kwargs.get('prispevek')
|
||||||
|
# queryset = queryset.filter(pk=prispevek_arg)
|
||||||
|
#
|
||||||
|
# try:
|
||||||
|
# obj = queryset.get()
|
||||||
|
# except queryset.model.DoesNotExist:
|
||||||
|
# raise Http404(_("No %(verbose_name)s found matching the query") %
|
||||||
|
# {'verbose_name': queryset.model._meta.verbose_name})
|
||||||
|
#
|
||||||
|
# if self.request.user.is_staff or obj.zverejnit:
|
||||||
|
# return obj
|
||||||
|
# else:
|
||||||
|
# raise Http404()
|
||||||
|
#
|
||||||
|
# def get_context_data(self, **kwargs):
|
||||||
|
# context = super(PrispevekView, self).get_context_data(**kwargs)
|
||||||
|
# # snaho o ziskani titulu
|
||||||
|
# titul = ''
|
||||||
|
# try:
|
||||||
|
# resitel = context['prispevek'].reseni.resitel
|
||||||
|
# cislo = context['prispevek'].reseni.cislo_body
|
||||||
|
# body = VysledkyKCisluOdjakziva.objects.get(resitel=resitel,
|
||||||
|
# cislo=cislo).body
|
||||||
|
# titul = resitel.get_titul(body)
|
||||||
|
# except:
|
||||||
|
# pass
|
||||||
|
# context['titul'] = titul
|
||||||
|
# return context
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
## Stvrzenky aktuálně nevydáváme, ale možná časem zase budeme.
|
||||||
|
#def soustredeniStvrzenkyExportView(request,soustredeni,first_num):
|
||||||
|
# first_num = int(first_num)
|
||||||
|
# soustredeni = get_object_or_404(Soustredeni,id = soustredeni)
|
||||||
|
# ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
||||||
|
# for (idx,u) in enumerate(ucastnici):
|
||||||
|
# u.cislo_stvrzenky = first_num+idx;
|
||||||
|
# tex = render(request,'seminar/soustredeni/ucastnici.tex', {'ucastnici': ucastnici, 'datum':soustredeni.datum_zacatku }).content
|
||||||
|
#
|
||||||
|
# tempdir = tempfile.mkdtemp()
|
||||||
|
# with open(tempdir+"/ucastnici.tex","w") as texfile:
|
||||||
|
# # Pokud TeX chce ISO Latin, tak se da encode nastavit
|
||||||
|
# texfile.write(tex.decode("utf-8").encode("utf-8"))
|
||||||
|
# shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/stvrzenka.sty'),tempdir)
|
||||||
|
# shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/stvrzenky.tex'),tempdir)
|
||||||
|
# subprocess.call(["cslatex","stvrzenky.tex"],cwd = tempdir)
|
||||||
|
# subprocess.call(["dvipdf","stvrzenky.dvi"],cwd = tempdir)
|
||||||
|
#
|
||||||
|
# with open(tempdir+"/stvrzenky.pdf","rb") as pdffile:
|
||||||
|
# response = HttpResponse(pdffile.read(),content_type='application/pdf')
|
||||||
|
# shutil.rmtree(tempdir)
|
||||||
|
# return response
|
||||||
|
|
||||||
|
|
|
@ -45,11 +45,6 @@ urlpatterns = [
|
||||||
staff_member_required(views.SoustredeniMailyUcastnikuView.as_view()),
|
staff_member_required(views.SoustredeniMailyUcastnikuView.as_view()),
|
||||||
name='maily_ucastniku'
|
name='maily_ucastniku'
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
r'^soustredeni/(?P<soustredeni>\d+)/stvrzenky/(?P<first_num>\d+)$',
|
|
||||||
staff_member_required(views.soustredeniStvrzenkyExportView),
|
|
||||||
name='soustredeni_stvrzenky'
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
r'^soustredeni/(?P<soustredeni>\d+)/export_ucastniku$',
|
r'^soustredeni/(?P<soustredeni>\d+)/export_ucastniku$',
|
||||||
staff_member_required(views.soustredeniUcastniciExportView),
|
staff_member_required(views.soustredeniUcastniciExportView),
|
||||||
|
|
|
@ -377,47 +377,6 @@ class ProblemView(generic.DetailView):
|
||||||
context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni')
|
context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni')
|
||||||
return context
|
return context
|
||||||
|
|
||||||
## Prispevek byl zrusen, mozna ale bude podobny nahled na neco jineho.
|
|
||||||
#class PrispevekView(generic.DetailView):
|
|
||||||
# model = Prispevek
|
|
||||||
# template_name = 'seminar/archiv/prispevek.html'
|
|
||||||
#
|
|
||||||
# # Vlastni ziskavani objektu z databaze podle prispevku
|
|
||||||
# # pokud je prispevek neverejny zobrazi se jenom orgum
|
|
||||||
# def get_object(self, queryset=None):
|
|
||||||
# if queryset is None:
|
|
||||||
# queryset = self.get_queryset()
|
|
||||||
# problem_arg = self.kwargs.get('pk')
|
|
||||||
# prispevek_arg = self.kwargs.get('prispevek')
|
|
||||||
# queryset = queryset.filter(pk=prispevek_arg)
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# obj = queryset.get()
|
|
||||||
# except queryset.model.DoesNotExist:
|
|
||||||
# raise Http404(_("No %(verbose_name)s found matching the query") %
|
|
||||||
# {'verbose_name': queryset.model._meta.verbose_name})
|
|
||||||
#
|
|
||||||
# if self.request.user.is_staff or obj.zverejnit:
|
|
||||||
# return obj
|
|
||||||
# else:
|
|
||||||
# raise Http404()
|
|
||||||
#
|
|
||||||
# def get_context_data(self, **kwargs):
|
|
||||||
# context = super(PrispevekView, self).get_context_data(**kwargs)
|
|
||||||
# # snaho o ziskani titulu
|
|
||||||
# titul = ''
|
|
||||||
# try:
|
|
||||||
# resitel = context['prispevek'].reseni.resitel
|
|
||||||
# cislo = context['prispevek'].reseni.cislo_body
|
|
||||||
# body = VysledkyKCisluOdjakziva.objects.get(resitel=resitel,
|
|
||||||
# cislo=cislo).body
|
|
||||||
# titul = resitel.get_titul(body)
|
|
||||||
# except:
|
|
||||||
# pass
|
|
||||||
# context['titul'] = titul
|
|
||||||
# return context
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RadekVysledkovky(object):
|
class RadekVysledkovky(object):
|
||||||
pass
|
pass
|
||||||
|
@ -465,7 +424,6 @@ class RadekVysledkovky(object):
|
||||||
# #setridi problemy podle typu a poradi zadani
|
# #setridi problemy podle typu a poradi zadani
|
||||||
# problem_index = {}
|
# problem_index = {}
|
||||||
# for i in range(len(problemy)):
|
# for i in range(len(problemy)):
|
||||||
# problem_index[problemy[i].id] = i
|
|
||||||
# #umoznuje zjistit index podle id problemu
|
# #umoznuje zjistit index podle id problemu
|
||||||
#
|
#
|
||||||
# vysledky_resitele = {}
|
# vysledky_resitele = {}
|
||||||
|
@ -665,30 +623,6 @@ class SoustredeniUcastniciView(SoustredeniUcastniciBaseView):
|
||||||
model = Soustredeni_Ucastnici
|
model = Soustredeni_Ucastnici
|
||||||
template_name = 'seminar/soustredeni/seznam_ucastniku.html'
|
template_name = 'seminar/soustredeni/seznam_ucastniku.html'
|
||||||
|
|
||||||
|
|
||||||
def soustredeniStvrzenkyExportView(request,soustredeni,first_num):
|
|
||||||
first_num = int(first_num)
|
|
||||||
soustredeni = get_object_or_404(Soustredeni,id = soustredeni)
|
|
||||||
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
|
||||||
for (idx,u) in enumerate(ucastnici):
|
|
||||||
u.cislo_stvrzenky = first_num+idx;
|
|
||||||
tex = render(request,'seminar/soustredeni/ucastnici.tex', {'ucastnici': ucastnici, 'datum':soustredeni.datum_zacatku }).content
|
|
||||||
|
|
||||||
tempdir = tempfile.mkdtemp()
|
|
||||||
with open(tempdir+"/ucastnici.tex","w") as texfile:
|
|
||||||
# Pokud TeX chce ISO Latin, tak se da encode nastavit
|
|
||||||
texfile.write(tex.decode("utf-8").encode("utf-8"))
|
|
||||||
shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/stvrzenka.sty'),tempdir)
|
|
||||||
shutil.copy(os.path.join(settings.STATIC_ROOT, 'seminar/stvrzenky.tex'),tempdir)
|
|
||||||
subprocess.call(["cslatex","stvrzenky.tex"],cwd = tempdir)
|
|
||||||
subprocess.call(["dvipdf","stvrzenky.dvi"],cwd = tempdir)
|
|
||||||
|
|
||||||
with open(tempdir+"/stvrzenky.pdf","rb") as pdffile:
|
|
||||||
response = HttpResponse(pdffile.read(),content_type='application/pdf')
|
|
||||||
shutil.rmtree(tempdir)
|
|
||||||
return response
|
|
||||||
|
|
||||||
|
|
||||||
def soustredeniUcastniciExportView(request,soustredeni):
|
def soustredeniUcastniciExportView(request,soustredeni):
|
||||||
soustredeni = get_object_or_404(Soustredeni,id = soustredeni)
|
soustredeni = get_object_or_404(Soustredeni,id = soustredeni)
|
||||||
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
ucastnici = Resitel.objects.filter(soustredeni=soustredeni)
|
||||||
|
|
Loading…
Reference in a new issue