Hallo zusammen,
ich hatte mir gewünscht folgende Struktur dynamisch über Tags zu erreichen:
Topthema/Branche_Correspodent/Document_Type/Datum_Titel.pdf
Dabei habe ich tags die mit “top_” oder “br_” beginnen vergeben. In dem Speicherpfad steckt dann folgendes Jinja:
{# ----------------------------------------------------------- #
# Paperless-ngx Ablagestruktur
# Struktur: <Topthema>/<Branche>_<Korrespondent>/<Dokumenttyp>/<Datum_Titel>.pdf
# ------------------------------------------------------------ #}
{# 1️⃣ Topthema bestimmen #}
{% set top = 'Allgemein' %}
{% for tag in tag_name_list %}
{% if tag[:4] == 'top_' %}
{% set top = tag[4:] %}
{% endif %}
{% endfor %}
{# 2️⃣ Branche bestimmen #}
{% set branch = '' %}
{% for tag in tag_name_list %}
{% if tag[:3] == 'br_' %}
{% set branch = tag[3:] %}
{% endif %}
{% endfor %}
{# 3️⃣ Korrespondent bereinigen #}
{% set corr_raw = correspondent | default('') | trim %}
{% if corr_raw %}
{% set corr = corr_raw
| replace(' ', '_')
| replace('/', '_')
| replace('\\', '_')
| replace(':', '-')
| replace('*', '')
| replace('?', '')
| replace('"', '')
| replace('<', '')
| replace('>', '')
| replace('|', '')
| replace('ä', 'ae')
| replace('ö', 'oe')
| replace('ü', 'ue')
| replace('Ä', 'Ae')
| replace('Ö', 'Oe')
| replace('Ü', 'Ue')
| replace('ß', 'ss')
%}
{% else %}
{% set corr = '' %}
{% endif %}
{# 4️⃣ Dokumenttyp bestimmen #}
{% set doctype = document_type | default('Sonstiges') | trim %}
{% if doctype == '' %}
{% set doctype = 'Sonstiges' %}
{% endif %}
{# 5️⃣ Pfad zusammensetzen #}
{% set path = top %}
{% if branch and corr %}
{% set path = path ~ '/' ~ branch ~ '_' ~ corr %}
{% elif branch %}
{% set path = path ~ '/' ~ branch %}
{% elif corr %}
{% set path = path ~ '/Sonstiges_' ~ corr %}
{% else %}
{% set path = path ~ '/Sonstiges' %}
{% endif %}
{% set path = path ~ '/' ~ (doctype | capitalize) %}
{# 6️⃣ Titel bereinigen & kürzen #}
{% set title_raw = title | default('Dokument') | trim %}
{% set title_clean = title_raw
| replace('/', '_')
| replace('\\', '_')
| replace(':', '-')
| replace('*', '')
| replace('?', '')
| replace('"', '')
| replace('<', '')
| replace('>', '')
| replace('|', '')
| replace('ä', 'ae')
| replace('ö', 'oe')
| replace('ü', 'ue')
| replace('Ä', 'Ae')
| replace('Ö', 'Oe')
| replace('Ü', 'Ue')
| replace('ß', 'ss')
%}
{# Mehrfache Unterstriche manuell reduzieren #}
{% set title_fixed = '' %}
{% set last_char = '' %}
{% for ch in title_clean %}
{% if not (ch == '_' and last_char == '_') %}
{% set title_fixed = title_fixed ~ ch %}
{% endif %}
{% set last_char = ch %}
{% endfor %}
{# Titel auf max. 80 Zeichen kürzen #}
{% if title_fixed | length > 80 %}
{% set title_fixed = title_fixed[:80] %}
{% endif %}
{# 7️⃣ Dateiname mit Datum erstellen #}
{% set filename = created_year ~ '-' ~ "%02d"|format(created_month|int) ~ '-' ~ "%02d"|format(created_day|int) ~ '_' ~ title_fixed %}
{{ path }}/{{ filename }}
Noch ein bisschen Zeichnepflege und Fehlerkorrektur habe ich dazwischen gepackt…
Leider funktioniert das so nicht, da er die Tags mit “top_” oder “br_” ignoriert. Ich habe die Dokumentation von Paperless und auch Jinja allgemein gelesen und komme nicht auf den Fehler. Habe auch bereits einige Befehle durch andere ersetzt, um sandbox-spezifika von paperless zu testen, aber leider ohne Erfolg.
Wenn es funktioniert könnte die Struktur dann so aussehen:
top_Haus/
│ ├─ br_Wohnen_HandwerkerMeier/
│ │ ├─ Rechnung/
│ │ └─ Angebot/
│ └─ br_Energie_Eon/
│ ├─ Strom/
│ └─ Gas/
│
top_Allgemein/
│ └─ br_Telekom_Vodafone/
│ ├─ Vertrag/
│ └─ Rechnung/
Wobei ich den tagnamen noch vom präfix befreien wollen würde.
Hat einer von euch eine Idee?
Beste Grüße