Browse Source

Merge branch 'master' of atrey.karlin.mff.cuni.cz:/akce/MaM/MaMweb/mamweb

remotes/origin/fix-prekryvani-korektur
Matěj Kocián 8 years ago
parent
commit
289fc7f6b4
  1. 7
      korektury/admin.py
  2. 25
      korektury/migrations/0014_add_org_to_pdf.py
  3. 19
      korektury/migrations/0015_auto_20161004_2005.py
  4. 8
      korektury/models.py
  5. 12
      korektury/views.py
  6. 3
      mamweb/urls.py
  7. 60
      prednasky/admin.py
  8. 64
      prednasky/migrations/0003_auto_20160929_0117.py
  9. 18
      prednasky/migrations/0004_remove_prednaska_seznam.py
  10. 49
      prednasky/migrations/0005_auto_20160929_0153.py
  11. 20
      prednasky/migrations/0006_hlasovani_seznam.py
  12. 19
      prednasky/migrations/0007_prednaska_seznamy.py
  13. 25
      prednasky/migrations/0008_auto_20160929_0225.py
  14. 49
      prednasky/migrations/0009_auto_20160929_0354.py
  15. 24
      prednasky/migrations/0010_auto_20160929_0508.py
  16. 66
      prednasky/models.py
  17. 26
      prednasky/templates/prednasky/metaseznam_prednasek.html
  18. 21
      prednasky/templates/prednasky/seznam_prednasek.html
  19. 21
      prednasky/templates/prednasky/seznam_prednasek_export.txt
  20. 15
      prednasky/urls.py
  21. 50
      prednasky/views.py
  22. 17
      seminar/admin.py
  23. 31
      seminar/migrations/0042_auto_20161005_0847.py
  24. 6
      seminar/models.py
  25. 5
      seminar/urls.py

7
korektury/admin.py

@ -2,12 +2,15 @@ from django.contrib import admin
from reversion.admin import VersionAdmin from reversion.admin import VersionAdmin
from korektury.models import KorekturovanePDF from korektury.models import KorekturovanePDF
# Register your models here. # Register your models here.
class KorekturovanePDFAdmin(VersionAdmin): class KorekturovanePDFAdmin(VersionAdmin):
readonly_fields = ['cas', 'stran'] readonly_fields = ['cas', 'stran']
fieldsets = [ fieldsets = [
(None, {'fields': ['pdf', 'cas', 'stran', 'nazev', 'komentar']}), (None,
# (u'PDF', {'fields': ['pdf']}), {'fields':
['pdf', 'cas', 'org', 'stran', 'nazev', 'komentar']}),
# (u'PDF', {'fields': ['pdf']}),
] ]
list_display = ['nazev', 'cas', 'stran'] list_display = ['nazev', 'cas', 'stran']
list_filter = [] list_filter = []

25
korektury/migrations/0014_add_org_to_pdf.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0041_konfery'),
('korektury', '0013_rename_autor_org'),
]
operations = [
migrations.AddField(
model_name='korekturovanepdf',
name='org',
field=models.ForeignKey(default=None,
blank=True,
to='seminar.Organizator',
help_text=b'Zodpov\xc4\x9bdn\xc3\xbd\
organiz\xc3\xa1tor za obsah',
null=True),
),
]

19
korektury/migrations/0015_auto_20161004_2005.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('korektury', '0014_add_org_to_pdf'),
]
operations = [
migrations.AlterField(
model_name='korekturovanepdf',
name='org',
field=models.ForeignKey(default=None, blank=True, to='seminar.Organizator', help_text=b'Zodpov\xc4\x9bdn\xc3\xbd organiz\xc3\xa1tor za obsah', null=True),
),
]

8
korektury/models.py

@ -48,7 +48,13 @@ class KorekturovanePDF(models.Model):
pdf = models.FileField(u'PDF', upload_to = generate_filename) pdf = models.FileField(u'PDF', upload_to = generate_filename)
stran = models.IntegerField(u'počet stran', help_text = 'Počet stran PDF', default = 0) org = models.ForeignKey(Organizator, blank=True,
help_text='Zodpovědný organizátor za obsah',
null=True,
default=None)
stran = models.IntegerField(u'počet stran', help_text='Počet stran PDF',
default=0)
STATUS_PRIDAVANI = 'pridavani' STATUS_PRIDAVANI = 'pridavani'
STATUS_ZANASENI = 'zanaseni' STATUS_ZANASENI = 'zanaseni'
STATUS_ZASTARALE = 'zastarale' STATUS_ZASTARALE = 'zastarale'

12
korektury/views.py

@ -52,6 +52,7 @@ class KorekturyView(generic.TemplateView):
op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana,pdf = pdf) op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana,pdf = pdf)
op.save() op.save()
self.send_email_notification_komentar(op, autor, text)
elif (action == u'del'): elif (action == u'del'):
id = int(q.get('id')) id = int(q.get('id'))
op = Oprava.objects.get(id=id) op = Oprava.objects.get(id=id)
@ -135,12 +136,19 @@ class KorekturyView(generic.TemplateView):
# Prijemci e-mailu # Prijemci e-mailu
emails = set() emails = set()
email = oprava.autor.user.email email = oprava.autor.user.email
if email: # nalezeni e-mailu na organizatory komentaru
emails.add(email)
for komentar in oprava.komentar_set.all(): for komentar in oprava.komentar_set.all():
email = komentar.autor.user.email email = komentar.autor.user.email
if email: if email:
emails.add(email) emails.add(email)
# zodpovedny org
if oprava.pdf.org:
email_zobpovedny = oprava.pdf.org.user.email
if email_zobpovedny:
emails.add(email_zobpovedny)
# odstran e-mail autora opravy
if email:
emails.discard(email)
send_mail(subject, text, from_email, list(emails)) send_mail(subject, text, from_email, list(emails))

3
mamweb/urls.py

@ -19,6 +19,9 @@ urlpatterns = [
# Korekturovaci aplikace (ma vlastni podadresare) # Korekturovaci aplikace (ma vlastni podadresare)
url(r'^', include('korektury.urls')), url(r'^', include('korektury.urls')),
# Prednaskova aplikace (ma vlastni podadresare)
url(r'^', include('prednasky.urls')),
# Comments (interni i verejne) # Comments (interni i verejne)
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')),

60
prednasky/admin.py

@ -1,7 +1,59 @@
# -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.contrib import messages
from django import forms
from reversion.admin import VersionAdmin
from autocomplete_light import shortcuts as autocomplete_light
from django.db import models
from models import Prednaska, Seznam, Hlasovani from models import Prednaska, Seznam, STAV_NAVRH
from seminar.models import Soustredeni
admin.site.register(Seznam) class Seznam_PrednaskaInline(admin.TabularInline):
admin.site.register(Prednaska) # form = autocomplete_light.modelform_factory(Prednaska, autocomplete_fields=['nazev'], fields=['nazev'])
admin.site.register(Hlasovani) model = Prednaska.seznamy.through
# fields = ['nazev', 'org', 'obor' ]
# extra = 0
# formfield_overrides = {
# models.TextField: {'widget': forms.TextInput},
# }
# def get_queryset(self, request):
# qs = super(Seznam_PrednaskaInline, self).get_queryset(request)
# return qs.select_related('seznam', 'prednaska')
class SeznamAdmin(VersionAdmin):
list_display = ['soustredeni','stav']
inlines = [Seznam_PrednaskaInline]
admin.site.register(Seznam,SeznamAdmin)
class PrednaskaAdmin(VersionAdmin):
list_display = ['nazev', 'org', 'obor']
list_filter = ['org','obor']
search_fields = []
actions = ['move_to_soustredeni']
def move_to_soustredeni(self,request,queryset):
sous = Soustredeni.objects.first()
seznam = Seznam.objects.filter(soustredeni=sous,stav=STAV_NAVRH)
if len(seznam) == 0:
self.message_user(request,u"Není definován seznam pro aktuální soustředění, nic se neprovedlo",messages.ERROR)
return
seznam = seznam[0]
for prednaska in queryset:
prednaska.seznamy.add(seznam)
prednaska.save()
self.message_user(request,u"Vybrané přednášky ({}) přidány jako návrhy na nejbližší soustředění".format(len(queryset)))
move_to_soustredeni.short_description=u"Přidat přednášky do návrhu na nejbližší soustředění"
admin.site.register(Prednaska,PrednaskaAdmin)

64
prednasky/migrations/0003_auto_20160929_0117.py

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0002_auto_20160417_2347'),
]
operations = [
migrations.RenameModel(
old_name='Seznam',
new_name='Seznam_old',
),
migrations.AlterModelOptions(
name='hlasovani',
options={'ordering': ['ucastnik', 'prednaska'], 'verbose_name': 'Hlasov\xe1n\xed', 'verbose_name_plural': 'Hlasov\xe1n\xed'},
),
migrations.AlterModelOptions(
name='prednaska',
options={'ordering': ['org', 'nazev'], 'verbose_name': 'P\u0159edn\xe1\u0161ka', 'verbose_name_plural': 'P\u0159edn\xe1\u0161ky'},
),
migrations.AddField(
model_name='prednaska',
name='popis',
field=models.TextField(help_text=b'Neve\xc5\x99ejn\xc3\xbd popis pro ostatn\xc3\xad orgy', null=True, verbose_name=b'Popis pro orgy'),
),
migrations.AlterField(
model_name='hlasovani',
name='id',
field=models.AutoField(serialize=False, primary_key=True),
),
migrations.AlterField(
model_name='prednaska',
name='anotace',
field=models.TextField(help_text=b'Ve\xc5\x99ejn\xc3\xa1 anotace v hlasov\xc3\xa1n\xc3\xad', null=True, verbose_name=b'Anotace'),
),
migrations.AlterField(
model_name='prednaska',
name='id',
field=models.AutoField(serialize=False, primary_key=True),
),
migrations.AlterField(
model_name='prednaska',
name='obor',
field=models.CharField(help_text=b'Podmno\xc5\xbeina MFIOB', max_length=5, verbose_name=b'Obor'),
),
migrations.AlterField(
model_name='prednaska',
name='seznam',
field=models.ForeignKey(to='prednasky.Seznam_old'),
),
migrations.AlterModelTable(
name='hlasovani',
table='prednasky_hlasovani',
),
migrations.AlterModelTable(
name='prednaska',
table='prednasky_prednaska',
),
]

18
prednasky/migrations/0004_remove_prednaska_seznam.py

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0003_auto_20160929_0117'),
]
operations = [
migrations.RemoveField(
model_name='prednaska',
name='seznam',
),
]

49
prednasky/migrations/0005_auto_20160929_0153.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0041_konfery'),
('prednasky', '0004_remove_prednaska_seznam'),
]
operations = [
migrations.CreateModel(
name='Prednaska_Seznam',
fields=[
('id', models.AutoField(serialize=False, primary_key=True)),
('prednaska', models.ForeignKey(to='prednasky.Prednaska')),
],
options={
'db_table': 'prednasky_prednaska_seznam',
'verbose_name': 'P\u0159edn\xe1\u0161ka v seznamu',
'verbose_name_plural': 'P\u0159edn\xe1\u0161ky v seznamech',
},
),
migrations.CreateModel(
name='Seznam',
fields=[
('id', models.AutoField(serialize=False, primary_key=True)),
('stav', models.IntegerField(default=2, verbose_name=b'Stav', choices=[(1, b'N\xc3\xa1vrh'), (2, b'Bude')])),
('soustredeni', models.ForeignKey(default=None, to='seminar.Soustredeni', null=True)),
],
options={
'ordering': ['soustredeni', 'stav'],
'db_table': 'prednasky_seznam',
'verbose_name': 'Seznam p\u0159edn\xe1\u0161ek',
'verbose_name_plural': 'Seznamy p\u0159edn\xe1\u0161ek',
},
),
migrations.DeleteModel(
name='Seznam_old',
),
migrations.AddField(
model_name='prednaska_seznam',
name='seznam',
field=models.ForeignKey(to='prednasky.Seznam'),
),
]

20
prednasky/migrations/0006_hlasovani_seznam.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0005_auto_20160929_0153'),
]
operations = [
migrations.AddField(
model_name='hlasovani',
name='seznam',
field=models.ForeignKey(default=1, to='prednasky.Seznam'),
preserve_default=False,
),
]

19
prednasky/migrations/0007_prednaska_seznamy.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0006_hlasovani_seznam'),
]
operations = [
migrations.AddField(
model_name='prednaska',
name='seznamy',
field=models.ManyToManyField(to='prednasky.Seznam'),
),
]

25
prednasky/migrations/0008_auto_20160929_0225.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0007_prednaska_seznamy'),
]
operations = [
migrations.RemoveField(
model_name='prednaska_seznam',
name='prednaska',
),
migrations.RemoveField(
model_name='prednaska_seznam',
name='seznam',
),
migrations.DeleteModel(
name='Prednaska_Seznam',
),
]

49
prednasky/migrations/0009_auto_20160929_0354.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0008_auto_20160929_0225'),
]
operations = [
migrations.AlterField(
model_name='prednaska',
name='anotace',
field=models.TextField(help_text='Ve\u0159ejn\xe1 anotace v hlasov\xe1n\xed', null=True, verbose_name=b'Anotace'),
),
migrations.AlterField(
model_name='prednaska',
name='klicova',
field=models.CharField(max_length=200, null=True, verbose_name='Kl\xed\u010dov\xe1 slova', blank=True),
),
migrations.AlterField(
model_name='prednaska',
name='nazev',
field=models.CharField(max_length=300, verbose_name='N\xe1zev'),
),
migrations.AlterField(
model_name='prednaska',
name='obor',
field=models.CharField(help_text='Podmno\u017eina MFIOB', max_length=5, verbose_name='Obor'),
),
migrations.AlterField(
model_name='prednaska',
name='obtiznost',
field=models.IntegerField(verbose_name='Obt\xed\u017enost', choices=[(1, b'Lehk\xc3\xa1'), (2, b'St\xc5\x99edn\xc3\xad'), (3, b'T\xc4\x9b\xc5\xbek\xc3\xa1')]),
),
migrations.AlterField(
model_name='prednaska',
name='popis',
field=models.TextField(help_text='Neve\u0159ejn\xfd popis pro ostatn\xed orgy', null=True, verbose_name='Popis pro orgy'),
),
migrations.AlterField(
model_name='seznam',
name='stav',
field=models.IntegerField(default=1, verbose_name=b'Stav', choices=[(1, b'N\xc3\xa1vrh'), (2, b'Bude')]),
),
]

24
prednasky/migrations/0010_auto_20160929_0508.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('prednasky', '0009_auto_20160929_0354'),
]
operations = [
migrations.AlterField(
model_name='prednaska',
name='anotace',
field=models.TextField(help_text='Ve\u0159ejn\xe1 anotace v hlasov\xe1n\xed', null=True, verbose_name=b'Anotace', blank=True),
),
migrations.AlterField(
model_name='prednaska',
name='popis',
field=models.TextField(help_text='Neve\u0159ejn\xfd popis pro ostatn\xed orgy', null=True, verbose_name='Popis pro orgy', blank=True),
),
]

66
prednasky/models.py

@ -1,10 +1,36 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.db import models from django.db import models
from seminar.models import Organizator from django.utils.encoding import python_2_unicode_compatible
from django.utils.encoding import force_unicode
from seminar.models import Organizator,Soustredeni
STAV_NAVRH = 1
STAV_BUDE = 2
STAV_CHOICES = (
(STAV_NAVRH, 'Návrh'),
(STAV_BUDE, 'Bude')
)
@python_2_unicode_compatible
class Seznam(models.Model): class Seznam(models.Model):
pass class Meta:
db_table = 'prednasky_seznam'
verbose_name = u'Seznam přednášek'
verbose_name_plural = u'Seznamy přednášek'
ordering = ['soustredeni', 'stav']
id = models.AutoField(primary_key = True)
soustredeni = models.ForeignKey(Soustredeni,null = True, default = None)
stav = models.IntegerField('Stav',choices=STAV_CHOICES,default = STAV_NAVRH)
def __str__(self):
return force_unicode(u"Seznam {}přednášek na {}".format(u"návrhů " if self.stav == STAV_NAVRH else "",self.soustredeni))
CHOICES_OBTIZNOST = ( CHOICES_OBTIZNOST = (
(1, 'Lehká'), (1, 'Lehká'),
@ -18,17 +44,41 @@ CHOICES_BODY = (
(1, '1'), (1, '1'),
) )
@python_2_unicode_compatible
class Prednaska(models.Model): class Prednaska(models.Model):
nazev = models.CharField('Název', max_length = 300) class Meta:
db_table = 'prednasky_prednaska'
verbose_name = u'Přednáška'
verbose_name_plural = u'Přednášky'
ordering = ['org', 'nazev']
id = models.AutoField(primary_key = True)
nazev = models.CharField(u'Název', max_length = 300)
org = models.ForeignKey(Organizator) org = models.ForeignKey(Organizator)
anotace = models.TextField('Anotace') popis = models.TextField(u'Popis pro orgy',null = True, blank = True,help_text = u'Neveřejný popis pro ostatní orgy')
obtiznost = models.IntegerField('Obtížnost', choices=CHOICES_OBTIZNOST) anotace = models.TextField('Anotace',null = True, blank = True, help_text = u'Veřejná anotace v hlasování')
obor = models.CharField('Obor', max_length = 5) obtiznost = models.IntegerField(u'Obtížnost', choices=CHOICES_OBTIZNOST)
klicova = models.CharField('Klíčová slova', max_length = 200, null = True, blank = True) obor = models.CharField(u'Obor', max_length = 5, help_text = u'Podmnožina MFIOB')
seznam = models.ForeignKey(Seznam, blank = True, default = None) klicova = models.CharField(u'Klíčová slova', max_length = 200, null = True, blank = True)
seznamy = models.ManyToManyField(Seznam)
def __str__(self):
return force_unicode(u"{} ({})".format(self.nazev,self.org))
@python_2_unicode_compatible
class Hlasovani(models.Model): class Hlasovani(models.Model):
class Meta:
db_table = 'prednasky_hlasovani'
verbose_name = u'Hlasování'
verbose_name_plural = u'Hlasování'
ordering = ['ucastnik', 'prednaska']
id = models.AutoField(primary_key = True)
prednaska = models.ForeignKey(Prednaska) prednaska = models.ForeignKey(Prednaska)
body = models.IntegerField('Body', default = 0, choices = CHOICES_BODY) body = models.IntegerField('Body', default = 0, choices = CHOICES_BODY)
ucastnik = models.CharField('Účastník', max_length = 100) ucastnik = models.CharField('Účastník', max_length = 100)
seznam = models.ForeignKey(Seznam)
def __str__(self):
return force_unicode(u"{} dal {} bodů {} v seznamu {}".format(self.ucastnik, self.body, self.prednaska,self.seznam))

26
prednasky/templates/prednasky/metaseznam_prednasek.html

@ -0,0 +1,26 @@
{% extends "prednasky/Base.html" %}
{% block header %}hlasovani{% endblock %}
{% block nadpis1a %}{% block nadpis1b %}
Hlasování o přednáškách
{% endblock %}{% endblock %}
{% block content %}
{# Projdi vsechny seznamy #}
<div class="mam-org-only">
<ul>
{% for seznam in object_list %}
<li>
{% if seznam.stav == 1 %} {# STAV_NAHRH = 1 #}
<a href="/prednasky/seznam_prednasek/{{seznam.id}}">Návrh přednášek na soustředění {{seznam.soustredeni.misto}} </a>
{% else %}
<a href="/prednasky/seznam_prednasek/{{seznam.id}}">Seznam přednášek na soustředění {{seznam.soustredeni.misto}} </a>
{% endif %}
<a href="/prednasky/seznam_prednasek/{{seznam.id}}/export">Export</a>
</li>
{% endfor %}
{% endblock %}

21
prednasky/templates/prednasky/seznam_prednasek.html

@ -0,0 +1,21 @@
{% extends "prednasky/Base.html" %}
{% block header %}seznam_prednasek{% endblock %}
{% block nadpis1a %}{% block nadpis1b %}
Seznam přednášek
{% endblock %}{% endblock %}
{% block content %}
<div class="mam-org-only">
<ul>
{# Projdi vsechny prednasky #}
{% for prednaska in object_list %}
<li>
<strong>{{prednaska.nazev}}</strong> (<i>{{prednaska.obor}},{{prednaska.obtiznost}}</i>) - {{prednaska.org}}
</li>
{% endfor %}
{% endblock %}

21
prednasky/templates/prednasky/seznam_prednasek_export.txt

@ -0,0 +1,21 @@
{% block content %}
{% spaceless %}
{% for hlas in hlasovani %}
hlas({{hlas.ucastnik}},{{hlas.prednaska.id}},{{hlas.body}})
{% endfor %}
{% for prednaska in prednasky %}
prednaska({{prednaska.id}},{{prednaska.org.id}},{{prednaska.obtiznost}},{{prednaska.obor}})
{% endfor %}
{% for org in orgove %}
org({{org.id}},4,0,15)
{% endfor %}
{% for org in orgove %}
{{org.id}};{{org}}
{% endfor %}
{% for prednaska in prednasky %}
{{prednaska.id}};{{prednaska.nazev}};{{prednaska.org.id}}
{{prednaska.body}}
{% endfor %}
{% endspaceless %}
{% endblock %}

15
prednasky/urls.py

@ -0,0 +1,15 @@
from django.conf.urls import * # NOQA
from django.conf.urls import patterns, url
from django.contrib.auth.decorators import user_passes_test
from . import views
staff_member_required = user_passes_test(lambda u: u.is_staff)
urlpatterns = [
url(r'^prednasky/$', views.newPrednaska),
url(r'^prednasky/hotovo$', views.Prednaska_hotovo),
url(r'^prednasky/metaseznam_prednasek$', staff_member_required(views.MetaSeznamListView.as_view()), name='metaseznam-list'),
url(r'^prednasky/seznam_prednasek/(?P<seznam>\d+)/$', staff_member_required(views.SeznamListView.as_view()), name='seznam-list'),
url(r'^prednasky/seznam_prednasek/(?P<seznam>\d+)/export$', staff_member_required(views.SeznamExportView), name='seznam-export'),
# url(r'^korektury/help/', staff_member_required(views.KorekturyHelpView.as_view()), name='korektury-help'),
]

50
prednasky/views.py

@ -1,12 +1,19 @@
from django.shortcuts import render from django.shortcuts import render,get_object_or_404
from django.views import generic
from prednasky.forms import NewPrednaskyForm from prednasky.forms import NewPrednaskyForm
from prednasky.models import Seznam, Hlasovani, Prednaska from prednasky.models import Seznam, Hlasovani, Prednaska
from django.shortcuts import HttpResponseRedirect from django.shortcuts import HttpResponseRedirect
from models import Prednaska, Seznam, STAV_NAVRH
from seminar.models import Soustredeni
def newPrednaska(request): def newPrednaska(request):
# zjistime k jakemu soustredeni se vaze nove vytvarena galerie # hlasovani se vztahuje k nejnovejsimu soustredeni
prednasky = Seznam.objects.first() sous = Soustredeni.objects.first()
# obsluha formulare umoznujiciho multiple nahravani fotek seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first()
print seznam
# obsluha formulare
if request.method == 'POST': if request.method == 'POST':
form = NewPrednaskyForm(request.POST, request.FILES) form = NewPrednaskyForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
@ -18,6 +25,7 @@ def newPrednaska(request):
hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0] hlasovani.prednaska = Prednaska.objects.filter(pk = int(i[1:]))[0]
hlasovani.body = int(request.POST[i]) hlasovani.body = int(request.POST[i])
hlasovani.ucastnik = jmeno hlasovani.ucastnik = jmeno
hlasovani.seznam = seznam
hlasovani.save() hlasovani.save()
# presmerovani na prave vzniklou galerii # presmerovani na prave vzniklou galerii
@ -28,11 +36,41 @@ def newPrednaska(request):
return render(request, 'prednasky/Base.html', return render(request, 'prednasky/Base.html',
{ 'form' : form, { 'form' : form,
'prednasky' : prednasky, 'prednasky' : seznam,
}) })
def Prednaska_hotovo(request): def Prednaska_hotovo(request):
return render(request, 'prednasky/hotovo.html') return render(request, 'prednasky/hotovo.html')
class MetaSeznamListView(generic.ListView):
model = Seznam
template_name = 'prednasky/metaseznam_prednasek.html'
class SeznamListView(generic.ListView):
template_name = 'prednasky/seznam_prednasek.html'
def get_queryset(self):
print self.kwargs
self.seznam = get_object_or_404(Seznam,id=self.kwargs["seznam"])
return Prednaska.objects.filter(seznamy = self.seznam)
def SeznamExportView(request,seznam):
seznam_obj = Seznam.objects.get(id=seznam)
hlasovani = Hlasovani.objects.filter(seznam=seznam)
prednasky = Prednaska.objects.filter(seznamy=seznam)
orgove = set(map(lambda x:x.org,prednasky))
ucastnici = list(set(map(lambda x:x.ucastnik,hlasovani)))
for p in prednasky:
p.body = []
for u in ucastnici:
p.body.append(hlasovani.get(ucastnik=u,prednaska=p).body)
for h in hlasovani:
h.ucastnik = hash(h.ucastnik)
return render(request, 'prednasky/seznam_prednasek_export.txt',
{"hlasovani":hlasovani,"prednasky":prednasky,"orgove":orgove},
content_type="text/plain")
# Create your views here.

17
seminar/admin.py

@ -11,7 +11,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, Prispevek, Pohadka from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator, Prispevek, Pohadka, Konfera
from autocomplete_light import shortcuts as autocomplete_light from autocomplete_light import shortcuts as autocomplete_light
@ -181,6 +181,7 @@ class Soustredeni_UcastniciInline(admin.TabularInline):
qs = super(Soustredeni_UcastniciInline, self).get_queryset(request) qs = super(Soustredeni_UcastniciInline, self).get_queryset(request)
return qs.select_related('resitel', 'soustredeni') return qs.select_related('resitel', 'soustredeni')
class Soustredeni_OrganizatoriInline(admin.TabularInline): class Soustredeni_OrganizatoriInline(admin.TabularInline):
form = autocomplete_light.modelform_factory(Soustredeni_Organizatori, autocomplete_fields=['organizator'], fields=['organizator'],) form = autocomplete_light.modelform_factory(Soustredeni_Organizatori, autocomplete_fields=['organizator'], fields=['organizator'],)
model = Soustredeni_Organizatori model = Soustredeni_Organizatori
@ -468,6 +469,20 @@ class SoustredeniAdmin(VersionAdmin):
admin.site.register(Soustredeni, SoustredeniAdmin) admin.site.register(Soustredeni, SoustredeniAdmin)
### Konfery
class KonferaAdminForm(forms.ModelForm):
class Meta:
model=Konfera
exclude = []
class KonferaAdmin(VersionAdmin):
form = KonferaAdminForm
list_filter = ['soustredeni']
list_display = ['nazev','soustredeni','organizator','typ_prezentace']
# inlines = [Konfera_UcastniciInline]
admin.site.register(Konfera,KonferaAdmin)
### Novinky ### Novinky
class NovinkyAdminForm(forms.ModelForm): class NovinkyAdminForm(forms.ModelForm):

31
seminar/migrations/0042_auto_20161005_0847.py

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import seminar.models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0041_konfery'),
]
operations = [
migrations.AlterField(
model_name='konfera',
name='materialy',
field=models.FileField(help_text='Dal\u0161\xed materi\xe1ly ke konfe\u0159e zabalen\xe9 do jednoho souboru', upload_to=seminar.models.generate_filename_konfera, verbose_name='materialy', blank=True),
),
migrations.AlterField(
model_name='konfera',
name='prezentace',
field=models.FileField(help_text='Prezentace nebo fotka posteru', upload_to=seminar.models.generate_filename_konfera, verbose_name='prezentace', blank=True),
),
migrations.AlterField(
model_name='konfera',
name='prispevek',
field=models.ForeignKey(related_name='konfery', on_delete=django.db.models.deletion.SET_NULL, blank=True, to='seminar.Problem', help_text='\xda\u010dastnick\xfd p\u0159\xedp\u011bvek o konfe\u0159e', null=True, verbose_name='p\u0159\xedsp\u011bvek do \u010d\xedsla'),
),
]

6
seminar/models.py

@ -859,7 +859,7 @@ class Konfera(models.Model):
org_poznamka = models.TextField(u'neveřejná poznámka', blank=True, org_poznamka = models.TextField(u'neveřejná poznámka', blank=True,
help_text=u'Neveřejná poznámka ke konfeře(plain text)') help_text=u'Neveřejná poznámka ke konfeře(plain text)')
prispevek = models.ForeignKey(Problem, verbose_name=u'příspěvek do čísla', related_name='konfery', prispevek = models.ForeignKey(Problem, verbose_name=u'příspěvek do čísla', related_name='konfery',
help_text=u'Účastnický přípěvek o konfeře',on_delete = models.SET_NULL, null=True) help_text=u'Úč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 = [
@ -868,9 +868,9 @@ class Konfera(models.Model):
] ]
typ_prezentace = models.CharField(u'typ prezentace', max_length=16, choices=TYP_CHOICES, blank=False, default=TYP_VELETRH) 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', prezentace = models.FileField(u'prezentace',help_text = u'Prezentace nebo fotka posteru',
upload_to = generate_filename_konfera) upload_to = generate_filename_konfera, blank=True)
materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru', materialy = models.FileField(u'materialy',help_text = u'Další materiály ke konfeře zabalené do jednoho souboru',
upload_to = generate_filename_konfera) upload_to = generate_filename_konfera, blank=True)
def __str__(self): def __str__(self):
return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni)) return force_unicode(u"%s: (%s)" % (self.nazev, self.soustredeni))

5
seminar/urls.py

@ -3,16 +3,11 @@ from django.conf.urls import patterns, url
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from . import views, export from . import views, export
from utils import staff_member_required from utils import staff_member_required
from prednasky.views import newPrednaska, Prednaska_hotovo
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
staff_member_required = user_passes_test(lambda u: u.is_staff) staff_member_required = user_passes_test(lambda u: u.is_staff)
urlpatterns = [ urlpatterns = [
# prednasky
#url(r'^prednasky/$', newPrednaska),
#url(r'^prednasky/hotovo$', Prednaska_hotovo),
# REDIRECTy # REDIRECTy
url(r'^jak-resit/$', RedirectView.as_view(url='/co-je-MaM/jak-resit/')), url(r'^jak-resit/$', RedirectView.as_view(url='/co-je-MaM/jak-resit/')),

Loading…
Cancel
Save