-- ============================================================ -- Donna — Schema 014: FK user_id en tramites_hours y tramites_obs -- ============================================================ -- Hasta ahora el vínculo "esta hora/observación es de Fulanito" -- se hacía por string (h.abogado = users.name). Eso rompe cuando: -- - Hay variantes legacy (parcial vs completo) → ya arreglado en 013 -- - Un Socio renombra al usuario en el Panel de Control (las -- entradas históricas conservan el nombre viejo y los filtros -- no las encuentran al buscar por el nuevo nombre) -- -- Esta migración agrega user_id INT NULL con FK a users(id) y -- ON DELETE SET NULL (si borran al usuario, la entrada queda con -- user_id NULL pero conserva el string `abogado` como historia). -- El backfill solo asocia donde hay match exacto y único. -- 1. tramites_hours ALTER TABLE tramites_hours ADD COLUMN IF NOT EXISTS user_id INT NULL AFTER abogado, ADD INDEX IF NOT EXISTS idx_user_id (user_id); UPDATE tramites_hours h JOIN users u ON u.activo = 1 AND u.name = h.abogado SET h.user_id = u.id WHERE h.user_id IS NULL; ALTER TABLE tramites_hours ADD CONSTRAINT fk_hours_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL; -- 2. tramites_obs ALTER TABLE tramites_obs ADD COLUMN IF NOT EXISTS user_id INT NULL AFTER abogado, ADD INDEX IF NOT EXISTS idx_user_id (user_id); UPDATE tramites_obs o JOIN users u ON u.activo = 1 AND u.name = o.abogado SET o.user_id = u.id WHERE o.user_id IS NULL; ALTER TABLE tramites_obs ADD CONSTRAINT fk_obs_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;