# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 """Migrate owner contact settings from email/name strings to a partner ref. Pre-19.0.2.1.0, fusion_helpdesk stored two ICP keys: fusion_helpdesk.owner_email fusion_helpdesk.owner_name 19.0.2.1.0 replaces them with a single Many2one to res.partner exposed as a partner-id string in: fusion_helpdesk.owner_partner_id This script auto-resolves the email to an existing res.partner (best effort — exact case-insensitive match), so admins don't have to re-pick the owner contact after the upgrade. The old keys are then deleted to avoid stale-config confusion. If no matching partner is found, the owner_partner_id is left blank — admin reconfigures via Settings. """ import logging _logger = logging.getLogger(__name__) def migrate(cr, version): cr.execute( "SELECT value FROM ir_config_parameter " "WHERE key = 'fusion_helpdesk.owner_email'" ) row = cr.fetchone() email = (row[0] or '').strip().lower() if row else '' if not email: _logger.info( 'fusion_helpdesk: no legacy owner_email to migrate, skipping.' ) _purge_legacy_keys(cr) return # Exact (lowercased) match on res_partner.email. The legacy ICP value # was free text — could be uppercase, have trailing spaces, etc. — # so normalise both sides. If multiple partners share the email, # pick the oldest (lowest id) — same convention used elsewhere in # the customer-followup partner backfill. cr.execute( "SELECT id, name FROM res_partner " "WHERE lower(email) = %s " "ORDER BY id ASC LIMIT 1", (email,), ) match = cr.fetchone() if not match: _logger.warning( 'fusion_helpdesk: legacy owner_email %s does not match any ' 'res.partner — owner_partner_id left blank, admin must ' 're-pick under Settings → Fusion Helpdesk → Owner Approval.', email, ) _purge_legacy_keys(cr) return partner_id, partner_name = match cr.execute( "INSERT INTO ir_config_parameter (key, value) " "VALUES ('fusion_helpdesk.owner_partner_id', %s) " "ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value", (str(partner_id),), ) _logger.info( 'fusion_helpdesk: migrated owner_email "%s" → res.partner #%s ' '("%s"). Legacy keys purged.', email, partner_id, partner_name, ) _purge_legacy_keys(cr) def _purge_legacy_keys(cr): """Delete the obsolete owner_email / owner_name ICP rows so a future reader doesn't trip over stale config. Safe — the new partner_id key is the only source of truth after this migration.""" cr.execute( "DELETE FROM ir_config_parameter " "WHERE key IN ('fusion_helpdesk.owner_email', " " 'fusion_helpdesk.owner_name')" )