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