feat(dokuwiki): Flexible overview table with configurable columns
- Made overview table columns fully configurable via system parameters - Added wiki_page_id placeholder for internal DokuWiki links - Removed DokuWiki template dependency for overview table - Added _register_hook to initialize parameters on module load/update - Updated README with new configuration approach - System parameters: overview_page_id, overview_title, overview_columns, overview_column_data - Default columns: Name (with link), Status, Security Category, Area, Location, Image
This commit is contained in:
parent
de317f46e6
commit
253d289633
|
|
@ -11,34 +11,35 @@ Das **datatables Plugin** muss in DokuWiki installiert sein:
|
|||
|
||||
## Setup-Schritte
|
||||
|
||||
### 1. Template-Seite in DokuWiki erstellen
|
||||
### 1. Odoo Konfiguration
|
||||
|
||||
Erstelle die Seite: `werkstatt:ausruestung:uebersicht_template`
|
||||
Die Übersichtstabelle wird vollständig aus Odoo heraus konfiguriert - **kein DokuWiki Template nötig!**
|
||||
|
||||
Kopiere den Inhalt aus: `dokuwiki_uebersicht_template.txt`
|
||||
Gehe zu: **Einstellungen → Technisch → Parameter → Systemparameter**
|
||||
|
||||
**Wichtige Platzhalter:**
|
||||
- `{{EQUIPMENT_TABLE_ROWS}}` → Wird durch Tabellenzeilen ersetzt
|
||||
- `{{SYNC_DATETIME}}` → Wird durch Sync-Zeitstempel ersetzt
|
||||
|
||||
### 2. Odoo Konfiguration (optional)
|
||||
|
||||
Falls andere Seitennamen gewünscht:
|
||||
Standardwerte (automatisch gesetzt beim Modul-Install):
|
||||
|
||||
```python
|
||||
# In Odoo: Einstellungen → Technisch → Parameter → Systemparameter
|
||||
# Seiten-ID wo die Übersicht erstellt wird
|
||||
dokuwiki.overview_page_id = werkstatt:ausruestung:start
|
||||
|
||||
dokuwiki.overview_page_id = werkstatt:ausruestung:uebersicht
|
||||
dokuwiki.overview_template_id = werkstatt:ausruestung:uebersicht_template
|
||||
# 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}
|
||||
```
|
||||
|
||||
### 3. Erste Synchronisation
|
||||
### 2. Erste Synchronisation
|
||||
|
||||
1. In Odoo: **Wartung → Konfiguration → Wiki-Synchronisation**
|
||||
2. Wähle: **"Übersichtstabelle aktualisieren"**
|
||||
3. Klicke: **"Synchronisieren"**
|
||||
|
||||
Die Übersichtsseite wird erstellt unter: `werkstatt:ausruestung:uebersicht`
|
||||
Die Übersichtsseite wird erstellt unter: `werkstatt:ausruestung:start`
|
||||
|
||||
## Features
|
||||
|
||||
|
|
@ -48,27 +49,63 @@ Die Übersichtsseite wird erstellt unter: `werkstatt:ausruestung:uebersicht`
|
|||
- ✅ Pagination bei vielen Einträgen
|
||||
- ✅ Responsive Design
|
||||
|
||||
### Spalten
|
||||
| Spalte | Inhalt | Quelle |
|
||||
|--------|--------|--------|
|
||||
| Name | Link zur Detail-Seite | `maintenance.equipment.name` |
|
||||
| Status | In Betrieb, Wartung, etc. | `equipment_status_id` |
|
||||
| Sicherheits-Kategorie | 🟢 Grün / 🟡 Gelb / 🔴 Rot | `ows_category` |
|
||||
| Bereich | Holzwerkstatt, Metallwerkstatt, etc. | `ows_area_id` |
|
||||
| Standort | Freier Text | `location` |
|
||||
| Bild | Thumbnail 50px | `image_1920` |
|
||||
### 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}
|
||||
```
|
||||
|
||||
**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 134 Einträge
|
||||
- ⚡ Generiert nur eine Seite (statt 134 einzelne)
|
||||
- ⚡ 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
|
||||
|
||||
### "Template-Seite nicht gefunden"
|
||||
→ Erstelle `werkstatt:ausruestung:uebersicht_template` in DokuWiki
|
||||
|
||||
### DataTables funktioniert nicht
|
||||
→ Installiere DataTables Plugin in DokuWiki
|
||||
|
||||
|
|
@ -80,40 +117,51 @@ Die Übersichtsseite wird erstellt unter: `werkstatt:ausruestung:uebersicht`
|
|||
→ 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 Equipment │
|
||||
│ (134 Einträge) │
|
||||
│ Odoo Systempar. │
|
||||
│ - Spalten │
|
||||
│ - Platzhalter │
|
||||
└────────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ Odoo Equipment │
|
||||
│ (156 Einträge) │
|
||||
└────────┬────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ _generate_overview_ │
|
||||
│ table_row() │ ← Pro Equipment eine Zeile
|
||||
│ (maintenance_equipment) │
|
||||
│ (Platzhalter ersetzen) │ mit Platzhalter-Engine
|
||||
└────────┬────────────────┘
|
||||
│ 134 Zeilen
|
||||
│ 156 Zeilen
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ Template laden │
|
||||
│ werkstatt:ausruestung: │
|
||||
│ uebersicht_template │
|
||||
└────────┬────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ Placeholder ersetzen │
|
||||
│ {{EQUIPMENT_TABLE_ROWS}}│
|
||||
│ {{SYNC_DATETIME}} │
|
||||
│ Seite zusammenbauen │
|
||||
│ - Titel │
|
||||
│ - DataTables Header │
|
||||
│ - Zeilen │
|
||||
│ - Footer │
|
||||
└────────┬────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ Seite speichern │
|
||||
│ werkstatt:ausruestung: │
|
||||
│ uebersicht │
|
||||
│ start │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
|
|
@ -136,42 +184,77 @@ Aktion: action_sync_overview_table()
|
|||
Intervall: Täglich um 02:00 Uhr
|
||||
```
|
||||
|
||||
# Verfügbare Platzhalter:
|
||||
---
|
||||
|
||||
Basis-Felder (maintenance.equipment):
|
||||
# Verfügbare Platzhalter
|
||||
|
||||
{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
|
||||
Spezial-Felder:
|
||||
Alle Platzhalter aus dem Detail-Template sind verfügbar!
|
||||
|
||||
{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 (300px Breite) - Format: {{:media_id?300}}
|
||||
{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):
|
||||
## Basis-Felder (maintenance.equipment)
|
||||
|
||||
{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 (🔴/🟡/🟢)
|
||||
- `{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
|
||||
|
||||
## 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 (300px Breite) - Format: `{{:media_id?300}}`
|
||||
- `{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 `{{:...?300}}`
|
||||
- **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}
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
from . import wizard
|
||||
from .hooks import post_init_hook
|
||||
from .hooks import post_init_hook, pre_init_hook
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ ACL:
|
|||
'wizard/equipment_wiki_sync_wizard_views.xml',
|
||||
],
|
||||
'post_init_hook': 'post_init_hook',
|
||||
'pre_init_hook': 'pre_init_hook',
|
||||
'installable': True,
|
||||
'application': False,
|
||||
'auto_install': False,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,15 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
def pre_init_hook(env):
|
||||
"""
|
||||
Hook der VOR der Modul-Installation/Update ausgeführt wird.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
def post_init_hook(env):
|
||||
"""
|
||||
Hook der nach der Modul-Installation ausgeführt wird.
|
||||
Hook der nach der Modul-Installation/Update ausgeführt wird.
|
||||
Initialisiert die DokuWiki-Parameter falls sie nicht existieren.
|
||||
"""
|
||||
env['res.config.settings']._init_dokuwiki_parameters()
|
||||
|
|
|
|||
|
|
@ -218,11 +218,16 @@ class MaintenanceEquipment(models.Model):
|
|||
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url', 'http://localhost:8069')
|
||||
odoo_equipment_url = f"{base_url}/web#id={self.id}&model=maintenance.equipment&view_type=form"
|
||||
|
||||
# Wiki Page IDs
|
||||
wiki_page_id = self._get_wiki_page_id_by_area() if self.ows_area_id else ''
|
||||
|
||||
# Basis-Werte für maintenance.equipment
|
||||
values = {
|
||||
# Spezielle Werte
|
||||
'wiki_doku_page': doku_page_id,
|
||||
'wiki_doku_link': f"[[{doku_page_id}| Wiki Dokumentation]]",
|
||||
'wiki_page_id': wiki_page_id, # Page-ID der Hauptseite (nach Bereich)
|
||||
'wiki_page_url': self.wiki_page_url or '', # Externe URL zur Hauptseite
|
||||
'odoo_link': f"[[{odoo_equipment_url}|🔗 In Odoo öffnen]]",
|
||||
'odoo_url': odoo_equipment_url,
|
||||
'sync_datetime': datetime.now().strftime('%d.%m.%Y %H:%M'),
|
||||
|
|
@ -285,7 +290,7 @@ class MaintenanceEquipment(models.Model):
|
|||
dokuwiki_client.upload_media(media_id, image_bytes, overwrite=True)
|
||||
|
||||
# DokuWiki Image-Syntax: {{namespace:file.jpg?300}}
|
||||
values['image'] = f"{{{{:{media_id}?300}}}}"
|
||||
values['image'] = f"{{{{:{media_id}?100}}}}"
|
||||
values['image_large'] = f"{{{{:{media_id}}}}}"
|
||||
values['image_id'] = media_id
|
||||
_logger.info(f"Bild hochgeladen: {media_id}")
|
||||
|
|
@ -346,7 +351,7 @@ class MaintenanceEquipment(models.Model):
|
|||
----
|
||||
[[{doku_page_id}|✏️ Zentrale Dokumentation bearbeiten]]
|
||||
|
||||
//Letzte Synchronisation: {datetime.now().strftime('%d.%m.%Y %H:%M')} von Odoo//
|
||||
//Letzte Synchronisation: {datetime.now().strftime('%d.%m.%Y %H:%M')} //
|
||||
"""
|
||||
return content
|
||||
|
||||
|
|
@ -392,7 +397,7 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
//Hinweis: Diese Seite kann beliebig strukturiert werden. Unterseiten können bei Bedarf manuell angelegt werden.//
|
||||
|
||||
----
|
||||
//Erstellt: {datetime.now().strftime('%d.%m.%Y %H:%M')} von Odoo//
|
||||
//Erstellt: {datetime.now().strftime('%d.%m.%Y %H:%M')} //
|
||||
"""
|
||||
return content
|
||||
|
||||
|
|
@ -537,48 +542,30 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
# Übersichtstabelle (DataTable)
|
||||
# ==========================================
|
||||
|
||||
def _generate_overview_table_row(self):
|
||||
def _generate_overview_table_row(self, column_data_template):
|
||||
"""
|
||||
Generiert eine DokuWiki DataTable Zeile für dieses Equipment.
|
||||
Generiert eine DokuWiki DataTable Zeile für dieses Equipment mit konfigurierbaren Spalten.
|
||||
|
||||
Format: | [[link|Name]] | Status | Kategorie | Bereich | Standort | {{image.jpg?50}} |
|
||||
Args:
|
||||
column_data_template (str): Template mit Platzhaltern, z.B. "{status_smiley}|{partner_id}|{model}"
|
||||
|
||||
Returns:
|
||||
str: Wiki-Markup für eine Tabellenzeile
|
||||
"""
|
||||
self.ensure_one()
|
||||
|
||||
# Name mit Link zur Detail-Seite
|
||||
wiki_doku_id = self._get_wiki_doku_id()
|
||||
doku_page_id = self._get_wiki_doku_page_id()
|
||||
name_link = f"[[{doku_page_id}|{self.name}]]" if wiki_doku_id else self.name
|
||||
# Template-Werte vorbereiten (nutzt bestehende Platzhalter-Engine)
|
||||
values = self._prepare_template_values(view_type='area')
|
||||
|
||||
# Status (maintenance_equipment_status)
|
||||
status = self.status_id.name if self.status_id else "-"
|
||||
# Platzhalter im Template ersetzen
|
||||
rendered_data = column_data_template
|
||||
for key, value in values.items():
|
||||
placeholder = '{' + key + '}'
|
||||
rendered_data = rendered_data.replace(placeholder, str(value or '-'))
|
||||
|
||||
# Sicherheitskategorie
|
||||
category_map = {
|
||||
'green': '🟢 Grün',
|
||||
'yellow': '🟡 Gelb',
|
||||
'red': '🔴 Rot',
|
||||
}
|
||||
ows_category = category_map.get(self.ows_category, '-')
|
||||
|
||||
# Bereich
|
||||
area = self.ows_area_id.name if self.ows_area_id else "-"
|
||||
|
||||
# Standort
|
||||
location = self.location if self.location else "-"
|
||||
|
||||
# Bild (als Thumbnail 50px)
|
||||
if self.image_1920:
|
||||
media_id = self._get_wiki_media_id()
|
||||
image = f"{{{{:{media_id}?50}}}}"
|
||||
else:
|
||||
image = "-"
|
||||
|
||||
# Tabellenzeile
|
||||
row = f"| {name_link} | {status} | {ows_category} | {area} | {location} | {image} |"
|
||||
# Pipe-separierte Werte in DokuWiki-Tabellenzeile umwandeln
|
||||
columns = rendered_data.split('|')
|
||||
row = '| ' + ' | '.join(columns) + ' |'
|
||||
|
||||
return row
|
||||
|
||||
|
|
@ -586,12 +573,7 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
def action_sync_overview_table(self):
|
||||
"""
|
||||
Aktualisiert die Übersichtstabelle in DokuWiki mit allen Equipment-Einträgen.
|
||||
|
||||
Diese Methode:
|
||||
1. Lädt das Template aus DokuWiki (mit {{EQUIPMENT_TABLE_ROWS}} Placeholder)
|
||||
2. Generiert für jedes Equipment eine Tabellenzeile
|
||||
3. Ersetzt den Placeholder mit den generierten Zeilen
|
||||
4. Speichert die Übersichtsseite zurück zu DokuWiki
|
||||
Verwendet konfigurierbare Spalten aus Systemparametern (kein Template mehr nötig).
|
||||
|
||||
Returns:
|
||||
dict: Ergebnis-Dictionary mit 'total', 'success', 'error_messages'
|
||||
|
|
@ -599,17 +581,17 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
IrConfigParameter = self.env['ir.config_parameter'].sudo()
|
||||
dokuwiki_client = self.env['dokuwiki.client']
|
||||
|
||||
# Config Parameter
|
||||
overview_page_id = IrConfigParameter.get_param('dokuwiki.overview_page_id', 'werkstatt:ausruestung:uebersicht')
|
||||
overview_template_id = IrConfigParameter.get_param('dokuwiki.overview_template_id', 'werkstatt:ausruestung:uebersicht_template')
|
||||
# Config Parameter (Defaults werden via _register_hook automatisch gesetzt)
|
||||
overview_page_id = IrConfigParameter.get_param('dokuwiki.overview_page_id')
|
||||
overview_title = IrConfigParameter.get_param('dokuwiki.overview_title')
|
||||
overview_columns = IrConfigParameter.get_param('dokuwiki.overview_columns')
|
||||
overview_column_data = IrConfigParameter.get_param('dokuwiki.overview_column_data')
|
||||
|
||||
# Validierung
|
||||
if not all([overview_page_id, overview_title, overview_columns, overview_column_data]):
|
||||
raise UserError("DokuWiki Übersichtstabellen-Parameter nicht konfiguriert! Bitte Modul neu installieren.")
|
||||
|
||||
try:
|
||||
# Template aus Wiki laden
|
||||
template_content = dokuwiki_client.get_page(overview_template_id)
|
||||
|
||||
if not template_content:
|
||||
raise UserError(f"Template-Seite '{overview_template_id}' nicht gefunden! Bitte erst im Wiki erstellen.")
|
||||
|
||||
# Alle Equipment mit ows_area_id laden (sortiert nach Bereich, dann Name)
|
||||
equipment_records = self.search([
|
||||
('ows_area_id', '!=', False)
|
||||
|
|
@ -622,7 +604,7 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
table_rows = []
|
||||
for equipment in equipment_records:
|
||||
try:
|
||||
row = equipment._generate_overview_table_row()
|
||||
row = equipment._generate_overview_table_row(overview_column_data)
|
||||
table_rows.append(row)
|
||||
except Exception as e:
|
||||
_logger.warning(f"Fehler beim Generieren der Zeile für {equipment.name}: {e}")
|
||||
|
|
@ -631,12 +613,57 @@ Hier kann die Dokumentation für {self.name} geschrieben werden.
|
|||
# Rows zusammenfügen
|
||||
table_rows_markup = '\n'.join(table_rows)
|
||||
|
||||
# Placeholder ersetzen
|
||||
overview_content = template_content.replace('{{EQUIPMENT_TABLE_ROWS}}', table_rows_markup)
|
||||
# Spalten-Header generieren (aus overview_columns)
|
||||
column_headers = overview_columns.split('|')
|
||||
header_row = '^ ' + ' ^ '.join(column_headers) + ' ^'
|
||||
|
||||
# Sync-Zeitstempel hinzufügen
|
||||
# Sync-Zeitstempel
|
||||
sync_datetime = datetime.now().strftime('%d.%m.%Y %H:%M:%S')
|
||||
overview_content = overview_content.replace('{{SYNC_DATETIME}}', sync_datetime)
|
||||
|
||||
# Komplette Seite zusammenbauen (ohne Template)
|
||||
overview_content = f"""====== {overview_title} ======
|
||||
|
||||
Diese Seite wird automatisch aktualisiert.
|
||||
|
||||
**Letztes Update:** {sync_datetime}
|
||||
|
||||
<datatable Equipment-Übersicht>
|
||||
{header_row}
|
||||
{table_rows_markup}
|
||||
</datatable>
|
||||
|
||||
----
|
||||
|
||||
**Hinweis:** Diese Tabelle ist interaktiv:
|
||||
* Klicken Sie auf die Spaltenköpfe zum Sortieren
|
||||
* Nutzen Sie das Suchfeld zum Filtern
|
||||
* Klicken Sie auf Links für Details
|
||||
|
||||
**Sicherheit:**
|
||||
* 🟢 Grün
|
||||
* **keine** Einweisungspflicht
|
||||
* Bei Fragen zu Bedienung unterstützt der Thekendienst gerne
|
||||
* Bei Unsicherheiten bitte aktiv nach Hilfe fragen
|
||||
* Nicht gekennzeichnete Geräte können unter Beachtung der üblichen Sicherheitsregeln frei genutzt werden.
|
||||
* 🟡 Gelb
|
||||
* keine **explizite** Einweisungspflicht
|
||||
* Höheres Risikio als „grüne Maschinen“
|
||||
* teilweise in der Handhabung anspruchsvoller („unintitive Bedienung“)
|
||||
* ggf. müssen Verbrauchsmaterialien gewechselt werden
|
||||
* Wir empfehlen eine Einweisung für den sicheren Umgang
|
||||
* 🔴 Rot
|
||||
* explizite Einweisungspflicht
|
||||
* Ohne dokumentierte Einweisung darf die Maschine nicht bedient werden
|
||||
* Für Einweisungstermine bitte den Thekendienst befragen oder trage dich [[https://hobbyhimmel.de/so-gehts/einweisungen/|hier]] im Kalender für einen Termin ein
|
||||
|
||||
** Status **
|
||||
* 🙂 - Maschine/Gerät in gutem Zustand, keine bekannten Probleme
|
||||
* 🙁 - Maschine/Gerät ist Defekt und darf nicht genutzt werden
|
||||
* 🛠️ - Maschine/Gerät ist Defekt und wird gerade repariert
|
||||
* ❌ - Maschine/Gerät wurde ausgemustert
|
||||
|
||||
//Automatisch generiert - Änderungen werden beim nächsten Sync überschrieben//
|
||||
"""
|
||||
|
||||
# Seite in DokuWiki speichern
|
||||
dokuwiki_client.create_page(
|
||||
|
|
|
|||
|
|
@ -8,10 +8,19 @@ _logger = logging.getLogger(__name__)
|
|||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
@api.model
|
||||
def _register_hook(self):
|
||||
"""
|
||||
Hook der bei jedem Modul-Load (auch bei Update) ausgeführt wird.
|
||||
Initialisiert fehlende DokuWiki-Parameter.
|
||||
"""
|
||||
super()._register_hook()
|
||||
self._init_dokuwiki_parameters()
|
||||
|
||||
@api.model
|
||||
def _init_dokuwiki_parameters(self):
|
||||
"""
|
||||
Initialisiert DokuWiki-Parameter beim Modul-Install falls sie nicht existieren.
|
||||
Initialisiert DokuWiki-Parameter beim Modul-Install/-Update falls sie nicht existieren.
|
||||
Wird automatisch beim Laden des Moduls aufgerufen.
|
||||
"""
|
||||
IrConfigParameter = self.env['ir.config_parameter'].sudo()
|
||||
|
|
@ -21,12 +30,22 @@ class ResConfigSettings(models.TransientModel):
|
|||
'dokuwiki.url': 'https://wiki.hobbyhimmel.de',
|
||||
'dokuwiki.user': 'odoo.odoo',
|
||||
'dokuwiki.password': 'CHANGE_ME',
|
||||
'dokuwiki.overview_page_id': 'werkstatt:ausruestung:uebersicht',
|
||||
'dokuwiki.overview_template_id': 'werkstatt:ausruestung:uebersicht_template',
|
||||
'dokuwiki.overview_page_id': 'werkstatt:ausruestung: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}',
|
||||
}
|
||||
|
||||
# Nur fehlende Parameter anlegen
|
||||
count_created = 0
|
||||
count_existing = 0
|
||||
for key, value in defaults.items():
|
||||
if not IrConfigParameter.get_param(key):
|
||||
IrConfigParameter.set_param(key, value)
|
||||
count_created += 1
|
||||
_logger.info(f"DokuWiki parameter '{key}' initialized with default value")
|
||||
else:
|
||||
count_existing += 1
|
||||
|
||||
if count_created > 0:
|
||||
_logger.info(f"DokuWiki parameters: {count_created} created, {count_existing} already existing")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user