From ffef3c93c312e4f1cb765f389b4820c5dccd1bc0 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 6 Apr 2025 01:32:54 +0200 Subject: [PATCH] fix(members/pdf): use excursion date instead of creation date --- jdav_web/members/admin.py | 23 +++++++++++++++++------ jdav_web/members/excel.py | 3 ++- jdav_web/members/pdf.py | 20 ++++++++++---------- jdav_web/utils.py | 8 +++++--- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 86c6137..ca21539 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -1032,7 +1032,8 @@ class MemberNoteListAdmin(admin.ModelAdmin): if not self.may_view_notelist(request, memberlist): return self.not_allowed_view(request, memberlist) context = dict(memberlist=memberlist, settings=settings) - return render_tex(f"{memberlist.title}_Zusammenfassung", 'members/notelist_summary.tex', context) + return render_tex(f"{memberlist.title}_Zusammenfassung", 'members/notelist_summary.tex', context, + date=memberlist.date) summary.short_description = _('Generate PDF summary') @@ -1125,7 +1126,9 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): if not self.may_view_excursion(request, memberlist): return self.not_allowed_view(request, memberlist) context = dict(memberlist=memberlist, settings=settings) - return render_tex(f"{memberlist.code}_{memberlist.name}_Krisenliste", 'members/crisis_intervention_list.tex', context) + return render_tex(f"{memberlist.code}_{memberlist.name}_Krisenliste", + 'members/crisis_intervention_list.tex', context, + date=memberlist.date) crisis_intervention_list.short_description = _('Generate crisis intervention list') def notes_list(self, request, memberlist): @@ -1133,7 +1136,9 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): return self.not_allowed_view(request, memberlist) people, skills = memberlist.skill_summary context = dict(memberlist=memberlist, people=people, skills=skills, settings=settings) - return render_tex(f"{memberlist.code}_{memberlist.name}_Notizen", 'members/notes_list.tex', context) + return render_tex(f"{memberlist.code}_{memberlist.name}_Notizen", + 'members/notes_list.tex', context, + date=memberlist.date) notes_list.short_description = _('Generate overview') @decorate_download @@ -1145,13 +1150,17 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): def download_seminar_report_docx(self, request, memberlist): title = memberlist.ljpproposal.title context = dict(memberlist=memberlist, settings=settings) - return render_docx(f"{memberlist.code}_{title}_Seminarbericht", 'members/seminar_report_docx.tex', context) + return render_docx(f"{memberlist.code}_{title}_Seminarbericht", + 'members/seminar_report_docx.tex', context, + date=memberlist.date) @decorate_download def download_seminar_report_costs_and_participants(self, request, memberlist): title = memberlist.ljpproposal.title context = dict(memberlist=memberlist, settings=settings) - return render_tex(f"{memberlist.code}_{title}_TN_Kosten", 'members/seminar_report.tex', context) + return render_tex(f"{memberlist.code}_{title}_TN_Kosten", + 'members/seminar_report.tex', context, + date=memberlist.date) def seminar_report(self, request, memberlist): if not self.may_view_excursion(request, memberlist): @@ -1198,7 +1207,9 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): context = memberlist.sjr_application_fields() title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name - return fill_pdf_form(f"{memberlist.code}_{title}_SJR_Antrag", 'members/sjr_template.pdf', context, selected_attachments) + return fill_pdf_form(f"{memberlist.code}_{title}_SJR_Antrag", 'members/sjr_template.pdf', context, + selected_attachments, + date=memberlist.date) return self.render_sjr_options(request, memberlist, GenerateSjrForm(attachments=attachments)) diff --git a/jdav_web/members/excel.py b/jdav_web/members/excel.py index 9d8ac9e..20bbbc1 100644 --- a/jdav_web/members/excel.py +++ b/jdav_web/members/excel.py @@ -127,7 +127,8 @@ def generate_ljp_vbk(excursion): if hasattr(excursion, 'statement'): sheet['Q19'] = f"{excursion.statement.total_theoretic}" - name = normalize_filename(f"{excursion.code}_{title}_LJP_V-BK_3.{excursion.ljpproposal.category}") + name = normalize_filename(f"{excursion.code}_{title}_LJP_V-BK_3.{excursion.ljpproposal.category}", + date=excursion.date) filename = name + ".xlsx" workbook.save(media_path(filename)) return filename diff --git a/jdav_web/members/pdf.py b/jdav_web/members/pdf.py index c0291b1..fdd82f0 100644 --- a/jdav_web/members/pdf.py +++ b/jdav_web/members/pdf.py @@ -20,8 +20,8 @@ def serve_pdf(filename_pdf): return serve_media(filename_pdf, 'application/pdf') -def generate_tex(name, template_path, context): - filename = normalize_filename(name) +def generate_tex(name, template_path, context, date=None): + filename = normalize_filename(name, date=date) filename_tex = filename + '.tex' tmpl = get_template(template_path) @@ -34,8 +34,8 @@ def generate_tex(name, template_path, context): return filename -def render_docx(name, template_path, context, save_only=False): - filename = generate_tex(name, template_path, context) +def render_docx(name, template_path, context, date=None, save_only=False): + filename = generate_tex(name, template_path, context, date=date) filename_tex = filename + '.tex' filename_docx = filename + '.docx' oldwd = os.getcwd() @@ -48,8 +48,8 @@ def render_docx(name, template_path, context, save_only=False): return serve_media(filename_docx, 'application/docx') -def render_tex(name, template_path, context, save_only=False): - filename = generate_tex(name, template_path, context) +def render_tex(name, template_path, context, date=None, save_only=False): + filename = generate_tex(name, template_path, context, date=date) filename_tex = filename + '.tex' filename_pdf = filename + '.pdf' # compile using pdflatex @@ -99,8 +99,8 @@ def scale_pdf_to_a4(pdf): return scaled_pdf -def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False): - filename = normalize_filename(name) +def fill_pdf_form(name, template_path, fields, attachments=[], date=None, save_only=False): + filename = normalize_filename(name, date=date) filename_pdf = filename + '.pdf' path = find_template(template_path) @@ -140,13 +140,13 @@ def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False): return serve_pdf(filename_pdf) -def merge_pdfs(name, filenames, save_only=False): +def merge_pdfs(name, filenames, date=None, save_only=False): merger = PdfWriter() for pdf in filenames: merger.append(media_path(pdf)) - filename = normalize_filename(name) + filename = normalize_filename(name, date=date) filename_pdf = filename + ".pdf" merger.write(media_path(filename_pdf)) merger.close() diff --git a/jdav_web/utils.py b/jdav_web/utils.py index b6704b9..32db40b 100644 --- a/jdav_web/utils.py +++ b/jdav_web/utils.py @@ -72,9 +72,11 @@ def normalize_name(raw, nospaces=True, noumlaut=True): return unicodedata.normalize('NFKD', raw).encode('ascii', 'ignore').decode('ascii') -def normalize_filename(filename, append_date=True): - if append_date: - filename = filename + "_" + datetime.today().strftime("%d_%m_%Y") +def normalize_filename(filename, append_date=True, date=None): + if append_date and not date: + date = datetime.today() + if date: + filename = filename + "_" + date.strftime("%d_%m_%Y") filename = filename.replace(' ', '_').replace('&', '').replace('/', '_') # drop umlauts, accents etc. return unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore').decode()