open_workshop/open_workshop_dokuwiki
2025-12-27 20:37:02 +01:00
..
data DokuWiki Integration: wiki_doku_id aus Name+Modell, zentraler Namespace konfigurierbar 2025-12-23 14:48:44 +01:00
models DokuWiki: Reset-Funktion für Wiki-Sync-Status 2025-12-27 20:25:17 +01:00
security feat(dokuwiki): Add partner fields, editable smileys, category icon, and mass sync wizard 2025-12-14 20:55:21 +01:00
views feat(dokuwiki): Add partner fields, editable smileys, category icon, and mass sync wizard 2025-12-14 20:55:21 +01:00
wizard DokuWiki: Reset-Funktion für Wiki-Sync-Status 2025-12-27 20:25:17 +01:00
__init__.py feat(dokuwiki): Flexible overview table with configurable columns 2025-12-20 12:49:58 +01:00
__manifest__.py Update Open Workshop Dokuwiki Version 2025-12-27 20:37:02 +01:00
hooks.py feat(dokuwiki): Flexible overview table with configurable columns 2025-12-20 12:49:58 +01:00
README.md DokuWiki: Übersichtstabelle in 'uebersicht' statt 'start' 2025-12-27 17:01:55 +01:00

Equipment Übersichtstabelle - Setup

Voraussetzungen

Das datatables Plugin muss in DokuWiki installiert sein:

# Als DokuWiki Admin: Administration → Erweiterungsverwaltung
# Suche: "datatables"
# Installiere: "DataTables Plugin" von Matthias Schulte

Das include Plugin muss in DokuWiki installiert sein (für Einbindung von Odoo-Status-Seiten):

# Als DokuWiki Admin: Administration → Erweiterungsverwaltung
# Suche: "include"
# Installiere: "Include Plugin" - sollte standardmäßig vorhanden sein

Setup-Schritte

1. Odoo Konfiguration

Die Übersichtstabelle wird vollständig aus Odoo heraus konfiguriert - kein DokuWiki Template nötig!

Gehe zu: Einstellungen → Technisch → Parameter → Systemparameter

Standardwerte (automatisch gesetzt beim Modul-Install):

# Basis-Namespace für Equipment-Dokumentation (konfigurierbar)
dokuwiki.equipment_namespace = werkstatt:ausstattung

# Seiten-ID wo die Übersicht erstellt wird (konfigurierbar)
dokuwiki.overview_page_id = werkstatt:ausstattung:uebersicht

# Titel der Übersichtsseite
dokuwiki.overview_title = Geräte & Maschinen - Übersicht

# Spaltenüberschriften (Pipe-separiert)
dokuwiki.overview_columns = Status|Sicherheits-Kategorie|Hersteller|Bemerkung|Typ|Bild|Standort|Dokumentation

# Spaltendaten mit Platzhaltern (Pipe-separiert)
dokuwiki.overview_column_data = {status_smiley}|{ows_machine_id.category_icon}|{partner_id}|{note}|{model}|{image}|{ows_machine_id.location}|{wiki_doku_link}

2. Erste Synchronisation

  1. In Odoo: Wartung → Konfiguration → Wiki-Synchronisation
  2. Wähle: "Übersichtstabelle aktualisieren"
  3. Klicke: "Synchronisieren"

Die Übersichtsseite wird erstellt unter: werkstatt:ausstattung:uebersicht (konfigurierbar über Systemparameter)

Features

DataTables Funktionen

  • Sortieren nach allen Spalten (Klick auf Header)
  • Filter/Suche über alle Felder
  • Pagination bei vielen Einträgen
  • Responsive Design

Flexible Spalten

  • Spalten in Odoo konfigurierbar (kein DokuWiki Template)
  • Alle Platzhalter verfügbar (siehe unten)
  • Spalten hinzufügen/entfernen ohne Code-Änderung
  • Änderungen sofort beim nächsten Sync wirksam

Standard-Spalten

Spalte Platzhalter Ausgabe
Status {status_smiley} 😊 / 😐 / ☹️
Sicherheits-Kategorie {ows_machine_id.category_icon} 🟢 / 🟡 / 🔴
Hersteller {partner_id} BOSCH, Festool, ...
Bemerkung {note} Notizen
Typ {model} Modellbezeichnung
Bild {image} Thumbnail 100px
Standort {ows_machine_id.location} Regal A3, ...
Dokumentation {wiki_doku_link} Link zur Detail-Seite

Spalten anpassen

Beispiel 1: Seriennummer hinzufügen

# Spaltenüberschriften erweitern
dokuwiki.overview_columns = Status|Typ|Seriennummer|Hersteller|Standort|Dokumentation

# Spaltendaten erweitern
dokuwiki.overview_column_data = {status_smiley}|{model}|{serial_no}|{partner_id}|{ows_machine_id.location}|{wiki_doku_link}

Beispiel 2: Minimale Ansicht

dokuwiki.overview_columns = Name|Status|Kategorie|Dokumentation
dokuwiki.overview_column_data = {name}|{status_smiley}|{ows_machine_id.category_icon}|{wiki_doku_link}

Beispiel 3: Detaillierte Ansicht mit Kosten

dokuwiki.overview_columns = Name|Hersteller|Modell|Seriennummer|Kosten|Garantie|Standort|Kategorie
dokuwiki.overview_column_data = {name}|{partner_id}|{model}|{serial_no}|{cost}|{warranty_date}|{location}|{ows_machine_id.category_icon}

Beispiel 4: Mit Tags

dokuwiki.overview_columns = Status|Name|Typ|Tags|Standort|Dokumentation
dokuwiki.overview_column_data = {status_smiley}|{name}|{model}|{tags_list}|{location}|{wiki_doku_link}

Wichtig: Anzahl der Pipes muss übereinstimmen!

  • 3 Pipes = 4 Spalten
  • Spalten und Daten müssen gleiche Anzahl haben

Performance

  • Schneller Sync: Keine DB-Iteration über alle Einträge
  • Generiert nur eine Seite (statt 156 einzelne)
  • DokuWiki cached die Seite automatisch
  • Spalten-Änderung ohne Code-Deploy

Troubleshooting

DataTables funktioniert nicht

→ Installiere DataTables Plugin in DokuWiki

Bilder werden nicht angezeigt

→ Prüfe ob Equipment image_1920 Feld gesetzt hat → Bilder müssen zuerst via "Alle Equipment" Sync hochgeladen werden

Equipment fehlen in Tabelle

→ Nur Equipment mit gesetztem ows_area_id werden angezeigt → Prüfe Filter in action_sync_overview_table()

Spalten werden nicht korrekt dargestellt

→ Prüfe ob Anzahl Pipes in overview_columns und overview_column_data übereinstimmt → Beispiel: 3 Pipes = 4 Spalten

Platzhalter wird nicht ersetzt (z.B. {status} bleibt stehen)

→ Prüfe Schreibweise (case-sensitive!) → Siehe Liste der verfügbaren Platzhalter unten → Bei ows.machine Feldern: {ows_machine_id.feldname} verwenden

Workflow

┌─────────────────┐
│ Odoo Systempar. │
│ - Spalten       │
│ - Platzhalter   │
└────────┬────────┘
         │
         ▼
┌─────────────────────────┐
│ Odoo Equipment          │
│ (156 Einträge)          │
└────────┬────────────────┘
         │
         ▼
┌─────────────────────────┐
│ _generate_overview_     │
│ table_row()             │  ← Pro Equipment eine Zeile
│ (Platzhalter ersetzen)  │     mit Platzhalter-Engine
└────────┬────────────────┘
         │ 156 Zeilen
         ▼
┌─────────────────────────┐
│ Seite zusammenbauen     │
│ - Titel                 │
│ - DataTables Header     │
│ - Zeilen                │
│ - Footer                │
└────────┬────────────────┘
         │
         ▼
┌─────────────────────────┐
│ Seite speichern         │
│ werkstatt:ausstattung:  │
│ uebersicht              │
└─────────────────────────┘

Automatische Updates

Die Übersichtstabelle kann optional automatisch bei Equipment-Änderungen aktualisiert werden.

Manueller Sync (empfohlen)

Manueller Sync empfohlen für:

  • Nach Massen-Importen
  • Einmal täglich/wöchentlich
  • Bei strukturellen Änderungen (neue Bereiche, etc.)

Vorteil: Performanter, keine zusätzliche Last bei jeder Equipment-Änderung

Automatischer Sync bei Equipment-Änderungen

Was passiert beim Speichern eines Equipment?

  1. Equipment-Detailseite wird immer aktualisiert wenn:

    • Eines der überwachten Felder geändert wurde (siehe unten)
    • wiki_auto_sync für das Equipment aktiviert ist (Standard: True)
    • Equipment bereits synchronisiert wurde (wiki_synced = True)
  2. Übersichtstabelle wird zusätzlich aktualisiert wenn:

    • Alle Bedingungen von (1) erfüllt sind UND
    • Systemparameter dokuwiki.auto_update_overview_table = True gesetzt ist

Überwachte Felder (lösen Sync aus):

  • name, serial_no, ows_area_id, category_id, status_id
  • model, partner_id, location, note, image_1920, tag_ids

Aktivierung Übersichtstabellen-Sync:

# In Odoo: Einstellungen → Technisch → Parameter → Systemparameter
dokuwiki.auto_update_overview_table = True

Achtung:

  • Bei vielen gleichzeitigen Equipment-Änderungen kann dies Performance-Probleme verursachen!
  • Die komplette Übersichtstabelle wird bei jeder Änderung neu generiert (ca. 156 Zeilen)

Cronjob (Alternative)

# In Odoo: Einstellungen → Technisch → Automatisierung → Geplante Aktionen

Name: Wiki Übersichtstabelle Update
Modell: maintenance.equipment
Aktion: action_sync_overview_table()
Intervall: Täglich um 02:00 Uhr

Verfügbare Platzhalter

Alle Platzhalter aus dem Detail-Template sind verfügbar!

Basis-Felder (maintenance.equipment)

  • {name} - Equipment-Name
  • {serial_no} - Seriennummer
  • {model} - Modell
  • {category} - Kategoriename
  • {status} - Status (aus status_id)
  • {status_smiley} - Status als Smiley (aus status_id.smiley Feld, z.B. 😊 oder ☹️)
  • {location} - Standort
  • {ows_area} - Bereichsname
  • {assign_date} - Zuweisungsdatum (formatiert)
  • {cost} - Kosten
  • {warranty_date} - Garantiedatum (formatiert)
  • {note} - Notizen
  • {partner_id} - Lieferant (Name)
  • {partner_ref} - Lieferanten-Referenz

Tags (falls maintenance_equipment_tags installiert)

  • {tags} - Komma-separierte Liste aller Tags (z.B. "Holz, CNC, Einweisung erforderlich")
  • {tags_list} - DokuWiki Bullet-Liste mit Zeilenumbrüchen (ideal für Tabellenzellen)
  • {tags_count} - Anzahl der zugewiesenen Tags

Spezial-Felder

  • {view_type} - "Bereich" oder "Einsatzzweck"
  • {view_name} - Name des Bereichs/Einsatzzwecks
  • {wiki_doku_page} - ID der zentralen Doku-Seite
  • {wiki_doku_link} - Fertiger Link zur zentralen Doku-Seite
  • {odoo_link} - Fertiger Link zur Odoo Equipment-Seite
  • {odoo_url} - URL zur Odoo Equipment-Seite (ohne Link-Markup)
  • {sync_datetime} - Aktuelles Datum/Zeit
  • {image} - Equipment-Bild (100px Breite) - Format: {{:media_id?100}}
  • {image_large} - Equipment-Bild (Originalgröße) - Format: {{:media_id}}
  • {image_id} - Media-ID des Bildes (z.B. werkstatt:ausruestung:media:sabako-laser.jpg)

ows.machine Felder (falls verknüpft)

  • {ows_machine_id.name} - Name
  • {ows_machine_id.model} - Modell
  • {ows_machine_id.serial_no} - Seriennummer
  • {ows_machine_id.location} - Standort
  • {ows_machine_id.note} - Notizen
  • {ows_machine_id.category} - Sicherheitskategorie (red/yellow/green)
  • {ows_machine_id.category_icon} - Kategorie-Icon als Emoji (🔴/🟡/🟢)

Tipps für Platzhalter

  • Case-sensitive: {Name} funktioniert nicht, nur {name}
  • Pipe als Trenner: Zwischen Spalten | verwenden
  • Leere Werte: Werden automatisch durch - ersetzt
  • Links: {wiki_doku_link} und {odoo_link} enthalten bereits DokuWiki Link-Syntax
  • Bilder: {image} ist bereits formatiert mit {{:...?100}}
  • ows.machine: Immer mit Präfix ows_machine_id. (z.B. {ows_machine_id.location})

Beispiel-Konfigurationen

Minimalistische Ansicht

Spalten: Name|Status|Kategorie
Daten:   {name}|{status_smiley}|{ows_machine_id.category_icon}

Standard-Ansicht (Default)

Spalten: Status|Sicherheits-Kategorie|Hersteller|Bemerkung|Typ|Bild|Standort|Dokumentation
Daten:   {status_smiley}|{ows_machine_id.category_icon}|{partner_id}|{note}|{model}|{image}|{ows_machine_id.location}|{wiki_doku_link}

Vollständige Ansicht

Spalten: Name|Status|Kategorie|Hersteller|Modell|S/N|Kosten|Garantie|Standort|Bereich|Bild|Doku
Daten:   {name}|{status_smiley}|{ows_machine_id.category_icon}|{partner_id}|{model}|{serial_no}|{cost}|{warranty_date}|{location}|{ows_area}|{image}|{wiki_doku_link}

Mit Tags

Spalten: Name|Status|Tags|Hersteller|Standort|Doku
Daten:   {name}|{status_smiley}|{tags_list}|{partner_id}|{location}|{wiki_doku_link}

Best Practices: DokuWiki Seitenstruktur

Erweiterbare Dokumentation ohne Umbenennung

Problem

Benutzer möchten zu Equipment-Seiten eigene Unterseiten hinzufügen, ohne die von Odoo generierten Seiten umbenennen zu müssen.

Lösung: Parallele Seite + Namespace

DokuWiki erlaubt gleichzeitig eine Seite und einen gleichnamigen Namespace:

  • Datei: equipment.txt (von Odoo generiert)
  • Verzeichnis: equipment/ (für Benutzer-Unterseiten)

Die Seite equipment.txt hat Vorrang und bleibt die Haupt-Equipment-Seite!

Empfohlene Struktur

werkstatt/
└── ausstattung/
    ├── uebersicht                             # VON ODOO GENERIERT: Übersichtstabelle
    ├── odoo-status/                           # VON ODOO GENERIERT: Nur-Lese Seiten (nur odoo.odoo schreibt)
    │   ├── c_template.txt                     # Template für Equipment-Status-Seiten
    │   ├── analog-oscilloscope-hm303-6.txt    # Status-Seite für include-Plugin
    │   ├── cnc-fraese-xyz.txt                 # Status-Seite für include-Plugin
    │   └── ...
    └── {Bereich Name}/                        # VON BENUTZER ERSTELLT: Namespace wird von Odoo festgelegt
        ├── analog-oscilloscope-hm303-6.txt    # Benutzer erstellt diese Seite manuell (Klick auf Link in Übersicht)
        ├── analog-oscilloscope-hm303-6/       # Benutzer-Unterseiten (optional)
        │   ├── kalibrierung.txt
        │   ├── messungen.txt
        │   └── bilder/
        │       └── oszillogramme.txt
        ├── cnc-fraese-xyz.txt                 # Benutzer erstellt diese Seite manuell (Klick auf Link in Übersicht)
        └── cnc-fraese-xyz/                    # Benutzer-Unterseiten (optional)
            ├── programme.txt
            └── werkzeuge.txt

Wichtig:

  • Odoo erstellt NUR: start (Übersichtstabelle) und odoo-status/*.txt (Status-Seiten)
  • Odoo erstellt NIEMALS: Seiten in {Bereich Name}/ - diese werden ausschließlich von Benutzern erstellt
  • Workflow: Übersichtstabelle verlinkt auf {Bereich Name}/equipment-name.txt → Link ist rot (Seite existiert nicht) → Benutzer klickt darauf → DokuWiki bietet "Seite erstellen" an → Benutzer fügt {{page>odoo-status:equipment-name}} ein
  • Berechtigungen: odoo-status/ Namespace hat spezielle Berechtigungen (nur odoo.odoo kann schreiben)

Wichtige Regeln

DO: Unterverzeichnis OHNE start.txt

equipment/
├── subpage1.txt
├── subpage2.txt
└── weitere/
    └── details.txt

Vorteile:

  • Breadcrumb zeigt: Home » Werkstatt » Ausrüstung » Equipment » Subpage1
  • Keine Duplikation oder Verwirrung
  • Equipment-Hauptseite bleibt equipment.txt

DON'T: Unterverzeichnis MIT start.txt

equipment/
├── start.txt        # ❌ NICHT erstellen!
├── subpage1.txt
└── subpage2.txt

Probleme:

  • Breadcrumb wird verwirrend: Equipment könnte auf zwei Seiten verweisen
  • equipment und equipment:start zeigen unterschiedliche Inhalte
  • Benutzer wissen nicht, welche Seite die "richtige" ist

Include-Plugin für Odoo-Status einbinden

Wichtig: Diese Seite wird NICHT von Odoo erstellt! Der Benutzer erstellt sie manuell nach Klick auf den Link in der Übersichtstabelle.

In der Benutzer-Dokumentationsseite wird der Odoo-generierte Status eingebunden:

===== Analog Oscilloscope HM303-6 =====

==== Odoo Status ====

{{page>werkstatt:ausstattung:odoo-status:analog-oscilloscope-hm303-6}}

==== Eigene Dokumentation ====

Hier kann der Benutzer seine eigenen Inhalte hinzufügen...

==== Weitere Dokumentation ====

<catlist .:analog-oscilloscope-hm303-6 -noNSInBold -sortByTitle>

Syntax-Erklärung:

  • {{page>...}} → Bindet Odoo-Status-Seite ein (nur lesbar für Benutzer)
  • .:namespace → Relativer Namespace für catlist (Punkt + Doppelpunkt!)
  • -noNSInBold → Namespace-Präfix nicht fett darstellen
  • -sortByTitle → Alphabetisch sortieren
  • -exclude:{ns1 ns2} → Optional: Namespaces ausschließen

Ergebnis:

  • Odoo-Status wird direkt in Benutzer-Seite eingebettet
  • Benutzer sehen aktuelle Odoo-Daten ohne direkt auf odoo-status zuzugreifen
  • Catlist zeigt alle Benutzer-Unterseiten im equipment/ Verzeichnis
  • Automatisch aktualisiert wenn Benutzer neue Seiten erstellen
  • Kein manuelles Pflegen von Links nötig

Workflow

  1. Odoo synchronisiert → Erstellt/aktualisiert start (Übersichtstabelle) und odoo-status/equipment.txt (Status-Seiten)
  2. Benutzer sieht Übersichtstabelle → Equipment sind verlinkt, aber Links sind rot (Seiten existieren nicht)
  3. Benutzer klickt roten Link → DokuWiki zeigt "Diese Seite existiert noch nicht - erstellen?"
  4. Benutzer erstellt Seite → Fügt {{page>werkstatt:ausstattung:odoo-status:equipment-name}} ein und eigene Inhalte
  5. Benutzer erstellt optional Unterseiten → Erstellt Verzeichnis equipment/ für weitere Dokumentation
  6. Catlist zeigt automatisch Unterseiten → Wenn in Hauptseite eingebunden
  7. Keine Konflikte → Odoo schreibt NIEMALS in {Bereich Name}/, nur in start und odoo-status/

Vorteile dieser Struktur

  • Klare Trennung: odoo-status/ (nur Odoo schreibt) vs. {Bereich Name}/ (nur Benutzer schreiben)
  • Berechtigungsschutz: Benutzer können Odoo-Daten nicht versehentlich überschreiben
  • Keine Überschreibgefahr: Odoo erstellt niemals Seiten in Benutzer-Namespaces
  • Einfaches Einbinden: Ein {{page>...}} in Benutzer-Seite, fertig
  • Keine Namenskollisionen: Odoo und Benutzer haben komplett getrennte Namespaces
  • Benutzer entscheiden: Nur wer dokumentieren will, erstellt eine Seite (über Link in Übersichtstabelle)
  • Flexibel erweiterbar: Benutzer können beliebig viele Unterseiten erstellen
  • Automatische Updates: Odoo-Status wird in alle einbindenden Seiten propagiert
  • Konfigurierbarer Namespace: Basis-Pfad über Systemparameter dokuwiki.equipment_namespace anpassbar