- POS-Dependency entfernt: pos_order.py Import deaktiviert (Modul benötigt kein POS mehr)
HINWEIS: pos_order.py sollte später eventuell nach open_workshop_pos verschoben werden
- maintenance_equipment_status zu Dependencies hinzugefügt
- Menu-Lade-Reihenfolge korrigiert: menu_views.xml wird nun nach den View-Dateien geladen
- Action-Referenz korrigiert: open_workshop_base.action_machine_area_list -> action_machine_area_list
- Altes open_workshop Modul entfernt (war bereits auf installable=False)
- open_workshop_auto_backup Modul entfernt
Das Modul kann nun ohne point_of_sale installiert werden.
- Created test_mqtt_mocked.py with unittest.mock (following OCA patterns)
- Old tests with real MQTT broker hang in TransactionCase tearDown
- Created run-tests.sh following OCA/oca-ci best practices
- TODO: Find proper way to test MQTT with background threads in Odoo
- TODO: Either fully mock or use different test approach (not TransactionCase)
✅ M5 Complete - All 21 tests passing
**MQTT Auto-Reconnect:**
- Exponential backoff (1s → 60s) in mqtt_client.py
- Automatic reconnection on disconnect
- Reset delay on successful connect
**State Recovery:**
- load_sessions() and get_running_sessions() in event_storage.py
- restore_state() in session_detector.py
- _restore_running_sessions() in main.py before MQTT connect
- Running sessions continue with timeout detection after restart
**Error Handling:**
- All parsers wrapped in try-except (shelly_parser, session_detector)
- Errors logged with exc_info=True for debugging
- Bridge continues running on malformed messages
**Bug Fixes:**
- Fixed field name mismatch: duration_s → total_duration_s
- Fixed None handling in session end methods
- Fixed infinite recursion in _read_sessions()
Test Results: 21 passed in 175.46s (0:02:55)
Änderungen:
- maintenance_equipment.py: Zwei neue computed HTML-Felder hinzugefügt:
- wiki_doku_link: Zeigt wiki_doku_id als Link zur Dokumentations-Seite
- wiki_status_link: Zeigt wiki_status_id als Link zur Odoo-Status-Seite
- maintenance_equipment_views.xml: Tree View erweitert mit Wiki-Links
- Wiki Doku: Standardmäßig sichtbar (optional='show')
- Wiki Status: Standardmäßig ausgeblendet (optional='hide')
- maintenance_equipment_views.xml: Formular-Layout verbessert
- Doku-Seite mit prominentem Link oben
Nutzen:
- Benutzer sehen jetzt 'sabko-laser' statt vollständige URL
- Links sind klickbar und öffnen in neuem Tab
- Übersichtlichere List View mit relevanten Wiki-Informationen
Änderungen:
- maintenance_equipment.py: wiki_doku_id wird bei action_reset_wiki_sync_status() nicht mehr zurückgesetzt (ist manuell editierbar)
- equipment_wiki_sync_wizard.py: Deprecated force_sync Feld und zugehörige Logik entfernt
- equipment_wiki_sync_wizard_views.xml: force_sync UI-Element entfernt
- FEATURE_REQUEST/Odoo18_MQTT_IoT.md: Projektplan für MQTT-basierte IoT-Events hinzugefügt
Grund:
- force_sync Feature referenzierte nicht existierende Methoden (_generate_wiki_doku_page_content, _get_wiki_doku_page_id)
- wiki_doku_id ist jetzt manuell editierbar und sollte nicht automatisch zurückgesetzt werden
- Cleanup von veralteter/fehlerhafter Funktionalität
- Explizite Commits nach jeder ALTER TABLE Operation
- Besseres Logging mit Statusmeldungen
- Verifizierung nach Migration
- Fehlerbehandlung mit detaillierten Fehlermeldungen
- Prüfung ob maintenance_equipment Tabelle existiert
- Neues Feld wiki_status_id: Eindeutige ID für Odoo-Status-Seite (name-seriennummer)
- Überarbeitung wiki_doku_id: Editierbar, für Benutzer-Dokumentation (Duplikate erlaubt)
- Funktion _get_wiki_doku_page_id → _get_wiki_status_page_id (bessere Benennung)
- Template-Platzhalter: wiki_doku_page/link → wiki_status_page/link
- Pre-Migration-Script für Upgrade ohne Fehler (18.0.2.1.0)
View-Verbesserungen:
- 3-spaltige Darstellung: Wiki Status Seite | Wiki Dokumentations Seite
- Separate Gruppe für Wiki URL
- Erweiterte Hilfe mit Unterscheidung Status-/Doku-Seite
- Include-Plugin-Beispiel für DokuWiki-Integration
Version: 18.0.2.0.0 → 18.0.2.1.0
- Default 120s timeout was too short for large SFTP uploads
- Set time_limit to 3600s (1 hour) to prevent incomplete backups
- Fixes timeout during SFTP upload causing server reload
- Crop-Rahmen ist fixiert (nicht verschiebbar/skalierbar), nur Bild bewegbar
- Zuschnitt auf exakt 369×492 Pixel
- Finales Badge im A4-Format (794×1123px / 21×29.7cm)
- Vorschau auf 35% skaliert mit korrektem Platzverbrauch
- Große Bilder passen initial in Container, unbegrenztes Zoomen möglich
- Badge-Template behält alle mm/cm-Maße aus print.html
- Removed all console.log debug statements from JavaScript files
- Deleted unnecessary backend models (hr_employee.py, res_users.py, pos_session.py, pos_config.py)
- Added comprehensive German comments explaining the BroadcastChannel architecture
- Updated README with detailed technical documentation about frontend-only approach
- Removed debug info box from customer display template
- Simplified __init__.py files (pure frontend solution)
The module now uses a clean, maintainable frontend-only approach that:
- Patches Chrome component with effect(batched()) for reactive updates
- Sends cashier data via BroadcastChannel (same pattern as order updates)
- Uses hr.employee.public URL format (identical to POS navbar)
- Falls back to company logo when no employee image available
- Show current cashier's employee image in customer display sidebar
- Image updates automatically when cashier changes
- Fallback to company logo when no image available or before first order
- Uses BroadcastChannel to sync between POS and customer display
- Full-size image display with correct aspect ratio (object-fit: contain)
- Fügt reaktive Preisanzeige auf POS-Produktkarten hinzu
- Preis wird basierend auf der Preisliste des aktuellen Kunden berechnet
- Automatische Aktualisierung bei Kundenwechsel/Preislistenänderung
- Unterstützt Maßeinheiten für gewichtsbasierte Produkte
- Remove internal note button from control buttons
- Add pricelist button directly visible in main view (not only in Actions dialog)
- Shows current pricelist name of the order/partner
- Allows direct access to change pricelist without opening Actions menu
- Geändert von :media: Sub-Namespace zu paralleler Struktur :{area}:
- Media-IDs folgen jetzt dem gleichen Muster wie Pages
- Alt: werkstatt:ausstattung:media:{id}.jpg
- Neu: werkstatt:ausstattung:{bereich}:{id}.jpg
- Entspricht DokuWiki-Konvention für parallele Page/Media-Strukturen
- Dokumentation im Docstring aktualisiert
- partner_ref zu sync_fields hinzugefügt für automatische Synchronisation
- action_clear_template_cache() Methode hinzugefügt zum manuellen Leeren des Caches
- Template-Cache-Leeren Button im Wiki-Sync Wizard
- Debug-Logging für partner_ref Wert
Fixes: partner_ref wurde nicht automatisch synchronisiert und Template-Änderungen erforderten Server-Neustart
- Create ows_order_patch.js to collect voucher codes from orderlines
- Add voucher codes section at end of receipt with large readable format
- Include voucher code, product name, and value for each voucher
- Move partner name logic from receipt_header_patch to order_patch
- Add German labels (GUTSCHEIN-CODES, Wert:)
- Patch PosOrder.export_for_printing() to include partner data in headerData
- Update receipt header template to display partner name above tracking number
- Partner name shown only when partner is selected for the order
- Automatische Auswahl einer konfigurierbaren Standard-Kategorie
- Konfiguration über Kategorie-Name oder ID möglich
- Aktuell auf 'Nutzung' gesetzt
- Vereinfacht die Navigation für häufig genutzte Kategorien
Neue Funktion im Modul:
- action_reset_wiki_sync_status() in maintenance_equipment.py
- Setzt wiki_synced und wiki_last_sync zurück
- Aufrufbar über Wizard: Wartung → Konfiguration → Wiki-Synchronisation
- Neuer Modus: 'Sync-Status zurücksetzen'
Verwendung:
1. Nach Namespace-Änderungen (ausruestung → ausstattung)
2. Wenn alle Equipment neu synchronisiert werden sollen
3. Bei Wiki-Struktur-Änderungen
Setzt NUR den Status zurück, nicht die wiki_doku_id
(wiki_doku_id kann bei Bedarf manuell zurückgesetzt werden)
- Systemparameter dokuwiki.overview_page_id: werkstatt:ausstattung:uebersicht
- README.md aktualisiert mit neuem Pfad
- 'start' Seite kann nun für andere Zwecke genutzt werden (z.B. Willkommensseite)
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
- Ø Nutzer/Tag Formel korrigiert: Buchungen/Tage statt Nutzer/Tage
- Jahr/Monat Felder zu DailyStats hinzugefügt für flexible Gruppierung
- Alle 2034 Datensätze neu generiert mit korrekten Werten
- show_measures zu allen Graph-Views hinzugefügt (Odoo-Limitation: funktioniert nicht)
LIMITIERUNG: Weitere Verbesserungen gegenüber Metabase nicht möglich
- Odoo Graph-Views können keine Werte auf Balken anzeigen
- 100% gestapelte Diagramme nicht möglich
- Komplexe Visualisierungen wie Häufigkeitsverteilungen nicht realisierbar
- Für Präsentationen und Export: Metabase bleibt überlegen
Empfehlung: Odoo für operative Arbeit, Metabase für Präsentationen nutzen
- Tägliche Statistiken (DailyStats) implementiert mit 2034 Datensätzen
- Wochenende vs. Wochentag farblich unterschieden in Tagesansicht
- Jahr/Monat Felder für Jahresvergleich hinzugefügt
- Button 'Tagesansicht' in Kanban-Dashboard für Drill-Down zu täglichen Statistiken
- Alle Dashboard-Graphen auf Jahresvergleich umgestellt (Monat × Jahr, nicht gestapelt)
- Jahresvergleich, Ø Nutzer/Tag, Wiederholungstäter, Nutzer pro Monat - alle mit Jahresvergleich
- Connection Caching: Wiederverwendung von DokuWiki-Verbindungen (von 12min auf 20s für 50 Equipment)
- Template Caching: Template nur einmal laden statt pro Equipment
- Dokumentation: Best Practices für erweiterbare DokuWiki-Seitenstruktur (page.txt + page/ ohne start.txt)
- Catlist-Syntax dokumentiert für automatische Unterseiten-Auflistung
- wiki_doku_id wird nun aus equipment.name und equipment.model kombiniert generiert
- Systemparameter 'dokuwiki.central_documentation_namespace' für konfigurierbaren Namespace
- Verbessertes Error-Handling in dokuwiki_client mit detaillierteren Fehlermeldungen
- Docker-Netzwerk Unterstützung dokumentiert
- Gelöschte veraltete WordPress-API Dateien