# Equipment Übersichtstabelle - Setup ## Voraussetzungen Das **datatables Plugin** muss in DokuWiki installiert sein: ```bash # 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): ```bash # 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): ```python # 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 ```python # 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 ```python 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 ```python 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 ```python 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:** ```python # 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) ```python # 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: ```dokuwiki ===== 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 ==== ``` **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