docs(feature-plan): Clarify sync mechanism - unidirectional with protected sections

- 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
This commit is contained in:
Matthias Lotz 2025-12-13 17:53:54 +01:00
parent 92490aeb9c
commit 2eff81ce54

View File

@ -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 ======
<!-- ODOO_SYNC_START: Grunddaten -->
===== 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
<!-- ODOO_SYNC_END: Grunddaten -->
<!-- ODOO_SYNC_START: Sicherheit -->
===== Sicherheit =====
* **Einweisungspflichtig:** [Ja/Nein basierend auf category]
* **Nutzungsprodukte:** [product_ids]
* **Einweisungsprodukte:** [training_ids]
* **Einweisungspflichtig:** Ja
* **Nutzungsprodukte:** Holzwerkstatt Nutzung
* **Einweisungsprodukte:** Einweisung Formatkreissäge
<!-- ODOO_SYNC_END: Sicherheit -->
===== 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 `<!-- ODOO_SYNC_START -->` und `<!-- ODOO_SYNC_END -->` 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 (`<!-- ODOO_SYNC_START -->`)
- 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"<!-- ODOO_SYNC_START: {section_name} -->"
marker_end = f"<!-- ODOO_SYNC_END: {section_name} -->"
# 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