Files
Plataforma-de-desarrolladores/Documentos_Etapa_Estructura_20260927.sql
Jorge Luis caudillo esparza e8160eefba --documentos
2026-09-27 14:44:12 -07:00

110 lines
4.2 KiB
Transact-SQL

/* Preparación únicamente. Ejecutar junto con los PA dentro de una transacción
de instalación administrada por el ejecutor, después de respaldo y autorización.
No mueve archivos ni elimina documentos históricos. */
SET NOCOUNT ON;
IF EXISTS
(
SELECT CveFraccionamientoEtapa, CveTipoDocumento
FROM dbo.Tra_DocumentosSolicitud
WHERE EsActivo = 1
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
HAVING COUNT(*) > 1
)
THROW 51000, 'Existen versiones activas duplicadas por etapa/tipo. Resolver su versión vigente antes de instalar; no se eliminarán archivos.', 1;
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'Vencido') IS NULL
ALTER TABLE dbo.Tra_DocumentosSolicitud
ADD Vencido bit NOT NULL
CONSTRAINT DF_Tra_DocumentosSolicitud_Vencido DEFAULT (0);
IF EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
AND name = 'UX_Tra_DocumentosSolicitud_Solicitud_TipoDocumento'
)
DROP INDEX UX_Tra_DocumentosSolicitud_Solicitud_TipoDocumento
ON dbo.Tra_DocumentosSolicitud;
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveSolicitud int 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 COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveFraccionamientoEtapa') IS NULL
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
ADD CveFraccionamientoEtapa int NULL;
GO
UPDATE C
SET CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
WHERE C.CveFraccionamientoEtapa IS NULL;
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
ALTER COLUMN CveFraccionamientoEtapa int NOT NULL;
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveConfiguracionDocumento') IS NULL
BEGIN
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
DROP CONSTRAINT PK_Tra_SolicitudDocumentoConfiguracion;
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
ALTER COLUMN CveSolicitud int NULL;
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion
ADD CveConfiguracionDocumento int IDENTITY(1, 1) NOT NULL
CONSTRAINT PK_Tra_SolicitudDocumentoConfiguracion PRIMARY KEY;
END;
IF NOT EXISTS
(
SELECT 1 FROM sys.foreign_keys
WHERE name = 'FK_Tra_SolicitudDocumentoConfiguracion_Etapa'
)
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion WITH CHECK
ADD CONSTRAINT FK_Tra_SolicitudDocumentoConfiguracion_Etapa
FOREIGN KEY (CveFraccionamientoEtapa)
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
AND name = 'UX_Tra_ConfiguracionDocumento_Solicitud'
)
BEGIN
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Solicitud
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveSolicitud, CveTipoDocumento)
WHERE CveSolicitud IS NOT NULL;
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento)
WHERE CveSolicitud IS NULL;
END;
INSERT INTO dbo.Bit_Campos
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
SELECT T.CveTabla, C.Campo, C.Titulo, 1, C.Tipo, 1
FROM dbo.Bit_Tablas AS T
INNER JOIN
(
VALUES
('Tra_DocumentosSolicitud', 'Vencido', 'Requiere renovación', 'bit'),
('Tra_DocumentosSolicitud', 'EsActivo', 'Versión vigente', 'bit'),
('Tra_SolicitudDocumentoConfiguracion', 'CveFraccionamientoEtapa', 'Etapa', 'int'),
('Tra_SolicitudDocumentoConfiguracion', 'CveConfiguracionDocumento', 'Requerimiento', 'int')
) AS C(Tabla, Campo, Titulo, Tipo) ON C.Tabla = T.NombreTablaSQL
WHERE NOT EXISTS
(
SELECT 1 FROM dbo.Bit_Campos AS B
WHERE B.CveTabla = T.CveTabla AND B.NombreCampoSQL = C.Campo
);
GO