Merge pull request #77 from Schlabonski/pm-changes

Planungsmeeting 2017 - changes
v1-0-stable
Christian Merten 8 years ago committed by GitHub
commit 043109f54e

@ -18,6 +18,7 @@ class AttachmentInline(admin.TabularInline):
class MessageAdmin(admin.ModelAdmin):
"""Message creation view"""
list_display = ('subject', 'get_recipients', 'sent')
search_fields = ('subject',)
change_form_template = "mailer/change_form.html"
formfield_overrides = {
models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple},

@ -4,10 +4,14 @@ from django.contrib.admin import SimpleListFilter
from django.db import models
from django import forms
from .models import MaterialPart, Ownership
from .models import MaterialPart, Ownership, MaterialCategory
from easy_select2 import apply_select2
class MaterialCategoryAdmin(admin.ModelAdmin):
fields = ['name']
# Register your models here.
class OwnershipInline(admin.TabularInline):
"""
@ -44,11 +48,16 @@ class MaterialAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'quantity_real',
'ownership_overview', 'buy_date',
'lifetime', 'not_too_old', 'admin_thumbnail')
search_fields = ('name', 'description')
inlines = [OwnershipInline]
list_filter = (NotTooOldFilter,)
list_filter = (NotTooOldFilter, 'material_cat')
formfield_overrides = {
models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple}
}
class Media:
css = {'all': ('admin/css/tabular_hide_original.css',)}
admin.site.register(MaterialCategory, MaterialCategoryAdmin)
admin.site.register(MaterialPart, MaterialAdmin)

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-05 19:07+0200\n"
"POT-Creation-Date: 2017-10-11 13:02+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"
@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin.py:25
#: admin.py:29
msgid "Age"
msgstr "Alter"
#: admin.py:30
#: admin.py:34
msgid "Not too old"
msgstr "Nicht zu alt"
#: admin.py:31
#: admin.py:35
msgid "Too old"
msgstr "Zu alt"
@ -34,66 +34,82 @@ msgstr "Zu alt"
msgid "material"
msgstr "Material"
#: models.py:17
#: models.py:15
msgid "Name"
msgstr "Name"
#: models.py:16
msgid "Description"
msgstr "Beschreibung"
#: models.py:22 models.py:39
msgid "Material category"
msgstr "Materialtyp"
#: models.py:23
msgid "Material categories"
msgstr "Materialtypen"
#: models.py:32
msgid "name"
msgstr "Name"
#: models.py:18
#: models.py:33
msgid "description"
msgstr "Beschreibung"
#: models.py:19
#: models.py:34
msgid "quantity"
msgstr "Anzahl"
#: models.py:20
#: models.py:35
msgid "purchase date"
msgstr "Kaufdatum"
#: models.py:21
#: models.py:36
msgid "lifetime (years)"
msgstr "Lebenszeit (Jahre)"
#: models.py:22
#: models.py:37
msgid "photo"
msgstr "Bild"
#: models.py:33
#: models.py:50
msgid "Quantity"
msgstr "Anzahl"
#: models.py:40
#: models.py:57
msgid "Thumbnail"
msgstr "Bild"
#: models.py:49
#: models.py:66
msgid "Owners"
msgstr "Verantwortliche"
#: models.py:59
#: models.py:76
msgid "Not too old?"
msgstr "Nicht zu alt?"
#: models.py:62
#: models.py:79
msgid "material part"
msgstr "Materialteil"
#: models.py:63
#: models.py:80
msgid "material parts"
msgstr "Materialteile"
#: models.py:69
#: models.py:86
msgid "owner"
msgstr "Besitzer"
#: models.py:70
#: models.py:87
msgid "count"
msgstr "Anzahl"
#: models.py:77
#: models.py:94
msgid "ownership"
msgstr "Besitzer"
#: models.py:78
#: models.py:95
msgid "ownerships"
msgstr "Verantwortliche"

@ -8,6 +8,20 @@ from django.utils.translation import ugettext_lazy as _
MAX_TIME_MATERIAL = 5
class MaterialCategory(models.Model):
"""
Describes one kind of material
"""
name = models.CharField(max_length=40, verbose_name=_('Name'))
def __str__(self):
return self.name
class Meta:
verbose_name = _('Material category')
verbose_name_plural = _('Material categories')
# Create your models here.
class MaterialPart(models.Model):
"""
@ -20,6 +34,8 @@ class MaterialPart(models.Model):
buy_date = models.DateField(_('purchase date'), editable=True)
lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, max_digits=3)
photo = models.ImageField(_('photo'), upload_to='images', blank=True)
material_cat = models.ManyToManyField(MaterialCategory, default=None,
verbose_name=_('Material category'))
def __str__(self):
"""String representation"""

@ -21,12 +21,54 @@ from django.conf import settings
from easy_select2 import apply_select2
class RegistrationFilter(admin.SimpleListFilter):
title = _('Registration complete')
parameter_name = 'registered'
default_value = ('All', None)
def lookups(self, request, model_admin):
return (
('True', _('True')),
('False', _('False')),
('All', _('All'))
)
def queryset(self, request, queryset):
if self.value() == 'True':
return queryset.filter(registered=True)
elif self.value() == 'False':
return queryset.filter(registered=False)
elif self.value() is None:
if self.default_value[1] is None:
return queryset
else:
return queryset.filter(registered=self.default_value[1])
elif self.value() == 'All':
return queryset
def choices(self, cl):
for lookup, title in self.lookup_choices:
yield {
'selected':
self.value() == lookup or
(self.value() is None and lookup == self.default_value[0]),
'query_string': cl.get_query_string({
self.parameter_name:
lookup,
}, []),
'display': title
}
# Register your models here.
class MemberAdmin(admin.ModelAdmin):
fields = ['prename', 'lastname', 'email', 'email_parents', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group',
'gets_newsletter', 'queue', 'registration_form', 'comments']
list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments')
list_filter = ('group', 'gets_newsletter', 'queue')
fields = ['prename', 'lastname', 'email', 'email_parents', 'street', 'plz',
'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group',
'gets_newsletter', 'registered', 'registration_form', 'comments']
list_display = ('name', 'birth_date', 'get_group', 'gets_newsletter',
'registered', 'created', 'comments')
search_fields = ('prename', 'lastname')
list_filter = ('group', 'gets_newsletter', RegistrationFilter)
formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
ForeignKey: {'widget': apply_select2(forms.Select)}
@ -86,6 +128,7 @@ class MemberListAdmin(admin.ModelAdmin):
inlines = [MemberOnListInline]
form = MemberListAdminForm
list_display = ['__str__', 'date']
search_fields = ('name',)
actions = ['convert_to_pdf', 'generate_notes']
formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
@ -120,7 +163,7 @@ class MemberListAdmin(admin.ModelAdmin):
line = '{0} {1} & {2}, {3} & {4} & {5} \\\\ \n'.format(
memberonlist.member.prename,
memberonlist.member.lastname, memberonlist.member.street,
memberonlist.member.town, memberonlist.member.phone_number,
memberonlist.member.place, memberonlist.member.phone_number,
memberonlist.member.email)
f.write(esc_underscore(line))
@ -341,6 +384,7 @@ class KlettertreffAdmin(admin.ModelAdmin):
exclude = []
inlines = [KlettertreffAttendeeInline]
list_display = ['__str__', 'date', 'get_jugendleiter']
search_fields = ('date', 'location', 'topic')
list_filter = [('date', DateFieldListFilter), 'group__name']
actions = ['overview']

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-18 17:27+0200\n"
"POT-Creation-Date: 2017-10-11 14:50+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"
@ -18,23 +18,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin.py:58
#: admin.py:25 models.py:69
msgid "Registration complete"
msgstr "Anmeldung vollständig"
#: admin.py:31
msgid "True"
msgstr "Ja"
#: admin.py:32
msgid "False"
msgstr "Nein"
#: admin.py:33
msgid "All"
msgstr "Alle"
#: admin.py:100
msgid "Difficulty"
msgstr "Schwierigkeit"
#: admin.py:62
#: admin.py:104
msgid "Tour type"
msgstr "Art der Tour"
#: admin.py:199
#: admin.py:242
msgid "Convert to PDF"
msgstr "Kriseninterventionsliste erstellen"
#: admin.py:305
#: admin.py:348
msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen"
#: apps.py:7 models.py:105
#: apps.py:7 models.py:107
msgid "members"
msgstr "Teilnehmer"
@ -46,7 +62,7 @@ msgstr "Name"
msgid "Description"
msgstr "Beschreibung"
#: models.py:23 models.py:121 templates/members/change_member.html:9
#: models.py:23 models.py:123 templates/members/change_member.html:9
msgid "Activity"
msgstr "Aktivität"
@ -62,7 +78,7 @@ msgstr "Name"
msgid "minimum age (years)"
msgstr "Mindestalter (Jahre)"
#: models.py:41 models.py:60
#: models.py:41 models.py:62
msgid "group"
msgstr "Gruppe"
@ -83,126 +99,126 @@ msgid "street"
msgstr "Straße"
#: models.py:53
msgid "Postcode"
msgstr "PLZ"
#: models.py:55
msgid "town"
msgstr "Stadt"
#: models.py:54
#: models.py:56
msgid "phone number"
msgstr "Telefonnummer"
#: models.py:55
#: models.py:57
msgid "parents phone number"
msgstr "Telefonnummer der Eltern"
#: models.py:58
#: models.py:60
msgid "Parents' Email"
msgstr "Email der Eltern"
#: models.py:59
#: models.py:61
msgid "birth date"
msgstr "Geburtsdatum"
#: models.py:61
#: models.py:63
msgid "receives newsletter"
msgstr "Erhält den Newsletter"
#: models.py:65
#: models.py:67
msgid "comments"
msgstr "Kommentare"
#: models.py:66
#: models.py:68
msgid "created"
msgstr "erstellt"
#: models.py:67
msgid "queue"
msgstr "Warteliste"
#: models.py:68
#: models.py:70
msgid "registration form"
msgstr "Anmeldeformular"
#: models.py:101 models.py:185
#: models.py:103 models.py:187
msgid "Group"
msgstr "Gruppe"
#: models.py:104
#: models.py:106
msgid "member"
msgstr "Teilnehmer"
#: models.py:123
#: models.py:125
msgid "Place"
msgstr "Ort"
#: models.py:124
#: models.py:126
msgid "Destination (optional)"
msgstr "Ziel (optional)"
#: models.py:126 models.py:181
#: models.py:128 models.py:183
msgid "Date"
msgstr "Datum"
#: models.py:127
#: models.py:129
msgid "End (optional)"
msgstr "Ende"
#: models.py:129
#: models.py:131
msgid "Groups"
msgstr "Gruppen"
#: models.py:137
#: models.py:139
msgid "Categories"
msgstr "Kategorien"
#: models.py:138
#: models.py:140
msgid "easy"
msgstr "leicht"
#: models.py:138
#: models.py:140
msgid "medium"
msgstr "mittel"
#: models.py:138
#: models.py:140
msgid "hard"
msgstr "schwer"
#: models.py:147
#: models.py:149
msgid "Memberlist"
msgstr "Teilnehmerliste"
#: models.py:148
#: models.py:150
msgid "Memberlists"
msgstr "Teilnehmerlisten"
#: models.py:163 models.py:171 models.py:216 models.py:223
#: models.py:165 models.py:173 models.py:218 models.py:225
msgid "Member"
msgstr "Teilnehmer"
#: models.py:165
#: models.py:167
msgid "Comment"
msgstr "Kommentar"
#: models.py:172 models.py:224
#: models.py:174 models.py:226
msgid "Members"
msgstr "Teilnehmer"
#: models.py:182
#: models.py:184
msgid "Location"
msgstr "Ort"
#: models.py:183
#: models.py:185
msgid "Topic"
msgstr "Thema"
#: models.py:207
#: models.py:209
msgid "Jugendleiter"
msgstr "Jugendleiter"
#: models.py:210
#: models.py:212
msgid "Klettertreff"
msgstr "Klettertreff"
#: models.py:211
#: models.py:213
msgid "Klettertreffs"
msgstr "Klettertreffs"
@ -218,6 +234,9 @@ msgstr "Fähigkeiten:"
msgid "Skill level"
msgstr "Fähigkeitsniveau"
#~ msgid "queue"
#~ msgstr "Warteliste"
#~ msgid "Art der Tour"
#~ msgstr "Art der Tour"

@ -50,9 +50,11 @@ class Member(models.Model):
prename = models.CharField(max_length=20, verbose_name=_('prename'))
lastname = models.CharField(max_length=20, verbose_name=_('last name'))
street = models.CharField(max_length=30, verbose_name=_('street'), default='', blank=True)
plz = models.CharField(max_length=10, verbose_name=_('Postcode'),
default='', blank=True)
town = models.CharField(max_length=30, verbose_name=_('town'), default='', blank=True)
phone_number = models.CharField(max_length=12, verbose_name=_('phone number'), default='', blank=True)
phone_number_parents = models.CharField(max_length=12, verbose_name=_('parents phone number'), default='', blank=True)
phone_number = models.CharField(max_length=18, verbose_name=_('phone number'), default='', blank=True)
phone_number_parents = models.CharField(max_length=18, verbose_name=_('parents phone number'), default='', blank=True)
email = models.EmailField(max_length=100, default="")
email_parents = models.EmailField(max_length=100, default="", blank=True,
verbose_name=_("Parents' Email"))
@ -64,7 +66,7 @@ class Member(models.Model):
unsubscribe_expire = models.DateTimeField(default=timezone.now)
comments = models.TextField(_('comments'), default='', blank=True)
created = models.DateField(auto_now=True, verbose_name=_('created'))
queue = models.BooleanField(default=False, verbose_name=_('queue'))
registered = models.BooleanField(default=False, verbose_name=_('Registration complete'))
registration_form = models.ImageField(verbose_name=_('registration form'), blank=True)
def __str__(self):
@ -93,6 +95,11 @@ class Member(models.Model):
"""Returning whole name (prename + lastname)"""
return "{0} {1}".format(self.prename, self.lastname)
@property
def place(self):
"""Returning the whole place (plz + town)"""
return "{0} {1}".format(self.plz, self.town)
def get_group(self):
"""Returns a string of groups in which the member is."""
groupstring = ''.join(g.name + ',\n' for g in self.group.all())

@ -1,6 +1,6 @@
from django.shortcuts import render
from django.shortcuts import redirect
# Create your views here.
def index(request):
return render(request, 'startpage/index.html')
return redirect('http://www.alpenverein-ludwigsburg.de/index.php?id=122')

Loading…
Cancel
Save