diff --git a/models/ows_models.py b/models/ows_models.py index 90e7c20..69fd4b1 100644 --- a/models/ows_models.py +++ b/models/ows_models.py @@ -163,9 +163,9 @@ class ResPartner(models.Model): def migrate_machine_access_from_old_fields(self): """ Migriert alte vvow_* Boolean-Felder in strukturierte ows.machine.access Einträge. + Das Freigabe-Datum wird aus dem Änderungsverlauf (mail.message.tracking_value_ids) extrahiert. """ mapping = [ - # (altes Feld, machine.code) ('vvow_holz_sander', 'bandschleifer'), ('vvow_holz_felder_bandsaw', 'bandsaege_holz'), ('vvow_holz_felder_jointer', 'dickenhobel'), @@ -193,33 +193,36 @@ class ResPartner(models.Model): MachineAccess = self.env['ows.machine.access'] MailMessage = self.env['mail.message'] + TrackingValue = self.env['mail.tracking.value'] 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 not machine: - continue + if not getattr(partner, field_name, False): + 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) + machine = self.env['ows.machine'].search([('code', '=', machine_code)], limit=1) + if not machine: + continue - date_granted = message.create_date if message else fields.Datetime.now() + # Änderungsverlauf durchsuchen: Wann wurde das Feld auf True gesetzt? + tracking = TrackingValue.search([ + ('field', '=', field_name), + ('new_value_boolean', '=', True), + ('mail_message_id.model', '=', 'res.partner'), + ('mail_message_id.res_id', '=', partner.id), + ], order='mail_message_id.date ASC', limit=1) - 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 + date_granted = tracking.mail_message_id.date if tracking 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()