models/ows_models.py aktualisiert

This commit is contained in:
Matthias Lotz 2025-04-08 10:05:00 +02:00
parent 0818daf530
commit f4a586f2db

View File

@ -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()