From 4d7e7e5f19ea2204c3f3f55ed730dbd95275e982 Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Tue, 6 May 2025 18:49:31 +0200 Subject: [PATCH] [FIX] open_workshop: Mehrere Maschinenfreigaben pro Einweisungsprodukt im POS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim Kauf eines Einweisungsprodukts wurden bisher nur eine Maschinenfreigabe erstellt, selbst wenn das Produkt mehreren Maschinen zugeordnet war. Dieser Fix passt _process_order an, sodass alle zugehörigen Maschinen erfasst und ggf. neue Freigaben für den Kunden erstellt werden. + Nutzung von defaultdict zur besseren Produkt-Maschine-Zuordnung + Klares Logging zur Nachvollziehbarkeit + Verhindert doppelte Freigaben --- models/pos_order.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/models/pos_order.py b/models/pos_order.py index ddffff6..71ae7c2 100644 --- a/models/pos_order.py +++ b/models/pos_order.py @@ -1,4 +1,5 @@ from odoo import models, fields, api +from collections import defaultdict #import debugpy import logging @@ -19,10 +20,9 @@ class PosOrder(models.Model): pos_order = self.browse(pos_order_id) training_products = self.env['ows.machine.training'].search([]) - product_map = { - tp.training_id.product_tmpl_id.id: tp.machine_id.id - for tp in training_products - } + product_map = defaultdict(list) + for tp in training_products: + product_map[tp.training_id.product_tmpl_id.id].append(tp.machine_id.id) partner = pos_order.partner_id if not partner: @@ -31,15 +31,13 @@ class PosOrder(models.Model): for line in pos_order.lines: product_tmpl_id = line.product_id.product_tmpl_id.id - machine_id = product_map.get(product_tmpl_id) - - _logger.info("🔍 Prüfe Produkt %s → Maschine ID: %s", line.product_id.display_name, machine_id) - - if machine_id: + machine_ids = product_map.get(product_tmpl_id, []) + _logger.info("🔍 Prüfe Produkt %s → Maschinen IDs: %s", line.product_id.display_name, machine_ids) + for machine_id in machine_ids: already_exists = self.env['ows.machine.access'].search([ ('partner_id', '=', partner.id), ('machine_id', '=', machine_id) - ]) + ], limit=1) if not already_exists: self.env['ows.machine.access'].create({ 'partner_id': partner.id,