So sehen meine best practices für Speicherpfade derzeit aus. Das heisst nicht, dass das der best practice ist, auch nicht dass es ein best practice ist, sondern es ist mein best practice.
Ich habe Top-Kategorien, wo meine Dokumente klassifiziert abgelegt werden. So zB Finanzen, Arbeit, Steuern und noch einige andere. Damit ich deren Reihenfolge selbst festlegen kann habe ich diese mit einer zweistelligen Nummer präfixiert. Sieht am Anfang also so aus:
05_Finanzen/
Als nächste Stufe habe ich mir das Jahr des Rechnungsdatums hergenommen. Dann kann ich schneller aktuelle Dokumente auch im Filesystem wiederfinden.
05_Finanzen/
{{ created_year }}/
Und ja, man kann durchaus den Kram in mehreren Zeilen schreiben. Wird etwas übersichtlicher, man will ja noch einiger Zeit noch verstehen, was man da gemacht hat. Und man kann das Fenster für die Eingabe rechts unten etwas größer ziehen.
Von nun geht es nur noch um den Dateinamen, eine stärkere Ordnerstruktur habe ich nicht.
Ich möchte im Dateinamen jetzt das Rechnungsdatum stehen haben, und zwar in einem Format, welches nicht von der Landes/Regionen Einstellung abhängig ist. Ergo setze ich es mir zusammen:
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
Die einzelnen Komponenten trenne ich dann mit dem Unterstrich ab. Als nächstes kommt dann der Korrespondent dran.
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
{{ correspondent }}_
Danach der Dokumenttyp.
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
{{ correspondent }}_
{{ document_type }}_
Und den Titel möchte ich auch noch im Dateinamen haben.
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
{{ correspondent }}_
{{ document_type }}_
{{ title }}
Und das wars jetzt eigentlich schon. Nichts besonders. Konnte man vor der Version 2.13 auch schon machen.
Allerdings habe ich meine Kontoauszüge unter der Kategorie Finanzen abgelegt. Und da ich mehrere Konten habe soll die Kontonummer bitte auch im Dateinamen erscheinen. Vor der Version 2.13 hatte ich dazu einen Standardfinanzenpfad, und dann für jedes Konto einen speziellen Pfad mit der Kontonummer. Das war natürlich unschön und fehlerträchtig, weil man ohne weiteres dem Konto 123 den Pfad für das Konto 456 zuordnen konnte. Den Workaround, einen Dokumenttyp für jedes Konto anzulegen, wo die Kontonummer im Typ verbandelt war, mochte ich nicht.
Jetzt kann man das aber automatisiert in einem Speicherpfad behandeln. Wenn also der Dokumenttyp „Kontoauszug“ ist, und des benutzerdefinierte Feld „Konto“ dem Dokument hinzugefügt worden ist, dann soll bitte auch die Kontonummer im Dateinamen auftauchen. Das Feld Konto füge ich übrigens automatisiert per Arbeitsablauf hinzu. Nur befüllen muss ich es dann noch korrekt. So sieht dann dann umgesetzt aus:
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
{{ correspondent }}_
{{ document_type }}_
{% if document_type == "Kontoauszug" and "Konto" in custom_fields %}
{{ custom_fields.Konto.value }}_
{% endif %}
{{ title }}
Das kann man jetzt 1:1 lesen: wenn der Typ „Kontoauszug“ ist und „das benutzerdefinierte Feld zugewiesen“ ist, dann gib den Wert des Feldes zwischen dem Typ und dem Titel aus.
Eigentlich war ich jetzt fertig. Aber ich bin kein Freund von Leerzeichen in Dateinamen, auch wenn das ein gültiges Zeichen ist. Bisher habe ich daher brav im Korrespondenten, Typ, Titel und benutzerdefinierten Feldern den Unterstrich benutzt statt eines Leerzeichens. Damit gibt es keine Leerzeichen im Dateinamen mehr, aber auf der PLNGX Oberfläche sieht das aus, ist zusätzlicher Aufwand und und und. Aber kann man jetzt auch automatisieren, man kann Funktionen an das Feld anhängen, im Jinja Jargon Filter genannt. Ich ersetze also Leerzeichen in den Feldern durch den Unterstrich. Das sieht dann so aus, die Funktion wird mit dem Pipe Zeichen „|“ an das Feld, was gefiltert werden soll, angehängt.
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
{{ correspondent|replace(" ", "_") }}_
{{ document_type|replace(" ", "_") }}_
{% if document_type == "Kontoauszug" and "Konto" in custom_fields %}
{{ custom_fields.Konto.value|replace(" ", "_") }}_
{% endif %}
{{ title|replace(" ", "_") }}
Jetzt sind alle Leerzeichen verschwunden und durch Unterstrich ersetzt. Das mit den Leerzeichen im Dateinamen ist übrigens meine ganz persönliche Marotte. Wem das egal ist läßt das |replace() halt weg. Mit replace gibt es jetzt aber wieder ein neues Problem, denn es ist nicht mehr so leicht erkennbar wo der Korrespondent aufhört und wo der Typ anfängt. Denn der Untersticht trennt die Felder ja jetzt nicht nur optisch ab, sondern ersetzt auch noch das Leerzeichen. Da sieht man dann schwerer, was der Korrespondent ist und was der Typ. Kann man aber auch fixen, ich gruppiere die einzelnen Felder einfach indem ich sie in runde Klammern stecke. Die kommen bei mir in den Feldern in der Regel nicht vor. Im folgenden Codebeispiel muss man allerdings jetzt genau hinschauen, was runde und was geschweifte Klammern sind.
05_Finanzen/
{{ created_year }}/
{{ created_year }}-{{ created_month }}-{{ created_day }}_
({{ correspondent|replace(" ", "_") }})_
({{ document_type|replace(" ", "_") }})_
{% if document_type == "Kontoauszug" and "Konto" in custom_fields %}
({{ custom_fields.Konto.value|replace(" ", "_") }})_
{% endif %}
({{ title|replace(" ", "_") }})
Wenn ich jetzt also den Korrespondenten Bank um die Ecke
habe, mit dem Typ Kontoauszug
, dem Konto 123
und dem Titel Girokonto
dann kommt folgender Pfad dabei heraus.
05_Finanzen/2024/2024-10-31_(Bank_um_die_Ecke)_(Kontoauszug)_(123)_(Girokonto)
Ist es dagegen eine Bescheinigung
, dann sieht es ganz automatisch so aus:
05_Finanzen/2024/2024-10-31_(Bank_um_die_Ecke)_(Bescheinigung)_(Kapitalertragssteuer)
Die letzten Schritte habe ich drin gelassen, da kann man dann sehen, was jetzt so alles möglich ist. Muss ja nicht jeder haben.
Viel Spaß beim ausprobieren und anpassen.