From 641bfb3ade1fcbd5c3a8b4782d7952ff21175b4a Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Sat, 27 Dec 2025 16:56:17 +0100 Subject: [PATCH] DokuWiki Integration: Neue Namespace-Struktur mit odoo-status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- open_workshop_dokuwiki/README.md | 101 +++++++--- open_workshop_dokuwiki/__manifest__.py | 34 ++-- .../models/maintenance_equipment.py | 175 ++++++++---------- .../models/res_config_settings.py | 5 +- 4 files changed, 178 insertions(+), 137 deletions(-) diff --git a/open_workshop_dokuwiki/README.md b/open_workshop_dokuwiki/README.md index d134354..b95c0ed 100644 --- a/open_workshop_dokuwiki/README.md +++ b/open_workshop_dokuwiki/README.md @@ -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 diff --git a/open_workshop_dokuwiki/__manifest__.py b/open_workshop_dokuwiki/__manifest__.py index 7c1353f..329ee29 100644 --- a/open_workshop_dokuwiki/__manifest__.py +++ b/open_workshop_dokuwiki/__manifest__.py @@ -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', diff --git a/open_workshop_dokuwiki/models/maintenance_equipment.py b/open_workshop_dokuwiki/models/maintenance_equipment.py index 9b3099c..a5ee4a7 100644 --- a/open_workshop_dokuwiki/models/maintenance_equipment.py +++ b/open_workshop_dokuwiki/models/maintenance_equipment.py @@ -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({ diff --git a/open_workshop_dokuwiki/models/res_config_settings.py b/open_workshop_dokuwiki/models/res_config_settings.py index cdeab1d..da4bad5 100644 --- a/open_workshop_dokuwiki/models/res_config_settings.py +++ b/open_workshop_dokuwiki/models/res_config_settings.py @@ -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}',