modified: routes/journal_routes.py
This commit is contained in:
@@ -8,6 +8,7 @@ import io
|
||||
import json
|
||||
import calendar
|
||||
from datetime import date, datetime, timedelta
|
||||
from urllib.parse import urlencode
|
||||
|
||||
from flask import (
|
||||
Blueprint, render_template, request, redirect, url_for,
|
||||
@@ -439,9 +440,12 @@ def month():
|
||||
|
||||
|
||||
def _csv_response(title: str, filename: str, rows: list[dict]) -> Response:
|
||||
"""Baut eine CSV-Datei als HTTP-Antwort zusammen."""
|
||||
"""Baut eine CSV-Datei als HTTP-Antwort zusammen.
|
||||
|
||||
Trennzeichen: Semikolon (deutsches Excel erwartet ';' statt Komma).
|
||||
"""
|
||||
output = io.StringIO()
|
||||
writer = csv.writer(output)
|
||||
writer = csv.writer(output, delimiter=";")
|
||||
writer.writerow([
|
||||
"Datum", "Wochentag", "Bullet", "Typ", "Notiz", "Priorität",
|
||||
"Status", "Verweise",
|
||||
@@ -534,19 +538,13 @@ def report():
|
||||
today = date.today()
|
||||
|
||||
# Für Export-Links: aktuelle Filter als Query-String aufbauen
|
||||
# (urlencode erhält wiederholte Parameter wie wd=0&wd=1 – dict() würde sie kollabieren)
|
||||
def _qs(fmt):
|
||||
params = [
|
||||
("range", filters["range_type"]),
|
||||
("format", fmt),
|
||||
]
|
||||
for wd in filters["weekdays"]:
|
||||
params.append(("wd", str(wd)))
|
||||
for b in filters["bullets"]:
|
||||
params.append(("bullet", b))
|
||||
for s in filters["statuses"]:
|
||||
params.append(("status", s))
|
||||
for p in filters["priorities"]:
|
||||
params.append(("priority", str(p)))
|
||||
params = [("range", filters["range_type"]), ("format", fmt)]
|
||||
params += [("wd", str(wd)) for wd in filters["weekdays"]]
|
||||
params += [("bullet", b) for b in filters["bullets"]]
|
||||
params += [("status", s) for s in filters["statuses"]]
|
||||
params += [("priority", str(p)) for p in filters["priorities"]]
|
||||
if filters["range_type"] == "month":
|
||||
params.append(("month", filters["start"].strftime("%Y-%m")))
|
||||
elif filters["range_type"] == "custom":
|
||||
@@ -554,7 +552,7 @@ def report():
|
||||
params.append(("to", filters["end"].strftime("%Y-%m-%d")))
|
||||
else:
|
||||
params.append(("week", filters["start"].strftime("%G-W%V")))
|
||||
return url_for("journal.report_export", **dict(params))
|
||||
return url_for("journal.report_export") + "?" + urlencode(params)
|
||||
|
||||
export_csv_url = _qs("csv")
|
||||
export_pdf_url = _qs("pdf")
|
||||
@@ -608,9 +606,9 @@ def report_export():
|
||||
},
|
||||
)
|
||||
|
||||
# CSV
|
||||
# CSV – Semikolon als Trennzeichen (deutsches Excel erwartet ';')
|
||||
output = io.StringIO()
|
||||
writer = csv.writer(output)
|
||||
writer = csv.writer(output, delimiter=";")
|
||||
writer.writerow([
|
||||
"Datum", "Wochentag", "Bullet", "Typ", "Notiz", "Priorität",
|
||||
"Status", "Verweise",
|
||||
|
||||
Reference in New Issue
Block a user