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:
Matthias Lotz 2025-12-20 12:49:58 +01:00
parent de317f46e6
commit 253d289633
6 changed files with 276 additions and 139 deletions

View File

@ -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}
```

View File

@ -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

View File

@ -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,

View File

@ -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()

View File

@ -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(

View File

@ -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")