fix(horas): normalizar nombres legacy de abogado en hours/obs/escrituras

Antes de la migración 007 los dropdowns guardaban variantes parciales
(ej. "Altafulla" en vez de "Julio Altafulla"). El filtro del Reporte
de Horas no encontraba esos registros viejos porque users.name ahora
es el nombre completo.

Migración 013 hace un UPDATE con JOIN a users donde haya match único
LIKE %legacy%. Aplicó a 4 filas: 2 en tramites_hours, 1 en
tramites_obs, 1 en escrituras_tramites.
This commit is contained in:
Soporte ZH Consultores
2026-06-04 22:14:53 -05:00
parent 3f922bc877
commit 012c4e1c66
+37
View File
@@ -0,0 +1,37 @@
-- ============================================================
-- Donna — Schema 013: normalizar strings legacy de "abogado"
-- ============================================================
-- Antes de la migración 007 (drop apellido) los dropdowns guardaban
-- solo el apellido o variantes parciales en tramites_hours.abogado,
-- tramites_obs.abogado y escrituras_tramites.abogado. Eso rompe los
-- filtros del Reporte de Horas porque `users.name` es ahora el nombre
-- completo y el WHERE exacto no encuentra los registros viejos.
--
-- Esta migración reemplaza esos strings por el nombre completo del
-- usuario cuando hay UN solo match no ambiguo (LIKE %legacy%).
-- Si hubiera dos usuarios cuyo nombre contiene el string viejo,
-- la fila no se toca (hay que decidir a mano cuál es).
-- 1. tramites_hours
UPDATE tramites_hours h
JOIN users u ON u.activo = 1
AND h.abogado != u.name
AND u.name LIKE CONCAT('%', h.abogado, '%')
SET h.abogado = u.name
WHERE (SELECT COUNT(*) FROM users u2 WHERE u2.activo = 1 AND u2.name LIKE CONCAT('%', h.abogado, '%')) = 1;
-- 2. tramites_obs
UPDATE tramites_obs o
JOIN users u ON u.activo = 1
AND o.abogado != u.name
AND u.name LIKE CONCAT('%', o.abogado, '%')
SET o.abogado = u.name
WHERE (SELECT COUNT(*) FROM users u2 WHERE u2.activo = 1 AND u2.name LIKE CONCAT('%', o.abogado, '%')) = 1;
-- 3. escrituras_tramites
UPDATE escrituras_tramites e
JOIN users u ON u.activo = 1
AND e.abogado != u.name
AND u.name LIKE CONCAT('%', e.abogado, '%')
SET e.abogado = u.name
WHERE (SELECT COUNT(*) FROM users u2 WHERE u2.activo = 1 AND u2.name LIKE CONCAT('%', e.abogado, '%')) = 1;