DokuWiki Integration: Neue Namespace-Struktur mit odoo-status

BREAKING CHANGES:
- Namespace-Struktur komplett überarbeitet
- ausruestung → ausstattung (konfigurierbar über dokuwiki.equipment_namespace)
- Neue Struktur: ausstattung:odoo-status/ für Odoo-generierte Status-Seiten
- Odoo erstellt KEINE Benutzer-Seiten mehr in {bereich}/ Namespaces

Neue Systemparameter:
- dokuwiki.equipment_namespace = werkstatt:ausstattung (Basis-Namespace)
- dokuwiki.central_documentation_namespace = werkstatt:ausstattung:odoo-status

Workflow-Änderung:
1. Odoo synchronisiert → erstellt nur start und odoo-status/ Seiten
2. Übersichtstabelle verlinkt auf {bereich}/{equipment_id} → Links sind rot
3. Benutzer klickt roten Link → DokuWiki bietet Seitenerstellung an
4. Benutzer erstellt Seite mit {{page>odoo-status:equipment_id}}

Vorteile:
- Klare Trennung: odoo-status/ (nur Odoo) vs. {bereich}/ (nur Benutzer)
- Keine Überschreibgefahr - Odoo und Benutzer haben getrennte Namespaces
- Benutzer entscheiden selbst ob/wann sie Dokumentation erstellen
- ACL-Schutz: odoo-status/ nur von odoo.odoo schreibbar
This commit is contained in:
Matthias Lotz 2025-12-27 16:56:17 +01:00
parent a73c0cb299
commit 641bfb3ade
4 changed files with 178 additions and 137 deletions

View File

@ -9,6 +9,13 @@ Das **datatables Plugin** muss in DokuWiki installiert sein:
# 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
@ -20,8 +27,11 @@ 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
dokuwiki.overview_page_id = werkstatt:ausruestung:start
dokuwiki.overview_page_id = werkstatt:ausstattung:start
# Titel der Übersichtsseite
dokuwiki.overview_title = Geräte & Maschinen - Übersicht
@ -39,7 +49,7 @@ dokuwiki.overview_column_data = {status_smiley}|{ows_machine_id.category_icon}|{
2. Wähle: **"Übersichtstabelle aktualisieren"**
3. Klicke: **"Synchronisieren"**
Die Übersichtsseite wird erstellt unter: `werkstatt:ausruestung:start`
Die Übersichtsseite wird erstellt unter: `werkstatt:ausstattung:start`
## Features
@ -167,7 +177,7 @@ dokuwiki.overview_column_data = {status_smiley}|{name}|{model}|{tags_list}|{loca
┌─────────────────────────┐
│ Seite speichern │
│ werkstatt:ausruestung: │
│ werkstatt:ausstattung: │
│ start │
└─────────────────────────┘
```
@ -329,19 +339,33 @@ DokuWiki erlaubt **gleichzeitig** eine Seite und einen gleichnamigen Namespace:
### Empfohlene Struktur
```
werkstatt/ausruestung/doku/
├── analog-oscilloscope-hm303-6.txt # Von Odoo generiert
├── analog-oscilloscope-hm303-6/ # Benutzer erstellt (optional)
│ ├── kalibrierung.txt # Benutzer-Unterseite
│ ├── messungen.txt # Benutzer-Unterseite
│ └── bilder/ # Weitere Unter-Namespaces möglich
│ └── oszillogramme.txt
├── cnc-fraese-xyz.txt # Von Odoo generiert
└── cnc-fraese-xyz/ # Benutzer-Namespace (optional)
├── programme.txt
└── werkzeuge.txt
werkstatt/
└── ausstattung/
├── start # 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
@ -373,14 +397,22 @@ equipment/
- `equipment` und `equipment:start` zeigen unterschiedliche Inhalte
- Benutzer wissen nicht, welche Seite die "richtige" ist
### Catlist für Unterseiten-Auflistung
### Include-Plugin für Odoo-Status einbinden
In der Odoo-generierten Hauptseite kann eine catlist-Anweisung eingefügt werden:
**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
===== Dokumentation: Analog Oscilloscope HM303-6 =====
===== Analog Oscilloscope HM303-6 =====
... Equipment-Details ...
==== Odoo Status ====
{{page>werkstatt:ausstattung:odoo-status:analog-oscilloscope-hm303-6}}
==== Eigene Dokumentation ====
Hier kann der Benutzer seine eigenen Inhalte hinzufügen...
==== Weitere Dokumentation ====
@ -388,28 +420,37 @@ In der Odoo-generierten Hauptseite kann eine catlist-Anweisung eingefügt werden
```
**Syntax-Erklärung:**
- `.:namespace` → Relativer Namespace (Punkt + Doppelpunkt!)
- `{{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:**
- Zeigt alle Unterseiten im `equipment/` Verzeichnis
- 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 `equipment.txt`
2. **Benutzer erstellt Unterseiten** → Erstellt Verzeichnis `equipment/` und fügt Seiten hinzu
3. **Catlist zeigt automatisch** → Alle Unterseiten werden auf der Hauptseite gelistet
4. **Keine Konflikte** → Odoo überschreibt nur `equipment.txt`, nie das `equipment/` Verzeichnis
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
- ✅ Odoo-Seiten bleiben unverändert und zentral verwaltbar
- ✅ Benutzer können frei Unterseiten erstellen ohne Odoo-Sync zu stören
- ✅ Keine Namenskollisionen oder Breadcrumb-Probleme
- ✅ Automatische Verlinkung via catlist
- ✅ Skalierbar: Beliebig viele Unterseiten und Unter-Namespaces möglich
- ✅ Klare Trennung: Was von Odoo kommt vs. was von Benutzern kommt
- ✅ **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

View File

@ -13,23 +13,33 @@ Dieses Modul synchronisiert Equipment-Daten aus Odoo mit einem DokuWiki System.
Features:
---------
* Automatische Erstellung von Wiki-Seiten für Equipment
* Multi-View Architektur (nach Bereich, nach Einsatzzweck)
* Zentrale Dokumentation mit Unterseiten
* Include-basierte Struktur für flexible Darstellung
* Übersichtstabelle aller Equipment (DataTables mit Sortierung/Filterung)
* Status-Seiten für Include-Plugin (nur von Odoo generiert, nur lesbar)
* Benutzer erstellen eigene Dokumentationsseiten und binden Odoo-Status ein
* Smart Button "Wiki öffnen" im Equipment-Formular
* Automatische Synchronisation bei Equipment-Änderungen
* Automatische Synchronisation bei Equipment-Änderungen (optional)
Architektur:
------------
* Odoo generiert Hauptseiten (read-only für Users)
* Zentrale Dokumentation unter werkstatt:ausruestung:_doku:{equipment_id}
* Users editieren Unterseiten: _doku:{equipment_id}:bedienung, :wartung, :tipps
* Hauptseiten inkludieren zentrale Dokumentation via DokuWiki Include Plugin
* Odoo generiert NUR: start (Übersichtstabelle) und odoo-status/ Seiten
* Odoo generiert NIEMALS: Benutzer-Dokumentationsseiten in {bereich}/ Namespaces
* Namespace-Struktur (konfigurierbar über dokuwiki.equipment_namespace):
- {equipment_namespace}:start - Übersichtstabelle (von Odoo)
- {equipment_namespace}:odoo-status:{equipment_id} - Status-Seiten (von Odoo, nur lesbar)
- {equipment_namespace}:odoo-status:c_template - Template für Status-Seiten
- {equipment_namespace}:{bereich}:{equipment_id} - Benutzer-Dokumentation (von Benutzern erstellt!)
ACL:
----
* Phase 1: Nur @odoo Gruppe hat Zugriff
* Phase 2: @werkstatt bekommt Lesezugriff auf Hauptseiten, Edit-Zugriff auf Doku-Seiten
Workflow:
---------
1. Odoo synchronisiert Equipment erstellt odoo-status/ Seiten
2. Übersichtstabelle verlinkt auf {bereich}/{equipment_id} Link ist rot (existiert nicht)
3. Benutzer klickt roten Link DokuWiki: "Seite erstellen?"
4. Benutzer erstellt Seite und fügt {{page>odoo-status:equipment_id}} ein
ACL-Empfehlung:
---------------
* odoo-status/ Namespace: Nur odoo.odoo kann schreiben, alle anderen nur lesen
* {bereich}/ Namespaces: Benutzer haben volle Schreibrechte
""",
'author': 'Hobbyhimmel',
'website': 'https://hobbyhimmel.de',

View File

@ -25,9 +25,10 @@ class MaintenanceEquipment(models.Model):
- Automatische Übersichtstabelle aller Equipment (DataTable mit Sortierung/Filterung)
- Automatische Synchronisation bei Feldänderungen (optional)
Wiki-Seitenstruktur:
- werkstatt:ausruestung:doku:{wiki_doku_id} - Zentrale Dokumentation
- werkstatt:ausruestung:{area}:{wiki_doku_id} - Bereichsansicht
- werkstatt:ausruestung:uebersicht - Equipment-Übersichtstabelle
- {equipment_namespace}:start - Übersichtstabelle (von Odoo generiert)
- {equipment_namespace}:odoo-status:{wiki_doku_id} - Status-Seite (von Odoo generiert, nur lesbar)
- {equipment_namespace}:odoo-status:c_template - Template für Status-Seiten
- {equipment_namespace}:{bereich}:{wiki_doku_id} - Benutzer-Dokumentation (NICHT von Odoo erstellt!)
Neue Felder:
- image_1920: Bild des Equipment (wird automatisch ins Wiki hochgeladen)
- wiki_doku_id: Eindeutige ID für Wiki-Dokumentation (aus Equipment-Name generiert)
@ -36,7 +37,7 @@ class MaintenanceEquipment(models.Model):
- wiki_last_sync: Zeitstempel der letzten Synchronisation
- wiki_auto_sync: Schalter für automatische Synchronisation bei Änderungen
Template-System:
Die Wiki-Seiten werden aus einem Template (werkstatt:ausruestung:c_template)
Die Wiki-Seiten werden aus einem Template ({equipment_namespace}:odoo-status:c_template)
generiert, das folgende Platzhalter unterstützt:
- {feldname} - Direkte Equipment-Felder (z.B. {name}, {serial_no})
- {ows_machine_id.feldname} - Maschinenfelder (z.B. {ows_machine_id.power})
@ -63,7 +64,7 @@ class MaintenanceEquipment(models.Model):
Notes:
- Zentrale Dokumentationsseite wird nur beim ersten Sync erstellt
- Bereichsansichten werden bei jedem Sync aktualisiert
- Bilder werden als werkstatt:ausruestung:media:{wiki_doku_id}.jpg gespeichert
- Bilder werden als {equipment_namespace}:media:{wiki_doku_id}.jpg gespeichert
- Wiki-Namen werden normalisiert (Umlaute, Sonderzeichen, Kleinschreibung)
- Bei fehlendem Template wird Fallback-Inhalt verwendet
- Übersichtstabelle kann manuell oder automatisch aktualisiert werden
@ -146,43 +147,53 @@ class MaintenanceEquipment(models.Model):
def _get_wiki_page_id_by_area(self):
"""
Generiert die Wiki-Page-ID für die Bereichs-Ansicht.
Format: werkstatt:ausruestung:{area_name}:{wiki_doku_id}
Generiert die Wiki-Page-ID für die Benutzer-Dokumentationsseite (nach Bereich).
Format: {equipment_namespace}:{area_name}:{wiki_doku_id}
WICHTIG: Diese Seite wird NICHT von Odoo erstellt! Sie wird nur in der Übersichtstabelle
verlinkt. Benutzer erstellen sie manuell durch Klick auf den Link.
Returns:
str: Page-ID
str: Page-ID für Benutzer-Dokumentation
"""
self.ensure_one()
if not self.ows_area_id:
return False
# Equipment-Namespace aus Systemparameter laden
IrConfigParameter = self.env['ir.config_parameter'].sudo()
equipment_namespace = IrConfigParameter.get_param(
'dokuwiki.equipment_namespace',
default='werkstatt:ausstattung'
)
# Area-Name normalisieren (Umlaute, Leerzeichen, Sonderzeichen)
area_name = self._normalize_wiki_name(self.ows_area_id.name)
wiki_doku_id = self._get_wiki_doku_id()
return f"werkstatt:ausruestung:{area_name}:{wiki_doku_id}"
return f"{equipment_namespace}:{area_name}:{wiki_doku_id}"
def _get_wiki_doku_page_id(self):
"""
Generiert die Wiki-Page-ID für die zentrale Dokumentation.
Format: {central_namespace}:{wiki_doku_id}
Der Namespace ist über Systemparameter 'dokuwiki.central_documentation_namespace' konfigurierbar.
Generiert die Wiki-Page-ID für die Odoo-Status-Seite (nur lesbar für Benutzer).
Format: {equipment_namespace}:odoo-status:{wiki_doku_id}
Diese Seite wird von Odoo generiert und kann mit dem include-Plugin eingebunden werden.
Returns:
str: Page-ID der zentralen Doku
str: Page-ID der Odoo-Status-Seite
"""
self.ensure_one()
# Namespace aus Systemparameter laden
# Namespace aus Systemparameter laden (verwendet jetzt central_documentation_namespace)
IrConfigParameter = self.env['ir.config_parameter'].sudo()
central_namespace = IrConfigParameter.get_param(
status_namespace = IrConfigParameter.get_param(
'dokuwiki.central_documentation_namespace',
default='werkstatt:ausruestung:doku'
default='werkstatt:ausstattung:odoo-status'
)
wiki_doku_id = self._get_wiki_doku_id()
return f"{central_namespace}:{wiki_doku_id}"
return f"{status_namespace}:{wiki_doku_id}"
def _normalize_wiki_name(self, name):
"""
@ -246,7 +257,14 @@ class MaintenanceEquipment(models.Model):
self.ensure_one()
global _template_cache
dokuwiki_client = self.env['dokuwiki.client']
template_page_id = 'werkstatt:ausruestung:c_template'
# Template-Pfad aus Systemparameter generieren
IrConfigParameter = self.env['ir.config_parameter'].sudo()
status_namespace = IrConfigParameter.get_param(
'dokuwiki.central_documentation_namespace',
default='werkstatt:ausstattung:odoo-status'
)
template_page_id = f"{status_namespace}:c_template"
try:
# Template aus Cache oder Wiki laden
@ -369,8 +387,13 @@ class MaintenanceEquipment(models.Model):
# Bild-Upload und Referenz (falls vorhanden)
if self.image_1920:
wiki_doku_id = self._get_wiki_doku_id()
# Media-ID: werkstatt:ausruestung:media:equipment_name.jpg
media_id = f"werkstatt:ausruestung:media:{wiki_doku_id}.jpg"
# Media-ID aus equipment_namespace generieren
IrConfigParameter = self.env['ir.config_parameter'].sudo()
equipment_namespace = IrConfigParameter.get_param(
'dokuwiki.equipment_namespace',
default='werkstatt:ausstattung'
)
media_id = f"{equipment_namespace}:media:{wiki_doku_id}.jpg"
# Bild ins Wiki hochladen
try:
@ -410,18 +433,16 @@ class MaintenanceEquipment(models.Model):
"""
Fallback-Methode: Generiert hart-codierten Wiki-Markup-Inhalt,
wenn c_template.txt nicht verfügbar ist.
Dieser Content wird in odoo-status/ gespeichert und ist nur lesbar.
Args:
view_type (str): 'area' oder 'purpose'
Returns:
str: Wiki-Markup-Inhalt
str: Wiki-Markup-Inhalt für odoo-status Seite
"""
self.ensure_one()
# Zentrale Doku-Seite einbinden
doku_page_id = self._get_wiki_doku_page_id()
# Header je nach View-Typ
if view_type == 'area':
view_name = self.ows_area_id.name if self.ows_area_id else "Unbekannt"
@ -431,76 +452,65 @@ class MaintenanceEquipment(models.Model):
view_name = "TODO: Einsatzzweck"
view_label = "Einsatzzweck"
content = f"""====== {self.name} ======
content = f"""====== {self.name} - Odoo Status ======
**{view_label}:** {view_name}
**Kategorie:** {self.category_id.name if self.category_id else 'Keine'}
**Seriennummer:** {self.serial_no or 'Keine'}
**Modell:** {self.model or 'Keine'}
**Status:** {self.status_id.name if self.status_id else 'Unbekannt'} {self.status_id.smiley if self.status_id and self.status_id.smiley else ''}
===== Dokumentation =====
{{{{page>{doku_page_id}&noheader}}}}
===== Technische Daten =====
**Hersteller:** {self.partner_id.name if self.partner_id else 'Unbekannt'}
**Standort:** {self.location or 'Nicht angegeben'}
**Kosten:** {self.cost if self.cost else 'Nicht angegeben'}
**Garantie bis:** {self.warranty_date.strftime('%d.%m.%Y') if self.warranty_date else 'Keine'}
===== Notizen =====
{self.note or 'Keine Notizen'}
----
[[{doku_page_id}| Zentrale Dokumentation bearbeiten]]
//Diese Seite wird automatisch von Odoo generiert und ist nur lesbar.//
//Letzte Synchronisation: {datetime.now().strftime('%d.%m.%Y %H:%M')} //
"""
return content
def _generate_wiki_main_page_content(self, view_type='area'):
"""
Generiert den Wiki-Markup-Inhalt für die Haupt-Ansichtsseite.
Generiert den Wiki-Markup-Inhalt für die Odoo-Status-Seite.
Verwendet c_template.txt aus DokuWiki falls verfügbar, sonst Fallback.
Diese Seite wird in odoo-status/ gespeichert und ist nur lesbar.
Args:
view_type (str): 'area' oder 'purpose'
Returns:
str: Wiki-Markup-Inhalt
str: Wiki-Markup-Inhalt für odoo-status Seite
"""
return self._render_template_from_wiki(view_type)
def _generate_wiki_doku_page_content(self):
"""
Generiert den initialen Wiki-Markup-Inhalt für die zentrale Dokumentationsseite.
Einfacher Basis-Inhalt, den der Nutzer nach Belieben erweitern kann.
Returns:
str: Wiki-Markup-Inhalt
DEPRECATED: Diese Methode wird nicht mehr verwendet.
Odoo erstellt keine Benutzer-Dokumentationsseiten mehr.
Benutzer erstellen diese Seiten manuell durch Klick auf den Link in der Übersichtstabelle.
"""
self.ensure_one()
if self.model:
model_part = f" - Modell: {self.model}"
else:
model_part = ""
content = f"""====== {self.name}{model_part} ======
===== Beschreibung =====
Hier kann die Dokumentation für {self.name} geschrieben werden.
**Mögliche Inhalte:**
* Bedienungsanleitung
* Wartungshinweise
* Sicherheitshinweise
* Tipps & Tricks
//Hinweis: Diese Seite kann beliebig strukturiert werden. Unterseiten können bei Bedarf manuell angelegt werden.//
----
//Erstellt: {datetime.now().strftime('%d.%m.%Y %H:%M')} //
"""
return content
_logger.warning("_generate_wiki_doku_page_content() wurde aufgerufen - diese Methode ist deprecated!")
return ""
def sync_to_dokuwiki(self):
"""
Synchronisiert Equipment-Daten zum DokuWiki.
WICHTIG: Erstellt NUR die Odoo-Status-Seite in odoo-status/ Namespace!
Benutzer-Dokumentationsseiten werden NICHT erstellt - diese erstellen Benutzer
manuell durch Klick auf den Link in der Übersichtstabelle.
Erstellt/aktualisiert:
- wiki_doku_id beim ersten Sync (falls noch nicht gesetzt)
- Zentrale Dokumentationsseite (_doku:) - nur wenn sie noch nicht existiert
- Haupt-Ansichtsseite nach Bereich (wird immer aktualisiert)
- TODO: Später auch nach Einsatzzweck
- Odoo-Status-Seite (odoo-status:wiki_doku_id) - wird immer aktualisiert
Returns:
bool: True bei Erfolg
@ -524,41 +534,20 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
dokuwiki_client = self.env['dokuwiki.client']
try:
# 1. Zentrale Dokumentationsseite erstellen (immer beim ersten Sync)
doku_page_id = self._get_wiki_doku_page_id()
# Odoo-Status-Seite erstellen/aktualisieren (immer beim Sync)
status_page_id = self._get_wiki_doku_page_id()
status_content = self._generate_wiki_main_page_content(view_type='area')
# Prüfen ob Seite mit echtem Inhalt existiert (nicht nur leere Template-Seite)
page_has_content = False
try:
existing_content = dokuwiki_client.get_page(doku_page_id)
# Prüfen ob es echten Inhalt hat (mehr als 100 Zeichen und nicht nur Template)
if existing_content and len(existing_content) > 100 and 'catlist' not in existing_content.lower():
page_has_content = True
_logger.info(f"Zentrale Doku-Seite hat bereits Inhalt: {doku_page_id}")
except Exception as e:
_logger.debug(f"Seite existiert noch nicht: {e}")
if not page_has_content:
doku_content = self._generate_wiki_doku_page_content()
dokuwiki_client.create_page(
doku_page_id,
doku_content,
f"Initial erstellt von Odoo: {self.name}"
)
_logger.info(f"Zentrale Doku-Seite für {self.name} erstellt: {doku_page_id}")
else:
_logger.info(f"Zentrale Doku-Seite für {self.name} existiert bereits: {doku_page_id}")
# 2. Haupt-Ansichtsseite nach Bereich erstellen/aktualisieren (verwendet c_template.txt)
area_page_id = self._get_wiki_page_id_by_area()
area_content = self._generate_wiki_main_page_content(view_type='area')
dokuwiki_client.create_page(
area_page_id,
area_content,
status_page_id,
status_content,
f"Synchronisiert von Odoo: {self.name}"
)
_logger.info(f"Odoo-Status-Seite für {self.name} aktualisiert: {status_page_id}")
# TODO: Später auch nach Einsatzzweck synchronisieren
# WICHTIG: Benutzer-Dokumentationsseiten werden NICHT erstellt!
# Diese werden nur in der Übersichtstabelle verlinkt und von Benutzern
# manuell erstellt durch Klick auf den roten Link.
# Sync-Status aktualisieren
self.write({

View File

@ -30,8 +30,9 @@ class ResConfigSettings(models.TransientModel):
'dokuwiki.url': 'https://wiki.hobbyhimmel.de',
'dokuwiki.user': 'odoo.odoo',
'dokuwiki.password': 'CHANGE_ME',
'dokuwiki.central_documentation_namespace': 'werkstatt:ausruestung:doku',
'dokuwiki.overview_page_id': 'werkstatt:ausruestung:start',
'dokuwiki.equipment_namespace': 'werkstatt:ausstattung', # NEU: Basis-Namespace für Equipment
'dokuwiki.central_documentation_namespace': 'werkstatt:ausstattung:odoo-status', # NEU: Namespace für Odoo-generierte Status-Seiten
'dokuwiki.overview_page_id': 'werkstatt:ausstattung:start',
'dokuwiki.overview_title': 'Geräte & Maschinen - Übersicht',
'dokuwiki.overview_columns': 'Name|Zustand|Sicherheit|Bereich|Standort|Bild',
'dokuwiki.overview_column_data': '[[{wiki_page_id}|{name}]]|{status_smiley}|{ows_machine_id.category_icon}|{ows_area}|{location}|{image}',