feat(members/pdf): improve handling of long tables (#135)

closes #128

Reviewed-on: #135
Reviewed-by: Christian Merten <christian@merten.dev>
Co-authored-by: marius.klein <marius.klein@alpenverein-heidelberg.de>
Co-committed-by: marius.klein <marius.klein@alpenverein-heidelberg.de>
pull/137/head
marius.klein 10 months ago committed by Christian Merten
parent 7a9c6f9d85
commit 308d9f3114

@ -364,6 +364,14 @@ class Member(Person):
return "---" return "---"
else: else:
return "{0}, {1}".format(self.street, self.place) return "{0}, {1}".format(self.street, self.place)
@property
def address_multiline(self):
"""Returning the whole address with a linebreak between street and town"""
if not self.street and not self.town and not self.plz:
return "---"
else:
return "{0},\\linebreak[1] {1}".format(self.street, self.place)
def good_conduct_certificate_valid(self): def good_conduct_certificate_valid(self):
"""Returns if a good conduct certificate is still valid, depending on the last presentation.""" """Returns if a good conduct certificate is still valid, depending on the last presentation."""

@ -10,7 +10,7 @@
\usepackage{textpos} \usepackage{textpos}
\usepackage[colorlinks, breaklinks]{hyperref} \usepackage[colorlinks, breaklinks]{hyperref}
\usepackage{float} \usepackage{float}
\usepackage[margin=1in]{geometry} \usepackage[margin=2cm]{geometry}
\usepackage{array} \usepackage{array}
\usepackage{tabularx} \usepackage{tabularx}
\usepackage{ltablex} \usepackage{ltablex}
@ -34,7 +34,9 @@
\renewcommand{\arraystretch}{1.5} \renewcommand{\arraystretch}{1.5}
\newcolumntype{L}{>{\hspace{0pt}}X} \newcolumntype{L}{>{\hspace{0pt}\raggedright\arraybackslash}X}
\newcolumntype{S}{>{\raggedright\arraybackslash\hsize=0.7\hsize}X}
\newcommand{\tickedbox}{ \newcommand{\tickedbox}{
\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$}
} }
@ -43,8 +45,8 @@
} }
\begin{document} \begin{document}
% HEADER RIGHT % HEADER RIGHT
\picpos{4.5cm}{11.5cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_sektion.png} \picpos{4.5cm}{12cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_sektion.png}
\begin{textblock*}{5cm}(11.5cm, 2.3cm) \begin{textblock*}{5cm}(12cm, 2.3cm)
\begin{flushright} \begin{flushright}
\small \small
\noindent Deutscher Alpenverein e. V. \\ \noindent Deutscher Alpenverein e. V. \\
@ -80,21 +82,25 @@
\end{tabular} \end{tabular}
\end{table} \end{table}
\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}llLlLL} \begin{tabularx}{1\linewidth}{lSLSL}
\toprule \toprule
& \textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{Notfallkontakte} \\ \# & \textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{Notfallkontakte} \\
\midrule \midrule
{% for m in memberlist.membersonlist.all %} \endhead
{{ forloop.counter }} & \bottomrule
{{ m.member.name|esc_all }} & \endfoot
{{ m.member.address|esc_all }} &
{{ m.member.contact_phone_number|esc_all }} & {% for m in memberlist.membersonlist.all %}
{% for c in m.member.emergencycontact_set.all %} {{ forloop.counter }} &
{{ c.name|esc_all }} \newline {{ m.member.name|esc_all }} &
Tel.: {{ c.phone_number|esc_all }} {{ m.member.address_multiline|esc_all }} &
{% endfor %} \\ {{ m.member.contact_phone_number|esc_all }} &
{% endfor %} {% for c in m.member.emergencycontact_set.all %}
\bottomrule {{ c.name|esc_all }} \newline
Tel.: {{ c.phone_number|esc_all }}
{% endfor %} \\
{% endfor %}
\end{tabularx} \end{tabularx}
\vspace{1cm} \vspace{1cm}

@ -13,10 +13,11 @@
\usepackage[colorlinks]{hyperref} \usepackage[colorlinks]{hyperref}
\usepackage{float} \usepackage{float}
\usepackage[margin=1cm]{geometry} \usepackage[margin=1cm]{geometry}
\usepackage{ltablex}
\renewcommand{\arraystretch}{1.5} \renewcommand{\arraystretch}{1.5}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} \newcolumntype{Y}{>{\RaggedRight\arraybackslash}p{0.4\linewidth}}
\begin{document} \begin{document}
% HEADLINE % HEADLINE
@ -35,17 +36,16 @@
\end{tabular} \end{tabular}
\end{table} \end{table}
\begin{table}[H] \begin{tabularx}{1\linewidth}{ l l l Y}
\begin{tabularx}{\textwidth}{@{} l l l Y @{}}
\toprule \toprule
& \textbf{Name} & \textbf{Fähigkeiten (max. 100)} & \textbf{Kommentare} \\ \# & \textbf{Name} & \textbf{Fähigkeiten (max. 100)} & \textbf{Kommentare} \\
\midrule \midrule
{% for p in people %} {% for p in people %}
{{ forloop.counter }} & {{ p.name|esc_all }} & {{ p.qualities|esc_all }} & {{ p.comments|esc_all }} \\ {{ forloop.counter }} & {{ p.name|esc_all }} & {{ p.qualities|esc_all }} & {{ p.comments|esc_all }} \\
{% endfor %} {% endfor %}
\bottomrule \bottomrule
\end{tabularx} \end{tabularx}
\end{table}
\noindent\large Fähigkeiten der Gruppe\\ \noindent\large Fähigkeiten der Gruppe\\
\begin{table}[H] \begin{table}[H]

@ -15,6 +15,7 @@
\usepackage{ragged2e} \usepackage{ragged2e}
\usepackage{tabularx} \usepackage{tabularx}
\usepackage{titlesec} \usepackage{titlesec}
\usepackage{ltablex}
\titleformat{\section} \titleformat{\section}
{\Large\slshape}{\thesection\;} {\Large\slshape}{\thesection\;}
@ -41,6 +42,7 @@
\newcolumntype{L}{>{\hspace{0pt}}X} \newcolumntype{L}{>{\hspace{0pt}}X}
\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} \newcolumntype{Y}{>{\RaggedRight\arraybackslash}X}
\newcommand{\tickedbox}{ \newcommand{\tickedbox}{
\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$}
} }
@ -122,38 +124,38 @@
\section{Teilnehmer*innenliste} \section{Teilnehmer*innenliste}
\begin{table}[H] \begin{tabularx}{1\linewidth}{p{0.01\linewidth}>{\RaggedRight\arraybackslash}p{0.22\linewidth}>{\RaggedRight\arraybackslash}p{0.38\linewidth}p{0.14\linewidth}|c|c|c}
\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}llLl|c|c|c} \hline
\# & \textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\
\hline \hline
& \textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\ \hline \endhead
%\midrule \hline
\endfoot
{% for m in memberlist.membersonlist.all %} {% for m in memberlist.membersonlist.all %}
{{ forloop.counter }} & {{ m.member.name|esc_all }} & {{ m.member.address|esc_all }} & {{ m.member.birth_date_str|esc_all }} {{ forloop.counter }} & {{ m.member.name|esc_all }} & {{ m.member.address|esc_all }} & {{ m.member.birth_date_str|esc_all }}
& {% if m.member.gender == 0 %} x {% endif %} & {% if m.member.gender == 0 %} x {% endif %}
& {% if m.member.gender == 1 %} x {% endif %} & {% if m.member.gender == 1 %} x {% endif %}
& {% if m.member.gender == 2 %} x {% endif %} \\ & {% if m.member.gender == 2 %} x {% endif %} \\
{% endfor %} {% endfor %}
%\bottomrule \end{tabularx}
\end{tabularx}
\end{table}
{% if memberlist.statement %} {% if memberlist.statement %}
\section{Kosten} \section{Kosten}
\begin{table}[H] \begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}Lr}
\begin{tabularx}{1\linewidth}{@{}L r @{}}
\toprule \toprule
\textbf{Beschreibung} & \textbf{Betrag} \\ \textbf{Beschreibung} & \textbf{Betrag} \\
\midrule \midrule
{% if memberlist.statement.total_allowance > 0 %}
Aufwandsentschädigung & {{ memberlist.statement.total_allowance }}\\ Aufwandsentschädigung & {{ memberlist.statement.total_allowance }}\\
{% endif %}
{% for bill in memberlist.statement.grouped_bills %} {% for bill in memberlist.statement.grouped_bills %}
{{ bill.short_description|esc_all }} & {{ bill.amount }}\\ {{ bill.short_description|esc_all }} & {{ bill.amount }}\\
{% endfor %} {% endfor %}
\bottomrule \bottomrule
Gesamt & {{ memberlist.statement.total_theoretic }}\\ Gesamt & {{ memberlist.statement.total_theoretic }}\\
\end{tabularx} \end{tabularx}
\end{table}
{% endif %} {% endif %}

Loading…
Cancel
Save