adapt automated list creation to official DAV style

v1-0-stable
Schlabonski 9 years ago
parent 0f6c98a36f
commit e025a39a4a

@ -1,21 +1,76 @@
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{amssymb}
\usepackage{cmbright}
\usepackage[margin=1in,landscape]{geometry}
\usepackage{graphicx}
\usepackage{textpos}
\usepackage[colorlinks]{hyperref}
\usepackage{float}
\usepackage[margin=1in]{geometry}
\newcommand{\picpos}[4]{
\begin{textblock*}{#1}(#2, #3)
\includegraphics[width=\textwidth]{#4}
\end{textblock*}
}
\renewcommand{\arraystretch}{1.5}
\newcommand{\tickedbox}{
\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$}
}
\newcommand{\checkbox}{
\makebox[0pt][l]{$\square$}
}
\begin{document}
\noindent
{\LARGE\textsc{MEMBERLIST-TITLE}}\\
% HEADER RIGHT
\picpos{4.5cm}{11.5cm}{0cm}{dav_logo.png}
\begin{textblock*}{5cm}(11.5cm, 2.3cm)
\begin{flushright}
\small
\noindent Deutscher Alpenverein e. V. \\
Sektion Ludwigsburg\\
Imbröderstraße 14\\
71634 Ludwigsburg\\
Tel.: 07141 927893\\
Fax: 07141 924042\\
info@alpenverein-ludwigsburg.de\\
\end{flushright}
\end{textblock*}
% HEADLINE
{\noindent\LARGE\textsc{Teilnehmerliste \\Sektionsveranstaltung}}\\
\textit{Erstellt: MEMBERLIST-DATE}\\
MEMBERLIST-COMMENTS
\begin{table}[h]
\begin{tabular}{llll}
% DESCRIPTION TABLE
\begin{table}[H]
\begin{tabular}{ll}
\large Aktivität: & ACTIVITY \\
\large Gruppe: & GROUP \\
\large Ziel: & DESTINATION \\
\large Stützpunkt: & PLACE \\
\large Zeitraum: & TIME-PERIOD \\
\large Betreuer: & JUGENDLEITER \\
\end{tabular}
\end{table}
\noindent TOUR-TYPE
\begin{table}[H]
\begin{tabular*}{1\linewidth}{@{\extracolsep{\fill}}llll}
\toprule
Name & Vorname & Geburtsdatum & Kommentare \\
\textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{E-Mail} \\
\midrule
\input{TABLE-NAME}
\bottomrule
\end{tabular}
\end{tabular*}
\end{table}
\vspace{1cm}
\noindent Bitte die ausgefüllte Teilnehmerliste vor Antritt der Aktivität per E-Mail an
\href{mailto:info@alpenverein-ludwigsburg.de}{info@alpenverein.de} und
\href{mailto:vorstand@alpenverein-ludwigsburg.de}{vorstand@alpenverein-ludwigsburg.de} senden.
\end{document}

@ -36,11 +36,12 @@ class MemberListAdminForm(forms.ModelForm):
model = MemberList
exclude = ['add_member']
def __init__(self, *args, **kwargs):
super(MemberListAdminForm, self).__init__(*args, **kwargs)
if self.instance.pk:
pass
#self.fields['add_member'].queryset = Member.objects.filter(prename__startswith='F')
self.fields['jugendleiter'].queryset = Member.objects.filter(group__name='Jugendleiter')
#self.fields['add_member'].queryset = Member.objects.filter(prename__startswith='F')
class MemberOnListInline(admin.StackedInline):
model = MemberOnList
@ -52,9 +53,10 @@ class MemberOnListInline(admin.StackedInline):
}
class MemberListAdmin(admin.ModelAdmin):
inlines = [MemberOnListInline]
form = MemberListAdminForm
list_display = ['__str__', 'date']
actions = ['convert_to_pdf']
inlines = [MemberOnListInline]
def __init__(self, *args, **kwargs):
super(MemberListAdmin, self).__init__(*args, **kwargs)
@ -64,10 +66,9 @@ class MemberListAdmin(admin.ModelAdmin):
"""
for memberlist in queryset:
# build a unique filename
# create a unique filename
filename = memberlist.name + "_" + datetime.today().strftime("%d_%m_%Y")
filename = filename.replace(' ', '_')
filename_table = 'table_' + filename
filename_tex = filename + '.tex'
filename_pdf = filename + '.pdf'
@ -76,9 +77,9 @@ class MemberListAdmin(admin.ModelAdmin):
with open('media/memberlists/'+filename_table, 'w+') as f:
for memberonlist in memberlist.memberonlist_set.all():
# write table of members in latex compatible format
line = '{0} & {1} & {2} & {3} \\\\ \n'.format(memberonlist.member.prename,
memberonlist.member.lastname,
memberonlist.member.birth_date.strftime('%d.%m.%Y'), memberonlist.comments)
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.email)
f.write(line)
# copy and adapt latex memberlist template
@ -90,13 +91,36 @@ class MemberListAdmin(admin.ModelAdmin):
template_content = f.read()
# adapt template
template_content = template_content.replace('MEMBERLIST-TITLE', memberlist.name)
template_content = template_content.replace('ACTIVITY', memberlist.name)
groups = ', '.join(g.name for g in memberlist.groups.all())
template_content = template_content.replace('GROUP', groups)
template_content = template_content.replace('DESTINATION', memberlist.destination)
template_content = template_content.replace('PLACE', memberlist.place)
template_content = template_content.replace('MEMBERLIST-DATE',
memberlist.date.strftime('%d.%m.%Y'))
template_content = template_content.replace('MEMBERLIST-COMMENTS',
memberlist.comment)
datetime.today().strftime('%d.%m.%Y'))
time_period = memberlist.date.strftime('%d.%m.%Y')
if memberlist.end != memberlist.date:
time_period += " - " + memberlist.end.strftime('%d.%m.%Y')
template_content = template_content.replace('TIME-PERIOD', time_period)
jugendleiter = ', '.join(j.name for j in memberlist.jugendleiter.all())
template_content = template_content.replace('JUGENDLEITER', jugendleiter)
# create tickboxes for tour type
tour_type = ''
for tt in ['Gemeinschaftstour', 'Führungstour', 'Ausbildung']:
print(memberlist.tour_type)
if tt in memberlist.tour_type:
tour_type += '\\tickedbox ' + tt
else:
tour_type += '\\checkbox'
tour_type += '\\enspace ' + tt
tour_type += '\\qquad \\qquad '
template_content = template_content.replace('TOUR-TYPE', tour_type)
template_content = template_content.replace('TABLE-NAME',
filename_table)
# write adapted template to file
with open('media/memberlists/' + filename_tex, 'w') as f:
f.write(template_content)

@ -1,9 +1,11 @@
from datetime import datetime
import uuid
from django import forms
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from multiselectfield import MultiSelectField
class Group(models.Model):
"""
@ -83,10 +85,18 @@ class Member(models.Model):
class MemberList(models.Model):
"""Lets the user create a list of members in pdf format. """
name = models.CharField(verbose_name='List Name', default='',
name = models.CharField(verbose_name='Activity', default='',
max_length=50)
place = models.CharField(verbose_name=_('Place'), default='', max_length=50)
destination = models.CharField(verbose_name=_('Destination (optional)'), default='', max_length=50, blank=True)
date = models.DateField(default=datetime.today)
comment = models.TextField(_('Comments'), default='')
end = models.DateField(verbose_name=_('End (optional)'), blank=True, default=datetime.today)
#comment = models.TextField(_('Comments'), default='', blank=True)
groups = models.ManyToManyField(Group)
jugendleiter = models.ManyToManyField(Member)
tour_type_choices = (('Gemeinschaftstour','Gemeinschaftstour'), ('Führungstour', 'Führungstour'),
('Ausbildung', 'Ausbildung'))
tour_type = MultiSelectField(choices=tour_type_choices, default='', max_choices=1)
def __str__(self):
"""String represenation"""
@ -99,7 +109,7 @@ class MemberOnList(models.Model):
"""
member = models.ForeignKey(Member)
memberlist = models.ForeignKey(MemberList)
comments = models.TextField(_('Comment'), default='')
comments = models.TextField(_('Comment'), default='', blank=True)
class Klettertreff(models.Model):

Loading…
Cancel
Save