Files
Plataforma-de-desarrolladores/Menu_Catalogos_Tramites_Internos.sql
Jorge Luis caudillo esparza c6cb8d5cce --
2026-08-28 06:36:39 -07:00

250 lines
8.2 KiB
Transact-SQL

SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @CvePlataforma int;
SELECT TOP (1)
@CvePlataforma = CvePlataforma
FROM dbo.Sis_Plataformas
WHERE NombrePlataforma = 'Plataforma de Desarrolladores'
ORDER BY CvePlataforma;
IF @CvePlataforma IS NULL
BEGIN
THROW 50001, 'No se encontró la plataforma de desarrolladores.', 1;
END;
DECLARE @Menu TABLE
(
Clave varchar(50) NOT NULL PRIMARY KEY,
ClavePadre varchar(50) NULL,
NombreModulo varchar(150) NOT NULL,
Url varchar(500) NULL,
Icono varchar(150) NULL,
Orden int NOT NULL,
Visible bit NOT NULL,
Nivel int NOT NULL
);
INSERT INTO @Menu
(Clave, ClavePadre, NombreModulo, Url, Icono, Orden, Visible, Nivel)
VALUES
('Catalogos', NULL, 'Catálogos', NULL, 'fa fa-list-alt', 30, 1, 0),
('EstatusSolicitud', 'Catalogos', 'Estatus de solicitud', '~/Pages/Catalogos/EstatusSolicitud.aspx', 'fa fa-check-circle', 10, 1, 1),
('TiposTramite', 'Catalogos', 'Tipos de trámite', '~/Pages/Catalogos/TiposTramite.aspx', 'fa fa-file-text-o', 20, 1, 1),
('TipoTramiteDetalle', 'TiposTramite', 'Detalle de tipo de trámite', '~/Pages/Catalogos/TipoTramiteDetalle.aspx', 'fa fa-question-circle', 10, 0, 2),
('TiposDocumento', 'Catalogos', 'Tipos de documento', '~/Pages/Catalogos/TiposDocumento.aspx', 'fa fa-file-o', 30, 1, 1),
('DocumentosRequeridos', 'Catalogos', 'Documentos requeridos', '~/Pages/Catalogos/DocumentosRequeridos.aspx', 'fa fa-paperclip', 40, 1, 1),
('ProductosGrupo', 'Catalogos', 'Productos', NULL, 'fa fa-cubes', 50, 1, 1),
('ProductosServicios', 'ProductosGrupo', 'Productos', '~/Pages/Catalogos/ProductosServicios.aspx', 'fa fa-cube', 10, 1, 2),
('UnidadesMedida', 'ProductosGrupo', 'Unidades de medida', '~/Pages/Catalogos/UnidadesMedida.aspx', 'fa fa-balance-scale', 20, 1, 2),
('Clasificaciones', 'ProductosGrupo', 'Clasificación', '~/Pages/Catalogos/Clasificaciones.aspx', 'fa fa-tags', 30, 1, 2);
DECLARE @Ids TABLE
(
Clave varchar(50) NOT NULL PRIMARY KEY,
CveModulo int NOT NULL
);
DECLARE
@Clave varchar(50),
@ClavePadre varchar(50),
@NombreModulo varchar(150),
@Url varchar(500),
@Icono varchar(150),
@Orden int,
@Visible bit,
@Nivel int,
@CveModuloPadre int,
@CveModulo int;
DECLARE CatalogoCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
Clave,
ClavePadre,
NombreModulo,
Url,
Icono,
Orden,
Visible,
Nivel
FROM @Menu
ORDER BY Nivel, Orden, Clave;
OPEN CatalogoCursor;
FETCH NEXT FROM CatalogoCursor
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @Icono, @Orden,
@Visible, @Nivel;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @CveModuloPadre = NULL, @CveModulo = NULL;
IF @ClavePadre IS NOT NULL
BEGIN
SELECT @CveModuloPadre = CveModulo
FROM @Ids
WHERE Clave = @ClavePadre;
END;
SELECT TOP (1)
@CveModulo = CveModulo
FROM dbo.Sis_Modulos
WHERE CvePlataforma = @CvePlataforma
AND
(
(@Url IS NOT NULL AND LOWER(ISNULL(Url, '')) = LOWER(@Url) COLLATE Modern_Spanish_CS_AS)
OR
(@Url IS NULL AND Url IS NULL AND NombreModulo = @NombreModulo COLLATE Modern_Spanish_CS_AS)
)
ORDER BY CveModulo;
IF @CveModulo IS NULL
BEGIN
INSERT dbo.Sis_Modulos
(CveModuloPadre, CvePlataforma, NombreModulo, Descripcion, Url,
ClaseCssIcono, ClaseCssEstilo, OrdenVisualizacion, Visible,
Activo, FechaCreacion)
VALUES
(@CveModuloPadre, @CvePlataforma, @NombreModulo, @NombreModulo,
@Url, @Icono, NULL, @Orden, @Visible, 1, GETDATE());
SET @CveModulo = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Sis_Modulos
SET CveModuloPadre = @CveModuloPadre,
NombreModulo = @NombreModulo COLLATE Modern_Spanish_CS_AS,
Descripcion = @NombreModulo,
Url = @Url,
ClaseCssIcono = @Icono,
OrdenVisualizacion = @Orden,
Visible = @Visible,
Activo = 1,
FechaActualizacion = GETDATE()
WHERE CveModulo = @CveModulo;
END;
INSERT INTO @Ids (Clave, CveModulo)
VALUES (@Clave, @CveModulo);
FETCH NEXT FROM CatalogoCursor
INTO @Clave, @ClavePadre, @NombreModulo, @Url, @Icono, @Orden,
@Visible, @Nivel;
END;
CLOSE CatalogoCursor;
DEALLOCATE CatalogoCursor;
UPDATE RM
SET PuedeVer = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
PuedeCrear = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
PuedeModificar = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END,
PuedeEliminar = CASE WHEN RM.CveRol IN (1, 2) THEN 1 ELSE 0 END
FROM dbo.Sis_RolesModulos AS RM
INNER JOIN @Ids AS I ON I.CveModulo = RM.CveModulo;
INSERT dbo.Sis_RolesModulos
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar,
PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
SELECT
R.CveRol,
I.CveModulo,
1,
1,
1,
1,
0,
0,
GETDATE()
FROM dbo.Sis_Roles AS R
CROSS JOIN @Ids AS I
WHERE R.CveRol IN (1, 2)
AND NOT EXISTS
(
SELECT 1
FROM dbo.Sis_RolesModulos AS RM
WHERE RM.CveRol = R.CveRol
AND RM.CveModulo = I.CveModulo
);
DECLARE @Tablas TABLE
(
NombreTablaSQL varchar(128) NOT NULL,
NombreMostrar varchar(150) NOT NULL,
CampoLlave varchar(128) NOT NULL
);
INSERT INTO @Tablas
(NombreTablaSQL, NombreMostrar, CampoLlave)
VALUES
('Tra_EstatusSolicitud', 'Estatus de solicitud', 'CveEstatusSolicitud'),
('Tra_TiposTramite', 'Tipos de trámite', 'CveTipoTramite'),
('Tra_TiposDocumento', 'Tipos de documento', 'CveTipoDocumento'),
('Tra_DocumentosRequeridos', 'Documentos requeridos', 'CveDocumentoRequerido'),
('Tra_Preguntas', 'Preguntas de trámite', 'CvePregunta'),
('Tra_OpcionesPregunta', 'Opciones de respuesta', 'CveOpcionPregunta');
UPDATE T
SET NombreMostrar = S.NombreMostrar,
NombreCampoLlaveSQL = S.CampoLlave,
Activo = 1,
FechaMod = GETDATE()
FROM dbo.Bit_Tablas AS T
INNER JOIN @Tablas AS S ON S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS = T.NombreTablaSQL;
INSERT dbo.Bit_Tablas
(NombreTablaSQL, NombreMostrar, Descripcion, NombreCampoLlaveSQL, Activo)
SELECT
S.NombreTablaSQL,
S.NombreMostrar,
'Catálogo interno de trámites.',
S.CampoLlave,
1
FROM @Tablas AS S
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Bit_Tablas AS T
WHERE T.NombreTablaSQL = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
);
INSERT dbo.Bit_Campos
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
SELECT
BT.CveTabla,
C.name,
C.name,
CASE WHEN C.name = S.CampoLlave THEN 0 ELSE 1 END,
TY.name,
1
FROM @Tablas AS S
INNER JOIN sys.tables AS T ON T.name = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
INNER JOIN sys.schemas AS SC ON SC.schema_id = T.schema_id AND SC.name = 'dbo'
INNER JOIN sys.columns AS C ON C.object_id = T.object_id
INNER JOIN sys.types AS TY ON TY.user_type_id = C.user_type_id
INNER JOIN dbo.Bit_Tablas AS BT ON BT.NombreTablaSQL = S.NombreTablaSQL COLLATE Modern_Spanish_CS_AS
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Bit_Campos AS BC
WHERE BC.CveTabla = BT.CveTabla
AND BC.NombreCampoSQL = C.name COLLATE Modern_Spanish_CS_AS
);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
END;
THROW;
END CATCH;
GO