147 lines
5.8 KiB
SQL
147 lines
5.8 KiB
SQL
/*
|
|
Consolidación de documentos compartidos por etapa y tipo de documento.
|
|
Preparado para revisión; no ejecutado.
|
|
Requiere la migración Etapa_TipoTramite_20261002 ya instalada.
|
|
Ejecutar estructura y procedimientos en la misma transacción de instalación,
|
|
detenerse ante errores y confirmar sólo tras verificar los resultados.
|
|
No borra archivos ni filas históricas de documentos.
|
|
Las copias idénticas quedan como versiones históricas; se conserva una vigente.
|
|
Las configuraciones particulares idénticas se consolidan en una por etapa.
|
|
Si hubo ediciones diferentes por trámite, se detiene para no elegir una
|
|
aprobación, nota o marca de requerido arbitraria.
|
|
Convenios no se modifican.
|
|
*/
|
|
SET NOCOUNT ON;
|
|
|
|
IF @@TRANCOUNT = 0
|
|
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar y revertirla ante cualquier error.', 1;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_DocumentosSolicitud AS D
|
|
INNER JOIN dbo.Tra_DocumentosSolicitud AS O ON O.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
|
|
AND O.CveTipoDocumento = D.CveTipoDocumento
|
|
AND O.CveDocumentoSolicitud < D.CveDocumentoSolicitud
|
|
WHERE D.EsActivo = 1
|
|
AND O.EsActivo = 1
|
|
AND EXISTS
|
|
(
|
|
SELECT D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo,
|
|
D.ContentType, D.TamanoBytes, D.ComentarioCliente,
|
|
D.ComentarioAdministrativo, D.EsAprobado, D.CveUsuarioCarga,
|
|
D.CveUsuarioRevisa, D.FechaRevision, D.FechaAlta, D.UltimaNota,
|
|
D.FechaDocumento, D.FechaVencimiento, D.Vencido
|
|
EXCEPT
|
|
SELECT O.NombreArchivo, O.NombreArchivoFisico, O.RutaArchivo,
|
|
O.ContentType, O.TamanoBytes, O.ComentarioCliente,
|
|
O.ComentarioAdministrativo, O.EsAprobado, O.CveUsuarioCarga,
|
|
O.CveUsuarioRevisa, O.FechaRevision, O.FechaAlta, O.UltimaNota,
|
|
O.FechaDocumento, O.FechaVencimiento, O.Vencido
|
|
)
|
|
)
|
|
THROW 51000, 'Hay versiones vigentes con datos distintos por trámite. Revisarlas antes de consolidar; no se eliminaron documentos.', 1;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
|
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
|
|
HAVING MIN(CONVERT(int, EsRequerido)) <> MAX(CONVERT(int, EsRequerido))
|
|
OR MIN(CONVERT(int, EsCliente)) <> MAX(CONVERT(int, EsCliente))
|
|
OR MIN(CONVERT(int, TieneVigencia)) <> MAX(CONVERT(int, TieneVigencia))
|
|
OR MIN(CONVERT(int, EsActivo)) <> MAX(CONVERT(int, EsActivo))
|
|
OR MIN(Orden) <> MAX(Orden)
|
|
)
|
|
THROW 51000, 'Hay configuraciones manuales distintas por trámite. Resolverlas antes de consolidar la marca de la etapa.', 1;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
|
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
|
|
)
|
|
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
|
|
ON dbo.Tra_DocumentosSolicitud;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
|
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
|
|
)
|
|
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
|
|
ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
|
|
|
-- Las columnas se conservan por compatibilidad de esquema; ya no son propietarias.
|
|
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NULL;
|
|
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NULL;
|
|
|
|
;WITH Versiones AS
|
|
(
|
|
SELECT
|
|
CveDocumentoSolicitud,
|
|
ROW_NUMBER() OVER
|
|
(
|
|
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
|
ORDER BY CveDocumentoSolicitud
|
|
) AS NumeroVersion
|
|
FROM dbo.Tra_DocumentosSolicitud
|
|
WHERE EsActivo = 1
|
|
)
|
|
UPDATE D
|
|
SET EsActivo = 0
|
|
FROM dbo.Tra_DocumentosSolicitud AS D
|
|
INNER JOIN Versiones AS V ON V.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
|
WHERE V.NumeroVersion > 1;
|
|
|
|
-- Sólo se retiran copias de configuración cuyos valores son idénticos.
|
|
;WITH Configuraciones AS
|
|
(
|
|
SELECT
|
|
CveConfiguracionDocumento,
|
|
ROW_NUMBER() OVER
|
|
(
|
|
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
|
ORDER BY CveConfiguracionDocumento
|
|
) AS NumeroConfiguracion
|
|
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
|
)
|
|
DELETE C
|
|
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
|
|
INNER JOIN Configuraciones AS O ON O.CveConfiguracionDocumento = C.CveConfiguracionDocumento
|
|
WHERE O.NumeroConfiguracion > 1;
|
|
|
|
UPDATE dbo.Tra_DocumentosSolicitud
|
|
SET CveTipoTramite = NULL
|
|
WHERE CveTipoTramite IS NOT NULL;
|
|
|
|
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
|
|
SET CveTipoTramite = NULL
|
|
WHERE CveTipoTramite IS NOT NULL;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
|
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
|
)
|
|
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento
|
|
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoDocumento)
|
|
WHERE EsActivo = 1;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
|
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Documento'
|
|
)
|
|
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Documento
|
|
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento);
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
|
|
ALTER TABLE dbo.Tra_DocumentosSolicitud DROP CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite;
|
|
|
|
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
|
|
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion DROP CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite;
|