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