diff --git a/models/ows_models.py b/models/ows_models.py
index e2fea6e..05d6380 100644
--- a/models/ows_models.py
+++ b/models/ows_models.py
@@ -377,15 +377,57 @@ class OwsUser(models.Model):
]
+AVAILABLE_COLORS = [
+ ('#000000', 'schwarz'),
+ ('#ff0000', 'Rot'),
+ ('#E91E63', 'Pink'),
+ ('#9C27B0', 'Lila'),
+ ('#3F51B5', 'Indigo'),
+ ('#0000ff', 'Blau'),
+ ('#008000', 'Grün'),
+ ('#ffff00', 'Gelb'),
+ ('#FF9800', 'Orange'),
+ ('#795548', 'Braun'),
+ ('#ffffff', 'Weiss'),
+]
+
class OwsMachineArea(models.Model):
_name = 'ows.machine.area'
- _table = "ows_machine_area"
+ _table = 'ows_machine_area'
_description = 'OWS: Maschinenbereich'
_order = 'name'
- name = fields.Char(required=True, translate=True)
- #color = fields.Integer(string="Farbe")
- color_hex = fields.Char(string="Farbe (Hex)", help="Hex-Farbcode wie #FF0000 für Rot")
+ name = fields.Char(string="Name", required=True, translate=True)
+
+ color_hex = fields.Selection(
+ selection=AVAILABLE_COLORS,
+ string="Farbe (Hex)",
+ required=True,
+ )
+
+ color_hex_value = fields.Char(
+ string="Farbcode",
+ compute='_compute_color_hex_value',
+ store=False
+ )
+
+ color_name = fields.Char(
+ string="Farbname",
+ compute='_compute_color_name',
+ store=False
+ )
+
+ @api.depends('color_hex')
+ def _compute_color_hex_value(self):
+ for rec in self:
+ rec.color_hex_value = rec.color_hex or ''
+
+ @api.depends('color_hex')
+ def _compute_color_name(self):
+ label_dict = dict(AVAILABLE_COLORS)
+ for rec in self:
+ rec.color_name = label_dict.get(rec.color_hex, 'Unbekannt')
+
class OwsMachine(models.Model):
@@ -424,6 +466,28 @@ class OwsMachine(models.Model):
@api.model
def get_access_list_grouped(self, partner_id):
+ """
+ Gibt eine gruppierte Liste von Maschinenzugängen für einen bestimmten Partner zurück. Diese Funktion wird in
+ Odoo POS Frontend verwendet um die Ansicht zu erzeugen auf Welche Maschinen der Partner Zugriff hat.
+
+ Für einen gegebenen Partner (über die partner_id) werden alle Maschinenbereiche (areas) abgefragt.
+ Für jeden Bereich wird geprüft, auf welche Maschinen der Partner Zugriff hat. Das Ergebnis wird
+ als Liste von Bereichen mit jeweils zugehörigen Maschinen und Zugriffsstatus zurückgegeben.
+
+ Zusätzlich werden sicherheitsrelevante Informationen des Partners (wie Sicherheitsunterweisung,
+ Sicherheits-ID, RFID-Karte und Geburtstag) aus dem zugehörigen ows_user ermittelt und mitgeliefert.
+
+ Args:
+ partner_id (int): Die ID des Partners, für den die Zugriffsübersicht erstellt werden soll.
+
+ Returns:
+ dict: Ein Dictionary mit folgenden Schlüsseln:
+ - 'access_by_area': Liste von Bereichen mit Maschinen und Zugriffsstatus.
+ - 'security_briefing': Sicherheitsunterweisung des Nutzers (bool oder False).
+ - 'security_id': Sicherheits-ID des Nutzers (str oder '').
+ - 'rfid_card': RFID-Kartennummer des Nutzers (str oder '').
+ - 'birthday': Geburtstag des Nutzers (str oder '').
+ """
partner = self.env['res.partner'].browse(partner_id)
areas = self.env['ows.machine.area'].search([], order="name")
@@ -478,7 +542,7 @@ class OwsMachineAccess(models.Model):
class OwsMachineProduct(models.Model):
_name = 'ows.machine.product'
_table = 'ows_machine_product'
- _description = 'OWS: Zurordnung Produkt der Nutzung zur die Maschine'
+ _description = 'OWS: Zuordnung Produkt der Nutzung zu der Maschine'
product_id = fields.Many2one('product.product', required=True, domain=[('available_in_pos', '=', True)], ondelete='cascade')
machine_id = fields.Many2one('ows.machine', required=True, ondelete='cascade')
@@ -486,7 +550,7 @@ class OwsMachineProduct(models.Model):
class OwsMachineTraining(models.Model):
_name = 'ows.machine.training'
_table = 'ows_machine_training'
- _description = 'OWS: Zurordnung Produkt der Einweisung zur die Maschine'
+ _description = 'OWS: Zuordnung Produkt der Einweisung zu der Maschine'
training_id = fields.Many2one('product.product', required=True, domain=[('available_in_pos', '=', True)], ondelete='cascade')
machine_id = fields.Many2one('ows.machine', required=True, ondelete='cascade')
diff --git a/static/src/js/ows_machine_access_list.js b/static/src/js/ows_machine_access_list.js
index fc9e981..7e63850 100644
--- a/static/src/js/ows_machine_access_list.js
+++ b/static/src/js/ows_machine_access_list.js
@@ -12,6 +12,7 @@ export class OwsMachineAccessList extends Component {
this.pos = usePos();
this.state = useState({
+ client: null,
grouped_accesses: [],
security_briefing: false,
security_id: '',
@@ -31,7 +32,7 @@ export class OwsMachineAccessList extends Component {
async updateAccessList() {
const order = this.pos.get_order();
const partner = order?.get_partner?.();
-
+ this.state.client = partner || null;
if (!partner) {
this.state.grouped_accesses = [];
this.state.security_briefing = false;
diff --git a/views/machine_area_views.xml b/views/machine_area_views.xml
index 88e9956..b2232b7 100644
--- a/views/machine_area_views.xml
+++ b/views/machine_area_views.xml
@@ -17,7 +17,8 @@