Merge branch 'feature-events' into 'develop'

Basic API for events

See merge request vtmk/web2.0!120
This commit is contained in:
Aarni Halinen
2018-07-17 18:43:01 +03:00
17 changed files with 588 additions and 226 deletions
-1
View File
@@ -9,7 +9,6 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.postgres.fields import JSONField
import logging
Binary file not shown.
+98 -78
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-05-22 23:51+0300\n"
"POT-Creation-Date: 2018-06-19 20:44+0300\n"
"PO-Revision-Date: 2017-11-02 23:09+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -33,7 +33,7 @@ msgstr "External website"
msgid "Sössö articles"
msgstr "Sössö articles"
#: infoscreen/models.py:199 webapp/models.py:72
#: infoscreen/models.py:199 signup/models.py:30
msgid "Events"
msgstr "Events"
@@ -112,8 +112,8 @@ msgstr "Preview"
msgid "Delete"
msgstr "Delete"
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:39
#: kaehmy/templates/list.html:36 webapp/models.py:110 webapp/models.py:140
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:38
#: kaehmy/templates/list.html:36 webapp/models.py:61 webapp/models.py:90
msgid "Name"
msgstr "Name"
@@ -201,95 +201,95 @@ msgstr "Invalid phone number"
msgid "Custom role with the same name already exists."
msgstr "Custom role with the same name already exists."
#: kaehmy/models.py:18
#: kaehmy/models.py:17
msgid "Kaehmy"
msgstr "Kaehmy"
#: kaehmy/models.py:25
#: kaehmy/models.py:24
msgid "Preset kaehmy role"
msgstr "Preset kaehmy role"
#: kaehmy/models.py:26
#: kaehmy/models.py:25
msgid "Preset kaehmy roles"
msgstr "Preset kaehmy roles"
#: kaehmy/models.py:33
#: kaehmy/models.py:32
msgid "Custom kaehmy role"
msgstr "Custom kaehmy role"
#: kaehmy/models.py:34
#: kaehmy/models.py:33
msgid "Custom kaehmy roles"
msgstr "Custom kaehmy roles"
#: kaehmy/models.py:40 kaehmy/templates/list.html:40 members/models.py:15
#: kaehmy/models.py:39 kaehmy/templates/list.html:40 members/models.py:15
msgid "Email"
msgstr "Email"
#: kaehmy/models.py:41
#: kaehmy/models.py:40
msgid "Timestamp"
msgstr ""
#: kaehmy/models.py:55
#: kaehmy/models.py:54
msgid "Kaehmykommentti"
msgstr "Kaehmy comment"
#: kaehmy/models.py:56
#: kaehmy/models.py:55
msgid "Kaehmykommentit"
msgstr "Kaehmy comments"
#: kaehmy/models.py:58 ohlhafv/models.py:37
#: kaehmy/models.py:57 ohlhafv/models.py:36
msgid "Message"
msgstr ""
#: kaehmy/models.py:77 kaehmy/templates/kaehmy.html:12
#: kaehmy/models.py:76 kaehmy/templates/kaehmy.html:12
msgid "Kaehmylomake"
msgstr "Kaehmy application"
#: kaehmy/models.py:78
#: kaehmy/models.py:77
msgid "Kaehmylomakkeet"
msgstr "Kaehmy applications"
#: kaehmy/models.py:81 webapp/models.py:175
#: kaehmy/models.py:80 webapp/models.py:125
msgid "Phone number"
msgstr ""
#: kaehmy/models.py:82
#: kaehmy/models.py:81
msgid "Year"
msgstr ""
#: kaehmy/models.py:83
#: kaehmy/models.py:82
msgid "Text"
msgstr ""
#: kaehmy/models.py:85
#: kaehmy/models.py:84
msgid "Custom role name"
msgstr ""
#: kaehmy/models.py:87 webapp/models.py:111
#: kaehmy/models.py:86 webapp/models.py:62
msgid "Board member"
msgstr "Board member"
#: kaehmy/models.py:95
#: kaehmy/models.py:94
msgid "Kaehmy application: {}"
msgstr "Kaehmy application: {}"
#: kaehmy/models.py:117
#: kaehmy/models.py:116
msgid "Board: {}"
msgstr ""
#: kaehmy/models.py:123
#: kaehmy/models.py:122
msgid "Official: {}"
msgstr ""
#: kaehmy/models.py:140
#: kaehmy/models.py:139
msgid "Telegram channel"
msgstr ""
#: kaehmy/models.py:141
#: kaehmy/models.py:140
msgid "Telegram channels"
msgstr ""
#: kaehmy/tables.py:13 webapp/models.py:159
#: kaehmy/tables.py:13 webapp/models.py:109
msgid "Roles"
msgstr ""
@@ -726,11 +726,11 @@ msgstr "Payments in register:"
msgid "Language"
msgstr "Language"
#: members/templates/settings.html:20 sikweb/base.py:246
#: members/templates/settings.html:20 sikweb/base.py:247
msgid "Finnish"
msgstr "Finnish"
#: members/templates/settings.html:21 sikweb/base.py:247
#: members/templates/settings.html:21 sikweb/base.py:248
msgid "English"
msgstr "English"
@@ -818,39 +818,39 @@ msgstr "Could not update payment object"
msgid "Missing CSV file"
msgstr "Missing CSV file"
#: ohlhafv/models.py:16
#: ohlhafv/models.py:15
msgid "Ohlhafv"
msgstr "Øhlhäfv"
#: ohlhafv/models.py:23
#: ohlhafv/models.py:22
msgid "Ohlhafv challenge"
msgstr ""
#: ohlhafv/models.py:24
#: ohlhafv/models.py:23
msgid "Ohlhafv challenges"
msgstr ""
#: ohlhafv/models.py:30
#: ohlhafv/models.py:29
msgid "Team Challenge (1 x 0.33 L, 2 x 0.5 L, 1 x 1.0 L)"
msgstr ""
#: ohlhafv/models.py:33
#: ohlhafv/models.py:32
msgid "Challenger"
msgstr ""
#: ohlhafv/models.py:34
#: ohlhafv/models.py:33
msgid "Victim"
msgstr ""
#: ohlhafv/models.py:35
#: ohlhafv/models.py:34
msgid "Victim email"
msgstr ""
#: ohlhafv/models.py:36
#: ohlhafv/models.py:35
msgid "Series"
msgstr ""
#: ohlhafv/models.py:41
#: ohlhafv/models.py:40
msgid "Ohlhafv challenge: {} vs. {}"
msgstr ""
@@ -903,6 +903,50 @@ msgstr "Challenge"
msgid "Sinut on haastettu Øhlhäfviin!"
msgstr "You have been challenged at Ohlhafv!"
#: signup/models.py:14 webapp/models.py:16
msgid "Webapp"
msgstr "Webapp"
#: signup/models.py:26
msgid "Event: {}"
msgstr ""
#: signup/models.py:29
msgid "Event"
msgstr ""
#: signup/models.py:40
msgid "Template questions: {}"
msgstr ""
#: signup/models.py:43
msgid "Template question"
msgstr ""
#: signup/models.py:44
msgid "Template questions"
msgstr ""
#: signup/models.py:56
msgid "Signup form"
msgstr ""
#: signup/models.py:57
msgid "Signup forms"
msgstr ""
#: signup/models.py:66
msgid "Sign-ups: {}"
msgstr ""
#: signup/models.py:69
msgid "Sign-up"
msgstr ""
#: signup/models.py:70
msgid "Sign-ups"
msgstr ""
#: templates/admin/base_site.html:43
msgid "Go"
msgstr "Go"
@@ -975,91 +1019,67 @@ msgstr ""
"An email was sent to <strong>%(email)s</strong> %(ago)s ago. Use the link in "
"it to set a new password."
#: webapp/models.py:17
msgid "Webapp"
msgstr "Webapp"
#: webapp/models.py:28
#: webapp/models.py:27
msgid "Tag"
msgstr "Tag"
#: webapp/models.py:29
#: webapp/models.py:28
msgid "Tags"
msgstr "Tags"
#: webapp/models.py:32
#: webapp/models.py:31
msgid "Tag: {}"
msgstr "Tag: {}"
#: webapp/models.py:52
#: webapp/models.py:51
msgid "Feed: {}"
msgstr "Feed: {}"
#: webapp/models.py:55
#: webapp/models.py:54
msgid "Feed"
msgstr ""
#: webapp/models.py:56
#: webapp/models.py:55
msgid "Feeds"
msgstr ""
#: webapp/models.py:68
msgid "Event: {}"
msgstr ""
#: webapp/models.py:71
msgid "Event"
msgstr ""
#: webapp/models.py:83
msgid "Registration: {}"
msgstr ""
#: webapp/models.py:86
msgid "Registration"
msgstr ""
#: webapp/models.py:87
msgid "Registrations"
msgstr ""
#: webapp/models.py:116
#: webapp/models.py:66
msgid "board member"
msgstr "board member"
#: webapp/models.py:122
#: webapp/models.py:72
msgid "Description"
msgstr "Description"
#: webapp/models.py:134
#: webapp/models.py:84
msgid "Committee"
msgstr ""
#: webapp/models.py:135
#: webapp/models.py:85
msgid "Committees"
msgstr ""
#: webapp/models.py:138
#: webapp/models.py:88
msgid "Committee: {}"
msgstr ""
#: webapp/models.py:158
#: webapp/models.py:108
msgid "Role"
msgstr ""
#: webapp/models.py:161
#: webapp/models.py:111
msgid "Start date"
msgstr ""
#: webapp/models.py:162
#: webapp/models.py:112
msgid "End date"
msgstr ""
#: webapp/models.py:172
#: webapp/models.py:122
msgid "Official"
msgstr ""
#: webapp/models.py:173
#: webapp/models.py:123
msgid "Officials"
msgstr ""
Binary file not shown.
+107 -78
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-05-22 23:51+0300\n"
"POT-Creation-Date: 2018-06-19 20:44+0300\n"
"PO-Revision-Date: 2017-11-02 23:04+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -34,7 +34,7 @@ msgstr "Ulkoinen verkkosivu"
msgid "Sössö articles"
msgstr "Sössön artikkelit"
#: infoscreen/models.py:199 webapp/models.py:72
#: infoscreen/models.py:199 signup/models.py:30
msgid "Events"
msgstr "Tapahtumat"
@@ -113,8 +113,8 @@ msgstr "Esikatsele"
msgid "Delete"
msgstr "Poista"
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:39
#: kaehmy/templates/list.html:36 webapp/models.py:110 webapp/models.py:140
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:38
#: kaehmy/templates/list.html:36 webapp/models.py:61 webapp/models.py:90
msgid "Name"
msgstr "Nimi"
@@ -202,95 +202,95 @@ msgstr "Virheellinen puhelinnumero"
msgid "Custom role with the same name already exists."
msgstr "Samanniminen virka on jo olemassa."
#: kaehmy/models.py:18
#: kaehmy/models.py:17
msgid "Kaehmy"
msgstr "Kaehmy"
#: kaehmy/models.py:25
#: kaehmy/models.py:24
msgid "Preset kaehmy role"
msgstr "Kaehmyvirka"
#: kaehmy/models.py:26
#: kaehmy/models.py:25
msgid "Preset kaehmy roles"
msgstr "Kaehmyvirat"
#: kaehmy/models.py:33
#: kaehmy/models.py:32
msgid "Custom kaehmy role"
msgstr "Uusi virka"
#: kaehmy/models.py:34
#: kaehmy/models.py:33
msgid "Custom kaehmy roles"
msgstr "Uudet kaehmyvirat"
#: kaehmy/models.py:40 kaehmy/templates/list.html:40 members/models.py:15
#: kaehmy/models.py:39 kaehmy/templates/list.html:40 members/models.py:15
msgid "Email"
msgstr "Sähköposti"
#: kaehmy/models.py:41
#: kaehmy/models.py:40
msgid "Timestamp"
msgstr "Aikaleima"
#: kaehmy/models.py:55
#: kaehmy/models.py:54
msgid "Kaehmykommentti"
msgstr "Kaehmykommentti"
#: kaehmy/models.py:56
#: kaehmy/models.py:55
msgid "Kaehmykommentit"
msgstr "Kaehmykommentit"
#: kaehmy/models.py:58 ohlhafv/models.py:37
#: kaehmy/models.py:57 ohlhafv/models.py:36
msgid "Message"
msgstr "Viesti"
#: kaehmy/models.py:77 kaehmy/templates/kaehmy.html:12
#: kaehmy/models.py:76 kaehmy/templates/kaehmy.html:12
msgid "Kaehmylomake"
msgstr "Kaehmylomake"
#: kaehmy/models.py:78
#: kaehmy/models.py:77
msgid "Kaehmylomakkeet"
msgstr "Kaehmylomakkeet"
#: kaehmy/models.py:81 webapp/models.py:175
#: kaehmy/models.py:80 webapp/models.py:125
msgid "Phone number"
msgstr "Puhelinnumero"
#: kaehmy/models.py:82
#: kaehmy/models.py:81
msgid "Year"
msgstr "Vuosi"
#: kaehmy/models.py:83
#: kaehmy/models.py:82
msgid "Text"
msgstr "Teksti"
#: kaehmy/models.py:85
#: kaehmy/models.py:84
msgid "Custom role name"
msgstr "Uusi virka"
#: kaehmy/models.py:87 webapp/models.py:111
#: kaehmy/models.py:86 webapp/models.py:62
msgid "Board member"
msgstr "Hallituksen jäsen"
#: kaehmy/models.py:95
#: kaehmy/models.py:94
msgid "Kaehmy application: {}"
msgstr "Kaehmy: {}"
#: kaehmy/models.py:117
#: kaehmy/models.py:116
msgid "Board: {}"
msgstr "Hallitus: {}"
#: kaehmy/models.py:123
#: kaehmy/models.py:122
msgid "Official: {}"
msgstr "Toimari: {}"
#: kaehmy/models.py:140
#: kaehmy/models.py:139
msgid "Telegram channel"
msgstr "Telegram-kanava"
#: kaehmy/models.py:141
#: kaehmy/models.py:140
msgid "Telegram channels"
msgstr "Telegram-kanavat"
#: kaehmy/tables.py:13 webapp/models.py:159
#: kaehmy/tables.py:13 webapp/models.py:109
msgid "Roles"
msgstr "Roolit"
@@ -728,11 +728,11 @@ msgstr "Maksutapahtumia:"
msgid "Language"
msgstr "Kieli"
#: members/templates/settings.html:20 sikweb/base.py:246
#: members/templates/settings.html:20 sikweb/base.py:247
msgid "Finnish"
msgstr "suomi"
#: members/templates/settings.html:21 sikweb/base.py:247
#: members/templates/settings.html:21 sikweb/base.py:248
msgid "English"
msgstr "englanti"
@@ -819,39 +819,39 @@ msgstr "Maksutapahtumaobjektia ei voitu päivittää"
msgid "Missing CSV file"
msgstr "Puuttuva CSV-tiedosto"
#: ohlhafv/models.py:16
#: ohlhafv/models.py:15
msgid "Ohlhafv"
msgstr "Øhlhäfv"
#: ohlhafv/models.py:23
#: ohlhafv/models.py:22
msgid "Ohlhafv challenge"
msgstr "Ohlhafv haaste"
#: ohlhafv/models.py:24
#: ohlhafv/models.py:23
msgid "Ohlhafv challenges"
msgstr "Ohlhafv haasteet"
#: ohlhafv/models.py:30
#: ohlhafv/models.py:29
msgid "Team Challenge (1 x 0.33 L, 2 x 0.5 L, 1 x 1.0 L)"
msgstr "Joukkuehaaste (1 x 0.33 L, 2 x 0.5 L, 1 x 1.0 L)"
#: ohlhafv/models.py:33
#: ohlhafv/models.py:32
msgid "Challenger"
msgstr "Haastaja"
#: ohlhafv/models.py:34
#: ohlhafv/models.py:33
msgid "Victim"
msgstr "Uhri"
#: ohlhafv/models.py:35
#: ohlhafv/models.py:34
msgid "Victim email"
msgstr "Uhrin sähköpostiosoite"
#: ohlhafv/models.py:36
#: ohlhafv/models.py:35
msgid "Series"
msgstr "Sarja"
#: ohlhafv/models.py:41
#: ohlhafv/models.py:40
msgid "Ohlhafv challenge: {} vs. {}"
msgstr "Ohlhafv-haaste: {} vs. {}"
@@ -903,6 +903,50 @@ msgstr "Haasta"
msgid "Sinut on haastettu Øhlhäfviin!"
msgstr ""
#: signup/models.py:14 webapp/models.py:16
msgid "Webapp"
msgstr "Nettisivut"
#: signup/models.py:26
msgid "Event: {}"
msgstr "Tapahtuma: {}"
#: signup/models.py:29
msgid "Event"
msgstr "Tapahtuma"
#: signup/models.py:40
msgid "Template questions: {}"
msgstr "Vakiokysymykset: {}"
#: signup/models.py:43
msgid "Template question"
msgstr "Vakiokysymys"
#: signup/models.py:44
msgid "Template questions"
msgstr "Vakiokysymykset"
#: signup/models.py:56
msgid "Signup form"
msgstr "Ilmoittautumislomake"
#: signup/models.py:57
msgid "Signup forms"
msgstr "Ilmoittautumislomakkeet"
#: signup/models.py:66
msgid "Sign-ups: {}"
msgstr "Ilmoittautumiset: {}"
#: signup/models.py:69
msgid "Sign-up"
msgstr "Ilmoittautuminen"
#: signup/models.py:70
msgid "Sign-ups"
msgstr "Ilmoittautumiset"
#: templates/admin/base_site.html:43
msgid "Go"
msgstr "Vaihda"
@@ -974,91 +1018,67 @@ msgstr ""
"Sähköposti on lähetetty osoitteeseen <strong>%(email)s</strong> %(ago)s:a "
"sitten. Käytä linkkiä asettaaksesi uuden salasanan."
#: webapp/models.py:17
msgid "Webapp"
msgstr "Nettisivut"
#: webapp/models.py:28
#: webapp/models.py:27
msgid "Tag"
msgstr "Tunniste"
#: webapp/models.py:29
#: webapp/models.py:28
msgid "Tags"
msgstr "Tunnisteet"
#: webapp/models.py:32
#: webapp/models.py:31
msgid "Tag: {}"
msgstr "Tunniste: {}"
#: webapp/models.py:52
#: webapp/models.py:51
msgid "Feed: {}"
msgstr "Uutinen: {}"
#: webapp/models.py:55
#: webapp/models.py:54
msgid "Feed"
msgstr "Uutinen"
#: webapp/models.py:56
#: webapp/models.py:55
msgid "Feeds"
msgstr "Uutiset"
#: webapp/models.py:68
msgid "Event: {}"
msgstr "Tapahtuma: {}"
#: webapp/models.py:71
msgid "Event"
msgstr "Tapahtuma"
#: webapp/models.py:83
msgid "Registration: {}"
msgstr "Registration: {}"
#: webapp/models.py:86
msgid "Registration"
msgstr "Ilmoittautuminen"
#: webapp/models.py:87
msgid "Registrations"
msgstr "Ilmoittautumiset"
#: webapp/models.py:116
#: webapp/models.py:66
msgid "board member"
msgstr "hallituksen jäsen"
#: webapp/models.py:122
#: webapp/models.py:72
msgid "Description"
msgstr "Kuvaus"
#: webapp/models.py:134
#: webapp/models.py:84
msgid "Committee"
msgstr "Toimikunta"
#: webapp/models.py:135
#: webapp/models.py:85
msgid "Committees"
msgstr "Toimikunnat"
#: webapp/models.py:138
#: webapp/models.py:88
msgid "Committee: {}"
msgstr "Toimikunta: {}"
#: webapp/models.py:158
#: webapp/models.py:108
msgid "Role"
msgstr "Rooli"
#: webapp/models.py:161
#: webapp/models.py:111
msgid "Start date"
msgstr "Alkupäivämäärä"
#: webapp/models.py:162
#: webapp/models.py:112
msgid "End date"
msgstr "Loppupäivämäärä"
#: webapp/models.py:172
#: webapp/models.py:122
msgid "Official"
msgstr "Toimihenkilö"
#: webapp/models.py:173
#: webapp/models.py:123
msgid "Officials"
msgstr "Toimihenkilöt"
@@ -1114,6 +1134,15 @@ msgstr "Sössö"
msgid "Corporate"
msgstr "Yritys"
#~ msgid "Registration: {}"
#~ msgstr "Registration: {}"
#~ msgid "Registration"
#~ msgstr "Ilmoittautuminen"
#~ msgid "Registrations"
#~ msgstr "Ilmoittautumiset"
#~ msgid "Corporate affairs"
#~ msgstr "Yrityssuhteet"
-1
View File
@@ -9,7 +9,6 @@ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.postgres.fields import JSONField
import logging
+4 -2
View File
@@ -2,7 +2,7 @@
from django.contrib import admin
from webapp.models import Official, Role, Committee
from webapp.models import Feed, Tag, BaseFeed, Event, Registration
from webapp.models import Feed, Tag, BaseFeed, Event, Signup, SignupForm, TemplateQuestion
from modeltranslation.admin import TranslationAdmin
from django.contrib.auth.models import Permission
# this is needed so that the models get registered for translation
@@ -13,7 +13,9 @@ admin.site.register(Permission)
admin.site.register(Feed, TranslationAdmin)
admin.site.register(Tag, TranslationAdmin)
admin.site.register(Event, TranslationAdmin)
admin.site.register(Registration, TranslationAdmin)
admin.site.register(SignupForm, TranslationAdmin)
admin.site.register(Signup, TranslationAdmin)
admin.site.register(TemplateQuestion, TranslationAdmin)
admin.site.register(Official)
admin.site.register(Role)
admin.site.register(Committee)
@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-06-05 16:53
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('webapp', '0042_merge_20180516_2249'),
]
operations = [
migrations.RemoveField(
model_name='event',
name='basefeed_ptr',
),
migrations.RemoveField(
model_name='event',
name='registration',
),
migrations.DeleteModel(
name='Event',
),
migrations.DeleteModel(
name='Registration',
),
]
@@ -0,0 +1,77 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-07-05 15:51
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('webapp', '0043_auto_20180605_1953'),
]
operations = [
migrations.CreateModel(
name='Event',
fields=[
('basefeed_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='webapp.BaseFeed')),
('start_time', models.DateTimeField(default=django.utils.timezone.now)),
('end_time', models.DateTimeField(default=django.utils.timezone.now)),
],
options={
'verbose_name': 'Event',
'verbose_name_plural': 'Events',
},
bases=('webapp.basefeed',),
),
migrations.CreateModel(
name='Signup',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('time', models.DateTimeField(default=django.utils.timezone.now)),
('answer', models.CharField(max_length=255)),
],
options={
'verbose_name': 'Sign-up',
'verbose_name_plural': 'Sign-ups',
},
),
migrations.CreateModel(
name='SignupForm',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start', models.DateTimeField(default=django.utils.timezone.now)),
('end', models.DateTimeField(default=django.utils.timezone.now)),
('question', models.CharField(max_length=255)),
],
options={
'verbose_name': 'Signup form',
'verbose_name_plural': 'Signup forms',
},
),
migrations.CreateModel(
name='TemplateQuestion',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('question', models.CharField(max_length=255)),
],
options={
'verbose_name': 'Template question',
'verbose_name_plural': 'Template questions',
},
),
migrations.AddField(
model_name='signup',
name='signupForm',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='webapp.SignupForm'),
),
migrations.AddField(
model_name='event',
name='signupForm',
field=models.ManyToManyField(blank=True, to='webapp.SignupForm'),
),
]
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-07-10 16:01
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('webapp', '0044_auto_20180705_1851'),
]
operations = [
migrations.RenameField(
model_name='signupform',
old_name='question',
new_name='questions',
),
]
@@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-07-10 17:41
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('webapp', '0045_auto_20180710_1901'),
]
operations = [
migrations.RemoveField(
model_name='event',
name='signupForm',
),
migrations.AddField(
model_name='event',
name='signupForm',
field=models.ForeignKey(blank=True, default=0, on_delete=django.db.models.deletion.CASCADE, to='webapp.SignupForm'),
preserve_default=False,
),
]
@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-07-10 18:10
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0046_auto_20180710_2041'),
]
operations = [
migrations.RemoveField(
model_name='event',
name='signupForm',
),
migrations.AddField(
model_name='event',
name='signupForm',
field=models.ManyToManyField(blank=True, to='webapp.SignupForm'),
),
]
+40 -14
View File
@@ -2,16 +2,16 @@
from django.db import models
from django.utils import timezone
from datetime import timedelta
# from datetime import timedelta
from django.contrib.auth.models import User
from webapp.utils import month_from_now
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
# from django.contrib.auth.models import User
from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.postgres.fields import JSONField
# from django.contrib.postgres.fields import JSONField
import logging
# import logging
VERBOSE_NAME = _('Webapp')
@@ -61,8 +61,8 @@ class Event(BaseFeed):
start_time = models.DateTimeField(default=timezone.now)
end_time = models.DateTimeField(default=timezone.now)
registration = models.ForeignKey(
'Registration', on_delete=models.CASCADE, null=True)
signupForm = models.ManyToManyField(
'SignupForm', blank=True)
def __str__(self):
return _('Event: {}').format(self.title)
@@ -72,19 +72,44 @@ class Event(BaseFeed):
verbose_name_plural = _('Events')
class Registration(models.Model):
"""Model for event registration."""
class TemplateQuestion(models.Model):
"""Stores template questions for signup forms as JSONB"""
# question = JSONField()
name = models.CharField(max_length=255)
email = models.EmailField()
options = JSONField()
question = models.CharField(max_length=255)
def __str__(self):
return _('Registration: {}').format(self.name)
return _('Template questions: {}').format(self.name)
class Meta:
verbose_name = _('Registration')
verbose_name_plural = _('Registrations')
verbose_name = _('Template question')
verbose_name_plural = _('Template questions')
class SignupForm(models.Model):
"""Model for event signup form. Stores questions in JSONB."""
start = models.DateTimeField(default=timezone.now)
end = models.DateTimeField(default=timezone.now)
# question = JSONField()
questions = models.CharField(max_length=255)
class Meta:
verbose_name = _('Signup form')
verbose_name_plural = _('Signup forms')
class Signup(models.Model):
signupForm = models.ForeignKey('SignupForm', on_delete=models.CASCADE)
time = models.DateTimeField(default=timezone.now)
answer = models.CharField(max_length=255)
def __str__(self):
return _('Sign-ups: {}').format(self.signupForm)
class Meta:
verbose_name = _('Sign-up')
verbose_name_plural = _('Sign-ups')
class BaseRole(models.Model):
@@ -182,6 +207,7 @@ class Official(User):
auditlog.register(Tag)
auditlog.register(Feed)
auditlog.register(Event)
auditlog.register(Signup)
auditlog.register(PresetRole)
auditlog.register(Role)
auditlog.register(Official)
+42
View File
@@ -0,0 +1,42 @@
from rest_framework import serializers
from webapp.models import *
class SignupFormSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = SignupForm
fields = ('id', 'start', 'end', 'questions')
class EventSerializer(serializers.HyperlinkedModelSerializer):
signupForm = SignupFormSerializer(many=True, read_only=True, required=False)
signup_id = serializers.PrimaryKeyRelatedField(
many=True,
source="signupForm",
queryset=SignupForm.objects.all())
class Meta:
model = Event
fields = ('id', 'tags', 'visible', 'title', 'description',
'content', 'start_time', 'end_time', 'signup_id', 'signupForm')
depth = 1
def create(self, validated_data):
signupForms = validated_data.pop('signupForm')
event = Event.objects.create(**validated_data)
for signupForm in signupForms:
event.signupForm.add(signupForm)
event.save()
return event
class SignupSerializer(serializers.ModelSerializer):
class Meta:
model = Signup
fields = ('id', 'signupForm', 'answer')
extra_kwargs = {
'url': {
'view_name': 'signup-detail',
}
}
+25 -11
View File
@@ -1,7 +1,7 @@
"""Translation classes."""
from modeltranslation.translator import register, TranslationOptions
from webapp.models import BaseFeed, Feed, Tag, Event, Registration
from webapp.models import BaseFeed, Feed, Tag, Event, Signup, SignupForm, TemplateQuestion
from webapp.models import PresetRole, BaseRole
@@ -19,13 +19,6 @@ class FeedTranslationOptions(TranslationOptions):
fields = ()
@register(Event)
class EventTranslationOptions(TranslationOptions):
"""Class for event translation options."""
fields = ()
@register(Tag)
class TagTranslationOptions(TranslationOptions):
"""Class for tag translation options."""
@@ -33,11 +26,32 @@ class TagTranslationOptions(TranslationOptions):
fields = ('name',)
@register(Registration)
class RegistrationTranslationOptions(TranslationOptions):
@register(Event)
class EventTranslationOptions(TranslationOptions):
"""Class for event translation options."""
fields = ()
@register(Signup)
class SignupTranslationOptions(TranslationOptions):
"""Class for registration translation options."""
fields = ('name',)
fields = ()
@register(SignupForm)
class SignupFormTranslationOptions(TranslationOptions):
"""Class for registration translation options."""
fields = ()
@register(TemplateQuestion)
class TemplateQuestionTranslationOptions(TranslationOptions):
"""Class for registration translation options."""
fields = ()
@register(BaseRole)
+57 -32
View File
@@ -1,45 +1,70 @@
"""Webapp urls."""
from django.conf.urls import url
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from django.conf.urls import url, include
from rest_framework import routers
# from rest_framework.urlpatterns import format_suffix_patterns
# from django.conf import settings
# from django.utils.translation import ugettext_lazy as _
from webapp.views import main_index
# from webapp.views import main_index
from webapp.views import login_view
from webapp.views import logout_view
from webapp.views import about_view
from webapp.views import guild_view
from webapp.views import freshmen_view
from webapp.views import jobs_view
from webapp.views import event_calendar_view
from webapp.views import international_view
from webapp.views import sosso_view
from webapp.views import contact_view
# from webapp.views import about_view
# from webapp.views import guild_view
# from webapp.views import freshmen_view
# from webapp.views import jobs_view
# from webapp.views import event_calendar_view
# from webapp.views import international_view
# from webapp.views import sosso_view
# from webapp.views import contact_view
from webapp.views import EventViewSet, SignupFormViewSet, SignupViewSet
router = routers.DefaultRouter()
router.register(r'events', EventViewSet)
router.register(r'signupForm', SignupFormViewSet)
router.register(r'signup', SignupViewSet)
urlpatterns = [
# main
url(r'^$', main_index),
url(r'^', include(router.urls)),
# login stuff
url(r'^login$', login_view),
url(r'^logout$', logout_view),
# git revision
url(r'^about', about_view),
# pages
url(r'^guild', guild_view),
url(r'^freshmen', freshmen_view),
url(r'^event_calendar', event_calendar_view),
url(r'^international', international_view),
url(r'^sosso', sosso_view),
url(r'^contact', contact_view),
# corporate
url(r'^jobs', jobs_view),
]
# urlpatterns = [
# # main
# url(r'^$', main_index),
# url(r'^api/$', api_root),
# url(r'^api/events/$', EventList.as_view(), name='event-list'),
# url(r'^api/events/(?P<pk>[0-9]+)/$', EventDetail.as_view(), name='event-detail'),
# url(r'^api/signup/$', SignupFormList.as_view(), name='signupform-list'),
# url(r'^api/signup/(?P<pk>[0-9]+)/$', SignupFormDetail.as_view(), name='signup-detail'),
# url(r'^api/signup/create$', SignupFormCreate.as_view(), name='signupform-create'),
# # url(r'^signupform/$', SignupFormList.as_view(), name='signupform-list'),
# # url(r'^signupform/(?P<pk>[0-9]+)/$', SignupFormDetail.as_view(), name='signupform-detail'),
# # login stuff
# url(r'^login$', login_view),
# url(r'^logout$', logout_view),
# # git revision
# url(r'^about', about_view),
# # pages
# url(r'^guild', guild_view),
# url(r'^freshmen', freshmen_view),
# url(r'^event_calendar', event_calendar_view),
# url(r'^international', international_view),
# url(r'^sosso', sosso_view),
# url(r'^contact', contact_view),
# # corporate
# url(r'^jobs', jobs_view),
# ]
if settings.DEBUG:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
# if settings.DEBUG:
# from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# urlpatterns += staticfiles_urlpatterns()
+39 -9
View File
@@ -1,22 +1,52 @@
"""Webapp views."""
from django.db.models import Count
# from django.db.models import Count
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout, authenticate
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import ensure_csrf_cookie
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import permission_required, login_required
from django.conf import settings
from django.utils import timezone
# from django.views.decorators.csrf import ensure_csrf_cookie
# from django.http import HttpResponse, HttpResponseRedirect
# from django.contrib.auth.decorators import permission_required, login_required
# from django.conf import settings
# from django.utils import timezone
from rest_framework.decorators import api_view
from rest_framework import viewsets
# from rest_framework import permissions, authentication
from rest_framework.response import Response
from rest_framework.reverse import reverse
import logging
import requests
# import logging
# import requests
from dealer.git import git
from webapp.models import Official, Committee
from webapp.models import Event, SignupForm, Signup, Committee
from webapp.serializers import EventSerializer, SignupFormSerializer, SignupSerializer
from members.views.utils import *
# -- REST API -- #
@api_view(['GET'])
def api_root(request, format=None):
return Response({'events': reverse('event-list', request=request, format=format), })
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
class SignupFormViewSet(viewsets.ModelViewSet):
queryset = SignupForm.objects.all()
serializer_class = SignupFormSerializer
class SignupViewSet(viewsets.ModelViewSet):
queryset = Signup.objects.all()
serializer_class = SignupSerializer
# -- OLD CODEBASE -- #
@require_http_methods(["GET"])
def main_index(request, *args, **kwargs):