From 2eff81ce54ba4589f41411963fab2f6b7e9e9c2c Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Sat, 13 Dec 2025 17:53:54 +0100 Subject: [PATCH] docs(feature-plan): Clarify sync mechanism - unidirectional with protected sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed 'bidirektional' to 'unidirektional' (Odoo → DokuWiki) - Clarified data ownership: - Odoo = Master for structured data (name, serial_no, area, category) - DokuWiki = Master for freetext documentation (manuals, tips) - Added sync marker system: - <- Ensures POS functionality is activated after ODOO_SYNC_START: section_name --> - <- Ensures POS functionality is activated after ODOO_SYNC_END: section_name --> - Only content between markers gets updated by Odoo - All other sections (Bedienung, Tipps & Tricks) remain untouched - Documented sync algorithm with Python code example - Users can freely edit wiki without fear of data loss - DokuWiki versioning preserves all changes --- FEATURE_REQUEST/open_workshop_feature_plan.md | 83 +++++++++++++++---- 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/FEATURE_REQUEST/open_workshop_feature_plan.md b/FEATURE_REQUEST/open_workshop_feature_plan.md index 3f85c57..cdde439 100644 --- a/FEATURE_REQUEST/open_workshop_feature_plan.md +++ b/FEATURE_REQUEST/open_workshop_feature_plan.md @@ -151,7 +151,10 @@ Dieses Modul integriert **DokuWiki** als Dokumentationssystem für Equipment. - Automatische Wiki-Seiten für jedes Equipment - Strukturierte Dokumentation mit Templates -- Bidirektionale Synchronisation (Odoo → DokuWiki) +- **Unidirektionale Synchronisation** (Odoo → DokuWiki) + - Odoo = Master für strukturierte Daten (Name, Seriennummer, Bereich, Kategorie) + - DokuWiki = Master für Freitext-Dokumentation (Bedienungsanleitung, Tipps) + - Nur markierte Bereiche werden von Odoo überschrieben - Versionierung durch DokuWiki eingebaut - ACL: Odoo-Namespace nur für Odoo beschreibbar, für alle lesbar @@ -182,34 +185,52 @@ ausruestung:elektronik:loetstation_1 ## 5.4 Template-System -Automatisch generierte Seiten mit folgender Struktur: +Automatisch generierte Seiten mit **Sync-Markern** für geschützte Bereiche: ```wiki -====== [Equipment Name] ====== +====== Formatkreissäge ====== + ===== Grunddaten ===== - * **Seriennummer:** [serial_no] - * **Bereich:** [area_id.name] - * **Kategorie:** [category] (🟢🟡🔴) - * **Standort:** [location] - * **Hersteller:** [partner_id.name] + * **Seriennummer:** FKS-2024-001 + * **Bereich:** Holzwerkstatt + * **Kategorie:** 🔴 (Einweisung erforderlich) + * **Standort:** Schrank A, Regal 2 + * **Hersteller:** Bosch + + ===== Sicherheit ===== - * **Einweisungspflichtig:** [Ja/Nein basierend auf category] - * **Nutzungsprodukte:** [product_ids] - * **Einweisungsprodukte:** [training_ids] + * **Einweisungspflichtig:** Ja + * **Nutzungsprodukte:** Holzwerkstatt Nutzung + * **Einweisungsprodukte:** Einweisung Formatkreissäge + ===== Bedienung ===== -[Platzhalter für Anleitung - manuell editierbar] +**Dieser Bereich ist NICHT geschützt - User können frei editieren!** + +1. Maschine einschalten +2. Werkstück anlegen +3. Anschlag einstellen +... ===== Wartung ===== - * **Nächste Wartung:** [next_action_date] - * **Wartungshistorie:** Link zu Maintenance Requests +Letzte Wartung: 01.12.2025 +Nächste Wartung: [[maintenance:request:42|Wartungsauftrag #42]] -===== Notizen ===== -[note aus equipment.note oder editierbar] +===== Tipps & Tricks ===== +**Freitext-Bereich für Community-Wissen** + +- Für saubere Schnitte: Sägeblatt regelmäßig wechseln +- Bei Hartholz: Vorschub langsamer +... ``` +**Sync-Verhalten:** +- Bereiche zwischen `` und `` werden bei Equipment-Änderung aktualisiert +- Alle anderen Bereiche bleiben unberührt +- DokuWiki-Versionierung behält alle Änderungen + ## 5.5 Technische Umsetzung **Python-Bibliothek:** @@ -227,9 +248,37 @@ wiki.getAllPages() # Alle Seiten auflisten **Odoo-Integration:** - Neues Model: `ows.dokuwiki.config` (DokuWiki-URL, Credentials) - Methode auf `maintenance.equipment`: `sync_to_dokuwiki()` + - Liest bestehende Wiki-Seite mit `wiki.getPage()` + - Parsed Sync-Marker (``) + - Aktualisiert nur markierte Abschnitte + - Schreibt zurück mit `wiki.putPage()` - Automated Action: Bei Equipment-Änderung → Wiki aktualisieren - Smart Button: "Wiki öffnen" → Link zur DokuWiki-Seite +**Sync-Algorithmus:** +```python +def _update_structured_sections(self, existing_content, new_data): + """Ersetzt nur Bereiche zwischen ODOO_SYNC_START/END Markern""" + sections = { + 'Grunddaten': self._generate_grunddaten(), + 'Sicherheit': self._generate_sicherheit() + } + + for section_name, new_content in sections.items(): + marker_start = f"" + marker_end = f"" + + # Regex-basiertes Ersetzen nur innerhalb Marker + existing_content = re.sub( + f"{marker_start}.*?{marker_end}", + f"{marker_start}\n{new_content}\n{marker_end}", + existing_content, + flags=re.DOTALL + ) + + return existing_content +``` + ## 5.6 Sicherheitsmechanismen **DokuWiki ACL:** @@ -342,7 +391,7 @@ Aktuell hat DokuWiki-Integration **Priorität**. ✔ **Odoo bleibt sicher** hinter Firewall ✔ **Keine Benutzerkosten** – alle Ehrenamtlichen können intern mitarbeiten ✔ **Modular, wartbar, zukunftssicher** -✔ **Bidirektionale Sync** – Odoo aktualisiert Wiki automatisch +✔ **Intelligente Sync** – Nur strukturierte Daten werden überschrieben, Freitext bleibt erhalten ✔ **Öffentlich lesbar** – Anleitungen für alle verfügbar ✔ **WordPress optional** – Kann später für Marketing/SEO ergänzt werden