Event resturcturing
- new short_description field instead of title - autosave text - autocompletion on login
This commit is contained in:
parent
6c3a7ca408
commit
d71c35bcd7
Binary file not shown.
|
@ -138,12 +138,13 @@ INSTALLED_APPS = (
|
||||||
'crispy_forms', # better looking forms ( bootstrap )
|
'crispy_forms', # better looking forms ( bootstrap )
|
||||||
'sekizai', # for the addtoblock directive in templates
|
'sekizai', # for the addtoblock directive in templates
|
||||||
'rest_framework', # for event management api
|
'rest_framework', # for event management api
|
||||||
|
'south',
|
||||||
|
|
||||||
# Own Things
|
# Own Things
|
||||||
'website', # Blechreiz Website in general
|
'website', # Blechreiz Website in general
|
||||||
'musicians', # User Management
|
'musicians', # User Management
|
||||||
'eventplanner', # Event Management
|
'eventplanner', # Event Management
|
||||||
'messages', # Messages ( Forum )
|
'simpleforum', # Messages ( Forum )
|
||||||
'location_field', # custom location field used in Event Management
|
'location_field', # custom location field used in Event Management
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from musicians.views import MusicianList, addressbook
|
||||||
from musicians.views import user_edit
|
from musicians.views import user_edit
|
||||||
|
|
||||||
import website.views
|
import website.views
|
||||||
import messages.views
|
import simpleforum.views
|
||||||
|
|
||||||
import eventplanner.urls
|
import eventplanner.urls
|
||||||
import settings
|
import settings
|
||||||
|
@ -23,7 +23,8 @@ urlpatterns = patterns('',
|
||||||
url(r'^musicians/(?P<username>[\w]+)$', user_edit ),
|
url(r'^musicians/(?P<username>[\w]+)$', user_edit ),
|
||||||
url(r'^addressbook/$', addressbook ),
|
url(r'^addressbook/$', addressbook ),
|
||||||
url(r'^login/$', website.views.login_view),
|
url(r'^login/$', website.views.login_view),
|
||||||
|
url(r'^login/usernames$', website.views.userlistForAutocompletion),
|
||||||
url(r'^logout/$', website.views.logout_view),
|
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')),
|
url(r'^location_field/', include('location_field.urls')),
|
||||||
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
|
@ -10,7 +10,7 @@ class EventParticipationInline(admin.TabularInline):
|
||||||
has_add_permission = lambda self, req : False
|
has_add_permission = lambda self, req : False
|
||||||
has_delete_permission = lambda self, req, obj : False
|
has_delete_permission = lambda self, req, obj : False
|
||||||
|
|
||||||
template = "custom_tabular.html"
|
template = "eventplanner/admin_tabular.html"
|
||||||
|
|
||||||
|
|
||||||
class EventAdmin(admin.ModelAdmin):
|
class EventAdmin(admin.ModelAdmin):
|
||||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -18,95 +18,102 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: models.py:10
|
#: models.py:14
|
||||||
msgid "Rehearsal"
|
msgid "Rehearsal"
|
||||||
msgstr "Probe"
|
msgstr "Probe"
|
||||||
|
|
||||||
#: models.py:11
|
#: models.py:15
|
||||||
msgid "Concert"
|
msgid "Concert"
|
||||||
msgstr "Konzert"
|
msgstr "Konzert"
|
||||||
|
|
||||||
#: models.py:12
|
#: models.py:16
|
||||||
msgid "General Rehearsal"
|
|
||||||
msgstr "Generalprobe"
|
|
||||||
|
|
||||||
#: models.py:13
|
|
||||||
msgid "Party"
|
msgid "Party"
|
||||||
msgstr "Feier"
|
msgstr "Feier"
|
||||||
|
|
||||||
#: models.py:16
|
|
||||||
msgid "title"
|
|
||||||
msgstr "Titel"
|
|
||||||
|
|
||||||
#: models.py:17
|
#: models.py:17
|
||||||
|
msgid "Travel"
|
||||||
|
msgstr "Dienstreise"
|
||||||
|
|
||||||
|
#: models.py:20
|
||||||
msgid "type"
|
msgid "type"
|
||||||
msgstr "Typ"
|
msgstr "Typ"
|
||||||
|
|
||||||
#: models.py:18
|
#: models.py:21
|
||||||
|
msgid "Short Description"
|
||||||
|
msgstr "Kurzbeschreibung"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
msgid "location"
|
msgid "location"
|
||||||
msgstr "Ort"
|
msgstr "Ort"
|
||||||
|
|
||||||
#: models.py:19
|
#: models.py:23
|
||||||
|
msgid "Location on map"
|
||||||
|
msgstr "Ort auf Karte"
|
||||||
|
|
||||||
|
#: models.py:24
|
||||||
msgid "description"
|
msgid "description"
|
||||||
msgstr "Beschreibung"
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
#: models.py:21
|
#: models.py:26
|
||||||
msgid "date"
|
msgid "date"
|
||||||
msgstr "Datum"
|
msgstr "Datum"
|
||||||
|
|
||||||
#: models.py:22
|
#: models.py:27
|
||||||
msgid "time"
|
msgid "time"
|
||||||
msgstr "Uhrzeit"
|
msgstr "Uhrzeit"
|
||||||
|
|
||||||
#: models.py:23
|
#: models.py:28
|
||||||
msgid "meeting_time"
|
msgid "meeting_time"
|
||||||
msgstr "Treffen um"
|
msgstr "Treffen um"
|
||||||
|
|
||||||
#: models.py:25
|
#: models.py:30
|
||||||
|
msgid "End Date"
|
||||||
|
msgstr "Bis:"
|
||||||
|
|
||||||
|
#: models.py:32
|
||||||
msgid "participants"
|
msgid "participants"
|
||||||
msgstr "Teilnehmer"
|
msgstr "Teilnehmer"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:64
|
||||||
msgid "?"
|
msgid "?"
|
||||||
msgstr ""
|
msgstr "?"
|
||||||
|
|
||||||
#: models.py:46
|
#: models.py:65
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
msgstr "Ja"
|
msgstr "Ja"
|
||||||
|
|
||||||
#: models.py:47
|
#: models.py:66
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nein"
|
msgstr "Nein"
|
||||||
|
|
||||||
#: models.py:50
|
#: models.py:69
|
||||||
msgid "event"
|
msgid "event"
|
||||||
msgstr "Termin"
|
msgstr "Termin"
|
||||||
|
|
||||||
#: models.py:51
|
#: models.py:70
|
||||||
msgid "musician"
|
msgid "user"
|
||||||
msgstr "Musiker"
|
msgstr "Benutzer"
|
||||||
|
|
||||||
#: models.py:52
|
#: models.py:71
|
||||||
msgid "status"
|
msgid "status"
|
||||||
msgstr "Status"
|
msgstr "Status"
|
||||||
|
|
||||||
#: models.py:53
|
#: models.py:72
|
||||||
msgid "comment"
|
msgid "comment"
|
||||||
msgstr "Kommentar"
|
msgstr "Kommentar"
|
||||||
|
|
||||||
#: models.py:72
|
#: models.py:100
|
||||||
msgid "Can modify participation status of other users"
|
msgid "Can modify participation status of other users"
|
||||||
msgstr ""
|
msgstr "Darf Teilnahmestatus von anderen ändern"
|
||||||
|
|
||||||
#: templates/custom_tabular.html:17
|
#~ msgid "General Rehearsal"
|
||||||
msgid "Delete?"
|
#~ msgstr "Generalprobe"
|
||||||
msgstr "Löschen"
|
|
||||||
|
|
||||||
#: templates/custom_tabular.html:74
|
#~ msgid "title"
|
||||||
#, python-format
|
#~ msgstr "Titel"
|
||||||
msgid "Add another %(verbose_name)s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/custom_tabular.html:75
|
#~ msgid "musician"
|
||||||
msgid "Remove"
|
#~ msgstr "Musiker"
|
||||||
msgstr ""
|
|
||||||
|
#~ msgid "Delete?"
|
||||||
|
#~ msgstr "Löschen"
|
||||||
|
|
|
@ -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']
|
|
@ -13,24 +13,26 @@ class Event ( models.Model ):
|
||||||
EVENT_TYPES = (
|
EVENT_TYPES = (
|
||||||
( 'Reh', _('Rehearsal') ),
|
( 'Reh', _('Rehearsal') ),
|
||||||
( 'Conc', _('Concert') ),
|
( 'Conc', _('Concert') ),
|
||||||
( 'GenReh', _('General Rehearsal') ),
|
|
||||||
( 'Party', _('Party') ),
|
( '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") )
|
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") )
|
location = models.TextField( blank=False, verbose_name=_("location") )
|
||||||
map_location = PlainLocationField( based_field = location, zoom=7 )
|
map_location = PlainLocationField(blank=True, based_field = location, zoom=7, verbose_name=_("Location on map") )
|
||||||
desc = models.TextField( blank=True, verbose_name=_("description"))
|
desc = models.TextField( blank=True, verbose_name=_("description") )
|
||||||
|
|
||||||
date = models.DateField( verbose_name= _("date") )
|
date = models.DateField( verbose_name= _("date") )
|
||||||
time = models.TimeField( null=True, blank=True, verbose_name = _("time") )
|
time = models.TimeField( null=True, blank=True, verbose_name = _("time") )
|
||||||
meeting_time = models.TimeField( null=True, blank=True, verbose_name = _("meeting_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") )
|
participants = models.ManyToManyField( User, through='EventParticipation', verbose_name=_("participants") )
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.title + " ( " + self.get_type_display() + " ) "
|
return self.title
|
||||||
|
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
@ -42,6 +44,14 @@ class Event ( models.Model ):
|
||||||
if not u in self.participants.all():
|
if not u in self.participants.all():
|
||||||
EventParticipation.objects.create( event=self, user = u, status='?', comment = '' )
|
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
|
@property
|
||||||
def displaytime(self):
|
def displaytime(self):
|
||||||
if self.meeting_time is None or self.meeting_time == "":
|
if self.meeting_time is None or self.meeting_time == "":
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
{% load i18n admin_static admin_modify %}
|
||||||
|
<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
|
||||||
|
<div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
|
||||||
|
{{ inline_admin_formset.formset.management_form }}
|
||||||
|
<fieldset class="module">
|
||||||
|
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
|
||||||
|
{{ inline_admin_formset.formset.non_form_errors }}
|
||||||
|
<table>
|
||||||
|
<thead><tr>
|
||||||
|
{% for field in inline_admin_formset.fields %}
|
||||||
|
{% if not field.widget.is_hidden %}
|
||||||
|
<th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}
|
||||||
|
{% if field.help_text %} <img src="{% static "admin/img/icon-unknown.gif" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %}
|
||||||
|
</th>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
|
||||||
|
</tr></thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{% for inline_admin_form in inline_admin_formset %}
|
||||||
|
{% if inline_admin_form.form.non_field_errors %}
|
||||||
|
<tr><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr class="form-row {% cycle "row1" "row2" %} {% if forloop.last %} empty-form{% endif %}"
|
||||||
|
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
|
||||||
|
<td class="original">
|
||||||
|
{% if inline_admin_form.original or inline_admin_form.show_url %}<p>
|
||||||
|
|
||||||
|
</p>{% endif %}
|
||||||
|
{% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
|
||||||
|
{{ inline_admin_form.fk_field.field }}
|
||||||
|
{% spaceless %}
|
||||||
|
{% for fieldset in inline_admin_form %}
|
||||||
|
{% for line in fieldset %}
|
||||||
|
{% for field in line %}
|
||||||
|
{% if field.is_hidden %} {{ field.field }} {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endspaceless %}
|
||||||
|
</td>
|
||||||
|
{% for fieldset in inline_admin_form %}
|
||||||
|
{% for line in fieldset %}
|
||||||
|
{% for field in line %}
|
||||||
|
<td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
|
||||||
|
{% if field.is_readonly %}
|
||||||
|
<p>{{ field.contents|linebreaksbr }}</p>
|
||||||
|
{% else %}
|
||||||
|
{{ field.field.errors.as_ul }}
|
||||||
|
{{ field.field }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% if inline_admin_formset.formset.can_delete %}
|
||||||
|
<td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
$("#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr").tabularFormset({
|
||||||
|
prefix: "{{ inline_admin_formset.formset.prefix }}",
|
||||||
|
adminStaticPrefix: '{% static "admin/" %}',
|
||||||
|
addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
|
||||||
|
deleteText: "{% trans 'Remove' %}"
|
||||||
|
});
|
||||||
|
})(django.jQuery);
|
||||||
|
</script>
|
|
@ -22,11 +22,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<h3>Termin bearbeiten</h3>
|
<h3>Termin bearbeiten</h3>
|
||||||
<!--
|
|
||||||
<form action="/contact/" method="post">
|
|
||||||
{% csrf_token %} {{ form.as_p }} <input type="submit" value="Submit" />
|
|
||||||
</form>
|
|
||||||
-->
|
|
||||||
{% crispy form %}
|
{% crispy form %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,8 +48,8 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
$('.dateinput').datepicker({
|
$('.dateinput').datepicker({
|
||||||
format: "dd.mm.yyyy",
|
format: "dd.mm.yyyy",
|
||||||
weekStart: 1,
|
weekStart: 1,
|
||||||
|
@ -62,17 +58,57 @@ $(document).ready(function(){
|
||||||
todayHighlight: true,
|
todayHighlight: true,
|
||||||
startDate: "{% now "SHORT_DATE_FORMAT" %}",
|
startDate: "{% now "SHORT_DATE_FORMAT" %}",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$('.timeinput').addClass('input-small').wrap('<div class="input-append bootstrap-timepicker">')
|
$('.timeinput').addClass('input-small').wrap('<div class="input-append bootstrap-timepicker">')
|
||||||
$(".input-append").append( '<span class="add-on"><i class="icon-time"></i></span>' )
|
$(".input-append").append( '<span class="add-on"><i class="icon-time"></i></span>' )
|
||||||
|
|
||||||
|
|
||||||
$('.timeinput').timepicker({
|
$('.timeinput').timepicker({
|
||||||
minuteStep: 15,
|
minuteStep: 15,
|
||||||
showMeridian: false,
|
showMeridian: false,
|
||||||
defaultTime: false
|
defaultTime: false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function onTypeChange( val )
|
||||||
|
{
|
||||||
|
if ( val == "Reh") {
|
||||||
|
$("#div_id_time").show();
|
||||||
|
$("#div_id_meeting_time").hide();
|
||||||
|
$("#div_id_map_location").hide();
|
||||||
|
$("#div_id_end_date").hide();
|
||||||
|
|
||||||
|
if ( ! $("#id_time").val() ) {
|
||||||
|
$("#id_time").val("19:00");
|
||||||
|
}
|
||||||
|
if ( ! $("#id_location").val() ) {
|
||||||
|
$("#id_location").val("Rohr");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( val == "Conc" ) {
|
||||||
|
$("#div_id_time").show();
|
||||||
|
$("#div_id_meeting_time").show();
|
||||||
|
$("#div_id_map_location").show();
|
||||||
|
$("#div_id_end_date").hide();
|
||||||
|
}
|
||||||
|
else if ( val == "Party") {
|
||||||
|
$("#div_id_time").show();
|
||||||
|
$("#div_id_meeting_time").hide();
|
||||||
|
$("#div_id_map_location").show();
|
||||||
|
$("#div_id_end_date").hide();
|
||||||
|
}
|
||||||
|
else if ( val == "Travel") {
|
||||||
|
$("#div_id_time").hide();
|
||||||
|
$("#div_id_meeting_time").hide();
|
||||||
|
$("#div_id_map_location").show();
|
||||||
|
$("#div_id_end_date").show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#id_type").change( function() {
|
||||||
|
onTypeChange( $(this).val() );
|
||||||
|
} );
|
||||||
|
onTypeChange( $("#id_type").val() );
|
||||||
|
|
||||||
} );
|
} );
|
||||||
</script>
|
</script>
|
||||||
{% endaddtoblock %}
|
{% endaddtoblock %}
|
||||||
|
|
|
@ -42,6 +42,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function putStatus( button, status ) {
|
function putStatus( button, status ) {
|
||||||
|
$("#saving").html("Speichere..");
|
||||||
|
|
||||||
p = button.parent();
|
p = button.parent();
|
||||||
putObject = [ { "event": p.data("event-id"),
|
putObject = [ { "event": p.data("event-id"),
|
||||||
"user": p.data("username"),
|
"user": p.data("username"),
|
||||||
|
@ -51,7 +53,8 @@
|
||||||
type: "PUT",
|
type: "PUT",
|
||||||
url: "{% url 'event_api' %}",
|
url: "{% url 'event_api' %}",
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
data: JSON.stringify(putObject)
|
data: JSON.stringify(putObject),
|
||||||
|
success: function() { $("#saving").html("Ok"); }
|
||||||
});
|
});
|
||||||
|
|
||||||
setEventButtonStatus( button, status );
|
setEventButtonStatus( button, status );
|
||||||
|
@ -63,7 +66,8 @@
|
||||||
$(function(){
|
$(function(){
|
||||||
|
|
||||||
$(".event-comment").bindWithDelay("keypress", function() {
|
$(".event-comment").bindWithDelay("keypress", function() {
|
||||||
|
|
||||||
|
$("#saving").html("Speichere..");
|
||||||
|
|
||||||
putObject = [ { "event": $(this).data("event-id"),
|
putObject = [ { "event": $(this).data("event-id"),
|
||||||
"user": $(this).data("username"),
|
"user": $(this).data("username"),
|
||||||
|
@ -73,7 +77,8 @@
|
||||||
type: "PUT",
|
type: "PUT",
|
||||||
url: "{% url 'event_api' %}",
|
url: "{% url 'event_api' %}",
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
data: JSON.stringify(putObject)
|
data: JSON.stringify(putObject),
|
||||||
|
success: function() { $("#saving").html("Ok"); }
|
||||||
});
|
});
|
||||||
|
|
||||||
}, 800 );
|
}, 800 );
|
||||||
|
@ -98,6 +103,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<form>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="row-fluid eventTable">
|
<div class="row-fluid eventTable">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
|
@ -112,6 +118,7 @@
|
||||||
<th id='eventTitle'>Termin</th>
|
<th id='eventTitle'>Termin</th>
|
||||||
<th id='date' >Datum</th>
|
<th id='date' >Datum</th>
|
||||||
<th id='time' >Uhrzeit</th>
|
<th id='time' >Uhrzeit</th>
|
||||||
|
<th id='time' >Treffpunkt</th>
|
||||||
<th id='place' >Ort</th>
|
<th id='place' >Ort</th>
|
||||||
<th id='status' >Status ändern</th>
|
<th id='status' >Status ändern</th>
|
||||||
<th id='comment' >Kommentar</th>
|
<th id='comment' >Kommentar</th>
|
||||||
|
@ -121,11 +128,16 @@
|
||||||
|
|
||||||
{% for event in events %}
|
{% for event in events %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="center"> <a href="{{ event.pk }}"> {{ event.title }} </a> </td>
|
{% if not perms.eventplanner.change_event %}
|
||||||
<td class="center"> {{ event.date }} </td>
|
<td class="center"> {{ event.title }} </td>
|
||||||
<td class="center"> {% if event.time %} {{ event.time }} {% endif %} </td>
|
{% else %}
|
||||||
<!-- <td class="center"> {{ event.location }} </td> -->
|
<td class="center"> <a href="{{ event.pk }}"> {{ event.title }} </a> </td>
|
||||||
<td class="center"> Ort </td>
|
{% endif %}
|
||||||
|
<td class="center"> {{ event.date | date:"SHORT_DATE_FORMAT" }} </td>
|
||||||
|
<td class="center"> {% if event.time %} {{ event.time | time:"H:i" }} {% endif %} </td>
|
||||||
|
<td class="center"> {% if event.meeting_time %} {{ event.meeting_time | time:"H:i" }} {% endif %} </td>
|
||||||
|
|
||||||
|
<td class="center"> {{ event.location }} </td>
|
||||||
|
|
||||||
<td class="center">
|
<td class="center">
|
||||||
<div class="btn-group event-status-select" data-event-id="{{event.pk}}" data-username="{{user.username}}" >
|
<div class="btn-group event-status-select" data-event-id="{{event.pk}}" data-username="{{user.username}}" >
|
||||||
|
@ -156,6 +168,13 @@
|
||||||
|
|
||||||
</div><!--/row-->
|
</div><!--/row-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="row">
|
||||||
|
<div class="span12">
|
||||||
|
<em>Änderungen werden automatisch gespeichert: </em> <em id="saving">Ok</em>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -129,7 +129,7 @@
|
||||||
{% for event in events %}
|
{% for event in events %}
|
||||||
<tr class="eventRow">
|
<tr class="eventRow">
|
||||||
<td class="center"> <a href="{{ event.pk }}"> {{ event.title }} </a> </td>
|
<td class="center"> <a href="{{ event.pk }}"> {{ event.title }} </a> </td>
|
||||||
<td class="center"> {{ event.date }} </td>
|
<td class="center"> {{ event.date | date:"SHORT_DATE_FORMAT" }} </td>
|
||||||
|
|
||||||
|
|
||||||
{% for p in event.participation %}
|
{% for p in event.participation %}
|
||||||
|
@ -176,7 +176,6 @@
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<button id="saveButton" class="btn btn-primary" disabled="true">Speichern</button>
|
<button id="saveButton" class="btn btn-primary" disabled="true">Speichern</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}</form>
|
{% endif %}</form>
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ class EventForm( ModelForm ):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Event
|
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 = {
|
widgets = {
|
||||||
'location' : TextInput(),
|
'location' : TextInput(),
|
||||||
|
@ -132,13 +132,24 @@ class EventUpdate( UpdateView ):
|
||||||
model = Event
|
model = Event
|
||||||
template_name_suffix = "_update_form"
|
template_name_suffix = "_update_form"
|
||||||
success_url = '.'
|
success_url = '.'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(UpdateView, self).get_context_data(**kwargs)
|
||||||
|
context['viewtype'] = "update"
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class EventCreate( CreateView ):
|
class EventCreate( CreateView ):
|
||||||
|
|
||||||
form_class = EventForm
|
form_class = EventForm
|
||||||
model = Event
|
model = Event
|
||||||
template_name_suffix = "_update_form"
|
template_name_suffix = "_update_form"
|
||||||
success_url = '.'
|
success_url = '.'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(CreateView, self).get_context_data(**kwargs)
|
||||||
|
context['viewtype'] = "create"
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@ class PlainLocationField(BaseLocationField, CharField):
|
||||||
# south compatibility
|
# south compatibility
|
||||||
try:
|
try:
|
||||||
from south.modelsinspector import add_introspection_rules
|
from south.modelsinspector import add_introspection_rules
|
||||||
add_introspection_rules([], ["^location_field\.models\.LocationField"])
|
add_introspection_rules([], ["^location_field\.models\.PlainLocationField"])
|
||||||
add_introspection_rules([], ["^django\.contrib\.gis"])
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -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)
|
|
|
@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\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)"
|
||||||
|
|
|
@ -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']
|
|
@ -28,7 +28,6 @@ class Musician( models.Model ):
|
||||||
image = models.ImageField( upload_to = musicianPictureName, verbose_name=_("image") )
|
image = models.ImageField( upload_to = musicianPictureName, verbose_name=_("image") )
|
||||||
small_image = models.ImageField( upload_to = musicianSmallPictureName, verbose_name = _("circular thumbnail") )
|
small_image = models.ImageField( upload_to = musicianSmallPictureName, verbose_name = _("circular thumbnail") )
|
||||||
|
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
instrument = models.CharField( max_length=4, choices=INSTRUMENTS, blank=True, verbose_name=_("instrument") )
|
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_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") )
|
phone_work = models.CharField( max_length=18, blank=True, verbose_name=_("phone_work") )
|
||||||
|
|
||||||
|
position = models.IntegerField( null=True, verbose_name=_("Position") )
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def isDeepBrass(self):
|
def isDeepBrass(self):
|
||||||
return self.instrument == 'TRB' or self.instrument == "EUPH" or self.instrument == "TUBA" or self.instrument == "HRN"
|
return self.instrument == 'TRB' or self.instrument == "EUPH" or self.instrument == "TUBA" or self.instrument == "HRN"
|
||||||
|
|
|
@ -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']
|
|
@ -38,5 +38,5 @@ def message_view( request ):
|
||||||
context['messages'] = Message.objects.order_by('-creation_time')[:20]
|
context['messages'] = Message.objects.order_by('-creation_time')[:20]
|
||||||
context['archiveMode'] = False
|
context['archiveMode'] = False
|
||||||
|
|
||||||
return render ( request, 'messages/messages.html', context )
|
return render ( request, 'simpleforum/simpleforum.html', context )
|
||||||
|
|
|
@ -158,10 +158,10 @@
|
||||||
<div id="route_info_box" class="span5 box_wrapp">
|
<div id="route_info_box" class="span5 box_wrapp">
|
||||||
<div class="box_cont">
|
<div class="box_cont">
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<h6>Fahrt zum Konzert:</h6>
|
<h6>Nächstes Konzert:</h6>
|
||||||
</div>
|
</div>
|
||||||
Nächstes Konzert ist in {{nextConcert.location}} <br/> am {{nextConcert.date}} um {{nextConcert.time | time:"H:i" }} <br/>
|
Nächstes Konzert ist in <br> <em>{{nextConcert.location}}</em> <br> am {{nextConcert.date | date:"SHORT_DATE_FORMAT" }} um {{nextConcert.time | time:"H:i" }} Uhr <br/>
|
||||||
{% if nextConcert.meeting_time %} Treffpunkt ist um {{ nextConcert.meeting_time | time:"H:i" }} <br/> {% endif %}
|
{% if nextConcert.meeting_time %} Treffpunkt ist um {{ nextConcert.meeting_time | time:"H:i" }} Uhr <br/> {% endif %}
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr> <td> Fahrzeit:</td> <td> <span id="route_duration"></span> </td> </tr>
|
<tr> <td> Fahrzeit:</td> <td> <span id="route_duration"></span> </td> </tr>
|
||||||
|
|
|
@ -38,9 +38,9 @@
|
||||||
<div class="span6 text">
|
<div class="span6 text">
|
||||||
<h4>Der nächste Termin:</h4>
|
<h4>Der nächste Termin:</h4>
|
||||||
<p>
|
<p>
|
||||||
{{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" }}
|
um {{countdown.event.displaytime | time:"H:i" }}
|
||||||
in {{countdown.event.location}}
|
in <em>{{countdown.event.location}} </em>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
{% if countdown.participation == "?" %}
|
{% if countdown.participation == "?" %}
|
||||||
|
|
|
@ -30,6 +30,11 @@
|
||||||
{% addtoblock "css" strip %}<link rel="stylesheet" href="{{STATIC_URL}}/css/jquery.noty.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
{% addtoblock "css" strip %}<link rel="stylesheet" href="{{STATIC_URL}}/css/jquery.noty.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
||||||
{% addtoblock "css" strip %}<link rel="stylesheet" href="{{STATIC_URL}}/css/noty_theme_default.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
{% addtoblock "css" strip %}<link rel="stylesheet" href="{{STATIC_URL}}/css/noty_theme_default.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
||||||
|
|
||||||
|
<!-- For Autocompete -->
|
||||||
|
{% addtoblock "js" strip %} <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script> {% endaddtoblock %}
|
||||||
|
{% addtoblock "css" strip %}<link rel="stylesheet" href="{{STATIC_URL}}/css/jquery-ui-1.8.21.custom.css" type="text/css" media="screen" /> {% endaddtoblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Notifications -->
|
<!-- Notifications -->
|
||||||
{% addtoblock "js" %}
|
{% addtoblock "js" %}
|
||||||
|
@ -54,7 +59,12 @@
|
||||||
});
|
});
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
} );
|
|
||||||
|
|
||||||
|
$.get( "/login/usernames", function( data ) {
|
||||||
|
$("#username").autocomplete( { source: data } );
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endaddtoblock %}
|
{% endaddtoblock %}
|
||||||
|
|
||||||
|
@ -71,7 +81,7 @@
|
||||||
<div class="span12 footer" action="index.html" method="post">
|
<div class="span12 footer" action="index.html" method="post">
|
||||||
<form id="loginform">
|
<form id="loginform">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input name="username" type="text" placeholder="Benutzername">
|
<input name="username" type="text" placeholder="Benutzername" id="username">
|
||||||
<input name="password" type="password" placeholder="Passwort">
|
<input name="password" type="password" placeholder="Passwort">
|
||||||
<input name="next" type="hidden" value="{{next}}" >
|
<input name="next" type="hidden" value="{{next}}" >
|
||||||
<input type="submit" placeholder="OK" value="einloggen">
|
<input type="submit" placeholder="OK" value="einloggen">
|
||||||
|
|
|
@ -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)
|
|
|
@ -13,6 +13,7 @@ from eventplanner.models import Event, EventParticipation
|
||||||
from musicians.models import Musician
|
from musicians.models import Musician
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -72,11 +73,17 @@ def logout_view(request):
|
||||||
return redirect( login_view )
|
return redirect( login_view )
|
||||||
|
|
||||||
|
|
||||||
|
def userlistForAutocompletion(request):
|
||||||
|
result = [ u.username for u in User.objects.all() ]
|
||||||
|
return HttpResponse( simplejson.dumps(result), mimetype='application/json' )
|
||||||
|
|
||||||
|
|
||||||
def login_view( request ):
|
def login_view( request ):
|
||||||
if request.method == 'POST': # If the form has been submitted...
|
if request.method == 'POST': # If the form has been submitted...
|
||||||
username = request.POST['username']
|
raiseFirstLetter = lambda s: s[:1].upper() + s[1:] if s else ''
|
||||||
|
username = raiseFirstLetter( request.POST['username'] )
|
||||||
password = request.POST['password']
|
password = request.POST['password']
|
||||||
user = authenticate(username=username, password=password)
|
user = authenticate( username=username, password=password )
|
||||||
result = dict()
|
result = dict()
|
||||||
result['err'] = ""
|
result['err'] = ""
|
||||||
if user is not None:
|
if user is not None:
|
||||||
|
|
Loading…
Reference in New Issue