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): class MessageAdmin(admin.ModelAdmin):
"""Message creation view""" """Message creation view"""
list_display = ('subject', 'get_recipients', 'sent') list_display = ('subject', 'get_recipients', 'sent')
search_fields = ('subject',)
change_form_template = "mailer/change_form.html" change_form_template = "mailer/change_form.html"
formfield_overrides = { formfield_overrides = {
models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple},

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

@ -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: 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" "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,15 +18,15 @@ 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"
#: admin.py:25 #: admin.py:29
msgid "Age" msgid "Age"
msgstr "Alter" msgstr "Alter"
#: admin.py:30 #: admin.py:34
msgid "Not too old" msgid "Not too old"
msgstr "Nicht zu alt" msgstr "Nicht zu alt"
#: admin.py:31 #: admin.py:35
msgid "Too old" msgid "Too old"
msgstr "Zu alt" msgstr "Zu alt"
@ -34,66 +34,82 @@ msgstr "Zu alt"
msgid "material" msgid "material"
msgstr "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" msgid "name"
msgstr "Name" msgstr "Name"
#: models.py:18 #: models.py:33
msgid "description" msgid "description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: models.py:19 #: models.py:34
msgid "quantity" msgid "quantity"
msgstr "Anzahl" msgstr "Anzahl"
#: models.py:20 #: models.py:35
msgid "purchase date" msgid "purchase date"
msgstr "Kaufdatum" msgstr "Kaufdatum"
#: models.py:21 #: models.py:36
msgid "lifetime (years)" msgid "lifetime (years)"
msgstr "Lebenszeit (Jahre)" msgstr "Lebenszeit (Jahre)"
#: models.py:22 #: models.py:37
msgid "photo" msgid "photo"
msgstr "Bild" msgstr "Bild"
#: models.py:33 #: models.py:50
msgid "Quantity" msgid "Quantity"
msgstr "Anzahl" msgstr "Anzahl"
#: models.py:40 #: models.py:57
msgid "Thumbnail" msgid "Thumbnail"
msgstr "Bild" msgstr "Bild"
#: models.py:49 #: models.py:66
msgid "Owners" msgid "Owners"
msgstr "Verantwortliche" msgstr "Verantwortliche"
#: models.py:59 #: models.py:76
msgid "Not too old?" msgid "Not too old?"
msgstr "Nicht zu alt?" msgstr "Nicht zu alt?"
#: models.py:62 #: models.py:79
msgid "material part" msgid "material part"
msgstr "Materialteil" msgstr "Materialteil"
#: models.py:63 #: models.py:80
msgid "material parts" msgid "material parts"
msgstr "Materialteile" msgstr "Materialteile"
#: models.py:69 #: models.py:86
msgid "owner" msgid "owner"
msgstr "Besitzer" msgstr "Besitzer"
#: models.py:70 #: models.py:87
msgid "count" msgid "count"
msgstr "Anzahl" msgstr "Anzahl"
#: models.py:77 #: models.py:94
msgid "ownership" msgid "ownership"
msgstr "Besitzer" msgstr "Besitzer"
#: models.py:78 #: models.py:95
msgid "ownerships" msgid "ownerships"
msgstr "Verantwortliche" msgstr "Verantwortliche"

@ -8,6 +8,20 @@ from django.utils.translation import ugettext_lazy as _
MAX_TIME_MATERIAL = 5 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. # Create your models here.
class MaterialPart(models.Model): class MaterialPart(models.Model):
""" """
@ -20,6 +34,8 @@ class MaterialPart(models.Model):
buy_date = models.DateField(_('purchase date'), editable=True) buy_date = models.DateField(_('purchase date'), editable=True)
lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, max_digits=3) lifetime = models.DecimalField(_('lifetime (years)'), decimal_places=0, max_digits=3)
photo = models.ImageField(_('photo'), upload_to='images', blank=True) photo = models.ImageField(_('photo'), upload_to='images', blank=True)
material_cat = models.ManyToManyField(MaterialCategory, default=None,
verbose_name=_('Material category'))
def __str__(self): def __str__(self):
"""String representation""" """String representation"""

@ -21,12 +21,54 @@ from django.conf import settings
from easy_select2 import apply_select2 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. # Register your models here.
class MemberAdmin(admin.ModelAdmin): class MemberAdmin(admin.ModelAdmin):
fields = ['prename', 'lastname', 'email', 'email_parents', 'street', 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group', fields = ['prename', 'lastname', 'email', 'email_parents', 'street', 'plz',
'gets_newsletter', 'queue', 'registration_form', 'comments'] 'town', 'phone_number', 'phone_number_parents', 'birth_date', 'group',
list_display = ('name', 'birth_date', 'gets_newsletter', 'get_group', 'queue', 'created', 'comments') 'gets_newsletter', 'registered', 'registration_form', 'comments']
list_filter = ('group', 'gets_newsletter', 'queue') list_display = ('name', 'birth_date', 'get_group', 'gets_newsletter',
'registered', 'created', 'comments')
search_fields = ('prename', 'lastname')
list_filter = ('group', 'gets_newsletter', RegistrationFilter)
formfield_overrides = { formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
ForeignKey: {'widget': apply_select2(forms.Select)} ForeignKey: {'widget': apply_select2(forms.Select)}
@ -86,6 +128,7 @@ class MemberListAdmin(admin.ModelAdmin):
inlines = [MemberOnListInline] inlines = [MemberOnListInline]
form = MemberListAdminForm form = MemberListAdminForm
list_display = ['__str__', 'date'] list_display = ['__str__', 'date']
search_fields = ('name',)
actions = ['convert_to_pdf', 'generate_notes'] actions = ['convert_to_pdf', 'generate_notes']
formfield_overrides = { formfield_overrides = {
ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
@ -120,7 +163,7 @@ class MemberListAdmin(admin.ModelAdmin):
line = '{0} {1} & {2}, {3} & {4} & {5} \\\\ \n'.format( line = '{0} {1} & {2}, {3} & {4} & {5} \\\\ \n'.format(
memberonlist.member.prename, memberonlist.member.prename,
memberonlist.member.lastname, memberonlist.member.street, memberonlist.member.lastname, memberonlist.member.street,
memberonlist.member.town, memberonlist.member.phone_number, memberonlist.member.place, memberonlist.member.phone_number,
memberonlist.member.email) memberonlist.member.email)
f.write(esc_underscore(line)) f.write(esc_underscore(line))
@ -341,6 +384,7 @@ class KlettertreffAdmin(admin.ModelAdmin):
exclude = [] exclude = []
inlines = [KlettertreffAttendeeInline] inlines = [KlettertreffAttendeeInline]
list_display = ['__str__', 'date', 'get_jugendleiter'] list_display = ['__str__', 'date', 'get_jugendleiter']
search_fields = ('date', 'location', 'topic')
list_filter = [('date', DateFieldListFilter), 'group__name'] list_filter = [('date', DateFieldListFilter), 'group__name']
actions = ['overview'] actions = ['overview']

@ -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: 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" "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,23 +18,39 @@ 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"
#: 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" msgid "Difficulty"
msgstr "Schwierigkeit" msgstr "Schwierigkeit"
#: admin.py:62 #: admin.py:104
msgid "Tour type" msgid "Tour type"
msgstr "Art der Tour" msgstr "Art der Tour"
#: admin.py:199 #: admin.py:242
msgid "Convert to PDF" msgid "Convert to PDF"
msgstr "Kriseninterventionsliste erstellen" msgstr "Kriseninterventionsliste erstellen"
#: admin.py:305 #: admin.py:348
msgid "Generate overview" msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen" msgstr "Hinweise für Jugendleiter erstellen"
#: apps.py:7 models.py:105 #: apps.py:7 models.py:107
msgid "members" msgid "members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
@ -46,7 +62,7 @@ msgstr "Name"
msgid "Description" msgid "Description"
msgstr "Beschreibung" 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" msgid "Activity"
msgstr "Aktivität" msgstr "Aktivität"
@ -62,7 +78,7 @@ msgstr "Name"
msgid "minimum age (years)" msgid "minimum age (years)"
msgstr "Mindestalter (Jahre)" msgstr "Mindestalter (Jahre)"
#: models.py:41 models.py:60 #: models.py:41 models.py:62
msgid "group" msgid "group"
msgstr "Gruppe" msgstr "Gruppe"
@ -83,126 +99,126 @@ msgid "street"
msgstr "Straße" msgstr "Straße"
#: models.py:53 #: models.py:53
msgid "Postcode"
msgstr "PLZ"
#: models.py:55
msgid "town" msgid "town"
msgstr "Stadt" msgstr "Stadt"
#: models.py:54 #: models.py:56
msgid "phone number" msgid "phone number"
msgstr "Telefonnummer" msgstr "Telefonnummer"
#: models.py:55 #: models.py:57
msgid "parents phone number" msgid "parents phone number"
msgstr "Telefonnummer der Eltern" msgstr "Telefonnummer der Eltern"
#: models.py:58 #: models.py:60
msgid "Parents' Email" msgid "Parents' Email"
msgstr "Email der Eltern" msgstr "Email der Eltern"
#: models.py:59 #: models.py:61
msgid "birth date" msgid "birth date"
msgstr "Geburtsdatum" msgstr "Geburtsdatum"
#: models.py:61 #: models.py:63
msgid "receives newsletter" msgid "receives newsletter"
msgstr "Erhält den Newsletter" msgstr "Erhält den Newsletter"
#: models.py:65 #: models.py:67
msgid "comments" msgid "comments"
msgstr "Kommentare" msgstr "Kommentare"
#: models.py:66 #: models.py:68
msgid "created" msgid "created"
msgstr "erstellt" msgstr "erstellt"
#: models.py:67 #: models.py:70
msgid "queue"
msgstr "Warteliste"
#: models.py:68
msgid "registration form" msgid "registration form"
msgstr "Anmeldeformular" msgstr "Anmeldeformular"
#: models.py:101 models.py:185 #: models.py:103 models.py:187
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: models.py:104 #: models.py:106
msgid "member" msgid "member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: models.py:123 #: models.py:125
msgid "Place" msgid "Place"
msgstr "Ort" msgstr "Ort"
#: models.py:124 #: models.py:126
msgid "Destination (optional)" msgid "Destination (optional)"
msgstr "Ziel (optional)" msgstr "Ziel (optional)"
#: models.py:126 models.py:181 #: models.py:128 models.py:183
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
#: models.py:127 #: models.py:129
msgid "End (optional)" msgid "End (optional)"
msgstr "Ende" msgstr "Ende"
#: models.py:129 #: models.py:131
msgid "Groups" msgid "Groups"
msgstr "Gruppen" msgstr "Gruppen"
#: models.py:137 #: models.py:139
msgid "Categories" msgid "Categories"
msgstr "Kategorien" msgstr "Kategorien"
#: models.py:138 #: models.py:140
msgid "easy" msgid "easy"
msgstr "leicht" msgstr "leicht"
#: models.py:138 #: models.py:140
msgid "medium" msgid "medium"
msgstr "mittel" msgstr "mittel"
#: models.py:138 #: models.py:140
msgid "hard" msgid "hard"
msgstr "schwer" msgstr "schwer"
#: models.py:147 #: models.py:149
msgid "Memberlist" msgid "Memberlist"
msgstr "Teilnehmerliste" msgstr "Teilnehmerliste"
#: models.py:148 #: models.py:150
msgid "Memberlists" msgid "Memberlists"
msgstr "Teilnehmerlisten" 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" msgid "Member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: models.py:165 #: models.py:167
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: models.py:172 models.py:224 #: models.py:174 models.py:226
msgid "Members" msgid "Members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: models.py:182 #: models.py:184
msgid "Location" msgid "Location"
msgstr "Ort" msgstr "Ort"
#: models.py:183 #: models.py:185
msgid "Topic" msgid "Topic"
msgstr "Thema" msgstr "Thema"
#: models.py:207 #: models.py:209
msgid "Jugendleiter" msgid "Jugendleiter"
msgstr "Jugendleiter" msgstr "Jugendleiter"
#: models.py:210 #: models.py:212
msgid "Klettertreff" msgid "Klettertreff"
msgstr "Klettertreff" msgstr "Klettertreff"
#: models.py:211 #: models.py:213
msgid "Klettertreffs" msgid "Klettertreffs"
msgstr "Klettertreffs" msgstr "Klettertreffs"
@ -218,6 +234,9 @@ msgstr "Fähigkeiten:"
msgid "Skill level" msgid "Skill level"
msgstr "Fähigkeitsniveau" msgstr "Fähigkeitsniveau"
#~ msgid "queue"
#~ msgstr "Warteliste"
#~ msgid "Art der Tour" #~ msgid "Art der Tour"
#~ msgstr "Art der Tour" #~ msgstr "Art der Tour"

@ -50,9 +50,11 @@ class Member(models.Model):
prename = models.CharField(max_length=20, verbose_name=_('prename')) prename = models.CharField(max_length=20, verbose_name=_('prename'))
lastname = models.CharField(max_length=20, verbose_name=_('last name')) lastname = models.CharField(max_length=20, verbose_name=_('last name'))
street = models.CharField(max_length=30, verbose_name=_('street'), default='', blank=True) 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) 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 = models.CharField(max_length=18, 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_parents = models.CharField(max_length=18, verbose_name=_('parents phone number'), default='', blank=True)
email = models.EmailField(max_length=100, default="") email = models.EmailField(max_length=100, default="")
email_parents = models.EmailField(max_length=100, default="", blank=True, email_parents = models.EmailField(max_length=100, default="", blank=True,
verbose_name=_("Parents' Email")) verbose_name=_("Parents' Email"))
@ -64,7 +66,7 @@ class Member(models.Model):
unsubscribe_expire = models.DateTimeField(default=timezone.now) unsubscribe_expire = models.DateTimeField(default=timezone.now)
comments = models.TextField(_('comments'), default='', blank=True) comments = models.TextField(_('comments'), default='', blank=True)
created = models.DateField(auto_now=True, verbose_name=_('created')) 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) registration_form = models.ImageField(verbose_name=_('registration form'), blank=True)
def __str__(self): def __str__(self):
@ -93,6 +95,11 @@ class Member(models.Model):
"""Returning whole name (prename + lastname)""" """Returning whole name (prename + lastname)"""
return "{0} {1}".format(self.prename, self.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): def get_group(self):
"""Returns a string of groups in which the member is.""" """Returns a string of groups in which the member is."""
groupstring = ''.join(g.name + ',\n' for g in self.group.all()) 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. # Create your views here.
def index(request): def index(request):
return render(request, 'startpage/index.html') return redirect('http://www.alpenverein-ludwigsburg.de/index.php?id=122')

Loading…
Cancel
Save