From 308d9f3114840bf1d63d36f2945a1ab77c8bc459 Mon Sep 17 00:00:00 2001 From: "marius.klein" Date: Tue, 25 Feb 2025 01:45:12 +0100 Subject: [PATCH] feat(members/pdf): improve handling of long tables (#135) closes #128 Reviewed-on: https://git.jdav-hd.merten.dev/digitales/kompass/pulls/135 Reviewed-by: Christian Merten Co-authored-by: marius.klein Co-committed-by: marius.klein --- jdav_web/members/models.py | 8 ++++ .../members/crisis_intervention_list.tex | 44 +++++++++++-------- .../members/templates/members/notes_list.tex | 12 ++--- .../templates/members/seminar_report.tex | 24 +++++----- 4 files changed, 52 insertions(+), 36 deletions(-) diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index ba9e5fd..c82cfe5 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -364,6 +364,14 @@ class Member(Person): return "---" else: 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): """Returns if a good conduct certificate is still valid, depending on the last presentation.""" diff --git a/jdav_web/members/templates/members/crisis_intervention_list.tex b/jdav_web/members/templates/members/crisis_intervention_list.tex index 1e07831..237e956 100644 --- a/jdav_web/members/templates/members/crisis_intervention_list.tex +++ b/jdav_web/members/templates/members/crisis_intervention_list.tex @@ -10,7 +10,7 @@ \usepackage{textpos} \usepackage[colorlinks, breaklinks]{hyperref} \usepackage{float} -\usepackage[margin=1in]{geometry} +\usepackage[margin=2cm]{geometry} \usepackage{array} \usepackage{tabularx} \usepackage{ltablex} @@ -34,7 +34,9 @@ \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}{ \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} } @@ -43,8 +45,8 @@ } \begin{document} % HEADER RIGHT -\picpos{4.5cm}{11.5cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_sektion.png} -\begin{textblock*}{5cm}(11.5cm, 2.3cm) +\picpos{4.5cm}{12cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_sektion.png} +\begin{textblock*}{5cm}(12cm, 2.3cm) \begin{flushright} \small \noindent Deutscher Alpenverein e. V. \\ @@ -80,21 +82,25 @@ \end{tabular} \end{table} -\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}llLlLL} -\toprule -& \textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{Notfallkontakte} \\ -\midrule -{% for m in memberlist.membersonlist.all %} - {{ forloop.counter }} & - {{ m.member.name|esc_all }} & - {{ m.member.address|esc_all }} & - {{ m.member.contact_phone_number|esc_all }} & - {% for c in m.member.emergencycontact_set.all %} - {{ c.name|esc_all }} \newline - Tel.: {{ c.phone_number|esc_all }} - {% endfor %} \\ -{% endfor %} -\bottomrule +\begin{tabularx}{1\linewidth}{lSLSL} + \toprule + \# & \textbf{Name} & \textbf{Anschrift} & \textbf{Telefon} & \textbf{Notfallkontakte} \\ + \midrule + \endhead + \bottomrule + \endfoot + + {% for m in memberlist.membersonlist.all %} + {{ forloop.counter }} & + {{ m.member.name|esc_all }} & + {{ m.member.address_multiline|esc_all }} & + {{ m.member.contact_phone_number|esc_all }} & + {% for c in m.member.emergencycontact_set.all %} + {{ c.name|esc_all }} \newline + Tel.: {{ c.phone_number|esc_all }} + {% endfor %} \\ + {% endfor %} + \end{tabularx} \vspace{1cm} diff --git a/jdav_web/members/templates/members/notes_list.tex b/jdav_web/members/templates/members/notes_list.tex index 1050d7d..db18ca1 100644 --- a/jdav_web/members/templates/members/notes_list.tex +++ b/jdav_web/members/templates/members/notes_list.tex @@ -13,10 +13,11 @@ \usepackage[colorlinks]{hyperref} \usepackage{float} \usepackage[margin=1cm]{geometry} +\usepackage{ltablex} \renewcommand{\arraystretch}{1.5} -\newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} +\newcolumntype{Y}{>{\RaggedRight\arraybackslash}p{0.4\linewidth}} \begin{document} % HEADLINE @@ -35,17 +36,16 @@ \end{tabular} \end{table} -\begin{table}[H] - \begin{tabularx}{\textwidth}{@{} l l l Y @{}} +\begin{tabularx}{1\linewidth}{ l l l Y} \toprule - & \textbf{Name} & \textbf{Fähigkeiten (max. 100)} & \textbf{Kommentare} \\ + \# & \textbf{Name} & \textbf{Fähigkeiten (max. 100)} & \textbf{Kommentare} \\ \midrule {% for p in people %} {{ forloop.counter }} & {{ p.name|esc_all }} & {{ p.qualities|esc_all }} & {{ p.comments|esc_all }} \\ {% endfor %} \bottomrule - \end{tabularx} -\end{table} +\end{tabularx} + \noindent\large Fähigkeiten der Gruppe\\ \begin{table}[H] diff --git a/jdav_web/members/templates/members/seminar_report.tex b/jdav_web/members/templates/members/seminar_report.tex index ee85713..522725a 100644 --- a/jdav_web/members/templates/members/seminar_report.tex +++ b/jdav_web/members/templates/members/seminar_report.tex @@ -15,6 +15,7 @@ \usepackage{ragged2e} \usepackage{tabularx} \usepackage{titlesec} +\usepackage{ltablex} \titleformat{\section} {\Large\slshape}{\thesection\;} @@ -41,6 +42,7 @@ \newcolumntype{L}{>{\hspace{0pt}}X} \newcolumntype{Y}{>{\RaggedRight\arraybackslash}X} + \newcommand{\tickedbox}{ \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} } @@ -122,38 +124,38 @@ \section{Teilnehmer*innenliste} -\begin{table}[H] - \begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}llLl|c|c|c} +\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} + \hline + \# & \textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\ \hline - & \textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\ \hline - %\midrule + \endhead + \hline + \endfoot {% 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 }} & {% if m.member.gender == 0 %} x {% endif %} & {% if m.member.gender == 1 %} x {% endif %} & {% if m.member.gender == 2 %} x {% endif %} \\ {% endfor %} - %\bottomrule - \end{tabularx} -\end{table} +\end{tabularx} {% if memberlist.statement %} \section{Kosten} -\begin{table}[H] - \begin{tabularx}{1\linewidth}{@{}L r @{}} +\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}Lr} \toprule \textbf{Beschreibung} & \textbf{Betrag} \\ \midrule + {% if memberlist.statement.total_allowance > 0 %} Aufwandsentschädigung & {{ memberlist.statement.total_allowance }} € \\ + {% endif %} {% for bill in memberlist.statement.grouped_bills %} {{ bill.short_description|esc_all }} & {{ bill.amount }} € \\ {% endfor %} \bottomrule Gesamt & {{ memberlist.statement.total_theoretic }} € \\ - \end{tabularx} -\end{table} +\end{tabularx} {% endif %}