diff --git a/blechreiz/database.sqlite b/blechreiz/database.sqlite index 078a080..ae8a44d 100644 Binary files a/blechreiz/database.sqlite and b/blechreiz/database.sqlite differ diff --git a/blechreiz/settings.py b/blechreiz/settings.py index 0d76ce2..2445905 100644 --- a/blechreiz/settings.py +++ b/blechreiz/settings.py @@ -138,12 +138,13 @@ INSTALLED_APPS = ( 'crispy_forms', # better looking forms ( bootstrap ) 'sekizai', # for the addtoblock directive in templates 'rest_framework', # for event management api - + 'south', + # Own Things 'website', # Blechreiz Website in general 'musicians', # User Management 'eventplanner', # Event Management - 'messages', # Messages ( Forum ) + 'simpleforum', # Messages ( Forum ) 'location_field', # custom location field used in Event Management ) diff --git a/blechreiz/urls.py b/blechreiz/urls.py index 4b96252..775f289 100644 --- a/blechreiz/urls.py +++ b/blechreiz/urls.py @@ -6,7 +6,7 @@ from musicians.views import MusicianList, addressbook from musicians.views import user_edit import website.views -import messages.views +import simpleforum.views import eventplanner.urls import settings @@ -23,7 +23,8 @@ urlpatterns = patterns('', url(r'^musicians/(?P[\w]+)$', user_edit ), url(r'^addressbook/$', addressbook ), url(r'^login/$', website.views.login_view), + url(r'^login/usernames$', website.views.userlistForAutocompletion), url(r'^logout/$', website.views.logout_view), - url(r'^messages/$', messages.views.message_view ), + url(r'^messages/$', simpleforum.views.message_view ), url(r'^location_field/', include('location_field.urls')), ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/eventplanner/admin.py b/eventplanner/admin.py index 688213a..f11127c 100644 --- a/eventplanner/admin.py +++ b/eventplanner/admin.py @@ -10,7 +10,7 @@ class EventParticipationInline(admin.TabularInline): has_add_permission = lambda self, req : False has_delete_permission = lambda self, req, obj : False - template = "custom_tabular.html" + template = "eventplanner/admin_tabular.html" class EventAdmin(admin.ModelAdmin): diff --git a/eventplanner/locale/de/LC_MESSAGES/django.mo b/eventplanner/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000..131e079 Binary files /dev/null and b/eventplanner/locale/de/LC_MESSAGES/django.mo differ diff --git a/eventplanner/locale/de/LC_MESSAGES/django.po b/eventplanner/locale/de/LC_MESSAGES/django.po index c92f0e8..e5de1ea 100644 --- a/eventplanner/locale/de/LC_MESSAGES/django.po +++ b/eventplanner/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-06-30 16:58+0200\n" +"POT-Creation-Date: 2013-09-28 16:56+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,95 +18,102 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: models.py:10 +#: models.py:14 msgid "Rehearsal" msgstr "Probe" -#: models.py:11 +#: models.py:15 msgid "Concert" msgstr "Konzert" -#: models.py:12 -msgid "General Rehearsal" -msgstr "Generalprobe" - -#: models.py:13 +#: models.py:16 msgid "Party" msgstr "Feier" -#: models.py:16 -msgid "title" -msgstr "Titel" - #: models.py:17 +msgid "Travel" +msgstr "Dienstreise" + +#: models.py:20 msgid "type" msgstr "Typ" -#: models.py:18 +#: models.py:21 +msgid "Short Description" +msgstr "Kurzbeschreibung" + +#: models.py:22 msgid "location" msgstr "Ort" -#: models.py:19 +#: models.py:23 +msgid "Location on map" +msgstr "Ort auf Karte" + +#: models.py:24 msgid "description" msgstr "Beschreibung" -#: models.py:21 +#: models.py:26 msgid "date" msgstr "Datum" -#: models.py:22 +#: models.py:27 msgid "time" msgstr "Uhrzeit" -#: models.py:23 +#: models.py:28 msgid "meeting_time" msgstr "Treffen um" -#: models.py:25 +#: models.py:30 +msgid "End Date" +msgstr "Bis:" + +#: models.py:32 msgid "participants" msgstr "Teilnehmer" -#: models.py:45 +#: models.py:64 msgid "?" -msgstr "" +msgstr "?" -#: models.py:46 +#: models.py:65 msgid "Yes" msgstr "Ja" -#: models.py:47 +#: models.py:66 msgid "No" msgstr "Nein" -#: models.py:50 +#: models.py:69 msgid "event" msgstr "Termin" -#: models.py:51 -msgid "musician" -msgstr "Musiker" +#: models.py:70 +msgid "user" +msgstr "Benutzer" -#: models.py:52 +#: models.py:71 msgid "status" msgstr "Status" -#: models.py:53 +#: models.py:72 msgid "comment" msgstr "Kommentar" -#: models.py:72 +#: models.py:100 msgid "Can modify participation status of other users" -msgstr "" +msgstr "Darf Teilnahmestatus von anderen ändern" -#: templates/custom_tabular.html:17 -msgid "Delete?" -msgstr "Löschen" +#~ msgid "General Rehearsal" +#~ msgstr "Generalprobe" -#: templates/custom_tabular.html:74 -#, python-format -msgid "Add another %(verbose_name)s" -msgstr "" +#~ msgid "title" +#~ msgstr "Titel" -#: templates/custom_tabular.html:75 -msgid "Remove" -msgstr "" +#~ msgid "musician" +#~ msgstr "Musiker" + +#~ msgid "Delete?" +#~ msgstr "Löschen" diff --git a/eventplanner/migrations/0001_initial.py b/eventplanner/migrations/0001_initial.py new file mode 100644 index 0000000..4094410 --- /dev/null +++ b/eventplanner/migrations/0001_initial.py @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Event' + db.create_table(u'eventplanner_event', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('type', self.gf('django.db.models.fields.CharField')(default='Reh', max_length=6)), + ('short_desc', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)), + ('location', self.gf('django.db.models.fields.TextField')()), + ('map_location', self.gf('location_field.models.PlainLocationField')(max_length=63)), + ('desc', self.gf('django.db.models.fields.TextField')(blank=True)), + ('date', self.gf('django.db.models.fields.DateField')()), + ('time', self.gf('django.db.models.fields.TimeField')(null=True, blank=True)), + ('meeting_time', self.gf('django.db.models.fields.TimeField')(null=True, blank=True)), + ('end_date', self.gf('django.db.models.fields.DateField')(null=True)), + )) + db.send_create_signal(u'eventplanner', ['Event']) + + # Adding model 'EventParticipation' + db.create_table(u'eventplanner_eventparticipation', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('event', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['eventplanner.Event'])), + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('status', self.gf('django.db.models.fields.CharField')(default='?', max_length=3)), + ('comment', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)), + )) + db.send_create_signal(u'eventplanner', ['EventParticipation']) + + # Adding unique constraint on 'EventParticipation', fields ['event', 'user'] + db.create_unique(u'eventplanner_eventparticipation', ['event_id', 'user_id']) + + + def backwards(self, orm): + # Removing unique constraint on 'EventParticipation', fields ['event', 'user'] + db.delete_unique(u'eventplanner_eventparticipation', ['event_id', 'user_id']) + + # Deleting model 'Event' + db.delete_table(u'eventplanner_event') + + # Deleting model 'EventParticipation' + db.delete_table(u'eventplanner_eventparticipation') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'eventplanner.event': { + 'Meta': {'object_name': 'Event'}, + 'date': ('django.db.models.fields.DateField', [], {}), + 'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.TextField', [], {}), + 'map_location': ('location_field.models.PlainLocationField', [], {'max_length': '63'}), + 'meeting_time': ('django.db.models.fields.TimeField', [], {'null': 'True', 'blank': 'True'}), + 'participants': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.User']", 'through': u"orm['eventplanner.EventParticipation']", 'symmetrical': 'False'}), + 'short_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'time': ('django.db.models.fields.TimeField', [], {'null': 'True', 'blank': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'default': "'Reh'", 'max_length': '6'}) + }, + u'eventplanner.eventparticipation': { + 'Meta': {'unique_together': "(('event', 'user'),)", 'object_name': 'EventParticipation'}, + 'comment': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), + 'event': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['eventplanner.Event']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'?'", 'max_length': '3'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + } + } + + complete_apps = ['eventplanner'] \ No newline at end of file diff --git a/messages/__init__.py b/eventplanner/migrations/__init__.py similarity index 100% rename from messages/__init__.py rename to eventplanner/migrations/__init__.py diff --git a/eventplanner/models.py b/eventplanner/models.py index 10e8c67..d57a4e0 100644 --- a/eventplanner/models.py +++ b/eventplanner/models.py @@ -13,24 +13,26 @@ class Event ( models.Model ): EVENT_TYPES = ( ( 'Reh', _('Rehearsal') ), ( 'Conc', _('Concert') ), - ( 'GenReh', _('General Rehearsal') ), ( 'Party', _('Party') ), + ( 'Travel', _('Travel') ) ) - title = models.CharField( max_length=40, verbose_name = _("titel") ) type = models.CharField( max_length=6, choices=EVENT_TYPES, default='Reh', verbose_name= _("type") ) + short_desc = models.CharField( null=True, max_length=100, blank = True, verbose_name= _("Short Description") ) location = models.TextField( blank=False, verbose_name=_("location") ) - map_location = PlainLocationField( based_field = location, zoom=7 ) - desc = models.TextField( blank=True, verbose_name=_("description")) - + map_location = PlainLocationField(blank=True, based_field = location, zoom=7, verbose_name=_("Location on map") ) + desc = models.TextField( blank=True, verbose_name=_("description") ) + date = models.DateField( verbose_name= _("date") ) time = models.TimeField( null=True, blank=True, verbose_name = _("time") ) meeting_time = models.TimeField( null=True, blank=True, verbose_name = _("meeting_time") ) + end_date = models.DateField( null=True, blank = True, verbose_name = _("End Date") ) + participants = models.ManyToManyField( User, through='EventParticipation', verbose_name=_("participants") ) def __unicode__(self): - return self.title + " ( " + self.get_type_display() + " ) " + return self.title def save(self, *args, **kwargs): @@ -42,6 +44,14 @@ class Event ( models.Model ): if not u in self.participants.all(): EventParticipation.objects.create( event=self, user = u, status='?', comment = '' ) + @property + def title(self): + res = self.get_type_display() + if ( self.short_desc ): + res += " ( " + self.short_desc + " ) " + + return res + @property def displaytime(self): if self.meeting_time is None or self.meeting_time == "": diff --git a/eventplanner/templates/eventplanner/admin_tabular.html b/eventplanner/templates/eventplanner/admin_tabular.html new file mode 100644 index 0000000..355cc9a --- /dev/null +++ b/eventplanner/templates/eventplanner/admin_tabular.html @@ -0,0 +1,78 @@ +{% load i18n admin_static admin_modify %} +
+ +
+ + diff --git a/eventplanner/templates/eventplanner/event_update_form.html b/eventplanner/templates/eventplanner/event_update_form.html index 6334f6f..161f16d 100644 --- a/eventplanner/templates/eventplanner/event_update_form.html +++ b/eventplanner/templates/eventplanner/event_update_form.html @@ -22,11 +22,7 @@

Termin bearbeiten

- + {% crispy form %}
@@ -52,8 +48,8 @@ {% endaddtoblock %} diff --git a/eventplanner/templates/eventplanner/eventplanning_view.html b/eventplanner/templates/eventplanner/eventplanning_view.html index c2224a2..4a6a696 100644 --- a/eventplanner/templates/eventplanner/eventplanning_view.html +++ b/eventplanner/templates/eventplanner/eventplanning_view.html @@ -42,6 +42,8 @@ } function putStatus( button, status ) { + $("#saving").html("Speichere.."); + p = button.parent(); putObject = [ { "event": p.data("event-id"), "user": p.data("username"), @@ -51,7 +53,8 @@ type: "PUT", url: "{% url 'event_api' %}", contentType: "application/json", - data: JSON.stringify(putObject) + data: JSON.stringify(putObject), + success: function() { $("#saving").html("Ok"); } }); setEventButtonStatus( button, status ); @@ -63,7 +66,8 @@ $(function(){ $(".event-comment").bindWithDelay("keypress", function() { - + + $("#saving").html("Speichere.."); putObject = [ { "event": $(this).data("event-id"), "user": $(this).data("username"), @@ -73,7 +77,8 @@ type: "PUT", url: "{% url 'event_api' %}", contentType: "application/json", - data: JSON.stringify(putObject) + data: JSON.stringify(putObject), + success: function() { $("#saving").html("Ok"); } }); }, 800 ); @@ -98,6 +103,7 @@
+
@@ -112,6 +118,7 @@ Termin Datum Uhrzeit + Treffpunkt Ort Status ändern Kommentar @@ -121,11 +128,16 @@ {% for event in events %} - {{ event.title }} - {{ event.date }} - {% if event.time %} {{ event.time }} {% endif %} - - Ort + {% if not perms.eventplanner.change_event %} + {{ event.title }} + {% else %} + {{ event.title }} + {% endif %} + {{ event.date | date:"SHORT_DATE_FORMAT" }} + {% if event.time %} {{ event.time | time:"H:i" }} {% endif %} + {% if event.meeting_time %} {{ event.meeting_time | time:"H:i" }} {% endif %} + + {{ event.location }}
@@ -156,6 +168,13 @@
-
+
+
+ Änderungen werden automatisch gespeichert: Ok +
+
+ + +
{% endblock %} \ No newline at end of file diff --git a/eventplanner/templates/eventplanner/events_grid.html b/eventplanner/templates/eventplanner/events_grid.html index 91d8822..bf68f17 100644 --- a/eventplanner/templates/eventplanner/events_grid.html +++ b/eventplanner/templates/eventplanner/events_grid.html @@ -129,7 +129,7 @@ {% for event in events %} {{ event.title }} - {{ event.date }} + {{ event.date | date:"SHORT_DATE_FORMAT" }} {% for p in event.participation %} @@ -176,7 +176,6 @@
-
{% endif %} diff --git a/eventplanner/views.py b/eventplanner/views.py index 539957f..4d43ecb 100644 --- a/eventplanner/views.py +++ b/eventplanner/views.py @@ -119,7 +119,7 @@ class EventForm( ModelForm ): class Meta: model = Event - fields= [ 'type', 'title', 'date','time', 'meeting_time', 'location', 'map_location', 'desc', ] + fields= [ 'type', 'short_desc', 'date', 'end_date', 'time', 'meeting_time', 'location', 'map_location', 'desc', ] widgets = { 'location' : TextInput(), @@ -132,13 +132,24 @@ class EventUpdate( UpdateView ): model = Event template_name_suffix = "_update_form" success_url = '.' + + def get_context_data(self, **kwargs): + context = super(UpdateView, self).get_context_data(**kwargs) + context['viewtype'] = "update" + return context class EventCreate( CreateView ): + form_class = EventForm model = Event template_name_suffix = "_update_form" success_url = '.' + + def get_context_data(self, **kwargs): + context = super(CreateView, self).get_context_data(**kwargs) + context['viewtype'] = "create" + return context diff --git a/location_field/models.py b/location_field/models.py index de9e2cd..5031cbc 100755 --- a/location_field/models.py +++ b/location_field/models.py @@ -34,7 +34,6 @@ class PlainLocationField(BaseLocationField, CharField): # south compatibility try: from south.modelsinspector import add_introspection_rules - add_introspection_rules([], ["^location_field\.models\.LocationField"]) - add_introspection_rules([], ["^django\.contrib\.gis"]) + add_introspection_rules([], ["^location_field\.models\.PlainLocationField"]) except: pass diff --git a/messages/tests.py b/messages/tests.py deleted file mode 100644 index 501deb7..0000000 --- a/messages/tests.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -This file demonstrates writing tests using the unittest module. These will pass -when you run "manage.py test". - -Replace this with more appropriate tests for your application. -""" - -from django.test import TestCase - - -class SimpleTest(TestCase): - def test_basic_addition(self): - """ - Tests that 1 + 1 always equals 2. - """ - self.assertEqual(1 + 1, 2) diff --git a/musicians/locale/de/LC_MESSAGES/django.po b/musicians/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..a10cd7e --- /dev/null +++ b/musicians/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,96 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-09-28 16:57+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: admin.py:17 +msgid "musicians" +msgstr "Musiker" + +#: admin.py:18 +msgid "musician" +msgstr "Musiker" + +#: models.py:8 +msgid "Trumpet" +msgstr "Trompete" + +#: models.py:9 +msgid "Trombone" +msgstr "Posaune" + +#: models.py:10 +msgid "Horn" +msgstr "Horn" + +#: models.py:11 +msgid "Tuba" +msgstr "Tuba" + +#: models.py:26 +msgid "user" +msgstr "Benutzer" + +#: models.py:28 +msgid "image" +msgstr "Bild" + +#: models.py:29 +msgid "circular thumbnail" +msgstr "Vorschau (rund)" + +#: models.py:32 +msgid "instrument" +msgstr "Instrument" + +#: models.py:34 +msgid "birthday" +msgstr "Geburtstag" + +#: models.py:36 +msgid "street" +msgstr "Straße" + +#: models.py:37 +msgid "city" +msgstr "Wohnort" + +#: models.py:38 +msgid "zip_code" +msgstr "PLZ" + +#: models.py:40 +msgid "phone_home" +msgstr "Telefon Daheim" + +#: models.py:41 +msgid "phone_mobile" +msgstr "Telefon Mobil" + +#: models.py:42 +msgid "phone_work" +msgstr "Telefon Arbeit" + +#: models.py:44 +msgid "Position" +msgstr "" + +#: models.py:54 +msgid "public_description" +msgstr "Beschreibung (öffentlich)" + diff --git a/musicians/migrations/0001_initial.py b/musicians/migrations/0001_initial.py new file mode 100644 index 0000000..da4704a --- /dev/null +++ b/musicians/migrations/0001_initial.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Musician' + db.create_table(u'musicians_musician', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)), + ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), + ('small_image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), + ('instrument', self.gf('django.db.models.fields.CharField')(max_length=4, blank=True)), + ('birthday', self.gf('django.db.models.fields.DateField')(null=True)), + ('street', self.gf('django.db.models.fields.CharField')(max_length=80, blank=True)), + ('city', self.gf('django.db.models.fields.CharField')(max_length=40, blank=True)), + ('zip_code', self.gf('django.db.models.fields.IntegerField')(null=True)), + ('phone_home', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)), + ('phone_mobile', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)), + ('phone_work', self.gf('django.db.models.fields.CharField')(max_length=18, blank=True)), + ('position', self.gf('django.db.models.fields.IntegerField')(null=True)), + ('public_description', self.gf('django.db.models.fields.TextField')(blank=True)), + )) + db.send_create_signal(u'musicians', ['Musician']) + + + def backwards(self, orm): + # Deleting model 'Musician' + db.delete_table(u'musicians_musician') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'musicians.musician': { + 'Meta': {'object_name': 'Musician'}, + 'birthday': ('django.db.models.fields.DateField', [], {'null': 'True'}), + 'city': ('django.db.models.fields.CharField', [], {'max_length': '40', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'instrument': ('django.db.models.fields.CharField', [], {'max_length': '4', 'blank': 'True'}), + 'phone_home': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}), + 'phone_mobile': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}), + 'phone_work': ('django.db.models.fields.CharField', [], {'max_length': '18', 'blank': 'True'}), + 'position': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + 'public_description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'small_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'street': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'zip_code': ('django.db.models.fields.IntegerField', [], {'null': 'True'}) + } + } + + complete_apps = ['musicians'] \ No newline at end of file diff --git a/musicians/migrations/__init__.py b/musicians/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/musicians/models.py b/musicians/models.py index 34756e1..22335f7 100644 --- a/musicians/models.py +++ b/musicians/models.py @@ -28,7 +28,6 @@ class Musician( models.Model ): image = models.ImageField( upload_to = musicianPictureName, verbose_name=_("image") ) small_image = models.ImageField( upload_to = musicianSmallPictureName, verbose_name = _("circular thumbnail") ) - # Properties instrument = models.CharField( max_length=4, choices=INSTRUMENTS, blank=True, verbose_name=_("instrument") ) @@ -42,6 +41,8 @@ class Musician( models.Model ): phone_mobile = models.CharField( max_length=18, blank=True, verbose_name=_("phone_mobile") ) phone_work = models.CharField( max_length=18, blank=True, verbose_name=_("phone_work") ) + position = models.IntegerField( null=True, verbose_name=_("Position") ) + @property def isDeepBrass(self): return self.instrument == 'TRB' or self.instrument == "EUPH" or self.instrument == "TUBA" or self.instrument == "HRN" diff --git a/simpleforum/__init__.py b/simpleforum/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messages/admin.py b/simpleforum/admin.py similarity index 100% rename from messages/admin.py rename to simpleforum/admin.py diff --git a/simpleforum/migrations/0001_initial.py b/simpleforum/migrations/0001_initial.py new file mode 100644 index 0000000..2d16ccd --- /dev/null +++ b/simpleforum/migrations/0001_initial.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Message' + db.create_table(u'simpleforum_message', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('titel', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('text', self.gf('django.db.models.fields.TextField')()), + ('creation_time', self.gf('django.db.models.fields.DateTimeField')()), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + )) + db.send_create_signal(u'simpleforum', ['Message']) + + + def backwards(self, orm): + # Deleting model 'Message' + db.delete_table(u'simpleforum_message') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'simpleforum.message': { + 'Meta': {'object_name': 'Message'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'creation_time': ('django.db.models.fields.DateTimeField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'text': ('django.db.models.fields.TextField', [], {}), + 'titel': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + } + } + + complete_apps = ['simpleforum'] \ No newline at end of file diff --git a/simpleforum/migrations/__init__.py b/simpleforum/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messages/models.py b/simpleforum/models.py similarity index 100% rename from messages/models.py rename to simpleforum/models.py diff --git a/messages/templates/messages/messages.html b/simpleforum/templates/simpleforum/simpleforum.html similarity index 100% rename from messages/templates/messages/messages.html rename to simpleforum/templates/simpleforum/simpleforum.html diff --git a/messages/views.py b/simpleforum/views.py similarity index 95% rename from messages/views.py rename to simpleforum/views.py index 5549c71..6428f7c 100644 --- a/messages/views.py +++ b/simpleforum/views.py @@ -38,5 +38,5 @@ def message_view( request ): context['messages'] = Message.objects.order_by('-creation_time')[:20] context['archiveMode'] = False - return render ( request, 'messages/messages.html', context ) + return render ( request, 'simpleforum/simpleforum.html', context ) diff --git a/website/templates/website/concert_route.html b/website/templates/website/concert_route.html index b5c84cc..2f82cb2 100644 --- a/website/templates/website/concert_route.html +++ b/website/templates/website/concert_route.html @@ -158,10 +158,10 @@
-
Fahrt zum Konzert:
+
Nächstes Konzert:
- Nächstes Konzert ist in {{nextConcert.location}}
am {{nextConcert.date}} um {{nextConcert.time | time:"H:i" }}
- {% if nextConcert.meeting_time %} Treffpunkt ist um {{ nextConcert.meeting_time | time:"H:i" }}
{% endif %} + Nächstes Konzert ist in
{{nextConcert.location}}
am {{nextConcert.date | date:"SHORT_DATE_FORMAT" }} um {{nextConcert.time | time:"H:i" }} Uhr
+ {% if nextConcert.meeting_time %} Treffpunkt ist um {{ nextConcert.meeting_time | time:"H:i" }} Uhr
{% endif %} diff --git a/website/templates/website/event_countdown.html b/website/templates/website/event_countdown.html index edebfdb..13aa2e8 100644 --- a/website/templates/website/event_countdown.html +++ b/website/templates/website/event_countdown.html @@ -38,9 +38,9 @@

Der nächste Termin:

- {{countdown.event.title}} ist am {{countdown.event.date}} + {{countdown.event.title}} ist am {{countdown.event.date | date:"SHORT_DATE_FORMAT" }} um {{countdown.event.displaytime | time:"H:i" }} - in {{countdown.event.location}} + in {{countdown.event.location}}
{% if countdown.participation == "?" %} diff --git a/website/templates/website/login.html b/website/templates/website/login.html index 107d8f3..b890fa4 100644 --- a/website/templates/website/login.html +++ b/website/templates/website/login.html @@ -30,6 +30,11 @@ {% addtoblock "css" strip %} {% endaddtoblock %} {% addtoblock "css" strip %} {% endaddtoblock %} + +{% addtoblock "js" strip %} {% endaddtoblock %} +{% addtoblock "css" strip %} {% endaddtoblock %} + + {% addtoblock "js" %} @@ -54,7 +59,12 @@ }); e.preventDefault(); }); - } ); + + + $.get( "/login/usernames", function( data ) { + $("#username").autocomplete( { source: data } ); + }); + }); {% endaddtoblock %} @@ -71,7 +81,7 @@

Fahrzeit: