diff --git a/__manifest__.py b/__manifest__.py index 976ac68..7759e20 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -16,8 +16,8 @@ 'views/assets.xml', 'views/machine_product_training_views.xml', 'data/data.xml', - 'data/data_product_and_categories.xml', - 'data/machine_product_links.xml', + #'data/data_product_and_categories.xml', + #'data/machine_product_links.xml', ], 'qweb': [ diff --git a/fix_missing_partners.py b/fix_missing_partners.py new file mode 100644 index 0000000..6c55728 --- /dev/null +++ b/fix_missing_partners.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from odoo import SUPERUSER_ID +from odoo.api import Environment +import logging + +_logger = logging.getLogger(__name__) + +MISSING_PARTNERS = [ + 6534, 1594, 4700, 6557, 5392, 4960, 5226, 6535, 4666 +] + +def insert_missing_partners(cr, registry): + env = Environment(cr, SUPERUSER_ID, {}) + + for partner_id in MISSING_PARTNERS: + cr.execute(""" + INSERT INTO res_partner ( + id, name, customer_rank, create_uid, create_date, write_uid, write_date + ) + VALUES (%s, %s, 1, %s, now(), %s, now()) + ON CONFLICT (id) DO NOTHING; + """, (partner_id, f"Fehlender Partner {partner_id}", SUPERUSER_ID, SUPERUSER_ID)) + + cr.execute("SELECT setval('res_partner_id_seq', (SELECT MAX(id) FROM res_partner));") + + _logger.info(f"[OWS Repair] {len(MISSING_PARTNERS)} fehlende Partner hinzugefügt.") + cr.commit() + +# Automatischer Start in odoo-bin shell +if 'env' in globals(): + insert_missing_partners(env.cr, env.registry) \ No newline at end of file diff --git a/models/ows_models.py b/models/ows_models.py index 5324764..90e7c20 100644 --- a/models/ows_models.py +++ b/models/ows_models.py @@ -3,6 +3,7 @@ # Part of Odoo Open Workshop from odoo import models, fields, api +from markupsafe import escape as html_escape import logging _logger = logging.getLogger(__name__) _logger.info("✅ ows_models.py geladen") @@ -190,24 +191,37 @@ class ResPartner(models.Model): ('vvow_metall_chop_saw', 'kreissaege_metall'), ] - count = 0 + MachineAccess = self.env['ows.machine.access'] + MailMessage = self.env['mail.message'] + + count_created = 0 for partner in self.search([]): for field_name, machine_code in mapping: if getattr(partner, field_name, False): machine = self.env['ows.machine'].search([('code', '=', machine_code)], limit=1) - if machine: - already_exists = self.env['ows.machine.access'].search_count([ - ('partner_id', '=', partner.id), - ('machine_id', '=', machine.id), - ]) - if not already_exists: - self.env['ows.machine.access'].create({ - 'partner_id': partner.id, - 'machine_id': machine.id, - 'date_granted': partner.create_date.date() if partner.create_date else date.today(), - }) - count += 1 - _logger.info(f"[OWS Migration] {count} Maschinenfreigaben aus alten Feldern erstellt.") + if not machine: + continue + + # Suche nach dem mail.message, das die Änderung dokumentiert + body_snippet = self.fields_get([field_name])[field_name]['string'] + message = MailMessage.search([ + ('model', '=', 'res.partner'), + ('res_id', '=', partner.id), + ('body', 'ilike', html_escape(body_snippet)), + ('body', 'ilike', 'Ja') # oder ggf. 'True' + ], order='create_date ASC', limit=1) + + date_granted = message.create_date if message else fields.Datetime.now() + + if not MachineAccess.search([('partner_id', '=', partner.id), ('machine_id', '=', machine.id)]): + MachineAccess.create({ + 'partner_id': partner.id, + 'machine_id': machine.id, + 'date_granted': date_granted, + }) + count_created += 1 + + _logger.info(f"[OWS Migration] ✅ Maschinenfreigaben erstellt: {count_created}") self.env.cr.commit() class OwsUser(models.Model): diff --git a/post_init_hook.py b/post_init_hook.py index be8ca98..faeca30 100644 --- a/post_init_hook.py +++ b/post_init_hook.py @@ -17,4 +17,10 @@ def run_migration(cr, registry): env['res.partner'].migrate_existing_partners() _logger.info("[OWS] Automatische Partner-Migration abgeschlossen.") except Exception as e: - _logger.error(f"[OWS] Fehler bei automatischer Migration: {e}") + _logger.error(f"[OWS] Fehler bei automatischer Partner-Migration: {e}") + + try: + env['res.partner'].migrate_machine_access_from_old_fields() + _logger.info("[OWS] Automatische Felder-Migration für Maschinenfreigaben in res.partner.") + except Exception as e: + _logger.error(f"[OWS] Fehler bei automatischer Felder-Migration: {e}")