- Add computed Many2many fields for direct product display in equipment view - Implement name_get() methods for OwsMachineProduct and OwsMachineTraining - Apply category filters to product selection (Maschinennutzung, Einweisungen, Kurse) - Update README.md with comprehensive module documentation
16 KiB
Open Workshop
POS-basiertes Maschinenfreigabe- und Werkstattverwaltungssystem für Odoo
Open Workshop ist eine modulare Erweiterung des Odoo POS-Systems zur Verwaltung von einweisungspflichtigen Maschinen und Geräten in Werkstätten, Makerspaces und FabLabs. Das System ermöglicht die Verwaltung von Maschinenfreigaben, Einweisungen und Equipment-Dokumentation.
Hauptfunktionen
-
Maschinenfreigaben: Verwaltung von kundenspezifischen Freigaben für einweisungspflichtige Geräte
-
Sicherheitskategorien: Dreistufiges Kategoriesystem (grün/gelb/rot) für unterschiedliche Einweisungspflichten
-
POS-Integration: Verkauf von Einweisungen und Anzeige von Maschinenfreigaben direkt am Point of Sale
-
Equipment-Verwaltung: Vollständige Integration mit dem OCA Maintenance-Modul
-
Dokumentation: Automatische Synchronisation von Equipment-Daten mit DokuWiki
-
Mitarbeiter-Display: Dynamische Anzeige von Mitarbeiterdaten im POS Customer Display
Module
open_workshop_base
Kernmodul - Stellt die Basis-Funktionalität für das gesamte System bereit.
Hauptfunktionen:
- Maschinenmodelle mit Sicherheitskategorien (grün/gelb/rot)
- Bereiche (z.B. Holz, Metall, FabLab)
- Freigabeverwaltung (wer darf welche Maschine nutzen)
- Produktverknüpfungen für Einweisungen und Nutzung
- Integration mit OCA maintenance.equipment als Single Source of Truth
Datenmodelle:
ows.user- Benutzerdaten (RFID, Geburtstag, Sicherheitsunterweisung)ows.machine.area- Maschinenbereiche mit Farbkodierungows.machine- Maschinen (nutzt _inherits Pattern mit maintenance.equipment)ows.machine.access- Freigaben (Partner ↔ Maschine)ows.machine.product- Nutzungsprodukte für Maschinenows.machine.training- Einweisungsprodukte für Maschinen
Abhängigkeiten:
-
OCA
maintenance(Basis-Equipment-Verwaltung) -
OCA
maintenance_equipment_status(Equipment-Statusverwaltung)git clone https://github.com/OCA/maintenance.git cd maintenance git reset --hard 5510275e
open_workshop_pos
POS-Integration - Erweitert den Odoo Point of Sale um Maschinenfreigabe-Funktionalität.
Hauptfunktionen:
- Machine Access List: Übersichtsanzeige aller verfügbaren Maschinen welche Einweisungspflichtig sind, mit Freigabestatus für den aktuellen Kunden (roter Punkt)
- Customer Sidebar: Kundenspezifische Maschinenfreigaben am POS
- POS Sidebar: Maschinenauswahl und Statusanzeige
- Automatische Freigabenvergabe: Beim Verkauf eines Einweisungsprodukts wird dem Kunden automatisch die Freigabe für das zugehörige Gerät in der Datenbank erteilt
Verwendungszweck: Verkauf von Maschineneinweisungen und Anzeige bestehender Freigaben direkt am Kassensystem. Ermöglicht schnelle Prüfung, welcher Kunde auf welche einweisungspflichtigen Geräte zugreifen darf.
Abhängigkeiten:
open_workshop_basepoint_of_sale
open_workshop_pos_customer_display
Mitarbeiter-Display - Zeigt dynamisches Mitarbeiter-Namensschild im POS Customer Display.
Hauptfunktionen:
- Anzeige von Mitarbeiterfoto (generiert durch open_workshop_employee_imagegenerator)
- Darstellung von Name und Schwerpunkten (job_focus)
- Automatische Aktualisierung bei Kassiererwechsel
- Responsive Design mit Fallback auf Company-Logo
Verwendungszweck: Darstellung der Mitarbeitenden am Kundendisplay, verbessert die Kundeninteraktion und Transparenz.
Abhängigkeiten:
point_of_salehr
open_workshop_dokuwiki
DokuWiki-Integration - Synchronisiert Equipment-Daten aus Odoo mit einem DokuWiki-System.
Hauptfunktionen:
- Automatische Erstellung von Wiki-Seiten für Equipment
- Übersichtstabelle aller Equipment (DataTables mit Sortierung/Filterung)
- Status-Seiten für Include-Plugin (nur von Odoo generiert, read-only)
- Smart Button "Wiki öffnen" im Equipment-Formular
- Automatische Synchronisation bei Equipment-Änderungen
Architektur-Prinzip:
- Odoo generiert NUR
odoo-status/Seiten (maschinengeneriert, read-only) - Benutzer erstellen eigene Dokumentation in
{bereich}/Namespaces - Einbindung der Odoo-Daten via DokuWiki Include-Plugin
Verwendungszweck: Zentrale Dokumentation aller Geräte mit automatisch aktualisiertem Status aus Odoo, kombiniert mit benutzergenerierten Anleitungen und Wartungshinweisen.
Abhängigkeiten:
open_workshop_basemaintenancemaintenance_equipment_status
🎨 open_workshop_employee_imagegenerator
Mitarbeiterfoto-Generator - Upload und Zuschnitt von Mitarbeiterfotos direkt in Odoo.
Hauptfunktionen:
- Upload und Zuschnitt von Fotos auf festes Format (369x492 Pixel)
- Hinzufügen von Schwerpunktbereichen (job_focus)
- Integrierter Cropper.js für professionelle Bildbearbeitung
- Fester Crop-Frame (nur Bild bewegt sich, nicht der Rahmen)
- Integration im Employee-Formular über Button "Namensschild erstellen"
Verwendungszweck: Erstellung von professionellen Mitarbeiterfotos für das POS Customer Display. Vereinfacht den Workflow durch direkten Upload in Odoo ohne externe Bildbearbeitung.
Abhängigkeiten:
hrweb
Architektur & Datenfluss
Datenmodell-Übersicht
┌─────────────────────────────────────────────────────────────┐
│ OCA maintenance.equipment │
│ (Single Source of Truth für name, serial_no, cost, etc.) │
└──────────────────────┬──────────────────────────────────────┘
│ _inherits (Delegation Pattern)
│
▼
┌────────────────┐
│ ows.machine │ ◄────────┐
│ (OWS-Features) │ │
└────┬───────────┘ │
│ │
┌─────────┼──────────────────────┤
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ ows.machine.area │ │
│ │ (Bereiche) │ │
│ └──────────────────┘ │
│ │
▼ │
┌──────────────────┐ ┌────────┴─────────┐
│ ows.machine. │ │ ows.machine. │
│ product │ │ training │
│ (Nutzung) │ │ (Einweisung) │
└──────────────────┘ └──────────────────┘
┌──────────────────┐ ┌──────────────────┐
│ res.partner │ │ ows.user │
│ (Kunde) │◄───────────│ (Benutzerdaten) │
└────────┬─────────┘ 1:1 └──────────────────┘
│
│ M:N
│
▼
┌──────────────────┐ ┌──────────────────┐
│ ows.machine. │ │ ows.machine │
│ access │───────────►│ │
│ (Freigaben) │ │ │
└──────────────────┘ └──────────────────┘
_inherits Pattern Erklärung
Das Modul nutzt das Odoo _inherits Pattern (Delegation/Prototypische Vererbung) für ows.machine:
Wie es funktioniert:
ows.machinedelegiert Basis-Felder anmaintenance.equipment- Beim Erstellen einer
ows.machinewird automatisch einmaintenance.equipmenterstellt - Felder wie
name,serial_no,cost,locationwerden direkt von equipment übernommen - Keine Datenduplizierung! Ein Equipment-Datensatz, zwei Modell-Sichten
Vorteile:
maintenance.equipmentbleibt die Single Source of Truth für Stammdaten- Kompatibilität mit allen OCA Maintenance-Modulen
ows.machinefügt nur OWS-spezifische Felder hinzu (category, area_id, etc.)- Nahtlose Integration in bestehendes Maintenance-System
Beispiel:
class OwsMachine(models.Model):
_name = 'ows.machine'
_inherits = {'maintenance.equipment': 'equipment_id'}
equipment_id = fields.Many2one('maintenance.equipment', required=True, ondelete='cascade')
category = fields.Selection(...) # OWS-spezifisch
area_id = fields.Many2one(...) # OWS-spezifisch
Beim Zugriff auf machine.name wird automatisch machine.equipment_id.name zurückgegeben.
🔄 Modul-Zusammenhänge
Installation & Abhängigkeiten
OCA maintenance ─────┐
OCA maintenance_ │
equipment_status ──┤
▼
open_workshop_base ◄──────────┐
│ │
┌───────────┼─────────────┐ │
│ │ │ │
▼ ▼ ▼ │
open_workshop open_workshop open_workshop
_pos _dokuwiki _employee_
imagegenerator
│ │
▼ │
open_workshop_pos_ │
customer_display ◄───────────────┘
Installation:
Die OCA Module maintenance und maintenance_equipment_status müssen im addons_path verfügbar sein. Sie werden automatisch mit installiert, wenn open_workshop_base installiert wird (siehe depends in der __manifest__.py).
git clone https://github.com/OCA/maintenance.git
cd maintenance
git reset --hard 5510275e
Installationsreihenfolge:
open_workshop_base(Kernmodul - installiert OCA-Abhängigkeiten automatisch)- Optionale Module je nach Bedarf:
open_workshop_posfür POS-Integrationopen_workshop_dokuwikifür Wiki-Dokumentationopen_workshop_employee_imagegeneratorfür Mitarbeiterfotosopen_workshop_pos_customer_displayfür Customer Display (benötigt imagegenerator)
🛠️ Entwicklungshinweise
Wo finde ich was?
open_workshop_base
- Models:
/models/ows_models.py- Alle Kern-Datenmodelle - Views:
/views/- Backend-Ansichten (Form, Tree, Kanban)- Erweiterte Views:
res.partner(Kontakte): Formular, Listenansicht - Maschinenfreigaben-Tabmaintenance.equipment: Formular, Listenansicht, Suchansicht - OWS-Felder
- Erweiterte Views:
- Security:
/security/ir.model.access.csv- Zugriffsrechte - Data:
/data/- Stammdaten (Equipment-Status, Bereiche)
open_workshop_pos
- JavaScript:
/static/src/js/- POS Frontend-Logikows_pos_sidebar.js- POS Maschinensidebarows_pos_customer_sidebar.js- Kundensidebarows_machine_access_list.js- Zugriffsliste
- Templates:
/static/src/xml/- OWL Templates für POS UI - Models:
/models/pos_order.py- POS Order Extensions
open_workshop_dokuwiki
- Models:
/models/dokuwiki_client.py- DokuWiki XML-RPC Clientmaintenance_equipment.py- Equipment Extensions
- Views:
/views/- Erweiterte Views:
maintenance.equipment: Smart Button "Wiki öffnen"maintenance.equipment.status: DokuWiki-Synchronisation
- Erweiterte Views:
- Wizard:
/wizard/- Synchronisations-Assistenten
open_workshop_employee_imagegenerator
- JavaScript:
/static/src/js/employee_image_widget.js- Cropper Widget - Templates:
/static/src/xml/employee_image_widget.xml- Widget UI - Views:
/views/- Erweiterte Views:
hr.employee: Button "Namensschild erstellen" im Formular
- Erweiterte Views:
- CSS:
/static/src/css/- Badge-Styling - Library:
/static/lib/cropperjs/- Cropper.js Integration
open_workshop_pos_customer_display
- JavaScript:
/static/src/js/customer_display.js- Display-Logik - CSS:
/static/src/css/employee_badge.css- Badge-Styling
Wichtige Methoden & RPC Calls
open_workshop_base
ows.machine.get_access_list_grouped(partner_id)- Gruppierte Zugriffsliste für POS- Liefert alle Bereiche mit Maschinen und Zugriffssstatus für einen Partner
- Wird vom POS Frontend verwendet
res.partner Extensions
machine_access_ids- One2many zu allen Freigabenmachine_access_html- Computed HTML-Tabelle für Backend-Ansicht im Res.partner / Kontakt Formularows_user_id- One2many zu ows.user (Benutzerdaten)
Erweiterung des Systems
Neue Sicherheitskategorie hinzufügen:
- In
ows_models.py→OwsMachine.categorySelection erweitern - Icon-Mapping in
_compute_category_icon()aktualisieren - CSS in
/static/src/css/category_color.cssergänzen
Neuen Maschinenbereich erstellen:
- Im Backend: Wartung → Konfiguration → Bereiche
- Oder via Data-File in
/data/für Standardbereiche
POS-UI anpassen:
- OWL Templates in
/static/src/xml/bearbeiten - JavaScript-Komponenten in
/static/src/js/erweitern - CSS in
/static/src/css/anpassen
📝 Technische Details
Backend-Konfiguration
Sicherheitskategorien zuweisen:
- Menü: Wartung → Ausrüstung → [Equipment auswählen]
- Im Formular: Feld "Sicherheitskategorie" (🟢/🟡/🔴)
- Die Kategorie ist direkt am
ows.machine/maintenance.equipmentgespeichert
Einweisungsprodukte zuweisen:
- Menü: Wartung → Ausrüstung → [Equipment auswählen]
- Im Formular: Tab "Einweisungsprodukte"
- Button "Hinzufügen" → Produkt aus
product.productauswählen - Speichert Verknüpfung in
ows.machine.training(Many2many über One2many) - Beim Verkauf dieses Produkts am POS wird automatisch die Freigabe erteilt
Nutzungsprodukte zuweisen:
- Gleicher Weg wie Einweisungsprodukte
- Tab "Nutzungsprodukte" im Equipment-Formular
- Speichert Verknüpfung in
ows.machine.product - Diese Produkte können für Nutzungsgebühren verwendet werden
Maschinenfreigaben manuell vergeben:
- Menü: Kontakte → [Partner auswählen]
- Tab "Maschinenfreigaben" (von open_workshop_base hinzugefügt)
- Übersicht aller Bereiche und Maschinen mit aktuellem Freigabestatus
- Freigaben werden jedoch hauptsächlich automatisch über POS-Verkäufe vergeben
Konfiguration:
- Bereiche: Wartung → Konfiguration → Bereiche
- Produkt-Zuordnungen: Wartung → Konfiguration → Zuordnungen
- Nutzungsprodukte (Übersicht aller Zuordnungen)
- Einweisungsprodukte (Übersicht aller Zuordnungen)
Sicherheitskategorien
- 🟢 Grün (Kategorie 1): Keine Einweisungspflicht, freier Zugang
- 🟡 Gelb (Kategorie 2): Empfohlene Einweisung, optionale Freigabe
- 🔴 Rot (Kategorie 3): Einweisung zwingend erforderlich, POS zeigt nur rote Maschinen
Freigabenverwaltung
Freigaben werden in ows.machine.access gespeichert mit:
- Partner (Kunde)
- Maschine
- Datum der Freigabe
- Optional: Ablaufdatum
- Herkunft (granted_by_pos)
DokuWiki Namespace-Struktur
{equipment_namespace}:
├── overview # Übersichtstabelle (von Odoo)
└── odoo-status/ # Maschinengeneriert (read-only)
├── maschine_1 # Status-Seite für Include
├── maschine_2
└── c_template # Template für Status-Seiten
{bereich}: # Benutzer-Namespaces
├── holz/
│ ├── maschine_1 # Benutzer-Dokumentation
│ └── maschine_2 # (inkludiert odoo-status via {{page>}})
└── metall/
└── ...
📄 Lizenz
AGPL-3 (open_workshop_base)
LGPL-3 (weitere Module)
👤 Autor
Matthias Lotz / Hobbyhimmel
🔗 Verwandte Projekte
- OCA Maintenance - Basis Equipment-Verwaltung