Merge branch 'master' into stable
This commit is contained in:
commit
ba3b64a36b
19 changed files with 214 additions and 75 deletions
|
@ -5,7 +5,7 @@ from django.contrib import admin
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
import autocomplete_light
|
from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
# akction
|
# akction
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import autocomplete_light
|
from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
from models import Obrazek, Galerie
|
from models import Obrazek, Galerie
|
||||||
from views import cesta_od_korene
|
from views import cesta_od_korene
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
from . import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = [
|
||||||
(r'^(?P<pk>\d+)/$', 'galerie.views.nahled'),
|
url(r'^(?P<pk>\d+)/$', views.nahled),
|
||||||
(r'^(?P<pk>\d+)/(?P<fotka>\d+)/$', 'galerie.views.detail'),
|
url(r'^(?P<pk>\d+)/(?P<fotka>\d+)/$', views.detail),
|
||||||
(r'^(?P<galerie>\d+)/new/$', 'galerie.views.new_galerie'),
|
url(r'^(?P<galerie>\d+)/new/$', views.new_galerie),
|
||||||
(r'^(?P<galerie>\d+)/plus/(?P<subgalerie>\d+)/$', 'galerie.views.plus_galerie'),
|
url(r'^(?P<galerie>\d+)/plus/(?P<subgalerie>\d+)/$', views.plus_galerie),
|
||||||
(r'^(?P<galerie>\d+)/minus/(?P<subgalerie>\d+)/$', 'galerie.views.minus_galerie'),
|
url(r'^(?P<galerie>\d+)/minus/(?P<subgalerie>\d+)/$', views.minus_galerie),
|
||||||
)
|
]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ from django.utils.encoding import force_unicode
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import reversion
|
from reversion import revisions as reversion
|
||||||
|
|
||||||
# PrilohaReseni method
|
# PrilohaReseni method
|
||||||
def generate_filename(self, filename):
|
def generate_filename(self, filename):
|
||||||
|
|
|
@ -5,8 +5,8 @@ from . import views
|
||||||
|
|
||||||
staff_member_required = user_passes_test(lambda u: u.is_staff)
|
staff_member_required = user_passes_test(lambda u: u.is_staff)
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = [
|
||||||
url(r'^korektury/$', staff_member_required(views.KorekturyListView.as_view()), name='korektury-list'),
|
url(r'^korektury/$', staff_member_required(views.KorekturyListView.as_view()), name='korektury-list'),
|
||||||
url(r'^korektury/(?P<pdf>\d+)/$', staff_member_required(views.KorekturyView.as_view()), name='korektury'),
|
url(r'^korektury/(?P<pdf>\d+)/$', staff_member_required(views.KorekturyView.as_view()), name='korektury'),
|
||||||
url(r'^korektury/help/', staff_member_required(views.KorekturyHelpView.as_view()), name='korektury-help'),
|
url(r'^korektury/help/', staff_member_required(views.KorekturyHelpView.as_view()), name='korektury-help'),
|
||||||
)
|
]
|
||||||
|
|
|
@ -31,7 +31,6 @@ class KorekturyView(generic.TemplateView):
|
||||||
scroll = q.get('scroll')
|
scroll = q.get('scroll')
|
||||||
autor = q.get('au')
|
autor = q.get('au')
|
||||||
|
|
||||||
print "autor:" + unicode(autor)
|
|
||||||
if not autor:
|
if not autor:
|
||||||
autor = 'anonym'
|
autor = 'anonym'
|
||||||
if not scroll:
|
if not scroll:
|
||||||
|
|
|
@ -240,5 +240,6 @@ LOGGING = {
|
||||||
# MaM specific
|
# MaM specific
|
||||||
|
|
||||||
SEMINAR_RESENI_DIR = os.path.join(BASE_DIR, 'media', 'reseni')
|
SEMINAR_RESENI_DIR = os.path.join(BASE_DIR, 'media', 'reseni')
|
||||||
|
SEMINAR_KONFERY_DIR = os.path.join(BASE_DIR, 'media', 'konfery')
|
||||||
KOREKTURY_PDF_DIR = os.path.join(BASE_DIR, 'media', 'korektury','pdf')
|
KOREKTURY_PDF_DIR = os.path.join(BASE_DIR, 'media', 'korektury','pdf')
|
||||||
KOREKTURY_IMG_DIR = os.path.join(BASE_DIR, 'media', 'korektury','img')
|
KOREKTURY_IMG_DIR = os.path.join(BASE_DIR, 'media', 'korektury','img')
|
||||||
|
|
|
@ -4,12 +4,13 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
|
from django import views
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = [
|
||||||
|
|
||||||
# Admin a nastroje
|
# Admin a nastroje
|
||||||
url(r'^admin/', include(admin.site.urls)), # NOQA
|
url(r'^admin/', include(admin.site.urls)), # NOQA
|
||||||
url(r'^ckeditor/', include('ckeditor.urls')),
|
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
|
||||||
url(r'^autocomplete/', include('autocomplete_light.urls')),
|
url(r'^autocomplete/', include('autocomplete_light.urls')),
|
||||||
|
|
||||||
# Seminarova aplikace (ma vlastni podadresare)
|
# Seminarova aplikace (ma vlastni podadresare)
|
||||||
|
@ -22,11 +23,11 @@ urlpatterns = patterns('',
|
||||||
url(r'^comments_dj/', include('django_comments.urls')),
|
url(r'^comments_dj/', include('django_comments.urls')),
|
||||||
url(r'^comments_fl/', include('fluent_comments.urls')),
|
url(r'^comments_fl/', include('fluent_comments.urls')),
|
||||||
|
|
||||||
)
|
]
|
||||||
|
|
||||||
# This is only needed when using runserver.
|
# This is only needed when using runserver.
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
urlpatterns = patterns('',
|
urlpatterns = [
|
||||||
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', # NOQA
|
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', # NOQA
|
||||||
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
|
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
|
||||||
) + staticfiles_urlpatterns() + urlpatterns # NOQA
|
] + staticfiles_urlpatterns() + urlpatterns # NOQA
|
||||||
|
|
|
@ -2,47 +2,47 @@
|
||||||
|
|
||||||
psycopg2==2.6.1
|
psycopg2==2.6.1
|
||||||
html5lib==0.9999999
|
html5lib==0.9999999
|
||||||
ipython==4.0.0
|
ipython==4.0.1
|
||||||
Pillow==2.9.0
|
Pillow==3.1.0
|
||||||
pytz==2014.10
|
pytz==2015.7
|
||||||
six==1.9.0
|
six==1.10.0
|
||||||
pexpect==3.3
|
pexpect==4.0.1
|
||||||
traitlets==4.0.0
|
traitlets==4.0.0
|
||||||
|
|
||||||
# Django and modules
|
# Django and modules
|
||||||
|
|
||||||
Django==1.7.10 # Updatable to 1.9 (possibly incompatible)
|
Django==1.8.8
|
||||||
django-bootstrap-sass==0.0.6a0
|
#django-bootstrap-sass
|
||||||
django-mptt==0.7.3
|
django-mptt==0.8.0
|
||||||
django-reversion==1.9.3
|
django-reversion==1.10.0
|
||||||
django-sekizai==0.8.1
|
django-sekizai==0.9.0
|
||||||
django-countries==3.2
|
django-countries==3.4.1
|
||||||
django-solo==1.1.0
|
django-solo==1.1.1
|
||||||
django-ckeditor==4.4.7 # Updatable to 5.0 (some incompatible changes)
|
django-ckeditor==5.0.2
|
||||||
django-flat-theme==0.9.3
|
django-flat-theme==1.1.3
|
||||||
django-taggit==0.17
|
django-taggit==0.17.6
|
||||||
django-autocomplete-light==2.2.6
|
django-autocomplete-light==2.2.10
|
||||||
django-crispy-forms==1.4.0
|
django-crispy-forms==1.6.0
|
||||||
django-imagekit==3.2.7
|
django-imagekit==3.3
|
||||||
|
|
||||||
# Comments
|
# Comments
|
||||||
akismet==0.2.0
|
akismet==0.2.0
|
||||||
django-fluent-comments==1.0.2
|
django-fluent-comments==1.1
|
||||||
django-threadedcomments==1.0b1
|
django-threadedcomments==1.0.1
|
||||||
django-contrib-comments==1.6.1
|
django-contrib-comments==1.6.2
|
||||||
|
|
||||||
# debug tools/extensions
|
# debug tools/extensions
|
||||||
|
|
||||||
django-debug-toolbar==1.4
|
django-debug-toolbar==1.4
|
||||||
django-extensions==1.5.6
|
django-extensions==1.6.1
|
||||||
sqlparse==0.1.16
|
sqlparse==0.1.18
|
||||||
Werkzeug==0.10.4
|
Werkzeug==0.11.3
|
||||||
|
|
||||||
# G+, FB authorisation
|
# G+, FB authorisation
|
||||||
|
|
||||||
# django-allauth==0.19.1
|
# django-allauth
|
||||||
# oauthlib==0.7.2
|
# oauthlib
|
||||||
# python-openid==2.2.5
|
# python-openid
|
||||||
# requests==2.5.3
|
# requests
|
||||||
# requests-oauthlib==0.4.2
|
# requests-oauthlib
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator
|
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator
|
||||||
import autocomplete_light
|
from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
|
|
||||||
class UserModelChoiceField(forms.ModelChoiceField):
|
class UserModelChoiceField(forms.ModelChoiceField):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import autocomplete_light
|
from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
from models import Skola, Resitel, Problem, Organizator
|
from models import Skola, Resitel, Problem, Organizator
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
|
|
@ -16,6 +16,7 @@ from imagekit.processors import ResizeToFit, Transpose
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import os
|
import os
|
||||||
|
from functools import partial
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
|
|
||||||
|
@ -23,7 +24,7 @@ from django_countries.fields import CountryField
|
||||||
from solo.models import SingletonModel
|
from solo.models import SingletonModel
|
||||||
from taggit.managers import TaggableManager
|
from taggit.managers import TaggableManager
|
||||||
|
|
||||||
import reversion
|
from reversion import revisions as reversion
|
||||||
|
|
||||||
from seminar.utils import roman
|
from seminar.utils import roman
|
||||||
|
|
||||||
|
@ -544,13 +545,13 @@ class Reseni(SeminarModelBase):
|
||||||
|
|
||||||
|
|
||||||
# PrilohaReseni method
|
# PrilohaReseni method
|
||||||
def generate_filename(self, filename):
|
def generate_filename(self, filename, directory):
|
||||||
clean = filename.replace('/','-').replace('\0', '')
|
clean = filename.replace('/','-').replace('\0', '')
|
||||||
datedir = timezone.now().strftime('%Y-%m')
|
datedir = timezone.now().strftime('%Y-%m')
|
||||||
fname = "%s_%s" % (
|
fname = "%s_%s" % (
|
||||||
timezone.now().strftime('%Y-%m-%d-%H:%M'),
|
timezone.now().strftime('%Y-%m-%d-%H:%M'),
|
||||||
clean)
|
clean)
|
||||||
return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname)
|
return os.path.join(directory, datedir, fname)
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicate_revisions=True)
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
|
@ -570,7 +571,7 @@ class PrilohaReseni(SeminarModelBase):
|
||||||
|
|
||||||
timestamp = models.DateTimeField(u'vytvořeno', default=timezone.now, blank=True, editable=False)
|
timestamp = models.DateTimeField(u'vytvořeno', default=timezone.now, blank=True, editable=False)
|
||||||
|
|
||||||
soubor = models.FileField(u'soubor', upload_to = generate_filename)
|
soubor = models.FileField(u'soubor', upload_to = partial(generate_filename,directory=settings.SEMINAR_RESENI_DIR))
|
||||||
|
|
||||||
poznamka = models.TextField(u'neveřejná poznámka', blank=True,
|
poznamka = models.TextField(u'neveřejná poznámka', blank=True,
|
||||||
help_text=u'Neveřejná poznámka k příloze řešení (plain text), např. o původu')
|
help_text=u'Neveřejná poznámka k příloze řešení (plain text), např. o původu')
|
||||||
|
@ -734,6 +735,72 @@ class Soustredeni_Organizatori(models.Model):
|
||||||
# NOTE: Poteciální DB HOG bez select_related
|
# NOTE: Poteciální DB HOG bez select_related
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class Konfera(models.Model):
|
||||||
|
class Meta:
|
||||||
|
db_table = 'seminar_konfera'
|
||||||
|
verbose_name = u'Konfera'
|
||||||
|
verbose_name_plural = u'Konfery'
|
||||||
|
# Interní ID
|
||||||
|
id = models.AutoField(primary_key = True)
|
||||||
|
nazev = models.CharField(u'název konfery', max_length=40, help_text = u'Název konfery')
|
||||||
|
popis = models.TextField(u'popis konfery', blank=True,
|
||||||
|
help_text=u'Popis konfery k zobrazení na webu')
|
||||||
|
abstrakt = models.TextField(u'abstrakt', blank=True,
|
||||||
|
help_text=u'Abstrakt konfery tak, jak byl uveden ve sborníku')
|
||||||
|
organizator = models.ForeignKey(Organizator, verbose_name=u'organizátor', related_name='konfery',
|
||||||
|
on_delete = models.SET_NULL, null=True)
|
||||||
|
ucastnici = models.ManyToManyField(Resitel, verbose_name=u'účastníci konfery',
|
||||||
|
help_text=u'Seznam účastníků konfery', through='Konfery_Ucastnici')
|
||||||
|
soustredeni = models.ForeignKey(Soustredeni, verbose_name=u'soustředění', related_name='konfery',
|
||||||
|
on_delete = models.SET_NULL, null=True)
|
||||||
|
org_poznamka = models.TextField(u'neveřejná poznámka', blank=True,
|
||||||
|
help_text=u'Neveřejná poznámka ke konfeře(plain text)')
|
||||||
|
#prispevek #TODO
|
||||||
|
TYP_VELETRH = 'veletrh'
|
||||||
|
TYP_PREZENTACE = 'prezentace'
|
||||||
|
TYP_CHOICES = [
|
||||||
|
(TYP_VELETRH, u'Veletrh (postery)'),
|
||||||
|
(TYP_PREZENTACE, u'Prezentace (přednáška)'),
|
||||||
|
]
|
||||||
|
typ_prezentace = models.CharField(u'typ prezentace', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_VELETRH)
|
||||||
|
prezentace = models.FileField(u'prezentace',help_text = u'Prezentace nebo fotka posteru',
|
||||||
|
upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR))
|
||||||
|
materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru',
|
||||||
|
upload_to = partial(generate_filename,directory=settings.SEMINAR_KONFERY_DIR))
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class Konfery_Ucastnici(models.Model):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'seminar_konfery_ucastnici'
|
||||||
|
verbose_name = u'Účast na konfeře'
|
||||||
|
verbose_name_plural = u'Účasti na konfeře'
|
||||||
|
ordering = ['konfera', 'resitel']
|
||||||
|
|
||||||
|
# Interní ID
|
||||||
|
id = models.AutoField(primary_key = True)
|
||||||
|
|
||||||
|
resitel = models.ForeignKey(Resitel, verbose_name=u'řešitel')
|
||||||
|
|
||||||
|
konfera = models.ForeignKey(Konfera, verbose_name=u'konfera')
|
||||||
|
|
||||||
|
poznamka = models.TextField(u'neveřejná poznámka', blank=True,
|
||||||
|
help_text=u'Neveřejná poznámka k účasti (plain text)')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return force_unicode(u'%s na %s' % (self.resitel, self.konfera, ))
|
||||||
|
# NOTE: Poteciální DB HOG bez select_related
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class VysledkyBase(SeminarModelBase):
|
class VysledkyBase(SeminarModelBase):
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="obalky.pdf">Obálky (PDF)</a></li>
|
<li><a href="obalky.pdf">Obálky (PDF)</a></li>
|
||||||
<li><a href="tituly.tex">Tituly (TeX)</a></li>
|
<li><a href="tituly.tex">Tituly (TeX)</a></li>
|
||||||
|
<li><a href="vysledkovka.tex">Výsledkovka (TeX)</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
22
seminar/templates/seminar/archiv/resitel_uloha.html
Normal file
22
seminar/templates/seminar/archiv/resitel_uloha.html
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
{% extends "seminar/archiv/base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1> K obálkování </h1>
|
||||||
|
<table>
|
||||||
|
<th>
|
||||||
|
<td>Jméno</td>
|
||||||
|
{% for u in ulohy %}
|
||||||
|
<td>{{u.nazev}}
|
||||||
|
{% endfor %}
|
||||||
|
</th>
|
||||||
|
{% for row in kdoco %}
|
||||||
|
<tr>
|
||||||
|
{% for cell in row%}
|
||||||
|
<td>{{cell}}</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endblock content %}
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
{% if broken %}
|
||||||
|
%% POZOR! %% Dva resitele maji stejne makro!!!
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% autoescape off %}
|
{% autoescape off %}
|
||||||
{% load tex %}
|
{% load tex %}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
import logging as log
|
import logging as log
|
||||||
from .models import Resitel
|
from .models import Resitel
|
||||||
import reversion
|
from reversion import revisions as reversion
|
||||||
|
|
||||||
def merge_props(r1, r2, prop, pretend=True, smaller=False, equal=True):
|
def merge_props(r1, r2, prop, pretend=True, smaller=False, equal=True):
|
||||||
"""Merge r2.`prop` into r1.`prop`.
|
"""Merge r2.`prop` into r1.`prop`.
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
from django.conf.urls import * # NOQA
|
from django.conf.urls import * # NOQA
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
from . import views, export
|
from . import views, export
|
||||||
|
from utils import staff_member_required
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
staff_member_required = user_passes_test(lambda u: u.is_staff)
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
url(r'^co-je-MaM/organizatori/$', views.CojemamOrganizatoriView.as_view(), name='organizatori'),
|
url(r'^co-je-MaM/organizatori/$', views.CojemamOrganizatoriView.as_view(), name='organizatori'),
|
||||||
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
url(r'^co-je-MaM/organizatori/organizovali/$', views.CojemamOrganizatoriStariView.as_view(), name='stari_organizatori'),
|
||||||
|
|
||||||
|
@ -18,7 +21,6 @@ urlpatterns = patterns('',
|
||||||
name = 'seminar_seznam_soustredeni'),
|
name = 'seminar_seznam_soustredeni'),
|
||||||
url(r'^soustredeni/probehlo/(?P<soustredeni>\d+)/$', views.SoustredeniView.as_view(), name='seminar_soustredeni'),
|
url(r'^soustredeni/probehlo/(?P<soustredeni>\d+)/$', views.SoustredeniView.as_view(), name='seminar_soustredeni'),
|
||||||
url(r'^soustredeni/(?P<soustredeni>\d+)/fotogalerie/', include('galerie.urls')),
|
url(r'^soustredeni/(?P<soustredeni>\d+)/fotogalerie/', include('galerie.urls')),
|
||||||
url(r'^soustredeni/(?P<soustredeni>\d+)/obalky.pdf', views.soustredeniObalkyView,name='seminar_soustredeni_obalky'),
|
|
||||||
|
|
||||||
url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'),
|
url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'),
|
||||||
url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'),
|
url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'),
|
||||||
|
@ -29,15 +31,22 @@ urlpatterns = patterns('',
|
||||||
url(r'^clanky/resitel/$', views.ClankyResitelView.as_view(), name='clanky_resitel'),
|
url(r'^clanky/resitel/$', views.ClankyResitelView.as_view(), name='clanky_resitel'),
|
||||||
url(r'^clanky/org/$', views.ClankyOrganizatorView.as_view(), name='clanky_organizator'),
|
url(r'^clanky/org/$', views.ClankyOrganizatorView.as_view(), name='clanky_organizator'),
|
||||||
|
|
||||||
|
|
||||||
url(r'^stav$', views.StavDatabazeView, name='stav_databaze'),
|
|
||||||
|
|
||||||
url(r'^aesop-export/mam-rocnik-(?P<prvni_rok>\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'),
|
url(r'^aesop-export/mam-rocnik-(?P<prvni_rok>\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'),
|
||||||
url(r'^aesop-export/mam-sous-(?P<datum_zacatku>[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'),
|
url(r'^aesop-export/mam-sous-(?P<datum_zacatku>[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'),
|
||||||
url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'),
|
url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'),
|
||||||
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/vysledkovka.tex$', views.CisloVysledkovkaView.as_view(), name='seminar_cislo_vysledkovka'),
|
|
||||||
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/obalky.pdf$',views.cisloObalkyView, name='seminar_cislo_obalky'),
|
|
||||||
|
|
||||||
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/tituly.tex$', views.TitulyView,
|
#### Stranky viditelne pouze pro orgy:
|
||||||
name='seminar_cislo_titul'),
|
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/vysledkovka.tex$',
|
||||||
)
|
staff_member_required(views.CisloVysledkovkaView.as_view()), name='seminar_cislo_vysledkovka'),
|
||||||
|
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/obalky.pdf$',
|
||||||
|
staff_member_required(views.cisloObalkyView), name='seminar_cislo_obalky'),
|
||||||
|
|
||||||
|
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/tituly.tex$',
|
||||||
|
staff_member_required(views.TitulyView), name='seminar_cislo_titul'),
|
||||||
|
url(r'^stav$',
|
||||||
|
staff_member_required(views.StavDatabazeView), name='stav_databaze'),
|
||||||
|
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/resitel_uloha.html$',
|
||||||
|
staff_member_required(views.resitelUlohaView),name='seminar_cislo_resitel_uloha'),
|
||||||
|
url(r'^soustredeni/(?P<soustredeni>\d+)/obalky.pdf',
|
||||||
|
staff_member_required(views.soustredeniObalkyView),name='seminar_soustredeni_obalky'),
|
||||||
|
]
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
from django.contrib.auth.decorators import user_passes_test
|
||||||
|
|
||||||
|
staff_member_required = user_passes_test(lambda u: u.is_staff)
|
||||||
|
|
||||||
def histogram(seznam):
|
def histogram(seznam):
|
||||||
d = {}
|
d = {}
|
||||||
|
@ -76,3 +78,5 @@ def seznam_problemu():
|
||||||
|
|
||||||
return problemy
|
return problemy
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
|
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
@ -356,7 +356,7 @@ class CisloObalkyStruct:
|
||||||
|
|
||||||
# Vraci QuerySet aktualnich resitelu = nekdy neco poslali, ale jeste neodmaturovali
|
# Vraci QuerySet aktualnich resitelu = nekdy neco poslali, ale jeste neodmaturovali
|
||||||
def aktualniResitele(rocnik):
|
def aktualniResitele(rocnik):
|
||||||
letos = Rocnik.objects.filter(rocnik = rocnik).first()
|
letos = Rocnik.objects.get(rocnik = rocnik)
|
||||||
return Resitel.objects.filter(rok_maturity__gt = letos.prvni_rok)
|
return Resitel.objects.filter(rok_maturity__gt = letos.prvni_rok)
|
||||||
# # ALERT: pokud nekdo nema vypleny rok maturity, tak neni aktualni, protoze Karel Tesar a jini
|
# # ALERT: pokud nekdo nema vypleny rok maturity, tak neni aktualni, protoze Karel Tesar a jini
|
||||||
# return Resitel.objects.filter(Q(rok_maturity__gt = letos.prvni_rok)|Q(rok_maturity = None))
|
# return Resitel.objects.filter(Q(rok_maturity__gt = letos.prvni_rok)|Q(rok_maturity = None))
|
||||||
|
@ -371,8 +371,8 @@ def aktivniResitele(rocnik,cislo):
|
||||||
|
|
||||||
aktualni_resitele = aktualniResitele(rocnik)
|
aktualni_resitele = aktualniResitele(rocnik)
|
||||||
|
|
||||||
letos.rocnik = Rocnik.objects.filter(rocnik = rocnik).first()
|
letos.rocnik = Rocnik.objects.get(rocnik = rocnik)
|
||||||
loni.rocnik = Rocnik.objects.filter(rocnik = int(rocnik)-1).first()
|
loni.rocnik = Rocnik.objects.get(rocnik = int(rocnik)-1)
|
||||||
letos.cisla = Cislo.objects.filter(rocnik=letos.rocnik,cislo__lte = cislo)
|
letos.cisla = Cislo.objects.filter(rocnik=letos.rocnik,cislo__lte = cislo)
|
||||||
loni.cisla = Cislo.objects.filter(rocnik=loni.rocnik)
|
loni.cisla = Cislo.objects.filter(rocnik=loni.rocnik)
|
||||||
if int(cislo) > 3:
|
if int(cislo) > 3:
|
||||||
|
@ -404,24 +404,53 @@ def obalkyView(request,resitele):
|
||||||
shutil.rmtree(tempdir)
|
shutil.rmtree(tempdir)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def resitelUlohaView(request,rocnik,cislo):
|
||||||
|
rocnik = Rocnik.objects.get(rocnik=rocnik)
|
||||||
|
cislo = Cislo.objects.get(rocnik=rocnik,cislo=cislo)
|
||||||
|
reseni = Reseni.objects.filter(cislo_body=cislo).order_by('resitel')
|
||||||
|
# TODO: Nasledujici 4 radky jsou fuj. Znate neco lepsiho?
|
||||||
|
resitele = list(set([r.resitel for r in reseni]))
|
||||||
|
resitele.sort(key=lambda r: (r.prijmeni,r.jmeno))
|
||||||
|
ulohy = list(set([r.problem for r in reseni]))
|
||||||
|
ulohy.sort(key=lambda u: (u.typ,u.kod))
|
||||||
|
|
||||||
|
kdoco = []
|
||||||
|
for r in resitele:
|
||||||
|
res_ulohy = [r.jmeno+" "+r.prijmeni]
|
||||||
|
for u in ulohy:
|
||||||
|
try:
|
||||||
|
rsni = reseni.get(resitel=r,problem=u)
|
||||||
|
res_ulohy.append(rsni.body)
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
res_ulohy.append("")
|
||||||
|
kdoco.append(res_ulohy)
|
||||||
|
return render(request, 'seminar/archiv/resitel_uloha.html',{'ulohy':ulohy,'kdoco':kdoco})
|
||||||
|
|
||||||
### Tituly
|
### Tituly
|
||||||
|
|
||||||
# TODO udelat neco jako get_objects_or_404
|
# TODO udelat neco jako get_objects_or_404
|
||||||
def TitulyView(request, rocnik, cislo):
|
def TitulyView(request, rocnik, cislo):
|
||||||
rocnik_obj = Rocnik.objects.filter(rocnik = rocnik).first()
|
rocnik_obj = Rocnik.objects.get(rocnik = rocnik)
|
||||||
resitele = Resitel.objects.filter(rok_maturity__gte = rocnik_obj.prvni_rok)
|
resitele = Resitel.objects.filter(rok_maturity__gte = rocnik_obj.prvni_rok)
|
||||||
cislo_obj = Cislo.objects.filter(rocnik = rocnik_obj, cislo = cislo).first()
|
cislo_obj = Cislo.objects.get(rocnik = rocnik_obj, cislo = cislo)
|
||||||
|
|
||||||
|
asciijmena = []
|
||||||
|
broken = False
|
||||||
|
|
||||||
for resitel in resitele:
|
for resitel in resitele:
|
||||||
vys = VysledkyKCisluOdjakziva.objects.filter(resitel = resitel, cislo = cislo_obj).first()
|
try:
|
||||||
if vys == None:
|
vys = VysledkyKCisluOdjakziva.objects.get(resitel = resitel, cislo = cislo_obj)
|
||||||
body = 0
|
|
||||||
else:
|
|
||||||
body = vys.body
|
body = vys.body
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
body = 0
|
||||||
resitel.titul = resitel.get_titul(body)
|
resitel.titul = resitel.get_titul(body)
|
||||||
resitel.ascii = unicodedata.normalize('NFKD',resitel.jmeno+resitel.prijmeni).encode("ascii","ignore").replace(" ","")
|
resitel.ascii = unicodedata.normalize('NFKD',resitel.jmeno+resitel.prijmeni).encode("ascii","ignore").replace(" ","")
|
||||||
|
if resitel.ascii not in asciijmena:
|
||||||
|
asciijmena.append(resitel.ascii)
|
||||||
|
else:
|
||||||
|
broken = True
|
||||||
|
|
||||||
return render(request, 'seminar/archiv/tituly.tex',{'resitele': resitele})
|
return render(request, 'seminar/archiv/tituly.tex',{'resitele': resitele,'broken':broken})
|
||||||
|
|
||||||
|
|
||||||
### Soustredeni
|
### Soustredeni
|
||||||
|
|
Loading…
Reference in a new issue